[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <32e14a5d6ee839edc3253587f2f99ec6cd0ddfa0.camel@hadess.net>
Date: Mon, 12 Jan 2026 14:09:46 +0100
From: Bastien Nocera <hadess@...ess.net>
To: Sriman Achanta <srimanachanta@...il.com>, Jiri Kosina
<jikos@...nel.org>, Benjamin Tissoires <bentiss@...nel.org>,
linux-input@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v2 4/4] HID: steelseries: Add support for Arctis headset
lineup
On Sun, 2026-01-11 at 23:19 -0500, Sriman Achanta wrote:
> Add full support for the SteelSeries Arctis wireless gaming headset
> lineup, extending the driver from basic support for 2 models (Arctis
> 1
> and 9) to comprehensive support for 25+ models across all Arctis
> generations.
>
> This is a major restructure of the hid-steelseries driver that
> replaces
> the previous minimal implementation with a unified, capability-based
> architecture.
This patch needs to be split up, at the very least it needs new
features to be split up from any other refactoring that might be needed
to support features with each new feature getting its own commit.
As mentioned in the earlier patch, sidetone control, chatmix level, mic
level, volume limiter and bluetooth call volume all should be
implemented as ALSA mixers/switches so they can be toggled with stock
tools and presented in a uniform way up the stack (Pipewire/Pulseaudio
and desktop environments).
An additional comments inline.
> <snip>
> -/* Fixed report descriptor for Steelseries SRW-S1 wheel controller
> - *
> - * The original descriptor hides the sensitivity and assists dials
> - * a custom vendor usage page. This inserts a patch to make them
> - * appear in the 'Generic Desktop' usage.
> - */
> -
> +/* Fixed report descriptor for Steelseries SRW-S1 wheel controller
> */
There's really no need to reindent this array.
> static const __u8 steelseries_srws1_rdesc_fixed[] = {
> -0x05, 0x01, /* Usage Page (Desktop) */
> -0x09, 0x08, /* Usage (MultiAxis), Changed */
> -0xA1, 0x01, /* Collection (Application), */
> -0xA1, 0x02, /* Collection (Logical), */
> -0x95, 0x01, /* Report Count (1), */
> -0x05, 0x01, /* Changed Usage Page (Desktop), */
> -0x09, 0x30, /* Changed Usage (X), */
> -0x16, 0xF8, 0xF8, /* Logical Minimum (-1800), */
> -0x26, 0x08, 0x07, /* Logical Maximum (1800), */
> -0x65, 0x14, /* Unit (Degrees), */
> -0x55, 0x0F, /* Unit Exponent (15), */
> -0x75, 0x10, /* Report Size (16), */
> -0x81, 0x02, /* Input (Variable), */
> -0x09, 0x31, /* Changed Usage (Y), */
> -0x15, 0x00, /* Logical Minimum (0), */
> -0x26, 0xFF, 0x03, /* Logical Maximum (1023), */
> -0x75, 0x0C, /* Report Size (12), */
> -0x81, 0x02, /* Input (Variable), */
> -0x09, 0x32, /* Changed Usage (Z), */
> -0x15, 0x00, /* Logical Minimum (0), */
> -0x26, 0xFF, 0x03, /* Logical Maximum (1023), */
> -0x75, 0x0C, /* Report Size (12), */
> -0x81, 0x02, /* Input (Variable), */
> -0x05, 0x01, /* Usage Page (Desktop), */
> -0x09, 0x39, /* Usage (Hat Switch), */
> -0x25, 0x07, /* Logical Maximum (7), */
> -0x35, 0x00, /* Physical Minimum (0), */
> -0x46, 0x3B, 0x01, /* Physical Maximum (315), */
> -0x65, 0x14, /* Unit (Degrees), */
> -0x75, 0x04, /* Report Size (4), */
> -0x95, 0x01, /* Report Count (1), */
> -0x81, 0x02, /* Input (Variable), */
> -0x25, 0x01, /* Logical Maximum (1), */
> -0x45, 0x01, /* Physical Maximum (1), */
> -0x65, 0x00, /* Unit, */
> -0x75, 0x01, /* Report Size (1), */
> -0x95, 0x03, /* Report Count (3), */
> -0x81, 0x01, /* Input (Constant), */
> -0x05, 0x09, /* Usage Page (Button), */
> -0x19, 0x01, /* Usage Minimum (01h), */
> -0x29, 0x11, /* Usage Maximum (11h), */
> -0x95, 0x11, /* Report Count (17), */
> -0x81, 0x02, /* Input (Variable), */
> - /* ---- Dial patch starts here ---- */
> -0x05, 0x01, /* Usage Page (Desktop), */
> -0x09, 0x33, /* Usage (RX), */
> -0x75, 0x04, /* Report Size (4), */
> -0x95, 0x02, /* Report Count (2), */
> -0x15, 0x00, /* Logical Minimum (0), */
> -0x25, 0x0b, /* Logical Maximum (b), */
> -0x81, 0x02, /* Input (Variable), */
> -0x09, 0x35, /* Usage (RZ), */
> -0x75, 0x04, /* Report Size (4), */
> -0x95, 0x01, /* Report Count (1), */
> -0x25, 0x03, /* Logical Maximum (3), */
> -0x81, 0x02, /* Input (Variable), */
> - /* ---- Dial patch ends here ---- */
> -0x06, 0x00, 0xFF, /* Usage Page (FF00h), */
> -0x09, 0x01, /* Usage (01h), */
> -0x75, 0x04, /* Changed Report Size (4), */
> -0x95, 0x0D, /* Changed Report Count (13), */
> -0x81, 0x02, /* Input (Variable), */
> -0xC0, /* End Collection, */
> -0xA1, 0x02, /* Collection (Logical), */
> -0x09, 0x02, /* Usage (02h), */
> -0x75, 0x08, /* Report Size (8), */
> -0x95, 0x10, /* Report Count (16), */
> -0x91, 0x02, /* Output (Variable), */
> -0xC0, /* End Collection, */
> -0xC0 /* End Collection */
> + 0x05, 0x01, /* Usage Page (Desktop) */
> + 0x09, 0x08, /* Usage (MultiAxis), Changed */
> + 0xA1, 0x01, /* Collection (Application), */
> + 0xA1, 0x02, /* Collection (Logical), */
> + 0x95, 0x01, /* Report Count (1), */
> + 0x05, 0x01, /* Changed Usage Page (Desktop), */
> + 0x09, 0x30, /* Changed Usage (X), */
> + 0x16, 0xF8, 0xF8, /* Logical Minimum (-1800), */
> + 0x26, 0x08, 0x07, /* Logical Maximum (1800), */
> + 0x65, 0x14, /* Unit (Degrees), */
> + 0x55, 0x0F, /* Unit Exponent (15), */
> + 0x75, 0x10, /* Report Size (16), */
> + 0x81, 0x02, /* Input (Variable), */
> + 0x09, 0x31, /* Changed Usage (Y), */
> + 0x15, 0x00, /* Logical Minimum (0), */
> + 0x26, 0xFF, 0x03, /* Logical Maximum (1023), */
> + 0x75, 0x0C, /* Report Size (12), */
> + 0x81, 0x02, /* Input (Variable), */
> + 0x09, 0x32, /* Changed Usage (Z), */
> + 0x15, 0x00, /* Logical Minimum (0), */
> + 0x26, 0xFF, 0x03, /* Logical Maximum (1023), */
> + 0x75, 0x0C, /* Report Size (12), */
> + 0x81, 0x02, /* Input (Variable), */
> + 0x05, 0x01, /* Usage Page (Desktop), */
> + 0x09, 0x39, /* Usage (Hat Switch), */
> + 0x25, 0x07, /* Logical Maximum (7), */
> + 0x35, 0x00, /* Physical Minimum (0), */
> + 0x46, 0x3B, 0x01, /* Physical Maximum (315), */
> + 0x65, 0x14, /* Unit (Degrees), */
> + 0x75, 0x04, /* Report Size (4), */
> + 0x95, 0x01, /* Report Count (1), */
> + 0x81, 0x02, /* Input (Variable), */
> + 0x25, 0x01, /* Logical Maximum (1), */
> + 0x45, 0x01, /* Physical Maximum (1), */
> + 0x65, 0x00, /* Unit, */
> + 0x75, 0x01, /* Report Size (1), */
> + 0x95, 0x03, /* Report Count (3), */
> + 0x81, 0x01, /* Input (Constant), */
> + 0x05, 0x09, /* Usage Page (Button), */
> + 0x19, 0x01, /* Usage Minimum (01h), */
> + 0x29, 0x11, /* Usage Maximum (11h), */
> + 0x95, 0x11, /* Report Count (17), */
> + 0x81, 0x02, /* Input (Variable), */
> + /* ---- Dial patch starts here ---- */
> + 0x05, 0x01, /* Usage Page (Desktop), */
> + 0x09, 0x33, /* Usage (RX), */
> + 0x75, 0x04, /* Report Size (4), */
> + 0x95, 0x02, /* Report Count (2), */
> + 0x15, 0x00, /* Logical Minimum (0), */
> + 0x25, 0x0b, /* Logical Maximum (b), */
> + 0x81, 0x02, /* Input (Variable), */
> + 0x09, 0x35, /* Usage (RZ), */
> + 0x75, 0x04, /* Report Size (4), */
> + 0x95, 0x01, /* Report Count (1), */
> + 0x25, 0x03, /* Logical Maximum (3), */
> + 0x81, 0x02, /* Input (Variable), */
> + /* ---- Dial patch ends here ---- */
> + 0x06, 0x00, 0xFF, /* Usage Page (FF00h), */
> + 0x09, 0x01, /* Usage (01h), */
> + 0x75, 0x04, /* Changed Report Size (4), */
> + 0x95, 0x0D, /* Changed Report Count (13), */
> + 0x81, 0x02, /* Input (Variable), */
> + 0xC0, /* End Collection, */
> + 0xA1, 0x02, /* Collection (Logical), */
> + 0x09, 0x02, /* Usage (02h), */
> + 0x75, 0x08, /* Report Size (8), */
> + 0x95, 0x10, /* Report Count (16), */
> + 0x91, 0x02, /* Output (Variable), */
> + 0xC0, /* End Collection, */
> + 0xC0 /* End Collection */
> };
Powered by blists - more mailing lists