From: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
To: Denis Benato <denis.benato@linux.dev>,
Idotoho Reimon Simanjuntak <idotohors@gmail.com>
Cc: platform-driver-x86@vger.kernel.org,
LKML <linux-kernel@vger.kernel.org>,
Hans de Goede <hansg@kernel.org>,
"Luke D . Jones" <luke@ljones.dev>,
Corentin Chary <corentin.chary@gmail.com>
Subject: Re: [PATCH v3 1/3] platform/x86: asus-wmi: use named masks for TUF RGB commands
Date: Wed, 21 Oct 2026 13:15:45 +0300 (EEST) [thread overview]
Message-ID: <2a505332-9b6f-9e30-742b-747c751d2320@linux.intel.com> (raw)
In-Reply-To: <3e0e1a74-b6bf-426c-9248-4debddb15e70@linux.dev>
[-- Attachment #1: Type: text/plain, Size: 5942 bytes --]
On Wed, 2 Sep 2026, Denis Benato wrote:
> On 9/2/26 19:47, Idotoho Reimon Simanjuntak wrote:
> > Replace open-coded bit shifts and magic numbers in kbd_rgb_mode_store()
> > and kbd_rgb_state_store() with FIELD_PREP() and named GENMASK() masks.
> >
> > Define ASUS_WMI_TUF_RGB_STATE_CMD_ID (0xbd) as a named constant instead
> > of an inline literal, making the required arg0 command ID self-documenting.
> >
> > In kbd_rgb_state_store(), remove the unused intermediate "flags" variable
> > entirely. The old BIT(1)/BIT(3)/BIT(5)/BIT(7) construction is replaced by
> > FIELD_PREP with per-flag named masks (TUF_RGB_STATE_BOOT, _AWAKE, _SLEEP,
> > _KEYBOARD), building arg0 directly. This preserves the exact sysfs input
> > format ("cmd boot awake sleep keyboard") and the resulting WMI argument
> > bit layout — no behavioral change.
> >
> > In kbd_rgb_mode_store(), replace the positional shift expressions for
> > arg1 and arg2 with FIELD_PREP using TUF_RGB_MODE_{CMD,MODE,RED,GREEN}
> > and TUF_RGB_MODE_{BLUE,SPEED} masks respectively.
> >
> > This is a preparatory cleanup to improve readability before adding
> > model-specific quirks that depend on these definitions.
> I can see that there is some code that I wrote and Ilpo already
> reviewed: when you use the work of someone you have to include
> his Signed-off-by (that has to be present in the original patch).
>
> I already know that this works because I tried it in my TUF
> when I wrote it:
>
> Reviewed-by: Denis Benato <denis.benato@linux.dev>
Hi,
I cannot knowingly take patches with unclear authorship so please clear
that part first before resubmitting.
> > Signed-off-by: Idotoho Reimon Simanjuntak <idotohors@gmail.com>
> > ---
> > drivers/platform/x86/asus-wmi.c | 48 ++++++++++++++++++++++++++-------
> > 1 file changed, 38 insertions(+), 10 deletions(-)
> >
> > diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
> > index a65090429..efc730c2c 100644
> > --- a/drivers/platform/x86/asus-wmi.c
> > +++ b/drivers/platform/x86/asus-wmi.c
> > @@ -15,6 +15,7 @@
> >
> > #include <linux/acpi.h>
> > #include <linux/backlight.h>
> > +#include <linux/bitfield.h>
> > #include <linux/bits.h>
> > #include <linux/debugfs.h>
> > #include <linux/delay.h>
> > @@ -1047,6 +1048,27 @@ static DEVICE_ATTR_RW(gpu_mux_mode);
> > #endif /* IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS) */
> >
> > /* TUF Laptop Keyboard RGB Modes **********************************************/
> > +
> > +/* Command IDs passed in arg0 byte 0 for TUF RGB WMI methods */
> > +#define ASUS_WMI_TUF_RGB_STATE_CMD_ID 0xbd
> > +
> > +/* Bit mask for the save-to-BIOS command flag in kbd_rgb_state_store (arg0 bit 10) */
> > +#define TUF_RGB_STATE_SAVE GENMASK(10, 10)
That GENMASK() is same as BIT(10), the latter form is preferred.
> > +
> > +/* Bit masks for kbd_rgb_state_store flags field (arg0 bits [23:16]) */
> > +#define TUF_RGB_STATE_BOOT GENMASK(17, 17)
> > +#define TUF_RGB_STATE_AWAKE GENMASK(19, 19)
> > +#define TUF_RGB_STATE_SLEEP GENMASK(21, 21)
> > +#define TUF_RGB_STATE_KEYBOARD GENMASK(23, 23)
These we implemented by another developer in the meantime slightly
differently. Please base the refresh of this series on the code I've in
the review-ilpo-next branch (the changes in review-ilpo-next will
propagate into the for-next branch in a few days if LKP build test okays
it).
> > +
> > +/* Bit masks for kbd_rgb_mode_store fields */
> > +#define TUF_RGB_MODE_CMD GENMASK(7, 0)
> > +#define TUF_RGB_MODE_MODE GENMASK(15, 8)
> > +#define TUF_RGB_MODE_RED GENMASK(23, 16)
> > +#define TUF_RGB_MODE_GREEN GENMASK(31, 24)
> > +#define TUF_RGB_MODE_BLUE GENMASK(7, 0)
> > +#define TUF_RGB_MODE_SPEED GENMASK(15, 8)
These seem still useful even after the changes I've already accepted.
> > static ssize_t kbd_rgb_mode_store(struct device *dev,
> > struct device_attribute *attr,
> > const char *buf, size_t count)
> > @@ -1093,7 +1115,12 @@ static ssize_t kbd_rgb_mode_store(struct device *dev,
> > }
> >
> > err = asus_wmi_evaluate_method3(ASUS_WMI_METHODID_DEVS, asus->kbd_rgb_dev,
> > - cmd | (mode << 8) | (r << 16) | (g << 24), b | (speed << 8), NULL);
> > + FIELD_PREP(TUF_RGB_MODE_CMD, cmd) |
> > + FIELD_PREP(TUF_RGB_MODE_MODE, mode) |
> > + FIELD_PREP(TUF_RGB_MODE_RED, r) |
> > + FIELD_PREP(TUF_RGB_MODE_GREEN, g),
> > + FIELD_PREP(TUF_RGB_MODE_BLUE, b) |
> > + FIELD_PREP(TUF_RGB_MODE_SPEED, speed), NULL);
> > if (err)
> > return err;
> >
> > @@ -1119,28 +1146,29 @@ static ssize_t kbd_rgb_state_store(struct device *dev,
> > struct device_attribute *attr,
> > const char *buf, size_t count)
> > {
> > - u32 flags, cmd, boot, awake, sleep, keyboard;
> > + u32 cmd, boot, awake, sleep, keyboard;
> > + u32 arg0;
> > int err;
> >
> > if (sscanf(buf, "%d %d %d %d %d", &cmd, &boot, &awake, &sleep, &keyboard) != 5)
> > return -EINVAL;
> >
> > + arg0 = ASUS_WMI_TUF_RGB_STATE_CMD_ID;
> > +
> > if (cmd)
> > - cmd = BIT(2);
> > + arg0 |= FIELD_PREP(TUF_RGB_STATE_SAVE, 1);
> >
> > - flags = 0;
> > if (boot)
> > - flags |= BIT(1);
> > + arg0 |= FIELD_PREP(TUF_RGB_STATE_BOOT, 1);
> > if (awake)
> > - flags |= BIT(3);
> > + arg0 |= FIELD_PREP(TUF_RGB_STATE_AWAKE, 1);
> > if (sleep)
> > - flags |= BIT(5);
> > + arg0 |= FIELD_PREP(TUF_RGB_STATE_SLEEP, 1);
> > if (keyboard)
> > - flags |= BIT(7);
> > + arg0 |= FIELD_PREP(TUF_RGB_STATE_KEYBOARD, 1);
> >
> > - /* 0xbd is the required default arg0 for the method. Nothing happens otherwise */
> > err = asus_wmi_evaluate_method3(ASUS_WMI_METHODID_DEVS,
> > - ASUS_WMI_DEVID_TUF_RGB_STATE, 0xbd | cmd << 8 | (flags << 16), 0, NULL);
> > + ASUS_WMI_DEVID_TUF_RGB_STATE, arg0, 0, NULL);
> > if (err)
> > return err;
> >
>
--
i.
next prev parent reply other threads:[~2026-10-21 10:15 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-02 17:47 [PATCH v3 0/3] platform/x86: asus-wmi: fix FA401 series keyboard sleep strobe Idotoho Reimon Simanjuntak
2026-09-02 17:47 ` [PATCH v3 1/3] platform/x86: asus-wmi: use named masks for TUF RGB commands Idotoho Reimon Simanjuntak
2026-09-02 18:44 ` Denis Benato
2026-10-21 10:15 ` Ilpo Järvinen [this message]
2026-09-02 17:47 ` [PATCH v3 2/3] platform/x86: asus-wmi: enable TUF RGB state for FA401 via DMI quirk Idotoho Reimon Simanjuntak
2026-09-02 18:40 ` Denis Benato
2026-09-02 17:47 ` [PATCH v3 3/3] platform/x86: asus-wmi: re-assert FA401 keyboard state before S0ix Idotoho Reimon Simanjuntak
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=2a505332-9b6f-9e30-742b-747c751d2320@linux.intel.com \
--to=ilpo.jarvinen@linux.intel.com \
--cc=corentin.chary@gmail.com \
--cc=denis.benato@linux.dev \
--cc=hansg@kernel.org \
--cc=idotohors@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®