On 15.03.22 14:39, Andrej Picej wrote: > GPIO lines in da9063 are assigned dynamically, while majority of SOC > GPIO drivers assign their GPIOs in static manner (GPIO line numbers can > be calculated). > > This introduces regression if deep probe support is used. If da9063 > GPIOs are registered before the SOCs GPIOs, there is a good chance that > the SOCs statically computed GPIO line numbers will already be used by > PMIC. > > Ensure all SOCs GPIO drivers and GPIO lines get registered before the > da9063 registers its own gpiochip. > > Signed-off-by: Andrej Picej <andrej.picej@xxxxxxxxx> I don't think this is the proper place. Also I think you may have introduced a recursion here if the PMIC happens to have an alias itself? What I think we could do instead is to move this into gpiochip_add() and opencode the alias iterator: foreach (gpio_alias) { if (gpio_alias_dev == chip->dev) __gpiochip_add(); else of_device_ensure_probed(); } I don't know if that's the cleanest way, but that's what came to my mind. Cheers, Ahmad > --- > drivers/mfd/da9063.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/mfd/da9063.c b/drivers/mfd/da9063.c > index a4e5226f3c..8b943eb4ef 100644 > --- a/drivers/mfd/da9063.c > +++ b/drivers/mfd/da9063.c > @@ -390,6 +390,10 @@ static int da9063_probe(struct device_d *dev) > restart_handler_register(&priv->restart); > > if (IS_ENABLED(CONFIG_GPIOLIB)) { > + ret = of_device_ensured_probed_by_alias_stem("gpio"); > + if (ret) > + goto on_error; > + > priv->gpio.base = -1; > priv->gpio.ngpio = 5; > priv->gpio.ops = &da9063_gpio_ops; -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox