From: Denis Benato <denis.benato@linux.dev>
To: linux-kernel@vger.kernel.org,
"Corentin Chary" <corentin.chary@gmail.com>,
"Luke D . Jones" <luke@ljones.dev>,
"Hans de Goede" <hansg@kernel.org>,
"Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
Cc: platform-driver-x86@vger.kernel.org,
Mateusz Schyboll <dragonn@op.pl>,
Denis Benato <benato.denis96@gmail.com>,
Ahmed Yaseen <yaseen@ghoul.dev>
Subject: Re: [PATCH] platform/x86: asus-armoury: fix mini-LED mode get/set on MODE2 devices
Date: Fri, 12 Jun 2026 13:59:22 +0200 [thread overview]
Message-ID: <96f0a98a-3140-4cc1-b6d1-92277fa6e165@linux.dev> (raw)
In-Reply-To: <20260517182957.11069-1-yaseen@ghoul.dev>
This has no business being here. I used *.patch to send and missed this. Apologies!
On 6/12/26 13:56, Denis Benato wrote:
> From: Ahmed Yaseen <yaseen@ghoul.dev>
>
> The mini-LED current_value attribute does not work on devices that use
> ASUS_WMI_DEVID_MINI_LED_MODE2 (2024 and newer models).
>
> Reading is broken: mini_led_mode_current_value_show() fetches the mode
> from the device but then decodes a literal 0 instead of the value it
> just read:
>
> mode = FIELD_GET(ASUS_MINI_LED_MODE_MASK, 0);
>
> So mode is always 0, and the attribute always reports the same thing
> regardless of the real hardware state.
>
> Writing is broken too. The number a user writes is an index; the value
> the firmware actually wants is looked up from that index in
> mini_led_mode_map[]. mini_led_mode_current_value_store() skips that
> lookup and passes the raw index straight to armoury_attr_uint_store().
> On 2024 devices the firmware numbers its modes differently from the
> index, so some writes are rejected with -EINVAL and the rest send the
> wrong mode to the hardware.
>
> Fix both paths: decode the value actually read from the device when
> reading, and look up the firmware value before sending it when
> writing. Older (MODE1) devices were unaffected because there the index
> and the firmware value are the same.
>
> Fixes: f99eb098090e ("platform/x86: asus-armoury: move existing tunings to asus-armoury module")
> Signed-off-by: Ahmed Yaseen <yaseen@ghoul.dev>
> ---
> drivers/platform/x86/asus-armoury.c | 16 ++++++++++++----
> 1 file changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/platform/x86/asus-armoury.c b/drivers/platform/x86/asus-armoury.c
> index 5b0987ccc270..495dc1e31d40 100644
> --- a/drivers/platform/x86/asus-armoury.c
> +++ b/drivers/platform/x86/asus-armoury.c
> @@ -370,7 +370,7 @@ static ssize_t mini_led_mode_current_value_show(struct kobject *kobj,
> if (err)
> return err;
>
> - mode = FIELD_GET(ASUS_MINI_LED_MODE_MASK, 0);
> + mode = FIELD_GET(ASUS_MINI_LED_MODE_MASK, mode);
>
> for (i = 0; i < mini_led_mode_map_size; i++)
> if (mode == mini_led_mode_map[i])
> @@ -386,6 +386,7 @@ static ssize_t mini_led_mode_current_value_store(struct kobject *kobj,
> {
> u32 *mini_led_mode_map;
> size_t mini_led_mode_map_size;
> + char mapped_value[12];
> u32 mode;
> int err;
>
> @@ -414,9 +415,16 @@ static ssize_t mini_led_mode_current_value_store(struct kobject *kobj,
> return -ENODEV;
> }
>
> - return armoury_attr_uint_store(kobj, attr, buf, count,
> - 0, mini_led_mode_map[mode],
> - NULL, asus_armoury.mini_led_dev_id);
> + /*
> + * armoury_attr_uint_store() parses and sends the value from the
> + * passed buffer; hand it the mapped firmware value so the device
> + * receives the translated mode instead of the raw index.
> + */
> + snprintf(mapped_value, sizeof(mapped_value), "%u", mini_led_mode_map[mode]);
> +
> + return armoury_attr_uint_store(kobj, attr, mapped_value, count, 0,
> + mini_led_mode_map[mode], NULL,
> + asus_armoury.mini_led_dev_id);
> }
>
> static ssize_t mini_led_mode_possible_values_show(struct kobject *kobj,
next prev parent reply other threads:[~2026-06-12 11:59 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-12 11:56 [PATCH 0/3] platform/x86: asus-armoury: more ppt data Denis Benato
2026-05-17 18:30 ` [PATCH] platform/x86: asus-armoury: fix mini-LED mode get/set on MODE2 devices Ahmed Yaseen
2026-05-17 22:14 ` Denis Benato
2026-05-19 14:45 ` Ilpo Järvinen
2026-06-12 11:56 ` Denis Benato
2026-06-12 11:59 ` Denis Benato [this message]
2026-06-12 11:56 ` [PATCH 1/3] platform/x86: asus-armoury: add support for GA402NJ Denis Benato
2026-06-12 11:56 ` [PATCH 2/3] platform/x86: asus-armoury: add support for GA403UM Denis Benato
2026-06-12 11:56 ` [PATCH 3/3] platform/x86: asus-armoury: add support for FX608JPR Denis Benato
2026-06-12 12:02 ` Ilpo Järvinen
2026-06-12 12:05 ` 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=96f0a98a-3140-4cc1-b6d1-92277fa6e165@linux.dev \
--to=denis.benato@linux.dev \
--cc=benato.denis96@gmail.com \
--cc=corentin.chary@gmail.com \
--cc=dragonn@op.pl \
--cc=hansg@kernel.org \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luke@ljones.dev \
--cc=platform-driver-x86@vger.kernel.org \
--cc=yaseen@ghoul.dev \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome