From: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
To: Antheas Kapenekakis <lkml@antheas.dev>
Cc: platform-driver-x86@vger.kernel.org, linux-input@vger.kernel.org,
LKML <linux-kernel@vger.kernel.org>,
Jiri Kosina <jikos@kernel.org>,
Benjamin Tissoires <bentiss@kernel.org>,
Corentin Chary <corentin.chary@gmail.com>,
"Luke D . Jones" <luke@ljones.dev>,
Hans de Goede <hdegoede@redhat.com>
Subject: Re: [PATCH v4 07/11] platform/x86: asus-wmi: add keyboard brightness event handler
Date: Tue, 25 Mar 2025 18:44:16 +0200 (EET) [thread overview]
Message-ID: <cc762cec-c5a3-2bf4-c877-469d1a9e6c8f@linux.intel.com> (raw)
In-Reply-To: <20250324210151.6042-8-lkml@antheas.dev>
On Mon, 24 Mar 2025, Antheas Kapenekakis wrote:
> Currenlty, the keyboard brightness control of Asus WMI keyboards is
> handled in the kernel, which leads to the shortcut going from
> brightness 0, to 1, to 2, and 3.
>
> However, for HID keyboards it is exposed as a key and handled by the
> user's desktop environment. For the toggle button, this means that
> brightness control becomes on/off. In addition, in the absence of a
> DE, the keyboard brightness does not work.
>
> Therefore, expose an event handler for the keyboard brightness control
> which can then be used by hid-asus.
>
> Reviewed-by: Luke D. Jones <luke@ljones.dev>
> Tested-by: Luke D. Jones <luke@ljones.dev>
> Signed-off-by: Antheas Kapenekakis <lkml@antheas.dev>
> ---
> drivers/platform/x86/asus-wmi.c | 39 ++++++++++++++++++++++
> include/linux/platform_data/x86/asus-wmi.h | 11 ++++++
> 2 files changed, 50 insertions(+)
>
> diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
> index ff1d7ccb3982f..27468d67dba09 100644
> --- a/drivers/platform/x86/asus-wmi.c
> +++ b/drivers/platform/x86/asus-wmi.c
> @@ -1536,6 +1536,45 @@ void asus_hid_unregister_listener(struct asus_hid_listener *bdev)
> }
> EXPORT_SYMBOL_GPL(asus_hid_unregister_listener);
>
> +static void do_kbd_led_set(struct led_classdev *led_cdev, int value);
> +
> +int asus_hid_event(enum asus_hid_event event)
> +{
> + unsigned long flags;
> + int brightness;
> +
> + spin_lock_irqsave(&asus_ref.lock, flags);
> + if (!asus_ref.asus || !asus_ref.asus->kbd_led_registered) {
> + spin_unlock_irqrestore(&asus_ref.lock, flags);
> + return -EBUSY;
> + }
> + brightness = asus_ref.asus->kbd_led_wk;
> +
> + switch (event) {
> + case ASUS_EV_BRTUP:
> + brightness += 1;
> + break;
> + case ASUS_EV_BRTDOWN:
> + brightness -= 1;
> + break;
> + case ASUS_EV_BRTTOGGLE:
> + if (brightness >= 3)
Add ASUS_EV_MAX_BRIGHTNESS instead of a literal?
> + brightness = 0;
> + else
> + brightness += 1;
> + break;
> + }
> +
> + do_kbd_led_set(&asus_ref.asus->kbd_led, brightness);
> + led_classdev_notify_brightness_hw_changed(&asus_ref.asus->kbd_led,
> + asus_ref.asus->kbd_led_wk);
> +
> + spin_unlock_irqrestore(&asus_ref.lock, flags);
> +
> + return 0;
> +}
> +EXPORT_SYMBOL_GPL(asus_hid_event);
> +
> /*
> * These functions actually update the LED's, and are called from a
> * workqueue. By doing this as separate work rather than when the LED
> diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h
> index c513b5a732323..9adbe8abef090 100644
> --- a/include/linux/platform_data/x86/asus-wmi.h
> +++ b/include/linux/platform_data/x86/asus-wmi.h
> @@ -162,11 +162,18 @@ struct asus_hid_listener {
> void (*brightness_set)(struct asus_hid_listener *listener, int brightness);
> };
>
> +enum asus_hid_event {
> + ASUS_EV_BRTUP,
> + ASUS_EV_BRTDOWN,
> + ASUS_EV_BRTTOGGLE,
> +};
> +
> #if IS_REACHABLE(CONFIG_ASUS_WMI)
> int asus_wmi_evaluate_method(u32 method_id, u32 arg0, u32 arg1, u32 *retval);
>
> int asus_hid_register_listener(struct asus_hid_listener *cdev);
> void asus_hid_unregister_listener(struct asus_hid_listener *cdev);
> +int asus_hid_event(enum asus_hid_event event);
> #else
> static inline int asus_wmi_evaluate_method(u32 method_id, u32 arg0, u32 arg1,
> u32 *retval)
> @@ -181,6 +188,10 @@ static inline int asus_hid_register_listener(struct asus_hid_listener *bdev)
> static inline void asus_hid_unregister_listener(struct asus_hid_listener *bdev)
> {
> }
> +static inline int asus_hid_event(enum asus_hid_event event)
> +{
> + return -ENODEV;
> +}
> #endif
>
> #endif /* __PLATFORM_DATA_X86_ASUS_WMI_H */
>
--
i.
next prev parent reply other threads:[~2025-03-25 16:44 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-24 21:01 [PATCH v4 00/11] HID: asus: Add RGB Support to Asus Z13, Ally, unify backlight asus-wmi, and Z13 QOL Antheas Kapenekakis
2025-03-24 21:01 ` [PATCH v4 01/11] HID: asus: refactor init sequence per spec Antheas Kapenekakis
2025-03-25 16:27 ` Ilpo Järvinen
2025-03-24 21:01 ` [PATCH v4 02/11] HID: asus: prevent binding to all HID devices on ROG Antheas Kapenekakis
2025-03-25 16:24 ` Ilpo Järvinen
2025-03-24 21:01 ` [PATCH v4 03/11] HID: Asus: add Z13 folio to generic group for multitouch to work Antheas Kapenekakis
2025-03-24 21:01 ` [PATCH v4 04/11] platform/x86: asus-wmi: Add support for multiple kbd RGB handlers Antheas Kapenekakis
2025-03-24 21:01 ` [PATCH v4 05/11] HID: asus: listen to the asus-wmi brightness device instead of creating one Antheas Kapenekakis
2025-03-25 16:42 ` Ilpo Järvinen
2025-03-24 21:01 ` [PATCH v4 06/11] platform/x86: asus-wmi: remove unused keyboard backlight quirk Antheas Kapenekakis
2025-03-24 21:01 ` [PATCH v4 07/11] platform/x86: asus-wmi: add keyboard brightness event handler Antheas Kapenekakis
2025-03-25 16:44 ` Ilpo Järvinen [this message]
2025-03-24 21:01 ` [PATCH v4 08/11] HID: asus: add support for the asus-wmi brightness handler Antheas Kapenekakis
2025-03-24 21:01 ` [PATCH v4 09/11] HID: asus: add basic RGB support Antheas Kapenekakis
2025-03-25 6:32 ` kernel test robot
2025-03-25 6:32 ` kernel test robot
2025-03-25 8:52 ` Antheas Kapenekakis
2025-03-25 12:11 ` Jiri Kosina
2025-03-25 17:02 ` Ilpo Järvinen
2025-03-24 21:01 ` [PATCH v4 10/11] HID: asus: add RGB support to the ROG Ally units Antheas Kapenekakis
2025-03-24 21:01 ` [PATCH v4 11/11] HID: asus: initialize LED endpoint early for old NKEY keyboards Antheas Kapenekakis
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=cc762cec-c5a3-2bf4-c877-469d1a9e6c8f@linux.intel.com \
--to=ilpo.jarvinen@linux.intel.com \
--cc=bentiss@kernel.org \
--cc=corentin.chary@gmail.com \
--cc=hdegoede@redhat.com \
--cc=jikos@kernel.org \
--cc=linux-input@vger.kernel.org \
--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.