Message ID | adc9d6a4-5cab-d8c1-a7bc-d9edc673e4b9@axentia.se |
---|---|
State | Accepted |
Commit | c73960bb0a4320b9ed0d5f202fa0a2bc7373c214 |
Headers | show |
Series | [v2] gpiolib: allow line names from device props to override driver names | expand |
On Tue, Dec 14, 2021 at 11:00 PM Peter Rosin <peda@axentia.se> wrote: > > Some GPIO providers set names for GPIO lines that match the names of > the pins on the SoC, or variations on that theme. These names are > generic more often that not, such as pioC12 in the at91 case. These > generic names block the possibility to set more useful GPIO line > names with device properties (i.e. gpio-line-names). > > Allow overriding a generic name given by the GPIO driver if there is > a name given to the GPIO line using device properties, but leave the > generic name alone if no better name is available. > > However, there is a risk. If user space is depending on the above > mentioned fixed GPIO names, AND there are device properties that > previously did not reach the surface, the name change might cause > regressions. But hopefully this stays below the radar... > > Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> > Tested-by: Alexander Dahl <ada@thorsis.com> > Signed-off-by: Peter Rosin <peda@axentia.se> > --- Applied, thanks! Bart
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index abfbf546d159..817342ef26d0 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -422,8 +422,16 @@ static int devprop_gpiochip_set_names(struct gpio_chip *chip) if (count > chip->ngpio) count = chip->ngpio; - for (i = 0; i < count; i++) - gdev->descs[i].name = names[chip->offset + i]; + for (i = 0; i < count; i++) { + /* + * Allow overriding "fixed" names provided by the GPIO + * provider. The "fixed" names are more often than not + * generic and less informative than the names given in + * device properties. + */ + if (names[chip->offset + i] && names[chip->offset + i][0]) + gdev->descs[i].name = names[chip->offset + i]; + } kfree(names); @@ -708,10 +716,12 @@ int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data, INIT_LIST_HEAD(&gdev->pin_ranges); #endif - if (gc->names) + if (gc->names) { ret = gpiochip_set_desc_names(gc); - else - ret = devprop_gpiochip_set_names(gc); + if (ret) + goto err_remove_from_list; + } + ret = devprop_gpiochip_set_names(gc); if (ret) goto err_remove_from_list;