| From a446c147382a43f3345b9ca1738a14387c844ac2 Mon Sep 17 00:00:00 2001 |
| From: Eddie James <eajames@linux.ibm.com> |
| Date: Wed, 6 Nov 2019 14:01:05 -0600 |
| Subject: [PATCH] hwmon: (pmbus/ibm-cffps) Switch LEDs to blocking brightness |
| call |
| |
| 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: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/hwmon/pmbus/ibm-cffps.c b/drivers/hwmon/pmbus/ibm-cffps.c |
| index ee2ee9e3ffd7..958384d4eda3 100644 |
| --- a/drivers/hwmon/pmbus/ibm-cffps.c |
| +++ b/drivers/hwmon/pmbus/ibm-cffps.c |
| @@ -265,8 +265,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); |
| @@ -282,9 +282,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, |
| @@ -320,7 +322,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); |
| -- |
| 2.7.4 |
| |