Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5556feae1c4e1cf2021b5fb2ef99973125de2250
Commit:     5556feae1c4e1cf2021b5fb2ef99973125de2250
Parent:     c4146067fd7889bc6fab6cdfd8b2795d745a2156
Author:     Anssi Hannula <[EMAIL PROTECTED]>
AuthorDate: Thu Jan 11 16:51:17 2007 +0200
Committer:  Jiri Kosina <[EMAIL PROTECTED]>
CommitDate: Mon Feb 5 10:00:04 2007 +0100

    hid: quirk for multi-input devices with unneeded output reports
    
    Add new quirk HID_QUIRK_SKIP_OUTPUT_REPORTS to skip output reports
    when enumerating reports on a hid-input device. Add this quirk and
    HID_QUIRK_MULTI_INPUT to 0810:0001.
    
    PantherLord Twin USB Joystick, 0810:0001 has separate input reports
    for 2 distinct game controllers in the same interface, so it needs
    HID_QUIRK_MULTI_INPUT. However, the device also contains one output
    report per controller which is used to control the force feedback
    function, and we do not want those to appear as separate input
    devices as well. The simplest approach seems to be to add a quirk to
    skip output reports on 0810:0001, and allow the force feedback
    driver to handle those.
    
    Signed-off-by: Anssi Hannula <[EMAIL PROTECTED]>
    Signed-off-by: Jiri Kosina <[EMAIL PROTECTED]>
---
 drivers/hid/hid-input.c      |    6 +++++-
 drivers/usb/input/hid-core.c |    5 +++++
 include/linux/hid.h          |    1 +
 3 files changed, 11 insertions(+), 1 deletions(-)

diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
index c7a6833..33b1126 100644
--- a/drivers/hid/hid-input.c
+++ b/drivers/hid/hid-input.c
@@ -816,6 +816,7 @@ int hidinput_connect(struct hid_device *hid)
        struct hid_input *hidinput = NULL;
        struct input_dev *input_dev;
        int i, j, k;
+       int max_report_type = HID_OUTPUT_REPORT;
 
        INIT_LIST_HEAD(&hid->inputs);
 
@@ -828,7 +829,10 @@ int hidinput_connect(struct hid_device *hid)
        if (i == hid->maxcollection)
                return -1;
 
-       for (k = HID_INPUT_REPORT; k <= HID_OUTPUT_REPORT; k++)
+       if (hid->quirks & HID_QUIRK_SKIP_OUTPUT_REPORTS)
+               max_report_type = HID_INPUT_REPORT;
+
+       for (k = HID_INPUT_REPORT; k <= max_report_type; k++)
                list_for_each_entry(report, &hid->report_enum[k].report_list, 
list) {
 
                        if (!report->maxfield)
diff --git a/drivers/usb/input/hid-core.c b/drivers/usb/input/hid-core.c
index 2971182..1fa42f4 100644
--- a/drivers/usb/input/hid-core.c
+++ b/drivers/usb/input/hid-core.c
@@ -792,6 +792,9 @@ void usbhid_init_reports(struct hid_device *hid)
 #define USB_VENDOR_ID_IMATION          0x0718
 #define USB_DEVICE_ID_DISC_STAKKA      0xd000
 
+#define USB_VENDOR_ID_PANTHERLORD      0x0810
+#define USB_DEVICE_ID_PANTHERLORD_TWIN_USB_JOYSTICK    0x0001
+
 /*
  * Alphabetically sorted blacklist by quirk type.
  */
@@ -969,6 +972,8 @@ static const struct hid_blacklist {
 
        { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_USB_RECEIVER, 
HID_QUIRK_BAD_RELATIVE_KEYS },
 
+       { USB_VENDOR_ID_PANTHERLORD, 
USB_DEVICE_ID_PANTHERLORD_TWIN_USB_JOYSTICK, HID_QUIRK_MULTI_INPUT | 
HID_QUIRK_SKIP_OUTPUT_REPORTS },
+
        { 0, 0 }
 };
 
diff --git a/include/linux/hid.h b/include/linux/hid.h
index 342b4e6..523b834 100644
--- a/include/linux/hid.h
+++ b/include/linux/hid.h
@@ -264,6 +264,7 @@ struct hid_item {
 #define HID_QUIRK_INVERT_HWHEEL                        0x00004000
 #define HID_QUIRK_POWERBOOK_ISO_KEYBOARD        0x00008000
 #define HID_QUIRK_BAD_RELATIVE_KEYS            0x00010000
+#define HID_QUIRK_SKIP_OUTPUT_REPORTS          0x00020000
 
 /*
  * This is the global environment of the parser. This information is
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to