On Fri, May 22, 2020 at 11:57:36AM +0200, Mauro Carvalho Chehab wrote: > Em Thu, 21 May 2020 11:00:19 +0300 > Andy Shevchenko escreveu: > > > +Cc: Heikki (swnode expert) > > > > On Wed, May 20, 2020 at 2:19 PM Mauro Carvalho Chehab > > wrote: > > > Em Wed, 20 May 2020 11:26:08 +0300 > > > Sakari Ailus escreveu: > > > > ... > > > > > As I said, the problem is not probing the sensor via ACPI, but, instead, > > > to be able receive platform-specific data. > > > > There is no problem with swnodes, except missing parts (*). > > I have Skylake laptop with IPU3 and with half-baked ACPI tables, but > > since we have drivers in place with fwnode support, we only need to > > recreate fwnode graph in some board file to compensate the gap in > > ACPI. > > > > *) Missing part is graph support for swnodes. With that done it will > > be feasible to achieve the rest. > > I forgot if we have anything for this already done. Heikki? > > Hmm... I guess I should try this approach. I never heard about swnodes > before. Do you have already some patch with the needed swnodes setup, > and the missing parts to recreate the fwnode graph? Here you go. I tested it with this code: static const struct software_node nodes[]; static const struct property_entry ep0_props[] = { PROPERTY_ENTRY_REF("remote-endpoint", &nodes[5]), { } }; static const struct property_entry ep1_props[] = { PROPERTY_ENTRY_REF("remote-endpoint", &nodes[2]), { } }; static const struct software_node nodes[] = { { "dev0" }, { "port0", &nodes[0] }, { "endpoint", &nodes[1], ep0_props }, { "dev1" }, { "port0", &nodes[3] }, { "endpoint", &nodes[4], ep1_props }, { } }; void test(void) { const struct software_node *swnode; struct fwnode_handle *fwnode; software_node_register_nodes(nodes); fwnode = fwnode_graph_get_remote_port_parent(software_node_fwnode(&nodes[5])); swnode = to_software_node(fwnode); printk("first parent: %s\n", swnode->name); fwnode = fwnode_graph_get_remote_port_parent(software_node_fwnode(&nodes[2])); swnode = to_software_node(fwnode); printk("second parent: %s\n", swnode->name); software_node_unregister_nodes(nodes); } thanks, -- heikki