Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

HID: wacom: Initialize brightness of LED trigger

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>

authored by

Jason Gerecke and committed by
Jiri Kosina
88006b8e 8d355b56

+13 -11
+13 -11
drivers/hid/wacom_sys.c
··· 1370 1370 if (!name) 1371 1371 return -ENOMEM; 1372 1372 1373 - if (!read_only) { 1374 - led->trigger.name = name; 1375 - error = devm_led_trigger_register(dev, &led->trigger); 1376 - if (error) { 1377 - hid_err(wacom->hdev, 1378 - "failed to register LED trigger %s: %d\n", 1379 - led->cdev.name, error); 1380 - return error; 1381 - } 1382 - } 1383 - 1384 1373 led->group = group; 1385 1374 led->id = id; 1386 1375 led->wacom = wacom; ··· 1384 1395 led->cdev.default_trigger = led->cdev.name; 1385 1396 } else { 1386 1397 led->cdev.brightness_set = wacom_led_readonly_brightness_set; 1398 + } 1399 + 1400 + if (!read_only) { 1401 + led->trigger.name = name; 1402 + if (id == wacom->led.groups[group].select) 1403 + led->trigger.brightness = wacom_leds_brightness_get(led); 1404 + error = devm_led_trigger_register(dev, &led->trigger); 1405 + if (error) { 1406 + hid_err(wacom->hdev, 1407 + "failed to register LED trigger %s: %d\n", 1408 + led->cdev.name, error); 1409 + return error; 1410 + } 1387 1411 } 1388 1412 1389 1413 error = devm_led_classdev_register(dev, &led->cdev);