From: Alex Bogusta <alex@bogusta.com>
To: "Corentin Chary" <corentin.chary@gmail.com>,
"Luke D. Jones" <luke@ljones.dev>,
"Denis Benato" <denis.benato@linux.dev>,
"Hans de Goede" <hansg@kernel.org>,
"Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>,
"Benjamin Tissoires" <bentiss@kernel.org>,
"Antheas Kapenekakis" <lkml@antheas.dev>
Cc: Alex Bogusta <alex@bogusta.com>,
Denis Benato <benato.denis96@gmail.com>,
platform-driver-x86@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: [PATCH] platform/x86: asus-wmi: Clamp keyboard backlight level from hotkeys
Date: Thu, 15 Oct 2026 21:51:16 -0400 [thread overview]
Message-ID: <20261016015117.32174-1-alex@bogusta.com> (raw)
Pressing the keyboard backlight down key at level 0 drives the cached
level negative, so the backlight then needs one extra up press per
extra down press before it turns back on. brightness_hw_changed also
reports out-of-range values: 4 after pressing up at the maximum level,
and ENODATA or values like 4294967294 below 0.
kbd_led_set_by_kbd() stores the new level without clamping it, and
kbd_led_update_all() skips do_kbd_led_set() for negative levels and
notifies userspace with the unclamped value. The level is computed in
enum led_brightness, which is unsigned, so the subtraction at level 0
wraps around.
Compute the level as int and clamp it in kbd_led_set_by_kbd(), which
covers every hotkey path.
Fixes: fac55d29581f ("platform/x86: asus-wmi: Add support for multiple kbd led handlers")
Signed-off-by: Alex Bogusta <alex@bogusta.com>
---
drivers/platform/x86/asus-wmi.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
index 9fb3fe4b161c..599a73862903 100644
--- a/drivers/platform/x86/asus-wmi.c
+++ b/drivers/platform/x86/asus-wmi.c
@@ -1949,10 +1949,10 @@ static int kbd_led_set(struct led_classdev *led_cdev, enum led_brightness value)
return 0;
}
-static void kbd_led_set_by_kbd(struct asus_wmi *asus, enum led_brightness value)
+static void kbd_led_set_by_kbd(struct asus_wmi *asus, int value)
{
scoped_guard(spinlock_irqsave, &asus_ref.lock) {
- asus->kbd_led_wk = value;
+ asus->kbd_led_wk = clamp_val(value, 0, ASUS_EV_MAX_BRIGHTNESS);
asus->kbd_led_notify = true;
}
queue_work(asus->led_workqueue, &asus->kbd_led_work);
@@ -4668,9 +4668,9 @@ static int asus_wmi_get_event_code(union acpi_object *obj)
static void asus_wmi_handle_event_code(int code, struct asus_wmi *asus)
{
- enum led_brightness led_value;
unsigned int key_value = 1;
bool autorelease = 1;
+ int led_value;
if (asus->driver->key_filter) {
asus->driver->key_filter(asus->driver, &code, &key_value,
base-commit: 98f039265e580291d5e76a11b2072541fbb1c393
--
2.56.0
next reply other threads:[~2026-10-16 1:51 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-16 1:51 Alex Bogusta [this message]
2026-10-19 21:51 ` [PATCH] platform/x86: asus-wmi: Clamp keyboard backlight level from hotkeys Denis Benato
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261016015117.32174-1-alex@bogusta.com \
--to=alex@bogusta.com \
--cc=benato.denis96@gmail.com \
--cc=bentiss@kernel.org \
--cc=corentin.chary@gmail.com \
--cc=denis.benato@linux.dev \
--cc=hansg@kernel.org \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lkml@antheas.dev \
--cc=luke@ljones.dev \
--cc=platform-driver-x86@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.