All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 0/3] Input: joystick: xpad: Add X-Box Adaptive Controller support
@ 2022-08-17 17:51 Nate Yocom
  2022-08-17 17:51 ` [PATCH v4 1/3] " Nate Yocom
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Nate Yocom @ 2022-08-17 17:51 UTC (permalink / raw)
  To: dmitry.torokhov; +Cc: nate, linux-input, linux-kernel, hadess

Adds support for the X-Box Adaptive Controller, which is protocol
compatible with the XTYPE_XBOXONE support in the driver with two deltas:

 - The X-Box button sets 0x02 as its activation ID, where others set
   0x01
 - The controller has an additional Profile button with 4 active states,
   which this change maps to an Axis control with 4 possible values

Patch series adds device to the supported table, adds support for the
Profile button, and adds support for the X-Box button as distinct changes.

Signed-off-by: Nate Yocom <nate@yocom.org>

Nate Yocom (3):
  Input: joystick: xpad: Add X-Box Adaptive Controller support
  Input: joystick: xpad: Add X-Box Adaptive Controller Profile button
  Input: joystick: xpad: Add X-Box Adaptive Controller XBox button

 v2: Fix warning Reported-by: kernel test robot <lkp@intel.com>
 v3: Break into multi-part and remove VID/PID check for XBox button
 v4: Rename Layer -> Profile as suggested by Bastien Nocera <hadess@hadess.net>

 drivers/input/joystick/xpad.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)


base-commit: 15205c2829ca2cbb5ece5ceaafe1171a8470e62b
-- 
2.30.2


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v4 1/3] Input: joystick: xpad: Add X-Box Adaptive Controller support
  2022-08-17 17:51 [PATCH v4 0/3] Input: joystick: xpad: Add X-Box Adaptive Controller support Nate Yocom
@ 2022-08-17 17:51 ` Nate Yocom
  2022-08-17 17:51 ` [PATCH v4 2/3] Input: joystick: xpad: Add X-Box Adaptive Controller Profile button Nate Yocom
  2022-08-17 17:51 ` [PATCH v4 3/3] Input: joystick: xpad: Add X-Box Adaptive Controller XBox button Nate Yocom
  2 siblings, 0 replies; 4+ messages in thread
From: Nate Yocom @ 2022-08-17 17:51 UTC (permalink / raw)
  To: dmitry.torokhov; +Cc: nate, linux-input, linux-kernel, hadess

Adds correct VID/PID for this XTYPE_XBOXONE compatible controller to
xpad_device[] table.

Signed-off-by: Nate Yocom <nate@yocom.org>
Tested-by: Bastien Nocera <hadess@hadess.net>
---
 drivers/input/joystick/xpad.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
