ChangeSet 1.946.3.1, 2002/12/23 11:20:30-08:00, vojtech@suse.cz [PATCH] USB Joypad quirk Orginally from Vojtech Pavlik (16th June 2002 via email), to fix my 'broken' USB joypad, Fully tested in both 2.4.x and 2.5.52 (and 2.5.52-bk). diff -Nru a/drivers/usb/input/hid-core.c b/drivers/usb/input/hid-core.c --- a/drivers/usb/input/hid-core.c Fri Dec 27 23:58:25 2002 +++ b/drivers/usb/input/hid-core.c Fri Dec 27 23:58:25 2002 @@ -1317,6 +1317,9 @@ #define USB_DEVICE_ID_ATEN_2PORTKVM 0x2204 #define USB_DEVICE_ID_ATEN_4PORTKVM 0x2205 +#define USB_VENDOR_ID_TOPMAX 0x0663 +#define USB_DEVICE_ID_TOPMAX_COBRAPAD 0x0103 + #define USB_VENDOR_ID_MGE 0x0463 #define USB_DEVICE_ID_MGE_UPS 0xffff #define USB_DEVICE_ID_MGE_UPS1 0x0001 @@ -1355,6 +1358,7 @@ { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVM, HID_QUIRK_NOGET }, { USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS, HID_QUIRK_HIDDEV }, { USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS1, HID_QUIRK_HIDDEV }, + { USB_VENDOR_ID_TOPMAX, USB_DEVICE_ID_TOPMAX_COBRAPAD, HID_QUIRK_BADPAD }, { 0, 0 } }; diff -Nru a/drivers/usb/input/hid-input.c b/drivers/usb/input/hid-input.c --- a/drivers/usb/input/hid-input.c Fri Dec 27 23:58:25 2002 +++ b/drivers/usb/input/hid-input.c Fri Dec 27 23:58:25 2002 @@ -357,6 +357,11 @@ int a = field->logical_minimum; int b = field->logical_maximum; + if ((device->quirks & HID_QUIRK_BADPAD) && (usage->code == ABS_X || usage->code == ABS_Y)) { + a = field->logical_minimum = 0; + b = field->logical_maximum = 255; + } + input->absmin[usage->code] = a; input->absmax[usage->code] = b; input->absfuzz[usage->code] = (b - a) >> 8; diff -Nru a/drivers/usb/input/hid.h b/drivers/usb/input/hid.h --- a/drivers/usb/input/hid.h Fri Dec 27 23:58:25 2002 +++ b/drivers/usb/input/hid.h Fri Dec 27 23:58:25 2002 @@ -206,6 +206,7 @@ #define HID_QUIRK_IGNORE 0x04 #define HID_QUIRK_NOGET 0x08 #define HID_QUIRK_HIDDEV 0x10 +#define HID_QUIRK_BADPAD 0x12 /* * This is the global enviroment of the parser. This information is