Skip to content

Commit 18339f5

Browse files
maciej-zukJiri Kosina
authored andcommitted
HID: dragonrise: fix HID Descriptor for 0x0006 PID
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 <[email protected]> Signed-off-by: Jiri Kosina <[email protected]>
1 parent 851328f commit 18339f5

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

drivers/hid/hid-dr.c

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,58 @@ static __u8 pid0011_rdesc_fixed[] = {
234234
0xC0 /* End Collection */
235235
};
236236

237+
static __u8 pid0006_rdesc_fixed[] = {
238+
0x05, 0x01, /* Usage Page (Generic Desktop) */
239+
0x09, 0x04, /* Usage (Joystick) */
240+
0xA1, 0x01, /* Collection (Application) */
241+
0xA1, 0x02, /* Collection (Logical) */
242+
0x75, 0x08, /* Report Size (8) */
243+
0x95, 0x05, /* Report Count (5) */
244+
0x15, 0x00, /* Logical Minimum (0) */
245+
0x26, 0xFF, 0x00, /* Logical Maximum (255) */
246+
0x35, 0x00, /* Physical Minimum (0) */
247+
0x46, 0xFF, 0x00, /* Physical Maximum (255) */
248+
0x09, 0x30, /* Usage (X) */
249+
0x09, 0x33, /* Usage (Ry) */
250+
0x09, 0x32, /* Usage (Z) */
251+
0x09, 0x31, /* Usage (Y) */
252+
0x09, 0x34, /* Usage (Ry) */
253+
0x81, 0x02, /* Input (Variable) */
254+
0x75, 0x04, /* Report Size (4) */
255+
0x95, 0x01, /* Report Count (1) */
256+
0x25, 0x07, /* Logical Maximum (7) */
257+
0x46, 0x3B, 0x01, /* Physical Maximum (315) */
258+
0x65, 0x14, /* Unit (Centimeter) */
259+
0x09, 0x39, /* Usage (Hat switch) */
260+
0x81, 0x42, /* Input (Variable) */
261+
0x65, 0x00, /* Unit (None) */
262+
0x75, 0x01, /* Report Size (1) */
263+
0x95, 0x0C, /* Report Count (12) */
264+
0x25, 0x01, /* Logical Maximum (1) */
265+
0x45, 0x01, /* Physical Maximum (1) */
266+
0x05, 0x09, /* Usage Page (Button) */
267+
0x19, 0x01, /* Usage Minimum (0x01) */
268+
0x29, 0x0C, /* Usage Maximum (0x0C) */
269+
0x81, 0x02, /* Input (Variable) */
270+
0x06, 0x00, 0xFF, /* Usage Page (Vendor Defined) */
271+
0x75, 0x01, /* Report Size (1) */
272+
0x95, 0x08, /* Report Count (8) */
273+
0x25, 0x01, /* Logical Maximum (1) */
274+
0x45, 0x01, /* Physical Maximum (1) */
275+
0x09, 0x01, /* Usage (0x01) */
276+
0x81, 0x02, /* Input (Variable) */
277+
0xC0, /* End Collection */
278+
0xA1, 0x02, /* Collection (Logical) */
279+
0x75, 0x08, /* Report Size (8) */
280+
0x95, 0x07, /* Report Count (7) */
281+
0x46, 0xFF, 0x00, /* Physical Maximum (255) */
282+
0x26, 0xFF, 0x00, /* Logical Maximum (255) */
283+
0x09, 0x02, /* Usage (0x02) */
284+
0x91, 0x02, /* Output (Variable) */
285+
0xC0, /* End Collection */
286+
0xC0 /* End Collection */
287+
};
288+
237289
static __u8 *dr_report_fixup(struct hid_device *hdev, __u8 *rdesc,
238290
unsigned int *rsize)
239291
{
@@ -244,6 +296,12 @@ static __u8 *dr_report_fixup(struct hid_device *hdev, __u8 *rdesc,
244296
*rsize = sizeof(pid0011_rdesc_fixed);
245297
}
246298
break;
299+
case 0x0006:
300+
if (*rsize == sizeof(pid0006_rdesc_fixed)) {
301+
rdesc = pid0006_rdesc_fixed;
302+
*rsize = sizeof(pid0006_rdesc_fixed);
303+
}
304+
break;
247305
}
248306
return rdesc;
249307
}

0 commit comments

Comments
 (0)