Re: [PATCH v4] leds: simatic-ipc-leds-gpio: make sure we have the GPIO providing driver
From: Henning Schild
Date: Tue Jan 03 2023 - 15:21:14 EST
Am Mon, 2 Jan 2023 16:22:27 +0100
schrieb Henning Schild <henning.schild@xxxxxxxxxxx>:
> Am Fri, 23 Dec 2022 11:58:13 +0000
> schrieb Lee Jones <lee@xxxxxxxxxx>:
>
> > On Fri, 07 Oct 2022, Henning Schild wrote:
> >
> > > If we register a "leds-gpio" platform device for GPIO pins that do
> > > not exist we get a -EPROBE_DEFER and the probe will be tried again
> > > later. If there is no driver to provide that pin we will poll
> > > forever and also create a lot of log messages.
> > >
> > > So check if that GPIO driver is configured, if so it will come up
> > > eventually. If not, we exit our probe function early and do not
> > > even bother registering the "leds-gpio". This method was chosen
> > > over "Kconfig depends" since this way we can add support for more
> > > devices and GPIO backends more easily without "depends":ing on all
> > > GPIO backends.
> > >
> > > Fixes: a6c80bec3c93 ("leds: simatic-ipc-leds-gpio: Add GPIO
> > > version of Siemens driver") Reviewed-by: Andy Shevchenko
> > > <andy.shevchenko@xxxxxxxxx> Signed-off-by: Henning Schild
> > > <henning.schild@xxxxxxxxxxx> ---
> >
> > What happened in versions 1 through 3? Please provide a
> > change-log.
>
> Not too much really, but i will write a changelog and cover letter
> when sending again. Mostly commit message stuff and later a rebase.
Lee please let me know if you insist on that changelog, in which case i
would send that same patch again with a cover-letter that will carry a
not too spectacular changelog.
Or get back on the rest of what i wrote earlier, maybe we need another
version of the patch and not just the same one again with only a
changelog added.
Henning
> > > drivers/leds/simple/simatic-ipc-leds-gpio.c | 2 ++
> > > 1 file changed, 2 insertions(+)
> > >
> > > diff --git a/drivers/leds/simple/simatic-ipc-leds-gpio.c
> > > b/drivers/leds/simple/simatic-ipc-leds-gpio.c index
> > > b9eeb8702df0..fb8d427837db 100644 ---
> > > a/drivers/leds/simple/simatic-ipc-leds-gpio.c +++
> > > b/drivers/leds/simple/simatic-ipc-leds-gpio.c @@ -77,6 +77,8 @@
> > > static int simatic_ipc_leds_gpio_probe(struct platform_device
> > > *pdev) switch (plat->devmode) {
> > > case SIMATIC_IPC_DEVICE_127E:
> > > + if (!IS_ENABLED(CONFIG_PINCTRL_BROXTON))
> > > + return -ENODEV;
> >
> > I see that there is an unfortunate precedent for this in the lines
> > below. However, I also see that the commit which added it was not
> > reviewed by Pavel.
>
> Right i think that might have been you in the end.
>
> > This is an interesting problem, due to the different devices we're
> > attempting to support in this single driver using different
> > GPIO/PINCTRL drivers, which is unusual. We usually resolve these
> > kinds of issues as a Kconfig 'depends' line which covers the whole
> > driver.
>
> This was tried but the result was not too nice. It is really the same
> gpio led driver implemented on top of multiple possible gpio chip
> drivers. Making it depend on both pulls in too much in case one wants
> a minimal config, writing a new driver for each backend would
> duplicate too much code.
>
> But maybe a splitting out a -common or moving stuff into headers could
> help with the duplication if we want to go the "one driver for one
> device" road. I would not want that and what we currently see was
> discussed and approved as part of another series, when i introduced
> x27G.
>
> > Would 'depends GPIO_F7188X || PINCTRL_BROXTON' be a suitable
> > replacement, I wonder? If it's possible for SIMATIC_IPC_DEVICE_127E
> > to be probing when only GPIO_F7188X is enabled? If so, this would
> > result in the same scenario.
>
> No that would not work. Depending on which board we are on we depend
> on another pin provider. "&&" would be but it would be kind of
> overkill and not allow for a minimal kernel config in case someone
> wanted a special minimal kernel for either one.
>
> > It also seems wrong for -EPROBE_DEFER to loop indefinitely. Surely
> > in some valid circumstances dependencies are never satisfied?
>
> Well that is what i would guess as well. But that infinite loop
> waiting for a pin to appear endlessly is a part of "leds-gpio". If
> "leds-gpio" had some magic to eventually bail out (maybe say we give
> it X runs with some sleep back-off) i would not have to do anything
> here. I consider that patch a workaround for a shortcoming in
> "leds-gpio", which busy loops and fills up your disk quickly with logs
> if you mention a pin that never comes. Which i imagine can quickly
> happen if you have a typo on your device tree or a kernel config not
> enabling a pin provider driver.
>
> I am not sure there are no other valid reasons. And i think that indef
> loop needs fixing at some point. Hopefully by a LEDs maintainer or
> maybe i will even help out.
>
> Until that day i would like to have the proposed patch merged to not
> have users run into a known issue. The pattern is established and has
> been discussed before and the patch it rather trivial.
>
> Later we can see about improving and ask fundamental questions again.
>
> Henning
>
> > > simatic_ipc_led_gpio_table =
> > > &simatic_ipc_led_gpio_table_127e; break;
> > > case SIMATIC_IPC_DEVICE_227G:
> > > --
> > > 2.35.1
> > >
> >
>