40e43d581681eb3880e5e0eb36d9a6f8c9d0aaea
[openwrt/staging/xback.git] /
1 From d33d1214a1ddf9e7e4d14c62637518252927f0be Mon Sep 17 00:00:00 2001
2 From: Lee Jones <lee@kernel.org>
3 Date: Wed, 12 Jun 2024 16:36:40 +0100
4 Subject: [PATCH] leds: core: Omit set_brightness error message for a LED
5 supporting hw trigger only
6
7 If both set_brightness functions return -ENOTSUPP, then the LED doesn't
8 support setting a fixed brightness value, and the error message isn't
9 helpful. This can be the case e.g. for LEDs supporting a specific hw
10 trigger only.
11
12 Pinched the subject line and commit message from Heiner:
13 Link: https://lore.kernel.org/all/44177e37-9512-4044-8991-bb23b184bf37@gmail.com/
14
15 Reworked the function to provide Heiner's required semantics whilst
16 simultaneously increasing readability and flow.
17
18 Cc: Pavel Machek <pavel@ucw.cz>
19 Cc: linux-leds@vger.kernel.org
20 Suggested-by: Heiner Kallweit <hkallweit1@gmail.com>
21 Reviewed-by: Heiner Kallweit <hkallweit1@gmail.com>
22 Signed-off-by: Lee Jones <lee@kernel.org>
23 ---
24 drivers/leds/led-core.c | 19 +++++++++++++------
25 1 file changed, 13 insertions(+), 6 deletions(-)
26
27 --- a/drivers/leds/led-core.c
28 +++ b/drivers/leds/led-core.c
29 @@ -122,15 +122,22 @@ static void led_timer_function(struct ti
30 static void set_brightness_delayed_set_brightness(struct led_classdev *led_cdev,
31 unsigned int value)
32 {
33 - int ret = 0;
34 + int ret;
35
36 ret = __led_set_brightness(led_cdev, value);
37 - if (ret == -ENOTSUPP)
38 + if (ret == -ENOTSUPP) {
39 ret = __led_set_brightness_blocking(led_cdev, value);
40 - if (ret < 0 &&
41 - /* LED HW might have been unplugged, therefore don't warn */
42 - !(ret == -ENODEV && (led_cdev->flags & LED_UNREGISTERING) &&
43 - (led_cdev->flags & LED_HW_PLUGGABLE)))
44 + if (ret == -ENOTSUPP)
45 + /* No back-end support to set a fixed brightness value */
46 + return;
47 + }
48 +
49 + /* LED HW might have been unplugged, therefore don't warn */
50 + if (ret == -ENODEV && led_cdev->flags & LED_UNREGISTERING &&
51 + led_cdev->flags & LED_HW_PLUGGABLE)
52 + return;
53 +
54 + if (ret < 0)
55 dev_err(led_cdev->dev,
56 "Setting an LED's brightness failed (%d)\n", ret);
57 }