]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
leds: core: Omit set_brightness error message for a LED supporting hw trigger only
authorLee Jones <lee@kernel.org>
Wed, 12 Jun 2024 15:36:40 +0000 (16:36 +0100)
committerLee Jones <lee@kernel.org>
Wed, 26 Jun 2024 15:55:44 +0000 (16:55 +0100)
If both set_brightness functions return -ENOTSUPP, then the LED doesn't
support setting a fixed brightness value, and the error message isn't
helpful. This can be the case e.g. for LEDs supporting a specific hw
trigger only.

Pinched the subject line and commit message from Heiner:
Link: https://lore.kernel.org/all/44177e37-9512-4044-8991-bb23b184bf37@gmail.com/
Reworked the function to provide Heiner's required semantics whilst
simultaneously increasing readability and flow.

Cc: Pavel Machek <pavel@ucw.cz>
Cc: linux-leds@vger.kernel.org
Suggested-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Lee Jones <lee@kernel.org>
drivers/leds/led-core.c

index 6940da35f99b1060ad1b44c3ab157f205a781ff6..001c290bc07b7d10fb6b2bb1c3abbeb23380e2a5 100644 (file)
@@ -122,15 +122,22 @@ static void led_timer_function(struct timer_list *t)
 static void set_brightness_delayed_set_brightness(struct led_classdev *led_cdev,
                                                  unsigned int value)
 {
-       int ret = 0;
+       int ret;
 
        ret = __led_set_brightness(led_cdev, value);
-       if (ret == -ENOTSUPP)
+       if (ret == -ENOTSUPP) {
                ret = __led_set_brightness_blocking(led_cdev, value);
-       if (ret < 0 &&
-           /* LED HW might have been unplugged, therefore don't warn */
-           !(ret == -ENODEV && (led_cdev->flags & LED_UNREGISTERING) &&
-           (led_cdev->flags & LED_HW_PLUGGABLE)))
+               if (ret == -ENOTSUPP)
+                       /* No back-end support to set a fixed brightness value */
+                       return;
+       }
+
+       /* LED HW might have been unplugged, therefore don't warn */
+       if (ret == -ENODEV && led_cdev->flags & LED_UNREGISTERING &&
+           led_cdev->flags & LED_HW_PLUGGABLE)
+               return;
+
+       if (ret < 0)
                dev_err(led_cdev->dev,
                        "Setting an LED's brightness failed (%d)\n", ret);
 }