index 18190b529bca..c8b38bb73d34 100644
--- a/drivers/input/joystick/xpad.c
+++ b/drivers/input/joystick/xpad.c
@@ -131,6 +131,7 @@ static const struct xpad_device {
 	{ 0x045e, 0x02e3, "Microsoft X-Box One Elite pad", 0, XTYPE_XBOXONE },
 	{ 0x045e, 0x02ea, "Microsoft X-Box One S pad", 0, XTYPE_XBOXONE },
 	{ 0x045e, 0x0719, "Xbox 360 Wireless Receiver", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360W },
+	{ 0x045e, 0x0b0a, "Microsoft X-Box Adaptive Controller", 0, XTYPE_XBOXONE },
 	{ 0x045e, 0x0b12, "Microsoft Xbox Series S|X Controller", MAP_SELECT_BUTTON, XTYPE_XBOXONE },
 	{ 0x046d, 0xc21d, "Logitech Gamepad F310", 0, XTYPE_XBOX360 },
 	{ 0x046d, 0xc21e, "Logitech Gamepad F510", 0, XTYPE_XBOX360 },
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v4 2/3] Input: joystick: xpad: Add X-Box Adaptive Controller Profile button
  2022-08-17 17:51 [PATCH v4 0/3] Input: joystick: xpad: Add X-Box Adaptive Controller support Nate Yocom
  2022-08-17 17:51 ` [PATCH v4 1/3] " Nate Yocom
@ 2022-08-17 17:51 ` Nate Yocom
  2022-08-17 17:51 ` [PATCH v4 3/3] Input: joystick: xpad: Add X-Box Adaptive Controller XBox button Nate Yocom
  2 siblings, 0 replies; 4+ messages in thread
From: Nate Yocom @ 2022-08-17 17:51 UTC (permalink / raw)
  To: dmitry.torokhov; +Cc: nate, linux-input, linux-kernel, hadess

Adds a new quirk for controllers that have a Profile button which has 4
states, reflected as an ABS_MISC axis with 4 values.

Signed-off-by: Nate Yocom <nate@yocom.org>
Tested-by: Bastien Nocera <hadess@hadess.net>
---
 drivers/input/joystick/xpad.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
index c8b38bb73d34..561e097396fb 100644
--- a/drivers/input/joystick/xpad.c
+++ b/drivers/input/joystick/xpad.c
@@ -80,6 +80,7 @@
 #define MAP_TRIGGERS_TO_BUTTONS		(1 << 1)
 #define MAP_STICKS_TO_NULL		(1 << 2)
 #define MAP_SELECT_BUTTON		(1 << 3)
+#define MAP_PROFILE_BUTTON		(1 << 4)
 #define DANCEPAD_MAP_CONFIG	(MAP_DPAD_TO_BUTTONS |			\
 				MAP_TRIGGERS_TO_BUTTONS | MAP_STICKS_TO_NULL)
 
@@ -131,7 +132,7 @@ static const struct xpad_device {
 	{ 0x045e, 0x02e3, "Microsoft X-Box One Elite pad", 0, XTYPE_XBOXONE },
 	{ 0x045e, 0x02ea, "Microsoft X-Box One S pad", 0, XTYPE_XBOXONE },
 	{ 0x045e, 0x0719, "Xbox 360 Wireless Receiver", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360W },
-	{ 0x045e, 0x0b0a, "Microsoft X-Box Adaptive Controller", 0, XTYPE_XBOXONE },
+	{ 0x045e, 0x0b0a, "Microsoft X-Box Adaptive Controller", MAP_PROFILE_BUTTON, XTYPE_XBOXONE },
 	{ 0x045e, 0x0b12, "Microsoft Xbox Series S|X Controller", MAP_SELECT_BUTTON, XTYPE_XBOXONE },
 	{ 0x046d, 0xc21d, "Logitech Gamepad F310", 0, XTYPE_XBOX360 },
 	{ 0x046d, 0xc21e, "Logitech Gamepad F510", 0, XTYPE_XBOX360 },
@@ -927,6 +928,10 @@ static void xpadone_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char
 				 (__u16) le16_to_cpup((__le16 *)(data + 8)));
 	}
 
+	/* Profile button has a value of 0-4, so it is reported as an axis */
+	if (xpad->mapping & MAP_PROFILE_BUTTON)
+		input_report_abs(dev, ABS_MISC, data[34]);
+
 	input_sync(dev);
 }
 
@@ -1623,6 +1628,9 @@ static void xpad_set_up_abs(struct input_dev *input_dev, signed short abs)
 	case ABS_HAT0Y:	/* the d-pad (only if dpad is mapped to axes */
 		input_set_abs_params(input_dev, abs, -1, 1, 0, 0);
 		break;
+	case ABS_MISC: /* 4 value profile button (such as on XAC) */
+		input_set_abs_params(input_dev, abs, 0, 4, 0, 0);
+		break;
 	default:
 		input_set_abs_params(input_dev, abs, 0, 0, 0, 0);
 		break;
@@ -1715,6 +1723,10 @@ static int xpad_init_input(struct usb_xpad *xpad)
 			xpad_set_up_abs(input_dev, xpad_abs_triggers[i]);
 	}
 
+	/* setup profile button as an axis with 4 possible values */
+	if (xpad->mapping & MAP_PROFILE_BUTTON)
+		xpad_set_up_abs(input_dev, ABS_MISC);
+
 	error = xpad_init_ff(xpad);
 	if (error)
 		goto err_free_input;
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v4 3/3] Input: joystick: xpad: Add X-Box Adaptive Controller XBox button
  2022-08-17 17:51 [PATCH v4 0/3] Input: joystick: xpad: Add X-Box Adaptive Controller support Nate Yocom
  2022-08-17 17:51 ` [PATCH v4 1/3] " Nate Yocom
  2022-08-17 17:51 ` [PATCH v4 2/3] Input: joystick: xpad: Add X-Box Adaptive Controller Profile button Nate Yocom
@ 2022-08-17 17:51 ` Nate Yocom
  2 siblings, 0 replies; 4+ messages in thread
From: Nate Yocom @ 2022-08-17 17:51 UTC (permalink / raw)
  To: dmitry.torokhov; +Cc: nate, linux-input, linux-kernel, hadess

Adaptive controller sets 0x02 bit for this button, all others set 0x01
so presence of either is used for BTN_MODE.

Signed-off-by: Nate Yocom <nate@yocom.org>
Tested-by: Bastien Nocera <hadess@hadess.net>
---
 drivers/input/joystick/xpad.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
index 561e097396fb..f65e8b1d46e2 100644
--- a/drivers/input/joystick/xpad.c
+++ b/drivers/input/joystick/xpad.c
@@ -859,7 +859,7 @@ static void xpadone_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char
 		if (data[1] == 0x30)
 			xpadone_ack_mode_report(xpad, data[2]);
 
-		input_report_key(dev, BTN_MODE, data[4] & 0x01);
+		input_report_key(dev, BTN_MODE, data[4] & 0x03);
 		input_sync(dev);
 		return;
 	}
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-08-17 17:51 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-17 17:51 [PATCH v4 0/3] Input: joystick: xpad: Add X-Box Adaptive Controller support Nate Yocom
2022-08-17 17:51 ` [PATCH v4 1/3] " Nate Yocom
2022-08-17 17:51 ` [PATCH v4 2/3] Input: joystick: xpad: Add X-Box Adaptive Controller Profile button Nate Yocom
2022-08-17 17:51 ` [PATCH v4 3/3] Input: joystick: xpad: Add X-Box Adaptive Controller XBox button Nate Yocom

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.