mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
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,

  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