Fixed input report handling for xbox 360 controller.
Y/RY up is now positive and down negative.
DPAD report fixed.

Reported-by: Brian Magnuson <[EMAIL PROTECTED]>
Signed-off-by: Jan Kratochvil <[EMAIL PROTECTED]>
---
 drivers/input/joystick/xpad.c |   16 ++++++++--------
 1 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
index 1651950..f3f2ade 100644
--- a/drivers/input/joystick/xpad.c
+++ b/drivers/input/joystick/xpad.c
@@ -283,14 +283,14 @@ static void xpad360_process_packet(struc

        /* digital pad */
        if (xpad->dpad_mapping == MAP_DPAD_TO_AXES) {
-               input_report_abs(dev, ABS_HAT0X, !!(data[2] & 0x01) - !!((data[2] & 
0x08) >> 3));
-               input_report_abs(dev, ABS_HAT0Y, !!((data[2] & 0x02) >> 1) - !!((data[2] 
& 0x04) >> 2));
+               input_report_abs(dev, ABS_HAT0X, !!(data[2] & 0x01) - !!((data[2] & 
0x02) >> 1));
+               input_report_abs(dev, ABS_HAT0Y, !!((data[2] & 0x08) >> 3) - !!((data[2] 
& 0x04) >> 2));
        } else if ( xpad->dpad_mapping == MAP_DPAD_TO_BUTTONS ) {
                /* dpad as buttons (right, left, down, up) */
-               input_report_key(dev, BTN_RIGHT, (data[2] & 0x01));
-               input_report_key(dev, BTN_LEFT, (data[2] & 0x08) >> 3);
-               input_report_key(dev, BTN_0, (data[2] & 0x02) >> 1);
-               input_report_key(dev, BTN_1, (data[2] & 0x04) >> 2);
+               input_report_key(dev, BTN_0, (data[2] & 0x01));
+               input_report_key(dev, BTN_1, (data[2] & 0x02) >> 1);
+               input_report_key(dev, BTN_LEFT, (data[2] & 0x04) >> 2);
+               input_report_key(dev, BTN_RIGHT, (data[2] & 0x08) >> 3);
        }

        /* start/back buttons */
@@ -312,10 +312,10 @@ static void xpad360_process_packet(struc

        /* left stick */
        input_report_abs(dev, ABS_X, (__s16) (((__s16)data[7] << 8) | 
(__s16)data[6]));
-       input_report_abs(dev, ABS_Y, ~(__s16) (((__s16)data[9] << 8) | 
(__s16)data[8]));
+       input_report_abs(dev, ABS_Y, (__s16) (((__s16)data[9] << 8) | 
(__s16)data[8]));

        /* right stick */
-       input_report_abs(dev, ABS_RY, ~(__s16) (((__s16)data[13] << 8) | 
(__s16)data[12]));
+       input_report_abs(dev, ABS_RY, (__s16) (((__s16)data[13] << 8) | 
(__s16)data[12]));
        input_report_abs(dev, ABS_RX, (__s16) (((__s16)data[11] << 8) | 
(__s16)data[10]));

        /* triggers left/right */
--
1.4.3.4


Reply via email to