summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEddie James <eajames@linux.ibm.com>2021-09-17 00:21:35 +0300
committerJoel Stanley <joel@jms.id.au>2021-09-22 05:33:37 +0300
commitbe3d424ea173fa908520ab86a500077be49f4005 (patch)
tree3accfeb913a73adff10af7ed36c404a34816e19f
parenta71f0265b886460ddba1675c39608fc75e0e76df (diff)
downloadlinux-be3d424ea173fa908520ab86a500077be49f4005.tar.xz
leds: leds-core: Implement the retain-state-shutdown property
Read the retain-state-shutdown device tree property to set the existing LED_RETAIN_AT_SHUTDOWN flag. Then check the flag when unregistering, and if set, don't set the brightness to OFF. This is useful for systems that want to keep the HW state of the LED across reboots. OpenBMC-Staging-Count: 1 Signed-off-by: Eddie James <eajames@linux.ibm.com> Signed-off-by: Pavel Machek <pavel@ucw.cz> Link: https://lore.kernel.org/r/20210916212140.33915-3-eajames@linux.ibm.com Signed-off-by: Joel Stanley <joel@jms.id.au>
-rw-r--r--drivers/leds/led-class.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
index 4365c1cc4505..bc66f1035d06 100644
--- a/drivers/leds/led-class.c
+++ b/drivers/leds/led-class.c
@@ -351,10 +351,15 @@ int led_classdev_register_ext(struct device *parent,
if (ret < 0)
return ret;
- if (init_data->fwnode)
+ if (init_data->fwnode) {
fwnode_property_read_string(init_data->fwnode,
"linux,default-trigger",
&led_cdev->default_trigger);
+
+ if (fwnode_property_present(init_data->fwnode,
+ "retain-state-shutdown"))
+ led_cdev->flags |= LED_RETAIN_AT_SHUTDOWN;
+ }
} else {
proposed_name = led_cdev->name;
}
@@ -445,7 +450,8 @@ void led_classdev_unregister(struct led_classdev *led_cdev)
/* Stop blinking */
led_stop_software_blink(led_cdev);
- led_set_brightness(led_cdev, LED_OFF);
+ if (!(led_cdev->flags & LED_RETAIN_AT_SHUTDOWN))
+ led_set_brightness(led_cdev, LED_OFF);
flush_work(&led_cdev->set_brightness_work);