On Fri, Dec 3, 2021 at 8:04 PM Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> 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