On Fri, Dec 3, 2021 at 8:04 PM Andy Shevchenko andriy.shevchenko@linux.intel.com wrote:
On Fri, Dec 03, 2021 at 08:56:27PM +0200, Andy Shevchenko wrote:
On Fri, Dec 03, 2021 at 08:51:56PM +0200, Andy Shevchenko wrote:
On Fri, Dec 03, 2021 at 02:29:59PM +0100, Bartosz Golaszewski wrote:
...
if (gc->parent) gdev->dev.of_node = gc->parent->of_node;
- if (gc->fwnode)
gc->of_node = to_of_node(gc->fwnode);
- /* If the gpiochip has an assigned OF node this takes precedence */ if (gc->of_node) gdev->dev.of_node = gc->of_node;
Similar should be done in acpi_gpio_dev_init():
if (gc->fwnode) device_set_node(&gdev->dev, gc->fwnode);
Hmm... On the second though this should be rather
if (gc->fwnode) set_secondary_fwnode(&gdev->dev, gc->fwnode);
So the logic will be that:
- if we have parent, set primary fwnode to it
- if we have fwnode, set secondary one to it
- otherwise do nothing
Heck, it's Friday...
If we have parent device for several GPIO devices, this won't work right now due to limitations of fwnode regarding to the sturct device.
So, it means we may not have shared primary with different secondary fwnodes.
So, come back to the initial suggestion (overwrite it for now):
/* * If custom fwnode provided, use it. Currently we may not * handle the case where shared primary node has different * secondary ones. Ideally we have to use * set_secondary_fwnode() here. */ if (gc->fwnode) device_set_node(&gdev->dev, gc->fwnode);
Other parts of gpiolib-of depend on the of_node being there. Converting it to fwnode is a whole other task so for now I suggest we just convert the fwnode to of_node in struct gpio_chip as per my patch.
Bart