lkml.org 
[lkml]   [2016]   [Jan]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.12 91/91] HID: dragonrise: fix HID Descriptor for 0x0006 PID
    Date
    From: Maciej Zuk <gzmlke@gmail.com>

    3.12-stable review patch. If anyone has any objections, please let me know.

    ===============

    commit 18339f59c3a6698ee17d32970c9e1e450b16e7c3 upstream.

    Fixed HID descriptor for DragonRise Joystick. Replaced default descriptor
    which doubles Z axis and causes mixing values of X and Z axes.

    Signed-off-by: Maciej Zuk <gzmlke@gmail.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Cc: Oliver Neukum <ONeukum@suse.com>
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    ---
    drivers/hid/hid-dr.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++
    1 file changed, 58 insertions(+)

    diff --git a/drivers/hid/hid-dr.c b/drivers/hid/hid-dr.c
    index ce0644424f58..1d78ba3b799e 100644
    --- a/drivers/hid/hid-dr.c
    +++ b/drivers/hid/hid-dr.c
    @@ -234,6 +234,58 @@ static __u8 pid0011_rdesc_fixed[] = {
    0xC0 /* End Collection */
    };

    +static __u8 pid0006_rdesc_fixed[] = {
    + 0x05, 0x01, /* Usage Page (Generic Desktop) */
    + 0x09, 0x04, /* Usage (Joystick) */
    + 0xA1, 0x01, /* Collection (Application) */
    + 0xA1, 0x02, /* Collection (Logical) */
    + 0x75, 0x08, /* Report Size (8) */
    + 0x95, 0x05, /* Report Count (5) */
    + 0x15, 0x00, /* Logical Minimum (0) */
    + 0x26, 0xFF, 0x00, /* Logical Maximum (255) */
    + 0x35, 0x00, /* Physical Minimum (0) */
    + 0x46, 0xFF, 0x00, /* Physical Maximum (255) */
    + 0x09, 0x30, /* Usage (X) */
    + 0x09, 0x33, /* Usage (Ry) */
    + 0x09, 0x32, /* Usage (Z) */
    + 0x09, 0x31, /* Usage (Y) */
    + 0x09, 0x34, /* Usage (Ry) */
    + 0x81, 0x02, /* Input (Variable) */
    + 0x75, 0x04, /* Report Size (4) */
    + 0x95, 0x01, /* Report Count (1) */
    + 0x25, 0x07, /* Logical Maximum (7) */
    + 0x46, 0x3B, 0x01, /* Physical Maximum (315) */
    + 0x65, 0x14, /* Unit (Centimeter) */
    + 0x09, 0x39, /* Usage (Hat switch) */
    + 0x81, 0x42, /* Input (Variable) */
    + 0x65, 0x00, /* Unit (None) */
    + 0x75, 0x01, /* Report Size (1) */
    + 0x95, 0x0C, /* Report Count (12) */
    + 0x25, 0x01, /* Logical Maximum (1) */
    + 0x45, 0x01, /* Physical Maximum (1) */
    + 0x05, 0x09, /* Usage Page (Button) */
    + 0x19, 0x01, /* Usage Minimum (0x01) */
    + 0x29, 0x0C, /* Usage Maximum (0x0C) */
    + 0x81, 0x02, /* Input (Variable) */
    + 0x06, 0x00, 0xFF, /* Usage Page (Vendor Defined) */
    + 0x75, 0x01, /* Report Size (1) */
    + 0x95, 0x08, /* Report Count (8) */
    + 0x25, 0x01, /* Logical Maximum (1) */
    + 0x45, 0x01, /* Physical Maximum (1) */
    + 0x09, 0x01, /* Usage (0x01) */
    + 0x81, 0x02, /* Input (Variable) */
    + 0xC0, /* End Collection */
    + 0xA1, 0x02, /* Collection (Logical) */
    + 0x75, 0x08, /* Report Size (8) */
    + 0x95, 0x07, /* Report Count (7) */
    + 0x46, 0xFF, 0x00, /* Physical Maximum (255) */
    + 0x26, 0xFF, 0x00, /* Logical Maximum (255) */
    + 0x09, 0x02, /* Usage (0x02) */
    + 0x91, 0x02, /* Output (Variable) */
    + 0xC0, /* End Collection */
    + 0xC0 /* End Collection */
    +};
    +
    static __u8 *dr_report_fixup(struct hid_device *hdev, __u8 *rdesc,
    unsigned int *rsize)
    {
    @@ -244,6 +296,12 @@ static __u8 *dr_report_fixup(struct hid_device *hdev, __u8 *rdesc,
    *rsize = sizeof(pid0011_rdesc_fixed);
    }
    break;
    + case 0x0006:
    + if (*rsize == sizeof(pid0006_rdesc_fixed)) {
    + rdesc = pid0006_rdesc_fixed;
    + *rsize = sizeof(pid0006_rdesc_fixed);
    + }
    + break;
    }
    return rdesc;
    }
    --
    2.6.4


    \
     
     \ /
      Last update: 2016-01-05 19:21    [W:2.708 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site