Thread (6 messages) 6 messages, 3 authors, 2021-03-20

Re: setting gpio-line-names in dts for sama5d2 SoC

From: Alexander Dahl <hidden>
Date: 2021-03-18 09:51:13
Subsystem: pin control subsystem, pin controller - microchip at91, the rest · Maintainers: Linus Walleij, Ludovic Desroches, Linus Torvalds

Possibly related (same subject, not in this thread)

Hei hei,

meanwhile I tried to proof my hypothesis. See below.
Andy Shevchenko [off-list ref] hat am 17.03.2021 13:33 geschrieben:

 
+Cc: Bart, Linus

On Wed, Mar 17, 2021 at 1:22 AM Andy Shevchenko
[off-list ref] wrote:
quoted


On Tuesday, March 16, 2021, Alexander Dahl [off-list ref] wrote:
quoted
Hei hei,

for a Microchip SAMA5D2 SoC based device I try to set gpio-line-names in .dts file like this:

257 &pioA {
258         gpio-line-names = "",                   /* PA0  */
259                           "",                   /* PA1  */
260                           "",                   /* PA2  */
261                           "FOO",                /* PA3  */
262                           "BAR",                /* PA4  */
263                           "",                   /* PA5  */

… and so on for all 4 * 32 GPIO Pins. However when calling `gpioinfo` in userspace, I always get this:

$ gpioinfo
gpiochip0 - 128 lines:
        line   0:        "PA0"       unused   input  active-high
        line   1:        "PA1"       unused   input  active-high
        line   2:        "PA2"       unused   input  active-high
        line   3:        "PA3"       unused   input  active-high
        line   4:        "PA4"       unused   input  active-high
        line   5:        "PA5"       unused   input  active-high

… and so on. Those "PA0" line names are set by the pinctrl driver in drivers/pinctrl/pinctrl-at91-pio4.c before calling gpiochip_add_data() and from reading the code in drivers/gpio/gpiolib.c I suspect devprop_gpiochip_set_names() is never called then, so those names in .dts are simply ignored.

Those default names from the at91 pio4 pinctrl driver are certainly correct speaking of pin names, but from a userspace point of view it would be better if I could override those from dts, so an application using libgpiod could look for a name like e.g. "VALVE7_EN" without caring to which pin that's actually connected. Can I override those with a currently present kernel? 
I don't think I can override with a recent kernel.
quoted
quoted
Or is it a problem in either the at91 pio4 driver or the gpiolib core? Or is that no real usecase and should I do it differently?
If I disable the name assignment in the pinctrl-at91-pio4 driver, I get the line names from the dts. I used the following diff:

diff --git a/drivers/pinctrl/pinctrl-at91-pio4.c b/drivers/pinctrl/pinctrl-at91-pio4.c
index 578b387100d9..f994a2468cc3 100644
--- a/drivers/pinctrl/pinctrl-at91-pio4.c
+++ b/drivers/pinctrl/pinctrl-at91-pio4.c
@@ -1095,7 +1095,9 @@ static int atmel_pinctrl_probe(struct platform_device *pdev)
        atmel_pioctrl->gpio_chip->ngpio = atmel_pioctrl->npins;
        atmel_pioctrl->gpio_chip->label = dev_name(dev);
        atmel_pioctrl->gpio_chip->parent = dev;
+#if 0
        atmel_pioctrl->gpio_chip->names = atmel_pioctrl->group_names;
+#endif
 
        atmel_pioctrl->pm_wakeup_sources = devm_kcalloc(dev,
                        atmel_pioctrl->nbanks,

Now gpioinfo shows what I set in dts, more or less similar to this:

gpiochip0 - 128 lines:
        line   0:      unnamed       unused   input  active-high 
        line   1:      unnamed       unused   input  active-high 
        line   2:      unnamed       unused   input  active-high 
        line   3:        "FOO"       unused   input  active-high 
        line   4:        "BAR"       unused   input  active-high 
        line   5:      unnamed       unused   input  active-high 
quoted

I would like to know the consequences if allow this, but to me it sounds like a bug in the gpiolib.c.
At least the documentation recommends to not use pin names: https://www.kernel.org/doc/Documentation/devicetree/bindings/gpio/gpio.txt

If anyone has an idea how to fix this, let me know. I can try to make a patch then. Currently however, I'm not familiar enough with the gpio subsystem to just start that.

Greets
Alex
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help