Message ID | 20210518120917.30336-1-andriy.shevchenko@linux.intel.com |
---|---|
State | Accepted |
Commit | 9e23bf6b00fd060d9a6fdf8a43f427d09992a21d |
Headers | show |
Series | [v1,1/1] gpiolib: Use sysfs_emit() in "show" functions | expand |
On Tue, May 18, 2021 at 2:09 PM Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote: > > The sysfs_emit() function was introduced to make it less ambiguous > which function is preferred when writing to the output buffer in > a "show" callback [1]. > > Convert the GPIO library sysfs interface from sprintf() to sysfs_emit() > accordingly, as the latter is aware of the PAGE_SIZE buffer and correctly > returns the number of bytes written into the buffer. > > No functional change intended. > > [1] Documentation/filesystems/sysfs.rst > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> > --- > drivers/gpio/gpiolib-sysfs.c | 27 ++++++++++----------------- > 1 file changed, 10 insertions(+), 17 deletions(-) > > diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c > index 7c5afd999210..d836aba91d3c 100644 > --- a/drivers/gpio/gpiolib-sysfs.c > +++ b/drivers/gpio/gpiolib-sysfs.c > @@ -66,9 +66,7 @@ static ssize_t direction_show(struct device *dev, > mutex_lock(&data->mutex); > > gpiod_get_direction(desc); > - status = sprintf(buf, "%s\n", > - test_bit(FLAG_IS_OUT, &desc->flags) > - ? "out" : "in"); > + status = sysfs_emit(buf, "%s\n", test_bit(FLAG_IS_OUT, &desc->flags) ? "out" : "in"); > > mutex_unlock(&data->mutex); > > @@ -109,13 +107,9 @@ static ssize_t value_show(struct device *dev, > mutex_lock(&data->mutex); > > status = gpiod_get_value_cansleep(desc); > - if (status < 0) > - goto err; > + if (status >= 0) > + status = sysfs_emit(buf, "%zd\n", status); > > - buf[0] = '0' + status; > - buf[1] = '\n'; > - status = 2; > -err: > mutex_unlock(&data->mutex); > > return status; > @@ -249,11 +243,11 @@ static ssize_t edge_show(struct device *dev, > mutex_lock(&data->mutex); > > for (i = 0; i < ARRAY_SIZE(trigger_types); i++) { > - if (data->irq_flags == trigger_types[i].flags) { > - status = sprintf(buf, "%s\n", trigger_types[i].name); > + if (data->irq_flags == trigger_types[i].flags) > break; > - } > } > + if (i < ARRAY_SIZE(trigger_types)) > + status = sysfs_emit(buf, "%s\n", trigger_types[i].name); > > mutex_unlock(&data->mutex); > > @@ -333,8 +327,7 @@ static ssize_t active_low_show(struct device *dev, > > mutex_lock(&data->mutex); > > - status = sprintf(buf, "%d\n", > - !!test_bit(FLAG_ACTIVE_LOW, &desc->flags)); > + status = sysfs_emit(buf, "%d\n", !!test_bit(FLAG_ACTIVE_LOW, &desc->flags)); > > mutex_unlock(&data->mutex); > > @@ -412,7 +405,7 @@ static ssize_t base_show(struct device *dev, > { > const struct gpio_chip *chip = dev_get_drvdata(dev); > > - return sprintf(buf, "%d\n", chip->base); > + return sysfs_emit(buf, "%d\n", chip->base); > } > static DEVICE_ATTR_RO(base); > > @@ -421,7 +414,7 @@ static ssize_t label_show(struct device *dev, > { > const struct gpio_chip *chip = dev_get_drvdata(dev); > > - return sprintf(buf, "%s\n", chip->label ? : ""); > + return sysfs_emit(buf, "%s\n", chip->label ?: ""); > } > static DEVICE_ATTR_RO(label); > > @@ -430,7 +423,7 @@ static ssize_t ngpio_show(struct device *dev, > { > const struct gpio_chip *chip = dev_get_drvdata(dev); > > - return sprintf(buf, "%u\n", chip->ngpio); > + return sysfs_emit(buf, "%u\n", chip->ngpio); > } > static DEVICE_ATTR_RO(ngpio); > > -- > 2.30.2 > Applied, thanks! Bartosz
diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c index 7c5afd999210..d836aba91d3c 100644 --- a/drivers/gpio/gpiolib-sysfs.c +++ b/drivers/gpio/gpiolib-sysfs.c @@ -66,9 +66,7 @@ static ssize_t direction_show(struct device *dev, mutex_lock(&data->mutex); gpiod_get_direction(desc); - status = sprintf(buf, "%s\n", - test_bit(FLAG_IS_OUT, &desc->flags) - ? "out" : "in"); + status = sysfs_emit(buf, "%s\n", test_bit(FLAG_IS_OUT, &desc->flags) ? "out" : "in"); mutex_unlock(&data->mutex); @@ -109,13 +107,9 @@ static ssize_t value_show(struct device *dev, mutex_lock(&data->mutex); status = gpiod_get_value_cansleep(desc); - if (status < 0) - goto err; + if (status >= 0) + status = sysfs_emit(buf, "%zd\n", status); - buf[0] = '0' + status; - buf[1] = '\n'; - status = 2; -err: mutex_unlock(&data->mutex); return status; @@ -249,11 +243,11 @@ static ssize_t edge_show(struct device *dev, mutex_lock(&data->mutex); for (i = 0; i < ARRAY_SIZE(trigger_types); i++) { - if (data->irq_flags == trigger_types[i].flags) { - status = sprintf(buf, "%s\n", trigger_types[i].name); + if (data->irq_flags == trigger_types[i].flags) break; - } } + if (i < ARRAY_SIZE(trigger_types)) + status = sysfs_emit(buf, "%s\n", trigger_types[i].name); mutex_unlock(&data->mutex); @@ -333,8 +327,7 @@ static ssize_t active_low_show(struct device *dev, mutex_lock(&data->mutex); - status = sprintf(buf, "%d\n", - !!test_bit(FLAG_ACTIVE_LOW, &desc->flags)); + status = sysfs_emit(buf, "%d\n", !!test_bit(FLAG_ACTIVE_LOW, &desc->flags)); mutex_unlock(&data->mutex); @@ -412,7 +405,7 @@ static ssize_t base_show(struct device *dev, { const struct gpio_chip *chip = dev_get_drvdata(dev); - return sprintf(buf, "%d\n", chip->base); + return sysfs_emit(buf, "%d\n", chip->base); } static DEVICE_ATTR_RO(base); @@ -421,7 +414,7 @@ static ssize_t label_show(struct device *dev, { const struct gpio_chip *chip = dev_get_drvdata(dev); - return sprintf(buf, "%s\n", chip->label ? : ""); + return sysfs_emit(buf, "%s\n", chip->label ?: ""); } static DEVICE_ATTR_RO(label); @@ -430,7 +423,7 @@ static ssize_t ngpio_show(struct device *dev, { const struct gpio_chip *chip = dev_get_drvdata(dev); - return sprintf(buf, "%u\n", chip->ngpio); + return sysfs_emit(buf, "%u\n", chip->ngpio); } static DEVICE_ATTR_RO(ngpio);
The sysfs_emit() function was introduced to make it less ambiguous which function is preferred when writing to the output buffer in a "show" callback [1]. Convert the GPIO library sysfs interface from sprintf() to sysfs_emit() accordingly, as the latter is aware of the PAGE_SIZE buffer and correctly returns the number of bytes written into the buffer. No functional change intended. [1] Documentation/filesystems/sysfs.rst Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> --- drivers/gpio/gpiolib-sysfs.c | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-)