|
From ecc04876205fd39cccdf73d05748d9f140fe47d0 Mon Sep 17 00:00:00 2001 |
|
From: Brenton Simpson <[email protected]> |
|
Date: Tue, 14 Nov 2023 22:18:28 -0800 |
|
Subject: [PATCH] Input: xpad - add Lenovo Legion Go controllers |
|
|
|
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 <[email protected]> |
|
--- |
|
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 dadc9c2bcd1c..28903168f779 100644 |
|
--- a/drivers/input/joystick/xpad.c |
|
+++ b/drivers/input/joystick/xpad.c |
|
@@ -293,6 +293,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 }, |
|
@@ -489,6 +490,7 @@ static const struct usb_device_id xpad_table[] = { |
|
XPAD_XBOXONE_VENDOR(0x1532), /* Razer Wildcat */ |
|
XPAD_XBOX360_VENDOR(0x15e4), /* Numark X-Box 360 controllers */ |
|
XPAD_XBOX360_VENDOR(0x162e), /* Joytech X-Box 360 controllers */ |
|
+ XPAD_XBOX360_VENDOR(0x17ef), /* Lenovo */ |
|
XPAD_XBOX360_VENDOR(0x1689), /* Razer Onza */ |
|
XPAD_XBOX360_VENDOR(0x1949), /* Amazon controllers */ |
|
XPAD_XBOX360_VENDOR(0x1bad), /* Harminix Rock Band Guitar and Drums */ |
|
-- |
|
2.43.0.381.gb435a96ce8-goog |
|
|