All of lore.kernel.org
 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-06-12 11:56   ` Denis Benato
2026-05-17 22:14   ` Denis Benato
2026-05-19 14:45   ` Ilpo Järvinen
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 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.