Skip to content

Commit

Permalink
HID: wiimote: fix classic controller parsing
Browse files Browse the repository at this point in the history
I finally got a "Classic Controller" and "Classic Controller Pro" in my
hands and noticed that all analog data was incorrectly parsed. Fix this
up so we report the data that we pretend we do.

I really doubt that this breaks any backwards compatibility, but if we
get any reports, we only need to revert this single patch.

Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
  • Loading branch information
David Herrmann authored and Jiri Kosina committed Jun 3, 2013
1 parent 77a7480 commit ee286c2
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions drivers/hid/hid-wiimote-modules.c
Original file line number Diff line number Diff line change
Expand Up @@ -1062,12 +1062,12 @@ static void wiimod_classic_in_ext(struct wiimote_data *wdata, const __u8 *ext)
* With motionp enabled it changes slightly to this:
* Byte | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
* -----+-----+-----+-----+-----+-----+-----+-----+-----+
* 1 | RX <4:3> | LX <5:1> | BDU |
* 2 | RX <2:1> | LY <5:1> | BDL |
* 1 | RX <5:4> | LX <5:1> | BDU |
* 2 | RX <3:2> | LY <5:1> | BDL |
* -----+-----+-----+-----+-----------------------+-----+
* 3 |RX<0>| LT <4:3> | RY <4:0> |
* 3 |RX<1>| LT <5:4> | RY <5:1> |
* -----+-----+-----------+-----------------------------+
* 4 | LT <2:0> | RT <4:0> |
* 4 | LT <3:1> | RT <5:1> |
* -----+-----+-----+-----+-----+-----+-----+-----+-----+
* 5 | BDR | BDD | BLT | B- | BH | B+ | BRT | EXT |
* -----+-----+-----+-----+-----+-----+-----+-----+-----+
Expand All @@ -1079,13 +1079,13 @@ static void wiimod_classic_in_ext(struct wiimote_data *wdata, const __u8 *ext)

if (wdata->state.flags & WIIPROTO_FLAG_MP_ACTIVE) {
lx = ext[0] & 0x3e;
ly = ext[0] & 0x3e;
ly = ext[1] & 0x3e;
} else {
lx = ext[0] & 0x3f;
ly = ext[0] & 0x3f;
ly = ext[1] & 0x3f;
}

rx = (ext[0] >> 3) & 0x14;
rx = (ext[0] >> 3) & 0x18;
rx |= (ext[1] >> 5) & 0x06;
rx |= (ext[2] >> 7) & 0x01;
ry = ext[2] & 0x1f;
Expand All @@ -1103,8 +1103,8 @@ static void wiimod_classic_in_ext(struct wiimote_data *wdata, const __u8 *ext)
input_report_abs(wdata->extension.input, ABS_HAT1Y, ly - 0x20);
input_report_abs(wdata->extension.input, ABS_HAT2X, rx - 0x20);
input_report_abs(wdata->extension.input, ABS_HAT2Y, ry - 0x20);
input_report_abs(wdata->extension.input, ABS_HAT3X, rt - 0x20);
input_report_abs(wdata->extension.input, ABS_HAT3Y, lt - 0x20);
input_report_abs(wdata->extension.input, ABS_HAT3X, rt);
input_report_abs(wdata->extension.input, ABS_HAT3Y, lt);

input_report_key(wdata->extension.input,
wiimod_classic_map[WIIMOD_CLASSIC_KEY_RIGHT],
Expand Down

0 comments on commit ee286c2

Please sign in to comment.