]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
HID: wacom: Initialize brightness of LED trigger
authorJason Gerecke <jason.gerecke@wacom.com>
Mon, 9 Dec 2024 18:40:29 +0000 (10:40 -0800)
committerJiri Kosina <jkosina@suse.com>
Tue, 10 Dec 2024 11:41:52 +0000 (12:41 +0100)
If an LED has a default_trigger set prior to being registered with
the subsystem, that trigger will be executed with a brightness value
defined by `trigger->brightness`. Our driver was not setting this
value, which was causing problems. It would cause the selected LED
to be turned off, as well as corrupt the hlv/llv values assigned to
other LEDs (since calling `wacom_led_brightness_set` will overite
these values).

This patch sets the value of `trigger->brightness` to an appropriate
value. We use `wacom_leds_brightness_get` to transform the llv/hlv
values into a brightness that is understood by the rest of the LED
subsystem.

Fixes: 822c91e72eac ("leds: trigger: Store brightness set by led_trigger_event()")
Cc: stable@vger.kernel.org # v6.10+
Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
drivers/hid/wacom_sys.c

index 9843b52bd017a02a0dfdac4f5b7e2e29062b26e3..34428349fa3118eeb6930954e57fad0eef5f5e5c 100644 (file)
@@ -1370,17 +1370,6 @@ static int wacom_led_register_one(struct device *dev, struct wacom *wacom,
        if (!name)
                return -ENOMEM;
 
-       if (!read_only) {
-               led->trigger.name = name;
-               error = devm_led_trigger_register(dev, &led->trigger);
-               if (error) {
-                       hid_err(wacom->hdev,
-                               "failed to register LED trigger %s: %d\n",
-                               led->cdev.name, error);
-                       return error;
-               }
-       }
-
        led->group = group;
        led->id = id;
        led->wacom = wacom;
@@ -1397,6 +1386,19 @@ static int wacom_led_register_one(struct device *dev, struct wacom *wacom,
                led->cdev.brightness_set = wacom_led_readonly_brightness_set;
        }
 
+       if (!read_only) {
+               led->trigger.name = name;
+               if (id == wacom->led.groups[group].select)
+                       led->trigger.brightness = wacom_leds_brightness_get(led);
+               error = devm_led_trigger_register(dev, &led->trigger);
+               if (error) {
+                       hid_err(wacom->hdev,
+                               "failed to register LED trigger %s: %d\n",
+                               led->cdev.name, error);
+                       return error;
+               }
+       }
+
        error = devm_led_classdev_register(dev, &led->cdev);
        if (error) {
                hid_err(wacom->hdev,