diff options
author | Anssi Hannula <anssi.hannula@gmail.com> | 2008-04-03 16:18:10 -0400 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2008-04-03 16:18:10 -0400 |
commit | a0979923d7c34c9c60d0ee8a533f9502dcfbd42b (patch) | |
tree | 2a66e7603691d00dd17db14731ad83a42d003ecb /drivers/input/joystick/xpad.c | |
parent | 8a0f83eacc1bb8899094b17483de95ddf2d8fcc6 (diff) |
Input: xpad - fix dpad handling of unknown devices
For devices not specifically listed in xpad.c, xpad->dpad_mapping
is initially set to MAP_DPAD_UNKNOWN. In xpad_probe() it gets changed
to either MAP_DPAD_TO_BUTTONS or MAP_DPAD_TO_AXES, depending on the
module parameter dpad_to_buttons.
However, MAP_DPAD_UNKNOWN is defined as -1, while the field is u8.
This results in actual value of 255, causing the MAP_DPAD_UNKNOWN
check in xpad_probe() to fail.
Fix that by defining MAP_DPAD_UNKNOWN as 2 instead.
Also, setting module parameter dpad_to_buttons to 1 should obviously
map dpad to buttons, while the default behaviour (0) should be to map
dpad to axes. However, dpad_to_buttons is directly assigned to
xpad->dpad_mapping, and as MAP_DPAD_TO_BUTTONS is 0, the actual
behaviour is reversed.
Fix that by negating dpad_to_buttons in assignment.
Signed-off-by: Anssi Hannula <anssi.hannula@gmail.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Diffstat (limited to 'drivers/input/joystick/xpad.c')
-rw-r--r-- | drivers/input/joystick/xpad.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c index 8804ad30dae2..6288c4f6e3a3 100644 --- a/drivers/input/joystick/xpad.c +++ b/drivers/input/joystick/xpad.c | |||
@@ -87,7 +87,7 @@ | |||
87 | but we map them to axes when possible to simplify things */ | 87 | but we map them to axes when possible to simplify things */ |
88 | #define MAP_DPAD_TO_BUTTONS 0 | 88 | #define MAP_DPAD_TO_BUTTONS 0 |
89 | #define MAP_DPAD_TO_AXES 1 | 89 | #define MAP_DPAD_TO_AXES 1 |
90 | #define MAP_DPAD_UNKNOWN -1 | 90 | #define MAP_DPAD_UNKNOWN 2 |
91 | 91 | ||
92 | #define XTYPE_XBOX 0 | 92 | #define XTYPE_XBOX 0 |
93 | #define XTYPE_XBOX360 1 | 93 | #define XTYPE_XBOX360 1 |
@@ -653,7 +653,7 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id | |||
653 | xpad->dpad_mapping = xpad_device[i].dpad_mapping; | 653 | xpad->dpad_mapping = xpad_device[i].dpad_mapping; |
654 | xpad->xtype = xpad_device[i].xtype; | 654 | xpad->xtype = xpad_device[i].xtype; |
655 | if (xpad->dpad_mapping == MAP_DPAD_UNKNOWN) | 655 | if (xpad->dpad_mapping == MAP_DPAD_UNKNOWN) |
656 | xpad->dpad_mapping = dpad_to_buttons; | 656 | xpad->dpad_mapping = !dpad_to_buttons; |
657 | if (xpad->xtype == XTYPE_UNKNOWN) | 657 | if (xpad->xtype == XTYPE_UNKNOWN) |
658 | xpad->xtype = (intf->cur_altsetting->desc.bInterfaceClass == USB_CLASS_VENDOR_SPEC); | 658 | xpad->xtype = (intf->cur_altsetting->desc.bInterfaceClass == USB_CLASS_VENDOR_SPEC); |
659 | xpad->dev = input_dev; | 659 | xpad->dev = input_dev; |