From 7e715c2d9c27c23f3187454157c58cf292ed103e Mon Sep 17 00:00:00 2001 From: Sudip Mukherjee Date: Wed, 17 May 2017 21:55:07 +0100 Subject: [PATCH 1/3] backlight: Report error on failure It is possible to update the backlight power and the brightness using the sysfs and on writing it either returns the count or if the callback function does not exist then returns the error code 'ENXIO'. We have a situation where the userspace client is writing to the sysfs to update the power and since the callback function exists the client receives the return value as count and considers the operation to be successful. That is correct as the write to the sysfs was successful. But there is no way to know if the actual operation was done or not. backlight_update_status() returns the error code if it fails. Pass that to the userspace client who is trying to update the power so that the client knows that the operation failed. Signed-off-by: Sudip Mukherjee Acked-by: Daniel Thompson Signed-off-by: Lee Jones --- drivers/video/backlight/backlight.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c index 288318ad21dd..8049e7656daa 100644 --- a/drivers/video/backlight/backlight.c +++ b/drivers/video/backlight/backlight.c @@ -134,7 +134,7 @@ static ssize_t bl_power_store(struct device *dev, struct device_attribute *attr, { int rc; struct backlight_device *bd = to_backlight_device(dev); - unsigned long power; + unsigned long power, old_power; rc = kstrtoul(buf, 0, &power); if (rc) @@ -145,10 +145,16 @@ static ssize_t bl_power_store(struct device *dev, struct device_attribute *attr, if (bd->ops) { pr_debug("set power to %lu\n", power); if (bd->props.power != power) { + old_power = bd->props.power; bd->props.power = power; - backlight_update_status(bd); + rc = backlight_update_status(bd); + if (rc) + bd->props.power = old_power; + else + rc = count; + } else { + rc = count; } - rc = count; } mutex_unlock(&bd->ops_lock); @@ -176,8 +182,7 @@ int backlight_device_set_brightness(struct backlight_device *bd, else { pr_debug("set brightness to %lu\n", brightness); bd->props.brightness = brightness; - backlight_update_status(bd); - rc = 0; + rc = backlight_update_status(bd); } } mutex_unlock(&bd->ops_lock); From 8476d6cde2cd11a2cb87bd7392fc318eec25c8a0 Mon Sep 17 00:00:00 2001 From: Wolfram Sang Date: Mon, 22 May 2017 00:09:52 +0200 Subject: [PATCH 2/3] backlight: adp8860: Move header file out of I2C realm include/linux/i2c is not for client devices. Move the header file to a more appropriate location. Signed-off-by: Wolfram Sang Acked-by: Daniel Thompson Acked-by: Michael Hennerich Signed-off-by: Lee Jones --- arch/blackfin/mach-bf537/boards/stamp.c | 2 +- drivers/video/backlight/adp8860_bl.c | 2 +- include/linux/{i2c => platform_data}/adp8860.h | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename include/linux/{i2c => platform_data}/adp8860.h (100%) diff --git a/arch/blackfin/mach-bf537/boards/stamp.c b/arch/blackfin/mach-bf537/boards/stamp.c index eaec7b4832a2..76983dfba324 100644 --- a/arch/blackfin/mach-bf537/boards/stamp.c +++ b/arch/blackfin/mach-bf537/boards/stamp.c @@ -2047,7 +2047,7 @@ static struct adp8870_backlight_platform_data adp8870_pdata = { #endif #if IS_ENABLED(CONFIG_BACKLIGHT_ADP8860) -#include +#include static struct led_info adp8860_leds[] = { { .name = "adp8860-led7", diff --git a/drivers/video/backlight/adp8860_bl.c b/drivers/video/backlight/adp8860_bl.c index 510e559c060e..e7315bf14d60 100644 --- a/drivers/video/backlight/adp8860_bl.c +++ b/drivers/video/backlight/adp8860_bl.c @@ -18,7 +18,7 @@ #include #include -#include +#include #define ADP8860_EXT_FEATURES #define ADP8860_USE_LEDS diff --git a/include/linux/i2c/adp8860.h b/include/linux/platform_data/adp8860.h similarity index 100% rename from include/linux/i2c/adp8860.h rename to include/linux/platform_data/adp8860.h From 056d6ff470a8e782648fd020940c04d0d4a0d761 Mon Sep 17 00:00:00 2001 From: Wolfram Sang Date: Mon, 22 May 2017 00:09:53 +0200 Subject: [PATCH 3/3] video: adp8870: move header file out of I2C realm include/linux/i2c is not for client devices. Move the header file to a more appropriate location. Signed-off-by: Wolfram Sang Acked-by: Daniel Thompson Acked-by: Bartlomiej Zolnierkiewicz Signed-off-by: Lee Jones --- arch/blackfin/mach-bf537/boards/stamp.c | 2 +- drivers/video/backlight/adp8870_bl.c | 2 +- include/linux/{i2c => platform_data}/adp8870.h | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename include/linux/{i2c => platform_data}/adp8870.h (100%) diff --git a/arch/blackfin/mach-bf537/boards/stamp.c b/arch/blackfin/mach-bf537/boards/stamp.c index 76983dfba324..388b91e21b74 100644 --- a/arch/blackfin/mach-bf537/boards/stamp.c +++ b/arch/blackfin/mach-bf537/boards/stamp.c @@ -1995,7 +1995,7 @@ static struct adp5588_gpio_platform_data adp5588_gpio_data = { #endif #if IS_ENABLED(CONFIG_BACKLIGHT_ADP8870) -#include +#include static struct led_info adp8870_leds[] = { { .name = "adp8870-led7", diff --git a/drivers/video/backlight/adp8870_bl.c b/drivers/video/backlight/adp8870_bl.c index 21acac90fd77..058d1def2d1f 100644 --- a/drivers/video/backlight/adp8870_bl.c +++ b/drivers/video/backlight/adp8870_bl.c @@ -18,7 +18,7 @@ #include #include -#include +#include #define ADP8870_EXT_FEATURES #define ADP8870_USE_LEDS diff --git a/include/linux/i2c/adp8870.h b/include/linux/platform_data/adp8870.h similarity index 100% rename from include/linux/i2c/adp8870.h rename to include/linux/platform_data/adp8870.h