| From cfcb96a39d88e09788a155902f0da5d469ee1357 Mon Sep 17 00:00:00 2001 |
| From: Cameron Gutman <aicommander@gmail.com> |
| Date: Wed, 1 Jun 2016 11:32:51 -0700 |
| Subject: Input: xpad - fix rumble on Xbox One controllers with 2015 firmware |
| |
| [ Upstream commit 540c26087bfbad6ea72758b76b16ae6282a73fea ] |
| |
| Xbox One controllers that shipped with or were upgraded to the 2015 |
| firmware discard the current rumble packets we send. This patch changes |
| the Xbox One rumble packet to a form that both the newer and older |
| firmware will accept. |
| |
| It is based on changes made to support newer Xbox One controllers in |
| the SteamOS brewmaster-4.1 kernel branch. |
| |
| Signed-off-by: Cameron Gutman <aicommander@gmail.com> |
| Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/input/joystick/xpad.c | 16 ++++++++-------- |
| 1 file changed, 8 insertions(+), 8 deletions(-) |
| |
| diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c |
| index dcf9053a801e..82c98e5b23ab 100644 |
| --- a/drivers/input/joystick/xpad.c |
| +++ b/drivers/input/joystick/xpad.c |
| @@ -1033,17 +1033,17 @@ static int xpad_play_effect(struct input_dev *dev, void *data, struct ff_effect |
| |
| case XTYPE_XBOXONE: |
| packet->data[0] = 0x09; /* activate rumble */ |
| - packet->data[1] = 0x08; |
| + packet->data[1] = 0x00; |
| packet->data[2] = xpad->odata_serial++; |
| - packet->data[3] = 0x08; /* continuous effect */ |
| - packet->data[4] = 0x00; /* simple rumble mode */ |
| - packet->data[5] = 0x03; /* L and R actuator only */ |
| - packet->data[6] = 0x00; /* TODO: LT actuator */ |
| - packet->data[7] = 0x00; /* TODO: RT actuator */ |
| + packet->data[3] = 0x09; |
| + packet->data[4] = 0x00; |
| + packet->data[5] = 0x0F; |
| + packet->data[6] = 0x00; |
| + packet->data[7] = 0x00; |
| packet->data[8] = strong / 512; /* left actuator */ |
| packet->data[9] = weak / 512; /* right actuator */ |
| - packet->data[10] = 0x80; /* length of pulse */ |
| - packet->data[11] = 0x00; /* stop period of pulse */ |
| + packet->data[10] = 0xFF; |
| + packet->data[11] = 0x00; |
| packet->data[12] = 0x00; |
| packet->len = 13; |
| packet->pending = true; |
| -- |
| 2.17.1 |
| |