| From 64ff31aef8745c491871e2cbf1415d65f5d3e03b Mon Sep 17 00:00:00 2001 |
| From: Mark Furneaux <mark@furneaux.ca> |
| Date: Mon, 22 Jan 2018 11:24:17 -0800 |
| Subject: Input: xpad - add support for PDP Xbox One controllers |
| |
| [ Upstream commit e5c9c6a885fad00aa559b49d8fc23a60e290824e ] |
| |
| Adds support for the current lineup of Xbox One controllers from PDP |
| (Performance Designed Products). These controllers are very picky with |
| their initialization sequence and require an additional 2 packets before |
| they send any input reports. |
| |
| Signed-off-by: Mark Furneaux <mark@furneaux.ca> |
| Reviewed-by: Cameron Gutman <aicommander@gmail.com> |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/input/joystick/xpad.c | 19 +++++++++++++++++++ |
| 1 file changed, 19 insertions(+) |
| |
| diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c |
| index d86e59515b9c..d88d3e0f59fb 100644 |
| --- a/drivers/input/joystick/xpad.c |
| +++ b/drivers/input/joystick/xpad.c |
| @@ -229,6 +229,7 @@ static const struct xpad_device { |
| { 0x0e6f, 0x0213, "Afterglow Gamepad for Xbox 360", 0, XTYPE_XBOX360 }, |
| { 0x0e6f, 0x021f, "Rock Candy Gamepad for Xbox 360", 0, XTYPE_XBOX360 }, |
| { 0x0e6f, 0x0246, "Rock Candy Gamepad for Xbox One 2015", 0, XTYPE_XBOXONE }, |
| + { 0x0e6f, 0x02ab, "PDP Controller for Xbox One", 0, XTYPE_XBOXONE }, |
| { 0x0e6f, 0x0301, "Logic3 Controller", 0, XTYPE_XBOX360 }, |
| { 0x0e6f, 0x0346, "Rock Candy Gamepad for Xbox One 2016", 0, XTYPE_XBOXONE }, |
| { 0x0e6f, 0x0401, "Logic3 Controller", 0, XTYPE_XBOX360 }, |
| @@ -475,6 +476,22 @@ static const u8 xboxone_hori_init[] = { |
| 0x00, 0x00, 0x00, 0x80, 0x00 |
| }; |
| |
| +/* |
| + * This packet is required for some of the PDP pads to start |
| + * sending input reports. One of those pads is (0x0e6f:0x02ab). |
| + */ |
| +static const u8 xboxone_pdp_init1[] = { |
| + 0x0a, 0x20, 0x00, 0x03, 0x00, 0x01, 0x14 |
| +}; |
| + |
| +/* |
| + * This packet is required for some of the PDP pads to start |
| + * sending input reports. One of those pads is (0x0e6f:0x02ab). |
| + */ |
| +static const u8 xboxone_pdp_init2[] = { |
| + 0x06, 0x20, 0x00, 0x02, 0x01, 0x00 |
| +}; |
| + |
| /* |
| * A specific rumble packet is required for some PowerA pads to start |
| * sending input reports. One of those pads is (0x24c6:0x543a). |
| @@ -505,6 +522,8 @@ static const struct xboxone_init_packet xboxone_init_packets[] = { |
| XBOXONE_INIT_PKT(0x0e6f, 0x0165, xboxone_hori_init), |
| XBOXONE_INIT_PKT(0x0f0d, 0x0067, xboxone_hori_init), |
| XBOXONE_INIT_PKT(0x0000, 0x0000, xboxone_fw2015_init), |
| + XBOXONE_INIT_PKT(0x0e6f, 0x02ab, xboxone_pdp_init1), |
| + XBOXONE_INIT_PKT(0x0e6f, 0x02ab, xboxone_pdp_init2), |
| XBOXONE_INIT_PKT(0x24c6, 0x541a, xboxone_rumblebegin_init), |
| XBOXONE_INIT_PKT(0x24c6, 0x542a, xboxone_rumblebegin_init), |
| XBOXONE_INIT_PKT(0x24c6, 0x543a, xboxone_rumblebegin_init), |
| -- |
| 2.17.1 |
| |