[v3,11/11] leds: powernv: use LED_RETAIN_AT_SHUTDOWN flag for leds
Commit Message
This driver wants to keep its LEDs state after module is removed
and implemented it in its own way. LED subsystem supports dedicated
flag LED_RETAIN_AT_SHUTDOWN for the same purpose so use the flag
instead of custom implementation.
Signed-off-by: George Stark <gnstark@salutedevices.com>
---
drivers/leds/leds-powernv.c | 23 ++++++++---------------
1 file changed, 8 insertions(+), 15 deletions(-)
@@ -30,15 +30,6 @@ static const struct led_type_map led_type_map[] = {
};
struct powernv_led_common {
- /*
- * By default unload path resets all the LEDs. But on PowerNV
- * platform we want to retain LED state across reboot as these
- * are controlled by firmware. Also service processor can modify
- * the LEDs independent of OS. Hence avoid resetting LEDs in
- * unload path.
- */
- bool led_disabled;
-
/* Max supported LED type */
__be64 max_led_type;
@@ -178,10 +169,6 @@ static int powernv_brightness_set(struct led_classdev *led_cdev,
struct powernv_led_common *powernv_led_common = powernv_led->common;
int rc;
- /* Do not modify LED in unload path */
- if (powernv_led_common->led_disabled)
- return 0;
-
mutex_lock(&powernv_led_common->lock);
rc = powernv_led_set(powernv_led, value);
mutex_unlock(&powernv_led_common->lock);
@@ -225,6 +212,14 @@ static int powernv_led_create(struct device *dev,
powernv_led->cdev.brightness_set_blocking = powernv_brightness_set;
powernv_led->cdev.brightness_get = powernv_brightness_get;
+ /*
+ * By default unload path resets all the LEDs. But on PowerNV
+ * platform we want to retain LED state across reboot as these
+ * are controlled by firmware. Also service processor can modify
+ * the LEDs independent of OS. Hence avoid resetting LEDs in
+ * unload path.
+ */
+ powernv_led->cdev.flags = LED_RETAIN_AT_SHUTDOWN;
powernv_led->cdev.brightness = LED_OFF;
powernv_led->cdev.max_brightness = LED_FULL;
@@ -313,9 +308,7 @@ static int powernv_led_remove(struct platform_device *pdev)
{
struct powernv_led_common *powernv_led_common;
- /* Disable LED operation */
powernv_led_common = platform_get_drvdata(pdev);
- powernv_led_common->led_disabled = true;
/* Destroy lock */
mutex_destroy(&powernv_led_common->lock);