diff mbox series

HID: wacom: Initialize brightness of LED trigger

Message ID 20241209184029.15101-1-jason.gerecke@wacom.com (mailing list archive)
State New
Delegated to: Jiri Kosina
Headers show
Series HID: wacom: Initialize brightness of LED trigger | expand

Commit Message

Gerecke, Jason Dec. 9, 2024, 6:40 p.m. UTC
From: Jason Gerecke <jason.gerecke@wacom.com>

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>
---
 drivers/hid/wacom_sys.c | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

Comments

Jiri Kosina Dec. 10, 2024, 11:42 a.m. UTC | #1
On Mon, 9 Dec 2024, Gerecke, Jason wrote:

> From: Jason Gerecke <jason.gerecke@wacom.com>
> 
> 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>

Applied, thanks.
diff mbox series

Patch

diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c
index 2bc45b24075c3..e60ca39ac7adc 100644
--- a/drivers/hid/wacom_sys.c
+++ b/drivers/hid/wacom_sys.c
@@ -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,