mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 02:17:36 -04:00
leds: core: Report ENODATA for brightness of hardware controlled LED
While the LED is controlled fully by the hardware, the value cached by the LED driver core is incorrect. Return ENODATA to userspace in this case. Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Link: https://patch.msgid.link/20260521-cros_ec-leds-hw-trigger-brightness-v1-1-6cd9d7c9671e@weissschuh.net Signed-off-by: Lee Jones <lee@kernel.org>
This commit is contained in:
committed by
Lee Jones
parent
8f040b5c5e
commit
b819dc7d8f
@@ -27,12 +27,25 @@ static LIST_HEAD(leds_lookup_list);
|
||||
|
||||
static struct workqueue_struct *leds_wq;
|
||||
|
||||
static bool led_trigger_is_hw_controlled(struct led_classdev *led_cdev)
|
||||
{
|
||||
#ifdef CONFIG_LEDS_TRIGGERS
|
||||
guard(rwsem_read)(&led_cdev->trigger_lock);
|
||||
return led_cdev->trigger && led_cdev->trigger->trigger_type;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
static ssize_t brightness_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct led_classdev *led_cdev = dev_get_drvdata(dev);
|
||||
unsigned int brightness;
|
||||
|
||||
if (led_trigger_is_hw_controlled(led_cdev))
|
||||
return -ENODATA;
|
||||
|
||||
mutex_lock(&led_cdev->led_access);
|
||||
led_update_brightness(led_cdev);
|
||||
brightness = led_cdev->brightness;
|
||||
|
||||
Reference in New Issue
Block a user