Skip to content

Commit 0b1d6c8

Browse files
lzyedtor
authored andcommitted
Input: xpad - map "Select" button on Microsoft Xbox One controller
Add "Select" button input capability and input event mapping for Microsoft Xbox One controller. From product site this is also referred as "Share" button. Signed-off-by: Chris Ye <[email protected]> Reviewed-by: Bastien Nocera <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Dmitry Torokhov <[email protected]>
1 parent 41e8102 commit 0b1d6c8

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

drivers/input/joystick/xpad.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
#define MAP_DPAD_TO_BUTTONS (1 << 0)
8080
#define MAP_TRIGGERS_TO_BUTTONS (1 << 1)
8181
#define MAP_STICKS_TO_NULL (1 << 2)
82+
#define MAP_SELECT_BUTTON (1 << 3)
8283
#define DANCEPAD_MAP_CONFIG (MAP_DPAD_TO_BUTTONS | \
8384
MAP_TRIGGERS_TO_BUTTONS | MAP_STICKS_TO_NULL)
8485

@@ -130,6 +131,7 @@ static const struct xpad_device {
130131
{ 0x045e, 0x02e3, "Microsoft X-Box One Elite pad", 0, XTYPE_XBOXONE },
131132
{ 0x045e, 0x02ea, "Microsoft X-Box One S pad", 0, XTYPE_XBOXONE },
132133
{ 0x045e, 0x0719, "Xbox 360 Wireless Receiver", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360W },
134+
{ 0x045e, 0x0b12, "Microsoft Xbox One X pad", MAP_SELECT_BUTTON, XTYPE_XBOXONE },
133135
{ 0x046d, 0xc21d, "Logitech Gamepad F310", 0, XTYPE_XBOX360 },
134136
{ 0x046d, 0xc21e, "Logitech Gamepad F510", 0, XTYPE_XBOX360 },
135137
{ 0x046d, 0xc21f, "Logitech Gamepad F710", 0, XTYPE_XBOX360 },
@@ -864,6 +866,8 @@ static void xpadone_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char
864866
/* menu/view buttons */
865867
input_report_key(dev, BTN_START, data[4] & 0x04);
866868
input_report_key(dev, BTN_SELECT, data[4] & 0x08);
869+
if (xpad->mapping & MAP_SELECT_BUTTON)
870+
input_report_key(dev, KEY_RECORD, data[22] & 0x01);
867871

868872
/* buttons A,B,X,Y */
869873
input_report_key(dev, BTN_A, data[4] & 0x10);
@@ -1674,6 +1678,8 @@ static int xpad_init_input(struct usb_xpad *xpad)
16741678
xpad->xtype == XTYPE_XBOXONE) {
16751679
for (i = 0; xpad360_btn[i] >= 0; i++)
16761680
input_set_capability(input_dev, EV_KEY, xpad360_btn[i]);
1681+
if (xpad->mapping & MAP_SELECT_BUTTON)
1682+
input_set_capability(input_dev, EV_KEY, KEY_RECORD);
16771683
} else {
16781684
for (i = 0; xpad_btn[i] >= 0; i++)
16791685
input_set_capability(input_dev, EV_KEY, xpad_btn[i]);

0 commit comments

Comments
 (0)