hwmon: (pmbus/ibm-cffps) Switch LEDs to blocking brightness call
authorEddie James <eajames@linux.ibm.com>
Wed, 6 Nov 2019 20:01:05 +0000 (14:01 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 23 Jan 2020 07:21:39 +0000 (08:21 +0100)
commit 9861ff954c7e83e2f738ce16fbe15f8a1e121771 upstream.

Since i2c_smbus functions can sleep, the brightness setting function
for this driver must be the blocking version to avoid scheduling while
atomic.

Signed-off-by: Eddie James <eajames@linux.ibm.com>
Link: https://lore.kernel.org/r/20191106200106.29519-2-eajames@linux.ibm.com
Fixes: ef9e1cdf419a3 ("hwmon: (pmbus/cffps) Add led class device for power supply fault led")
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/hwmon/pmbus/ibm-cffps.c

index 93d9a9e..edc70ac 100644 (file)
@@ -269,8 +269,8 @@ static int ibm_cffps_read_word_data(struct i2c_client *client, int page,
        return rc;
 }
 
-static void ibm_cffps_led_brightness_set(struct led_classdev *led_cdev,
-                                        enum led_brightness brightness)
+static int ibm_cffps_led_brightness_set(struct led_classdev *led_cdev,
+                                       enum led_brightness brightness)
 {
        int rc;
        struct ibm_cffps *psu = container_of(led_cdev, struct ibm_cffps, led);
@@ -286,9 +286,11 @@ static void ibm_cffps_led_brightness_set(struct led_classdev *led_cdev,
        rc = i2c_smbus_write_byte_data(psu->client, CFFPS_SYS_CONFIG_CMD,
                                       psu->led_state);
        if (rc < 0)
-               return;
+               return rc;
 
        led_cdev->brightness = brightness;
+
+       return 0;
 }
 
 static int ibm_cffps_led_blink_set(struct led_classdev *led_cdev,
@@ -324,7 +326,7 @@ static void ibm_cffps_create_led_class(struct ibm_cffps *psu)
                 client->addr);
        psu->led.name = psu->led_name;
        psu->led.max_brightness = LED_FULL;
-       psu->led.brightness_set = ibm_cffps_led_brightness_set;
+       psu->led.brightness_set_blocking = ibm_cffps_led_brightness_set;
        psu->led.blink_set = ibm_cffps_led_blink_set;
 
        rc = devm_led_classdev_register(dev, &psu->led);