|
@@ -769,7 +769,7 @@ static void __ir_to_input(struct wiimote_data *wdata, const __u8 *ir,
|
|
|
|
|
|
/*
|
|
/*
|
|
* Basic IR data is encoded into 3 bytes. The first two bytes are the
|
|
* Basic IR data is encoded into 3 bytes. The first two bytes are the
|
|
- * upper 8 bit of the X/Y data, the 3rd byte contains the lower 2 bits
|
|
|
|
|
|
+ * lower 8 bit of the X/Y data, the 3rd byte contains the upper 2 bits
|
|
* of both.
|
|
* of both.
|
|
* If data is packed, then the 3rd byte is put first and slightly
|
|
* If data is packed, then the 3rd byte is put first and slightly
|
|
* reordered. This allows to interleave packed and non-packed data to
|
|
* reordered. This allows to interleave packed and non-packed data to
|
|
@@ -778,17 +778,11 @@ static void __ir_to_input(struct wiimote_data *wdata, const __u8 *ir,
|
|
*/
|
|
*/
|
|
|
|
|
|
if (packed) {
|
|
if (packed) {
|
|
- x = ir[1] << 2;
|
|
|
|
- y = ir[2] << 2;
|
|
|
|
-
|
|
|
|
- x |= ir[0] & 0x3;
|
|
|
|
- y |= (ir[0] >> 2) & 0x3;
|
|
|
|
|
|
+ x = ir[1] | ((ir[0] & 0x03) << 8);
|
|
|
|
+ y = ir[2] | ((ir[0] & 0x0c) << 6);
|
|
} else {
|
|
} else {
|
|
- x = ir[0] << 2;
|
|
|
|
- y = ir[1] << 2;
|
|
|
|
-
|
|
|
|
- x |= (ir[2] >> 4) & 0x3;
|
|
|
|
- y |= (ir[2] >> 6) & 0x3;
|
|
|
|
|
|
+ x = ir[0] | ((ir[2] & 0x30) << 4);
|
|
|
|
+ y = ir[1] | ((ir[2] & 0xc0) << 2);
|
|
}
|
|
}
|
|
|
|
|
|
input_report_abs(wdata->ir, xid, x);
|
|
input_report_abs(wdata->ir, xid, x);
|