Commit 6f733320 authored by Cameron Gutman's avatar Cameron Gutman Committed by Kleber Sacilotto de Souza

Input: xpad - fix rumble on Xbox One controllers with 2015 firmware

BugLink: https://bugs.launchpad.net/bugs/1810967

[ Upstream commit 540c2608 ]

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: default avatarCameron Gutman <aicommander@gmail.com>
Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
Signed-off-by: default avatarJuerg Haefliger <juergh@canonical.com>
Signed-off-by: default avatarKleber Sacilotto de Souza <kleber.souza@canonical.com>
parent 78dc442a
...@@ -1033,17 +1033,17 @@ static int xpad_play_effect(struct input_dev *dev, void *data, struct ff_effect ...@@ -1033,17 +1033,17 @@ static int xpad_play_effect(struct input_dev *dev, void *data, struct ff_effect
case XTYPE_XBOXONE: case XTYPE_XBOXONE:
packet->data[0] = 0x09; /* activate rumble */ packet->data[0] = 0x09; /* activate rumble */
packet->data[1] = 0x08; packet->data[1] = 0x00;
packet->data[2] = xpad->odata_serial++; packet->data[2] = xpad->odata_serial++;
packet->data[3] = 0x08; /* continuous effect */ packet->data[3] = 0x09;
packet->data[4] = 0x00; /* simple rumble mode */ packet->data[4] = 0x00;
packet->data[5] = 0x03; /* L and R actuator only */ packet->data[5] = 0x0F;
packet->data[6] = 0x00; /* TODO: LT actuator */ packet->data[6] = 0x00;
packet->data[7] = 0x00; /* TODO: RT actuator */ packet->data[7] = 0x00;
packet->data[8] = strong / 512; /* left actuator */ packet->data[8] = strong / 512; /* left actuator */
packet->data[9] = weak / 512; /* right actuator */ packet->data[9] = weak / 512; /* right actuator */
packet->data[10] = 0x80; /* length of pulse */ packet->data[10] = 0xFF;
packet->data[11] = 0x00; /* stop period of pulse */ packet->data[11] = 0x00;
packet->data[12] = 0x00; packet->data[12] = 0x00;
packet->len = 13; packet->len = 13;
packet->pending = true; packet->pending = true;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment