On Fri, Sep 04, 2020 at 05:45:29PM +0200, Bartosz Golaszewski wrote: > From: Bartosz Golaszewski <bgolaszewski@xxxxxxxxxxxx> > > 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@xxxxxxxxxxxx> > --- > 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@xxxxxxxxxxxxxxx> > - */ > - > -#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 > -- With Best Regards, Andy Shevchenko