Re: [PATCH v3 1/2] platform/x86: uniwill-laptop: Fix brightness notify for 3 level keyboards

From: Armin Wolf

Date: Fri Sep 11 2026 - 17:02:13 EST


Am 26.08.26 um 23:37 schrieb Armin Wolf:

Am 22.08.26 um 02:28 schrieb Werner Sembach:

The devices with 3 brightness level keyboards send
UNIWILL_OSD_KB_LED_LEVEL0, UNIWILL_OSD_KB_LED_LEVEL2, and
UNIWILL_OSD_KB_LED_LEVEL4 and not UNIWILL_OSD_KB_LED_LEVEL0,
UNIWILL_OSD_KB_LED_LEVEL1, and UNIWILL_OSD_KB_LED_LEVEL2.

This patch maps the events correctly to brightness levels 0, 1, and 2.

Reviewed-by: Armin Wolf <W_Armin@xxxxxx>

What is the status of this series?

Thanks,
Armin Wolf

Signed-off-by: Werner Sembach <wse@xxxxxxxxxxxxxxxxxxx>
---
V1->V2: Use the events as source of truth for brightness_hw_changed value
         again to avoid a race condition as Armin had pointed out.
V2->V3: Return error for unexpected brightness level count.

  drivers/platform/x86/uniwill/uniwill-acpi.c | 26 +++++++++++++++++++++
  1 file changed, 26 insertions(+)

diff --git a/drivers/platform/x86/uniwill/uniwill-acpi.c b/drivers/platform/x86/uniwill/uniwill-acpi.c
index 7a2eeaec4c961..5df3611919ce3 100644
--- a/drivers/platform/x86/uniwill/uniwill-acpi.c
+++ b/drivers/platform/x86/uniwill/uniwill-acpi.c
@@ -1631,6 +1631,32 @@ static int uniwill_notify_kbd_led(struct uniwill_data *data, int brightness)
      struct led_classdev *led_cdev;
      int ret;
  +    /*
+     * The devices with 3 brightness level keyboards send
+     * UNIWILL_OSD_KB_LED_LEVEL0, UNIWILL_OSD_KB_LED_LEVEL2, and
+     * UNIWILL_OSD_KB_LED_LEVEL4 which need to be mapped to 0, 1, and 2.
+     */
+    switch (data->kbd_led_max_brightness) {
+    case 4:
+        break;
+    case 2:
+        switch (brightness) {
+        case 0:
+            break;
+        case 2:
+            brightness = 1;
+            break;
+        case 4:
+            brightness = 2;
+            break;
+        default:
+            return -EINVAL;
+        }
+        break;
+    default:
+        return -EINVAL;
+    }
+
      if (data->kbd_led_single_color)
          led_cdev = &data->kbd_led_cdev;
      else

base-commit: 54745d563114b74f6fecebce68cd020d06c1772b