diff options
| -rw-r--r-- | drivers/hid/hid-dr.c | 58 |
1 files changed, 58 insertions, 0 deletions
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[] = { | |||
| 234 | 0xC0 /* End Collection */ | 234 | 0xC0 /* End Collection */ |
| 235 | }; | 235 | }; |
| 236 | 236 | ||
| 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 | |||
| 237 | static __u8 *dr_report_fixup(struct hid_device *hdev, __u8 *rdesc, | 289 | static __u8 *dr_report_fixup(struct hid_device *hdev, __u8 *rdesc, |
| 238 | unsigned int *rsize) | 290 | unsigned int *rsize) |
| 239 | { | 291 | { |
| @@ -244,6 +296,12 @@ static __u8 *dr_report_fixup(struct hid_device *hdev, __u8 *rdesc, | |||
| 244 | *rsize = sizeof(pid0011_rdesc_fixed); | 296 | *rsize = sizeof(pid0011_rdesc_fixed); |
| 245 | } | 297 | } |
| 246 | break; | 298 | 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; | ||
| 247 | } | 305 | } |
| 248 | return rdesc; | 306 | return rdesc; |
| 249 | } | 307 | } |
