Skip to content

Commit

Permalink
HID: wacom: Initialize brightness of LED trigger
Browse files Browse the repository at this point in the history
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>
[jason.gerecke@wacom.com: Imported into input-wacom (88006b8eca63)]
Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com>
  • Loading branch information
jigpu committed Dec 10, 2024
1 parent 1b96441 commit 1773016
Showing 1 changed file with 13 additions and 11 deletions.
24 changes: 13 additions & 11 deletions 4.18/wacom_sys.c
Original file line number Diff line number Diff line change
Expand Up @@ -1392,17 +1392,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;
Expand All @@ -1419,6 +1408,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,
Expand Down

0 comments on commit 1773016

Please sign in to comment.