From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Brenton Simpson <appsforartists@google.com>,
Dmitry Torokhov <dmitry.torokhov@gmail.com>,
Sasha Levin <sashal@kernel.org>,
vi@endrift.com, swyterzone@gmail.com, luca@z3ntu.xyz,
slouken@libsdl.org, pgriffais@valvesoftware.com,
matthias_berndt@gmx.de, christophe.jaillet@wanadoo.fr,
linux-input@vger.kernel.org
Subject: [PATCH AUTOSEL 5.15 11/23] Input: xpad - add Lenovo Legion Go controllers
Date: Wed, 7 Feb 2024 16:25:52 -0500 [thread overview]
Message-ID: <20240207212611.3793-11-sashal@kernel.org> (raw)
In-Reply-To: <20240207212611.3793-1-sashal@kernel.org>
From: Brenton Simpson <appsforartists@google.com>
[ Upstream commit 80441f76ee67002437db61f3b317ed80cce085d2 ]
The Lenovo Legion Go is a handheld gaming system, similar to a Steam Deck.
It has a gamepad (including rear paddles), 3 gyroscopes, a trackpad,
volume buttons, a power button, and 2 LED ring lights.
The Legion Go firmware presents these controls as a USB hub with various
devices attached. In its default state, the gamepad is presented as an
Xbox controller connected to this hub. (By holding a combination of
buttons, it can be changed to use the older DirectInput API.)
This patch teaches the existing Xbox controller module `xpad` to bind to
the controller in the Legion Go, which enables support for the:
- directional pad,
- analog sticks (including clicks),
- X, Y, A, B,
- start and select (or menu and capture),
- shoulder buttons, and
- rumble.
The trackpad, touchscreen, volume controls, and power button are already
supported via existing kernel modules. Two of the face buttons, the
gyroscopes, rear paddles, and LEDs are not.
After this patch lands, the Legion Go will be mostly functional in Linux,
out-of-the-box. The various components of the USB hub can be synthesized
into a single logical controller (including the additional buttons) in
userspace with [Handheld Daemon](https://github.com/hhd-dev/hhd), which
makes the Go fully functional.
Signed-off-by: Brenton Simpson <appsforartists@google.com>
Link: https://lore.kernel.org/r/20240118183546.418064-1-appsforartists@google.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/input/joystick/xpad.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
index 1ff0d4e24fe6..f0b1dac93822 100644
--- a/drivers/input/joystick/xpad.c
+++ b/drivers/input/joystick/xpad.c
@@ -276,6 +276,7 @@ static const struct xpad_device {
{ 0x1689, 0xfd00, "Razer Onza Tournament Edition", 0, XTYPE_XBOX360 },
{ 0x1689, 0xfd01, "Razer Onza Classic Edition", 0, XTYPE_XBOX360 },
{ 0x1689, 0xfe00, "Razer Sabertooth", 0, XTYPE_XBOX360 },
+ { 0x17ef, 0x6182, "Lenovo Legion Controller for Windows", 0, XTYPE_XBOX360 },
{ 0x1949, 0x041a, "Amazon Game Controller", 0, XTYPE_XBOX360 },
{ 0x1bad, 0x0002, "Harmonix Rock Band Guitar", 0, XTYPE_XBOX360 },
{ 0x1bad, 0x0003, "Harmonix Rock Band Drumkit", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 },
@@ -464,6 +465,7 @@ static const struct usb_device_id xpad_table[] = {
XPAD_XBOX360_VENDOR(0x15e4), /* Numark X-Box 360 controllers */
XPAD_XBOX360_VENDOR(0x162e), /* Joytech X-Box 360 controllers */
XPAD_XBOX360_VENDOR(0x1689), /* Razer Onza */
+ XPAD_XBOX360_VENDOR(0x17ef), /* Lenovo */
XPAD_XBOX360_VENDOR(0x1949), /* Amazon controllers */
XPAD_XBOX360_VENDOR(0x1bad), /* Harminix Rock Band Guitar and Drums */
XPAD_XBOX360_VENDOR(0x20d6), /* PowerA Controllers */
--
2.43.0
next prev parent reply other threads:[~2024-02-07 21:26 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-07 21:25 [PATCH AUTOSEL 5.15 01/23] ext4: avoid dividing by 0 in mb_update_avg_fragment_size() when block bitmap corrupt Sasha Levin
2024-02-07 21:25 ` [PATCH AUTOSEL 5.15 02/23] ext4: avoid allocating blocks from corrupted group in ext4_mb_try_best_found() Sasha Levin
2024-02-07 21:25 ` [PATCH AUTOSEL 5.15 03/23] ext4: avoid allocating blocks from corrupted group in ext4_mb_find_by_goal() Sasha Levin
2024-02-07 21:25 ` [PATCH AUTOSEL 5.15 04/23] dmaengine: ti: edma: Add some null pointer checks to the edma_probe Sasha Levin
2024-02-07 21:25 ` [PATCH AUTOSEL 5.15 05/23] ASoC: codecs: wcd934x: drop unneeded regulator include Sasha Levin
2024-02-07 21:25 ` [PATCH AUTOSEL 5.15 06/23] regulator: pwm-regulator: Add validity checks in continuous .get_voltage Sasha Levin
2024-02-07 21:25 ` [PATCH AUTOSEL 5.15 07/23] nvmet-tcp: fix nvme tcp ida memory leak Sasha Levin
2024-02-07 21:25 ` [PATCH AUTOSEL 5.15 08/23] ALSA: usb-audio: Check presence of valid altsetting control Sasha Levin
2024-02-07 21:25 ` [PATCH AUTOSEL 5.15 09/23] ASoC: sunxi: sun4i-spdif: Add support for Allwinner H616 Sasha Levin
2024-02-07 21:25 ` [PATCH AUTOSEL 5.15 10/23] spi: sh-msiof: avoid integer overflow in constants Sasha Levin
2024-02-07 21:25 ` Sasha Levin [this message]
2024-02-07 21:25 ` [PATCH AUTOSEL 5.15 12/23] netfilter: conntrack: check SCTP_CID_SHUTDOWN_ACK for vtag setting in sctp_new Sasha Levin
2024-02-07 21:25 ` [PATCH AUTOSEL 5.15 13/23] ALSA: usb-audio: Ignore clock selector errors for single connection Sasha Levin
2024-02-07 21:25 ` [PATCH AUTOSEL 5.15 14/23] nvme-fc: do not wait in vain when unloading module Sasha Levin
2024-02-07 21:25 ` [PATCH AUTOSEL 5.15 15/23] nvmet-fcloop: swap the list_add_tail arguments Sasha Levin
2024-02-07 21:25 ` [PATCH AUTOSEL 5.15 16/23] nvmet-fc: release reference on target port Sasha Levin
2024-02-07 21:25 ` [PATCH AUTOSEL 5.15 17/23] nvmet-fc: defer cleanup using RCU properly Sasha Levin
2024-02-07 21:25 ` [PATCH AUTOSEL 5.15 18/23] nvmet-fc: hold reference on hostport match Sasha Levin
2024-02-07 21:26 ` [PATCH AUTOSEL 5.15 19/23] nvmet-fc: abort command when there is no binding Sasha Levin
2024-02-07 21:26 ` [PATCH AUTOSEL 5.15 20/23] nvmet-fc: avoid deadlock on delete association path Sasha Levin
2024-02-07 21:26 ` [PATCH AUTOSEL 5.15 21/23] nvmet-fc: take ref count on tgtport before delete assoc Sasha Levin
2024-02-07 21:26 ` [PATCH AUTOSEL 5.15 22/23] ext4: correct the hole length returned by ext4_map_blocks() Sasha Levin
2024-02-07 21:26 ` [PATCH AUTOSEL 5.15 23/23] Input: i8042 - add Fujitsu Lifebook U728 to i8042 quirk table Sasha Levin
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=20240207212611.3793-11-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=appsforartists@google.com \
--cc=christophe.jaillet@wanadoo.fr \
--cc=dmitry.torokhov@gmail.com \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luca@z3ntu.xyz \
--cc=matthias_berndt@gmx.de \
--cc=pgriffais@valvesoftware.com \
--cc=slouken@libsdl.org \
--cc=stable@vger.kernel.org \
--cc=swyterzone@gmail.com \
--cc=vi@endrift.com \
/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