From: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
To: Denis Benato <denis.benato@linux.dev>
Cc: LKML <linux-kernel@vger.kernel.org>,
platform-driver-x86@vger.kernel.org, linux-input@vger.kernel.org,
kernel@lists.opengamingcollective.org,
"Benjamin Tissoires" <bentiss@kernel.org>,
"Jiri Kosina" <jikos@kernel.org>,
"Luke D . Jones" <luke@ljones.dev>,
"Mateusz Schwartz" <matthew.schwartz@linux.dev>,
"Denis Benato" <benato.denis96@gmail.com>,
"Jonathan LoBue" <jlobue10@gmail.com>,
"Khamunetri Clark" <khamunetriclark@gmail.com>,
"Derek J. Clark" <derekjohn.clark@gmail.com>,
"Joshua Leivenzon" <hacker1024@users.sourceforge.net>,
"Nathan Chancellor" <nathan@kernel.org>,
"Rebecca Mara Müller" <rebecca.mara@posteo.de>,
"Ivan Levchenko" <me@livan.pro>,
"Corentin Chary" <corentin.chary@gmail.com>,
"Hans de Goede" <hansg@kernel.org>
Subject: Re: [PATCH v11 11/18] HID: asus: add support for btn remapping
Date: Fri, 30 Oct 2026 17:57:15 +0200 (EET) [thread overview]
Message-ID: <46c0df09-9a3c-62f5-322e-6fea93b9c3da@linux.intel.com> (raw)
In-Reply-To: <7adf0345-14a9-4dac-ad1d-863a7ae4b6e5@linux.dev>
[-- Attachment #1: Type: text/plain, Size: 12158 bytes --]
On Fri, 30 Oct 2026, Denis Benato wrote:
>
> On 10/26/26 15:03, Ilpo Järvinen wrote:
> > On Sun, 25 Oct 2026, Denis Benato wrote:
> >
> >> Add support for buttons remapping: the ability to assign different
> >> button events to each one of the physical button on the device.
> >>
> >> Each button exposes a remap_index sysfs attribute listing the valid
> >> remap target names for the current gamepad mode: M1 and M2 can be
> >> remapped to anything at any time, while other buttons may only be
> >> remapped to gamepad codes in gamepad mode and keyboard/mouse/media
> >> codes in desktop mode.
> >>
> >> When the gamepad mode is changed the firmware automatically restores
> >> its internal defaults, so the software cache is refreshed to reflect
> >> the hardware state.
> >>
> >> Signed-off-by: Luke Jones <luke@ljones.dev>
> >> Signed-off-by: Denis Benato <denis.benato@linux.dev>
> >> Signed-off-by: Jonathan LoBue <jlobue10@gmail.com>
> >> ---
> >> drivers/hid/hid-asus.c | 1059 +++++++++++++++++++++++++++++++++++++++-
> >> 1 file changed, 1037 insertions(+), 22 deletions(-)
> >>
> >> diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c
> >> index ed95b2cdec81..ea27495c3df6 100644
> >> --- a/drivers/hid/hid-asus.c
> >> +++ b/drivers/hid/hid-asus.c
> >> @@ -275,9 +275,25 @@ struct ally_turbo_config {
> >> struct ally_btn_turbo_params btn_m1;
> >> };
> >>
> >> +/* Button remap attribute structure */
> >> +struct button_remap_attr {
> >> + struct device_attribute dev_attr;
> >> + enum ally_button_id button_id;
> >> + bool is_macro;
> >> + /*
> >> + * The attributes are created while hid_asus_ally_probe() is still
> >> + * running, before asus_probe() publishes drvdata->rog_ally: carry
> >> + * the pointer like the turbo entries do, so the callbacks work
> >> + * from the moment the files exist.
> >> + */
> >> + struct ally_handheld *ally;
> >> +};
> >> +
> >> +#define to_button_remap_attr(x) container_of(x, struct button_remap_attr, dev_attr)
> >> +
> >> struct ally_btn_sysfs_entry {
> >> struct attribute_group group;
> >> - struct attribute *attrs[5]; /* turbo_period + toggle_period + ranges + NULL */
> >> + struct attribute *attrs[8]; /* turbo + ranges + remap + macro + remap_index + NULL */
> >> /*
> >> * The entries are created while hid_asus_ally_probe() is still running,
> >> * before asus_probe() publishes drvdata->rog_ally: carrying the shared
> >> @@ -289,6 +305,9 @@ struct ally_btn_sysfs_entry {
> >> enum ally_button_id btn;
> >> struct device_attribute attr_turbo_period;
> >> struct device_attribute attr_toggle_period;
> >> + struct button_remap_attr *remap_attr;
> >> + struct button_remap_attr *macro_attr;
> >> + struct device_attribute attr_remap_index;
> >> };
> >>
> >> enum ally_gamepad_mode_index {
> >> @@ -296,6 +315,35 @@ enum ally_gamepad_mode_index {
> >> ALLY_GAMEPAD_MODE_KEYBOARD = 0x02,
> >> };
> >>
> >> +/* Button pair indexes for mapping commands */
> >> +enum btn_pair_index {
> >> + BTN_PAIR_DPAD_UPDOWN = 0x01,
> >> + BTN_PAIR_DPAD_LEFTRIGHT = 0x02,
> >> + BTN_PAIR_STICK_LR = 0x03,
> >> + BTN_PAIR_BUMPER_LR = 0x04,
> >> + BTN_PAIR_AB = 0x05,
> >> + BTN_PAIR_XY = 0x06,
> >> + BTN_PAIR_VIEW_MENU = 0x07,
> >> + BTN_PAIR_M1M2 = 0x08,
> >> + BTN_PAIR_TRIGGER_LR = 0x09,
> >> +};
> >> +
> >> +struct button_map {
> >> + const struct btn_code_map *remap;
> >> + const struct btn_code_map *macro;
> >> +};
> >> +
> >> +struct button_pair_map {
> >> + enum btn_pair_index pair_index;
> >> + struct button_map first;
> >> + struct button_map second;
> >> +};
> >> +
> >> +/* Store button mapping per gamepad mode */
> >> +struct ally_button_mapping {
> >> + struct button_pair_map button_pairs[9]; /* 9 button pairs */
> >> +};
> >> +
> >> struct ally_config {
> >> /* Must be locked if the data is being changed */
> >> struct mutex config_mutex;
> >> @@ -331,6 +379,8 @@ struct ally_config {
> >>
> >> struct ally_turbo_config turbo;
> >> struct ally_btn_sysfs_entry *button_entries;
> >> + /* Button mappings of the current gamepad mode */
> >> + struct ally_button_mapping button_mappings;
> >>
> >> struct ally_joystick_resp_curve left_curve;
> >> struct ally_joystick_resp_curve right_curve;
> >> @@ -1072,6 +1122,295 @@ static int ally_set_gamepad_mode(struct ally_handheld *ally, struct hid_device *
> >> return 0;
> >> }
> >>
> >> +enum btn_map_type {
> >> + BTN_TYPE_NONE = 0,
> >> + BTN_TYPE_PAD = 0x01,
> >> + BTN_TYPE_KB = 0x02,
> >> + BTN_TYPE_MOUSE = 0x03,
> >> + BTN_TYPE_MEDIA = 0x05,
> >> +};
> >> +
> >> +struct btn_code_map {
> >> + unsigned char type;
> >> + unsigned char value;
> >> + const char *name;
> >> +};
> >> +
> >> +static const struct btn_code_map ally_btn_codes[] = {
> >> + { BTN_TYPE_NONE, 0x00, "NONE" },
> >> + /* Gamepad button codes */
> >> + { BTN_TYPE_PAD, 0x01, "BTN_SOUTH" },
> >> + { BTN_TYPE_PAD, 0x02, "BTN_EAST" },
> >> + { BTN_TYPE_PAD, 0x03, "BTN_NORTH" },
> >> + { BTN_TYPE_PAD, 0x04, "BTN_WEST" },
> >> + { BTN_TYPE_PAD, 0x05, "BTN_TL" },
> >> + { BTN_TYPE_PAD, 0x06, "BTN_TR" },
> >> + { BTN_TYPE_PAD, 0x07, "BTN_THUMBL" },
> >> + { BTN_TYPE_PAD, 0x08, "BTN_THUMBR" },
> >> + { BTN_TYPE_PAD, 0x09, "ABS_HAT0Y_NEG" },
> >> + { BTN_TYPE_PAD, 0x0A, "ABS_HAT0Y_POS" },
> >> + { BTN_TYPE_PAD, 0x0B, "ABS_HAT0X_NEG" },
> >> + { BTN_TYPE_PAD, 0x0C, "ABS_HAT0X_POS" },
> >> + { BTN_TYPE_PAD, 0x0D, "ABS_Z" },
> >> + { BTN_TYPE_PAD, 0x0E, "ABS_RZ" },
> >> + { BTN_TYPE_PAD, 0x11, "BTN_SELECT" },
> >> + { BTN_TYPE_PAD, 0x12, "BTN_START" },
> >> + { BTN_TYPE_PAD, 0x13, "BTN_MODE" },
> >> +
> >> + /* Keyboard button codes */
> >> + { BTN_TYPE_KB, 0x8E, "FN_M2" },
> >> + { BTN_TYPE_KB, 0x8F, "FN_M1" },
> >> + { BTN_TYPE_KB, 0x76, "KEY_ESC" },
> >> + { BTN_TYPE_KB, 0x05, "KEY_F1" },
> >> + { BTN_TYPE_KB, 0x06, "KEY_F2" },
> >> + { BTN_TYPE_KB, 0x04, "KEY_F3" },
> >> + { BTN_TYPE_KB, 0x0C, "KEY_F4" },
> >> + { BTN_TYPE_KB, 0x03, "KEY_F5" },
> >> + { BTN_TYPE_KB, 0x0B, "KEY_F6" },
> >> + { BTN_TYPE_KB, 0x80, "KEY_F7" },
> >> + { BTN_TYPE_KB, 0x0A, "KEY_F8" },
> >> + { BTN_TYPE_KB, 0x01, "KEY_F9" },
> >> + { BTN_TYPE_KB, 0x09, "KEY_F10" },
> >> + { BTN_TYPE_KB, 0x78, "KEY_F11" },
> >> + { BTN_TYPE_KB, 0x07, "KEY_F12" },
> >> + { BTN_TYPE_KB, 0x08, "KEY_F13" },
> >> + { BTN_TYPE_KB, 0x10, "KEY_F14" },
> >> + { BTN_TYPE_KB, 0x18, "KEY_F15" },
> >> + { BTN_TYPE_KB, 0x0E, "KEY_GRAVE" }, // backtick
> >> + { BTN_TYPE_KB, 0x16, "KEY_1" },
> >> + { BTN_TYPE_KB, 0x1E, "KEY_2" },
> >> + { BTN_TYPE_KB, 0x26, "KEY_3" },
> >> + { BTN_TYPE_KB, 0x25, "KEY_4" },
> >> + { BTN_TYPE_KB, 0x2E, "KEY_5" },
> >> + { BTN_TYPE_KB, 0x36, "KEY_6" },
> >> + { BTN_TYPE_KB, 0x3D, "KEY_7" },
> >> + { BTN_TYPE_KB, 0x3E, "KEY_8" },
> >> + { BTN_TYPE_KB, 0x46, "KEY_9" },
> >> + { BTN_TYPE_KB, 0x45, "KEY_0" },
> >> + { BTN_TYPE_KB, 0x4E, "KEY_MINUS" }, // hyphen
> >> + { BTN_TYPE_KB, 0x55, "KEY_EQUAL" },
> >> + { BTN_TYPE_KB, 0x66, "KEY_BACKSPACE" },
> >> + { BTN_TYPE_KB, 0x0D, "KEY_TAB" },
> >> + { BTN_TYPE_KB, 0x15, "KEY_Q" },
> >> + { BTN_TYPE_KB, 0x1D, "KEY_W" },
> >> + { BTN_TYPE_KB, 0x24, "KEY_E" },
> >> + { BTN_TYPE_KB, 0x2D, "KEY_R" },
> >> + { BTN_TYPE_KB, 0x2C, "KEY_T" },
> >> + { BTN_TYPE_KB, 0x35, "KEY_Y" },
> >> + { BTN_TYPE_KB, 0x3C, "KEY_U" },
> >> + { BTN_TYPE_KB, 0x43, "KEY_I" },
> >> + { BTN_TYPE_KB, 0x44, "KEY_O" },
> >> + { BTN_TYPE_KB, 0x4D, "KEY_P" },
> >> + { BTN_TYPE_KB, 0x54, "KEY_LEFTBRACE" },
> >> + { BTN_TYPE_KB, 0x5B, "KEY_RIGHTBRACE" },
> >> + { BTN_TYPE_KB, 0x5D, "KEY_BACKSLASH" },
> >> + { BTN_TYPE_KB, 0x58, "KEY_CAPSLOCK" },
> >> + { BTN_TYPE_KB, 0x1C, "KEY_A" },
> >> + { BTN_TYPE_KB, 0x1B, "KEY_S" },
> >> + { BTN_TYPE_KB, 0x23, "KEY_D" },
> >> + { BTN_TYPE_KB, 0x2B, "KEY_F" },
> >> + { BTN_TYPE_KB, 0x34, "KEY_G" },
> >> + { BTN_TYPE_KB, 0x33, "KEY_H" },
> >> + { BTN_TYPE_KB, 0x3B, "KEY_J" },
> >> + { BTN_TYPE_KB, 0x42, "KEY_K" },
> >> + { BTN_TYPE_KB, 0x4B, "KEY_L" },
> >> + { BTN_TYPE_KB, 0x4C, "KEY_SEMICOLON" },
> >> + { BTN_TYPE_KB, 0x52, "KEY_APOSTROPHE" },
> >> + { BTN_TYPE_KB, 0x5A, "KEY_ENTER" },
> >> + { BTN_TYPE_KB, 0x88, "KEY_LEFTSHIFT" },
> >> + { BTN_TYPE_KB, 0x1A, "KEY_Z" },
> >> + { BTN_TYPE_KB, 0x22, "KEY_X" },
> >> + { BTN_TYPE_KB, 0x21, "KEY_C" },
> >> + { BTN_TYPE_KB, 0x2A, "KEY_V" },
> >> + { BTN_TYPE_KB, 0x32, "KEY_B" },
> >> + { BTN_TYPE_KB, 0x31, "KEY_N" },
> >> + { BTN_TYPE_KB, 0x3A, "KEY_M" },
> >> + { BTN_TYPE_KB, 0x41, "KEY_COMMA" },
> >> + { BTN_TYPE_KB, 0x49, "KEY_DOT" },
> >> + { BTN_TYPE_KB, 0x4A, "KEY_SLASH" },
> >> + { BTN_TYPE_KB, 0x89, "KEY_RIGHTSHIFT" },
> >> + { BTN_TYPE_KB, 0x82, "KEY_LEFTMETA" },
> >> + { BTN_TYPE_KB, 0x8A, "KEY_LEFTALT" },
> >> + { BTN_TYPE_KB, 0x29, "KEY_SPACE" },
> >> + { BTN_TYPE_KB, 0x8B, "KEY_RIGHTALT" },
> >> + { BTN_TYPE_KB, 0x84, "KEY_COMPOSE" },
> >> + { BTN_TYPE_KB, 0x8D, "KEY_RIGHTCTRL" },
> >> + { BTN_TYPE_KB, 0xC3, "KEY_SYSRQ" },
> >> + { BTN_TYPE_KB, 0x7E, "KEY_SCROLLLOCK" },
> >> + { BTN_TYPE_KB, 0x91, "KEY_PAUSE" },
> >> + { BTN_TYPE_KB, 0xC2, "KEY_INSERT" },
> >> + { BTN_TYPE_KB, 0x94, "KEY_HOME" },
> >> + { BTN_TYPE_KB, 0x96, "KEY_PAGEUP" },
> >> + { BTN_TYPE_KB, 0xC0, "KEY_DELETE" },
> >> + { BTN_TYPE_KB, 0x95, "KEY_END" },
> >> + { BTN_TYPE_KB, 0x97, "KEY_PAGEDOWN" },
> >> + { BTN_TYPE_KB, 0x98, "KEY_UP" },
> >> + { BTN_TYPE_KB, 0x99, "KEY_DOWN" },
> >> + { BTN_TYPE_KB, 0x9A, "KEY_LEFT" },
> >> + { BTN_TYPE_KB, 0x9B, "KEY_RIGHT" },
> >> +
> >> + /* Numpad button codes */
> >> + { BTN_TYPE_KB, 0x77, "KEY_NUMLOCK" },
> >> + { BTN_TYPE_KB, 0x90, "KEY_KPSLASH" },
> >> + { BTN_TYPE_KB, 0x7C, "KEY_KPASTERISK" },
> >> + { BTN_TYPE_KB, 0x7B, "KEY_KPMINUS" },
> >> + { BTN_TYPE_KB, 0x70, "KEY_KP0" },
> >> + { BTN_TYPE_KB, 0x69, "KEY_KP1" },
> >> + { BTN_TYPE_KB, 0x72, "KEY_KP2" },
> >> + { BTN_TYPE_KB, 0x7A, "KEY_KP3" },
> >> + { BTN_TYPE_KB, 0x6B, "KEY_KP4" },
> >> + { BTN_TYPE_KB, 0x73, "KEY_KP5" },
> >> + { BTN_TYPE_KB, 0x74, "KEY_KP6" },
> >> + { BTN_TYPE_KB, 0x6C, "KEY_KP7" },
> >> + { BTN_TYPE_KB, 0x75, "KEY_KP8" },
> >> + { BTN_TYPE_KB, 0x7D, "KEY_KP9" },
> >> + { BTN_TYPE_KB, 0x79, "KEY_KPPLUS" },
> >> + { BTN_TYPE_KB, 0x81, "KEY_KPENTER" },
> >> + { BTN_TYPE_KB, 0x71, "KEY_KPDOT" },
> >> +
> >> + /* Mouse button codes */
> >> + { BTN_TYPE_MOUSE, 0x01, "BTN_LEFT" },
> >> + { BTN_TYPE_MOUSE, 0x02, "BTN_RIGHT" },
> >> + { BTN_TYPE_MOUSE, 0x03, "BTN_MIDDLE" },
> >> + { BTN_TYPE_MOUSE, 0x04, "REL_WHEEL_HI_RES_UP" },
> >> + { BTN_TYPE_MOUSE, 0x05, "REL_WHEEL_HI_RES_DOWN" },
> >> +
> >> + /* Media button codes */
> >> + { BTN_TYPE_MEDIA, 0x16, "MEDIA_SCREENSHOT" },
> >> + { BTN_TYPE_MEDIA, 0x19, "MEDIA_SHOW_KEYBOARD" },
> >> + { BTN_TYPE_MEDIA, 0x1C, "MEDIA_SHOW_DESKTOP" },
> >> + { BTN_TYPE_MEDIA, 0x1E, "MEDIA_START_RECORDING" },
> >> + { BTN_TYPE_MEDIA, 0x01, "MEDIA_MIC_OFF" },
> >> + { BTN_TYPE_MEDIA, 0x02, "MEDIA_VOL_DOWN" },
> >> + { BTN_TYPE_MEDIA, 0x03, "MEDIA_VOL_UP" },
> >> +};
> >> +
> >> +static const size_t keymap_len = ARRAY_SIZE(ally_btn_codes);
> > Why is this a variable???? Can't the users just directly use ARRAY_SIZE on
> > the array????
>
> Not understood: you say variable, but both are const(s), isn't const
> the exact opposite of variable?
My point was that you should use ARRAY_SIZE(ally_btn_codes) directly in
the 2 place (IIRC) instead of keymap_len. Then you can just drop
keymap_len entirely.
> I am stepping away for today, but I have cleaned up much of this
> mess.
>
> > At v11 it's odd to find this much garbage still remaining... :-(
>
> At a certain (late) point of the development I noticed that remapping
> buttons on the X applied immediately, while on my Ally 1 it had
> to go through apply_all old sysfs interface, so I attempted to
> unify them late on development, sorry.
I think my comment was a bit uncalled for anyway, but please see it in
the light how much lines I had read at that point.
--
i.
next prev parent reply other threads:[~2026-10-30 15:57 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-25 23:52 [PATCH v11 00/18] HID: asus: add support for ROG Ally handhelds Denis Benato
2026-10-25 23:52 ` [PATCH v11 01/18] " Denis Benato
2026-10-26 12:38 ` Ilpo Järvinen
2026-10-30 13:38 ` Denis Benato
2026-10-30 13:56 ` Ilpo Järvinen
2026-10-25 23:52 ` [PATCH v11 02/18] HID: asus: add gamepad configuration Denis Benato
2026-10-26 12:56 ` Ilpo Järvinen
2026-10-25 23:52 ` [PATCH v11 03/18] HID: asus: add vibration strength configuration Denis Benato
2026-10-25 23:52 ` [PATCH v11 04/18] HID: asus: add joysticks inner and outer range configuration Denis Benato
2026-10-26 13:00 ` Ilpo Järvinen
2026-10-25 23:52 ` [PATCH v11 05/18] HID: asus: add triggers " Denis Benato
2026-10-25 23:52 ` [PATCH v11 06/18] HID: asus: add joysticks anti-deadzone configuration Denis Benato
2026-10-25 23:52 ` [PATCH v11 07/18] HID: asus: add support for response curve Denis Benato
2026-10-26 13:06 ` Ilpo Järvinen
2026-10-30 14:38 ` Denis Benato
2026-10-30 14:49 ` Ilpo Järvinen
2026-10-25 23:52 ` [PATCH v11 08/18] HID: asus: add support to force feedback Denis Benato
2026-10-26 12:36 ` Sakari Ailus
2026-10-26 18:21 ` Ilpo Järvinen
2026-10-26 18:27 ` Sakari Ailus
2026-10-26 13:13 ` Ilpo Järvinen
2026-10-25 23:52 ` [PATCH v11 09/18] HID: asus: add support for gamepad mode Denis Benato
2026-10-26 13:20 ` Ilpo Järvinen
2026-10-30 14:58 ` Denis Benato
2026-10-25 23:52 ` [PATCH v11 10/18] HID: asus: add support for turbo buttons Denis Benato
2026-10-26 13:29 ` Ilpo Järvinen
2026-10-25 23:52 ` [PATCH v11 11/18] HID: asus: add support for btn remapping Denis Benato
2026-10-26 14:03 ` Ilpo Järvinen
2026-10-30 15:44 ` Denis Benato
2026-10-30 15:57 ` Ilpo Järvinen [this message]
2026-10-25 23:52 ` [PATCH v11 12/18] HID: asus: size feature reports from the HID report descriptor Denis Benato
2026-10-26 13:06 ` Rebecca Mara Müller
2026-10-26 19:38 ` Denis Benato
2026-10-25 23:52 ` [PATCH v11 13/18] HID: asus: identify XG Mobile stations and bind the LED to the reported model Denis Benato
2026-10-25 23:52 ` [PATCH v11 14/18] HID: asus: expose XG Mobile identity and firmware information Denis Benato
2026-10-26 14:10 ` Ilpo Järvinen
2026-10-25 23:52 ` [PATCH v11 15/18] HID: asus: size ally gamepad commands from the HID report descriptor Denis Benato
2026-10-25 23:52 ` [PATCH v11 16/18] platform/x86: asus-armoury: pick the eGPU activation from the reported GPU Denis Benato
2026-10-25 23:52 ` [PATCH v11 17/18] HID: asus: report the XG Mobile GPU vendor to asus-wmi Denis Benato
2026-10-26 14:15 ` Ilpo Järvinen
2026-10-25 23:52 ` [PATCH v11 18/18] MAINTAINERS: add maintainer for the ASUS HID driver Denis Benato
2026-10-26 14:24 ` [PATCH v11 00/18] HID: asus: add support for ROG Ally handhelds Ilpo Järvinen
2026-10-26 18:03 ` 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=46c0df09-9a3c-62f5-322e-6fea93b9c3da@linux.intel.com \
--to=ilpo.jarvinen@linux.intel.com \
--cc=benato.denis96@gmail.com \
--cc=bentiss@kernel.org \
--cc=corentin.chary@gmail.com \
--cc=denis.benato@linux.dev \
--cc=derekjohn.clark@gmail.com \
--cc=hacker1024@users.sourceforge.net \
--cc=hansg@kernel.org \
--cc=jikos@kernel.org \
--cc=jlobue10@gmail.com \
--cc=kernel@lists.opengamingcollective.org \
--cc=khamunetriclark@gmail.com \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luke@ljones.dev \
--cc=matthew.schwartz@linux.dev \
--cc=me@livan.pro \
--cc=nathan@kernel.org \
--cc=platform-driver-x86@vger.kernel.org \
--cc=rebecca.mara@posteo.de \
/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®