Message ID | 20200904154547.3836-6-brgl@bgdev.pl |
---|---|
State | New |
Headers | show |
Series | gpio: mockup: support dynamically created and removed chips | expand |
On Fri, Sep 04, 2020 at 05:45:29PM +0200, Bartosz Golaszewski wrote: > From: Bartosz Golaszewski <bgolaszewski@baylibre.com> > > 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. I have mixed feelings about this. We may simply unexport and attach object file to gpiolib.o. Would it be expected to see more functions in this file in the future? > Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com> > --- > drivers/gpio/Makefile | 1 - > drivers/gpio/gpiolib-devprop.c | 64 ---------------------------------- > drivers/gpio/gpiolib.c | 48 +++++++++++++++++++++++++ > include/linux/gpio/driver.h | 2 -- > 4 files changed, 48 insertions(+), 67 deletions(-) > delete mode 100644 drivers/gpio/gpiolib-devprop.c > > diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile > index 4f9abff4f2dc..639275eb4e4d 100644 > --- a/drivers/gpio/Makefile > +++ b/drivers/gpio/Makefile > @@ -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 > diff --git a/drivers/gpio/gpiolib-devprop.c b/drivers/gpio/gpiolib-devprop.c > deleted file mode 100644 > index a28659b4f9c9..000000000000 > --- a/drivers/gpio/gpiolib-devprop.c > +++ /dev/null > @@ -1,64 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/* > - * Device property helpers for GPIO chips. > - * > - * Copyright (C) 2016, Intel Corporation > - * Author: Mika Westerberg <mika.westerberg@linux.intel.com> > - */ > - > -#include <linux/property.h> > -#include <linux/slab.h> > -#include <linux/gpio/consumer.h> > -#include <linux/gpio/driver.h> > -#include <linux/export.h> > - > -#include "gpiolib.h" > - > -/** > - * devprop_gpiochip_set_names - Set GPIO line names using device properties > - * @chip: GPIO chip whose lines should be named, if possible > - * > - * 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 software node and should not be released > - * by the caller. > - */ > -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 = device_property_read_string_array(dev, "gpio-line-names", > - NULL, 0); > - if (count < 0) > - return 0; > - > - if (count > gdev->ngpio) { > - dev_warn(&gdev->dev, "gpio-line-names is length %d but should be at most length %d", > - count, gdev->ngpio); > - count = gdev->ngpio; > - } > - > - names = kcalloc(count, sizeof(*names), GFP_KERNEL); > - if (!names) > - return -ENOMEM; > - > - 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 ret; > - } > - > - for (i = 0; i < count; i++) > - gdev->descs[i].name = names[i]; > - > - kfree(names); > - > - return 0; > -} > -EXPORT_SYMBOL_GPL(devprop_gpiochip_set_names); > diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c > index 0d390f0ec32c..15c99cf560ee 100644 > --- a/drivers/gpio/gpiolib.c > +++ b/drivers/gpio/gpiolib.c > @@ -358,6 +358,54 @@ static int gpiochip_set_desc_names(struct gpio_chip *gc) > return 0; > } > > +/* > + * devprop_gpiochip_set_names - Set GPIO line names using device properties > + * @chip: GPIO chip whose lines should be named, if possible > + * > + * 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 software node and should not be released > + * by the caller. > + */ > +static 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 = device_property_read_string_array(dev, "gpio-line-names", > + NULL, 0); > + if (count < 0) > + return 0; > + > + if (count > gdev->ngpio) { > + dev_warn(&gdev->dev, "gpio-line-names is length %d but should be at most length %d", > + count, gdev->ngpio); > + count = gdev->ngpio; > + } > + > + names = kcalloc(count, sizeof(*names), GFP_KERNEL); > + if (!names) > + return -ENOMEM; > + > + 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 ret; > + } > + > + for (i = 0; i < count; i++) > + gdev->descs[i].name = names[i]; > + > + kfree(names); > + > + return 0; > +} > + > static unsigned long *gpiochip_allocate_mask(struct gpio_chip *gc) > { > unsigned long *p; > diff --git a/include/linux/gpio/driver.h b/include/linux/gpio/driver.h > index 56485a040b82..4a7e295c3640 100644 > --- a/include/linux/gpio/driver.h > +++ b/include/linux/gpio/driver.h > @@ -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 */ > -- > 2.26.1 >
On Fri, Sep 4, 2020 at 6:42 PM Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote: > > On Fri, Sep 04, 2020 at 05:45:29PM +0200, Bartosz Golaszewski wrote: > > From: Bartosz Golaszewski <bgolaszewski@baylibre.com> > > > > 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. > > I have mixed feelings about this. We may simply unexport and attach object file > to gpiolib.o. Would it be expected to see more functions in this file in the > future? > This file was created for this function alone over 4 years ago and never saw any new routines. Personally I think there's no reason to keep a single helper in its own file. We usually only split big chunks of code out of gpiolib.c. Bart
diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile index 4f9abff4f2dc..639275eb4e4d 100644 --- a/drivers/gpio/Makefile +++ b/drivers/gpio/Makefile @@ -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 diff --git a/drivers/gpio/gpiolib-devprop.c b/drivers/gpio/gpiolib-devprop.c deleted file mode 100644 index a28659b4f9c9..000000000000 --- a/drivers/gpio/gpiolib-devprop.c +++ /dev/null @@ -1,64 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * Device property helpers for GPIO chips. - * - * Copyright (C) 2016, Intel Corporation - * Author: Mika Westerberg <mika.westerberg@linux.intel.com> - */ - -#include <linux/property.h> -#include <linux/slab.h> -#include <linux/gpio/consumer.h> -#include <linux/gpio/driver.h> -#include <linux/export.h> - -#include "gpiolib.h" - -/** - * devprop_gpiochip_set_names - Set GPIO line names using device properties - * @chip: GPIO chip whose lines should be named, if possible - * - * 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 software node and should not be released - * by the caller. - */ -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 = device_property_read_string_array(dev, "gpio-line-names", - NULL, 0); - if (count < 0) - return 0; - - if (count > gdev->ngpio) { - dev_warn(&gdev->dev, "gpio-line-names is length %d but should be at most length %d", - count, gdev->ngpio); - count = gdev->ngpio; - } - - names = kcalloc(count, sizeof(*names), GFP_KERNEL); - if (!names) - return -ENOMEM; - - 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 ret; - } - - for (i = 0; i < count; i++) - gdev->descs[i].name = names[i]; - - kfree(names); - - return 0; -} -EXPORT_SYMBOL_GPL(devprop_gpiochip_set_names); diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 0d390f0ec32c..15c99cf560ee 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -358,6 +358,54 @@ static int gpiochip_set_desc_names(struct gpio_chip *gc) return 0; } +/* + * devprop_gpiochip_set_names - Set GPIO line names using device properties + * @chip: GPIO chip whose lines should be named, if possible + * + * 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 software node and should not be released + * by the caller. + */ +static 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 = device_property_read_string_array(dev, "gpio-line-names", + NULL, 0); + if (count < 0) + return 0; + + if (count > gdev->ngpio) { + dev_warn(&gdev->dev, "gpio-line-names is length %d but should be at most length %d", + count, gdev->ngpio); + count = gdev->ngpio; + } + + names = kcalloc(count, sizeof(*names), GFP_KERNEL); + if (!names) + return -ENOMEM; + + 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 ret; + } + + for (i = 0; i < count; i++) + gdev->descs[i].name = names[i]; + + kfree(names); + + return 0; +} + static unsigned long *gpiochip_allocate_mask(struct gpio_chip *gc) { unsigned long *p; diff --git a/include/linux/gpio/driver.h b/include/linux/gpio/driver.h index 56485a040b82..4a7e295c3640 100644 --- a/include/linux/gpio/driver.h +++ b/include/linux/gpio/driver.h @@ -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 */