gpiolib: generalize GPIO line names property
Subsystems (4)
v2 cover gpiolib: generalize GPIO line names property
From: Bartosz Golaszewski <[email protected]>
I initially sent this as part of the gpio-mockup overhaul but since these patches are indepentent and the work on gpio-mockup may become more complicated - I'm sending these separately.
The only change is adding additional property helpers to count strings in array.
v1 -> v2:
- actually remove the previous devprop source file in patch 3
- rename the string counting functions to something more explicit
Bartosz Golaszewski (3):
device: property: add helpers to count items in string arrays
gpiolib: generalize devprop_gpiochip_set_names() for device properties
gpiolib: unexport devprop_gpiochip_set_names()
drivers/gpio/Makefile | 1 - drivers/gpio/gpiolib-acpi.c | 3 -- drivers/gpio/gpiolib-devprop.c | 63 ---------------------------------- drivers/gpio/gpiolib-of.c | 5 --- drivers/gpio/gpiolib.c | 55 ++++++++++++++++++++++++++--- include/linux/gpio/driver.h | 3 -- include/linux/property.h | 13 +++++++ 7 files changed, 64 insertions(+), 79 deletions(-) delete mode 100644 drivers/gpio/gpiolib-devprop.c
Signature · 1 line
2.26.1
PATCH v2 1/3 device: property: add helpers to count items in string arrays
From: Bartosz Golaszewski <[email protected]>
Instead of doing the following:
count = device_property_read_string_array(dev, propname, NULL, 0);
Let's provide inline helpers with hardcoded arguments for counting strings in property arrays.
--- include/linux/property.h | 13 +++++++++++++ 1 file changed, 13 insertions(+)
include/linux/property.h +13 -0
@@ -170,6 +170,12 @@ static inline int device_property_count_u64(struct device *dev, const char *propreturn device_property_read_u64_array (dev, propname,NULL ,0 ); } +static inline int device_property_string_array_count (struct device *dev, +const char *propname) +{ +return device_property_read_string_array (dev, propname,NULL ,0 ); +} +static inline bool fwnode_property_read_bool (const struct fwnode_handle *fwnode,const char *propname) {
@@ -224,6 +230,13 @@ static inline int fwnode_property_count_u64(const struct fwnode_handle *fwnode,return fwnode_property_read_u64_array (fwnode, propname,NULL ,0 ); } +static inline int +fwnode_property_string_array_count (const struct fwnode_handle *fwnode, +const char *propname) +{ +return fwnode_property_read_string_array (fwnode, propname,NULL ,0 ); +} +struct software_node ;/**
Signature · 1 line
2.26.1
PATCH v2 2/3 gpiolib: generalize devprop_gpiochip_set_names() for device properties
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
devprop_gpiochip_set_names() is overly complicated with taking the fwnode argument (which requires using dev_fwnode() & of_fwnode_handle() in ACPI and OF GPIO code respectively). Let's just switch to using the generic device properties.
This allows us to pull the code setting line names directly into gpiochip_add_data_with_key() instead of handling it separately for ACPI and OF.
--- drivers/gpio/gpiolib-acpi.c | 3 --- drivers/gpio/gpiolib-devprop.c | 20 ++++++++++---------- drivers/gpio/gpiolib-of.c | 5 ----- drivers/gpio/gpiolib.c | 8 ++++---- include/linux/gpio/driver.h | 3 +-- 5 files changed, 15 insertions(+), 24 deletions(-)
drivers/gpio/gpiolib-acpi.c +0 -3
@@ -1221,9 +1221,6 @@ void acpi_gpiochip_add(struct gpio_chip *chip)return ; } -if (!chip->names) -devprop_gpiochip_set_names (chip,dev_fwnode (chip->parent)); -acpi_gpiochip_request_regions (acpi_gpio);acpi_gpiochip_scan_gpios (acpi_gpio);acpi_walk_dep_device_list (handle);
drivers/gpio/gpiolib-devprop.c +10 -10
@@ -17,25 +17,23 @@/** * devprop_gpiochip_set_names - Set GPIO line names using device properties * @chip: GPIO chip whose lines should be named, if possible -* @fwnode: Property Node containing the gpio-line-names property * * Looks for device property "gpio-line-names" and if it exists assigns * GPIO line names for the chip. The memory allocated for the assigned -* names belong to the underlying firmware node and should not be released +* names belong to the underlying software node and should not be released * by the caller. */ -void devprop_gpiochip_set_names (struct gpio_chip *chip, -const struct fwnode_handle *fwnode) +int devprop_gpiochip_set_names (struct gpio_chip *chip) {struct gpio_device *gdev = chip->gpiodev; +struct device *dev = chip->parent;const char **names;int ret, i;int count; - count =fwnode_property_read_string_array (fwnode,"gpio-line-names" , -NULL ,0 ); + count =device_property_string_array_count (dev,"gpio-line-names" );if (count <0 ) -return ; +return 0 ;if (count > gdev->ngpio) { dev_warn(&gdev->dev, "gpio-line-names is length %d but should be at most length %d",
@@ -45,19 +43,21 @@ void devprop_gpiochip_set_names(struct gpio_chip *chip, names =kcalloc (count,sizeof (*names),GFP_KERNEL );if (!names) -return ; +return -ENOMEM ; - ret =fwnode_property_read_string_array (fwnode,"gpio-line-names" , + ret =device_property_read_string_array (dev,"gpio-line-names" , names, count);if (ret <0 ) {dev_warn (&gdev->dev,"failed to read GPIO line names\n" );kfree (names); -return ; +return ret; }for (i =0 ; i < count; i++) gdev->descs[i].name = names[i];kfree (names); + +return 0 ; }EXPORT_SYMBOL_GPL (devprop_gpiochip_set_names);
drivers/gpio/gpiolib-of.c +0 -5
@@ -1026,11 +1026,6 @@ int of_gpiochip_add(struct gpio_chip *chip)if (ret)return ret; -/* If the chip defines names itself, these take precedence */ -if (!chip->names) -devprop_gpiochip_set_names (chip, -of_fwnode_handle (chip->of_node)); -of_node_get (chip->of_node); ret =of_gpiochip_scan_gpios (chip);
drivers/gpio/gpiolib.c +4 -4
@@ -340,9 +340,6 @@ static int gpiochip_set_desc_names(struct gpio_chip *gc)struct gpio_device *gdev = gc->gpiodev;int i; -if (!gc->names) -return 0 ; -/* First check all names if they are unique */ for (i =0 ; i != gc->ngpio; ++i) {struct gpio_desc *gpio;
@@ -621,7 +618,10 @@ int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data,INIT_LIST_HEAD (&gdev->pin_ranges);#endif - ret =gpiochip_set_desc_names (gc); +if (gc->names) + ret =gpiochip_set_desc_names (gc); +else + ret =devprop_gpiochip_set_names (gc);if (ret) goto err_remove_from_list;
include/linux/gpio/driver.h +1 -2
@@ -756,8 +756,7 @@ struct gpio_desc *gpiochip_request_own_desc(struct gpio_chip *gc, enum gpiod_flags dflags);void gpiochip_free_own_desc (struct gpio_desc *desc); -void devprop_gpiochip_set_names (struct gpio_chip *gc, -const struct fwnode_handle *fwnode); +int devprop_gpiochip_set_names (struct gpio_chip *gc);#ifdef CONFIG_GPIOLIB
Signature · 1 line
2.26.1
PATCH v2 3/3 gpiolib: unexport devprop_gpiochip_set_names()
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
Now that devprop_gpiochip_set_names() is only used in a single place inside drivers/gpio/gpiolib.c, there's no need anymore for it to be exported or to even live in its own source file. Pull this function into the core source file for gpiolib.
--- drivers/gpio/Makefile | 1 - drivers/gpio/gpiolib-devprop.c | 63 ---------------------------------- drivers/gpio/gpiolib.c | 47 +++++++++++++++++++++++++ include/linux/gpio/driver.h | 2 -- 4 files changed, 47 insertions(+), 66 deletions(-) delete mode 100644 drivers/gpio/gpiolib-devprop.c
drivers/gpio/Makefile +0 -1
@@ -6,7 +6,6 @@ ccflags-$(CONFIG_DEBUG_GPIO) += -DDEBUG obj-$(CONFIG_GPIOLIB) += gpiolib.o obj-$(CONFIG_GPIOLIB) += gpiolib-devres.o obj-$(CONFIG_GPIOLIB) += gpiolib-legacy.o -obj-$(CONFIG_GPIOLIB) += gpiolib-devprop.o obj-$(CONFIG_GPIOLIB) += gpiolib-cdev.o obj-$(CONFIG_OF_GPIO) += gpiolib-of.o obj-$(CONFIG_GPIO_SYSFS) += gpiolib-sysfs.o
drivers/gpio/gpiolib-devprop.c deleted +0 -63
63 lines not on this page · raw message
drivers/gpio/gpiolib.c +47 -0
53 lines not on this page · raw message
include/linux/gpio/driver.h +0 -2
@@ -756,8 +756,6 @@ struct gpio_desc *gpiochip_request_own_desc(struct gpio_chip *gc, enum gpiod_flags dflags);void gpiochip_free_own_desc (struct gpio_desc *desc); -int devprop_gpiochip_set_names (struct gpio_chip *gc); -#ifdef CONFIG_GPIOLIB /* lock/unlock as IRQ */
Signature · 1 line
2.26.1
Quoted 9 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
I initially sent this as part of the gpio-mockup overhaul but since these patches are indepentent and the work on gpio-mockup may become more complicated - I'm sending these separately.
The only change is adding additional property helpers to count strings in array.
Quoted 8 lines
v1 -> v2:
- actually remove the previous devprop source file in patch 3
- rename the string counting functions to something more explicitBartosz Golaszewski (3):
device: property: add helpers to count items in string arrays
gpiolib: generalizedevprop_gpiochip_set_names()for device properties
gpiolib: unexportdevprop_gpiochip_set_names()
The series looks good to me,
Quoted 8 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
I initially sent this as part of the gpio-mockup overhaul but since these patches are indepentent and the work on gpio-mockup may become more complicated - I'm sending these separately.
The only change is adding additional property helpers to count strings in array.
Seems it lost my tag for patch 1/3, but in any case now I'm good with it
Quoted 22 lines
v1 -> v2:
- actually remove the previous devprop source file in patch 3
- rename the string counting functions to something more explicitBartosz Golaszewski (3):
device: property: add helpers to count items in string arrays
gpiolib: generalizedevprop_gpiochip_set_names()for device properties
gpiolib: unexportdevprop_gpiochip_set_names()drivers/gpio/Makefile | 1 - drivers/gpio/gpiolib-acpi.c | 3 -- drivers/gpio/gpiolib-devprop.c | 63 ---------------------------------- drivers/gpio/gpiolib-of.c | 5 --- drivers/gpio/gpiolib.c | 55 ++++++++++++++++++++++++++--- include/linux/gpio/driver.h | 3 -- include/linux/property.h | 13 +++++++ 7 files changed, 64 insertions(+), 79 deletions(-) delete mode 100644 drivers/gpio/gpiolib-devprop.cSignature · 1 line
2.26.1
Signature · 2 lines
With Best Regards, Andy Shevchenko
Quoted 8 lines · Andy Shevchenko
Quoted 6 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
I initially sent this as part of the gpio-mockup overhaul but since these patches are indepentent and the work on gpio-mockup may become more complicated - I'm sending these separately.
Quoted 6 lines
Quoted 2 lines
The only change is adding additional property helpers to count strings in array.
Seems it lost my tag for patch 1/3, but in any case now I'm good with it
Reviewed-by Andy Shevchenko <[email protected]>
I removed your tag from patch 1 because I changed the name of the helpers.
Bartosz