aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/hid/hid-asus.c3
-rw-r--r--drivers/hid/hid-core.c2
-rw-r--r--drivers/hid/hid-input.c10
-rw-r--r--drivers/hid/hid-multitouch.c61
-rw-r--r--drivers/hid/hid-uclogic.c1
-rw-r--r--include/linux/hid.h65
6 files changed, 65 insertions, 77 deletions
diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c
index 88b9703318e4..cc738ebf93ac 100644
--- a/drivers/hid/hid-asus.c
+++ b/drivers/hid/hid-asus.c
@@ -644,8 +644,7 @@ static int asus_probe(struct hid_device *hdev, const struct hid_device_id *id)
644 * All functionality is on a single HID interface and for 644 * All functionality is on a single HID interface and for
645 * userspace the touchpad must be a separate input_dev. 645 * userspace the touchpad must be a separate input_dev.
646 */ 646 */
647 hdev->quirks |= HID_QUIRK_MULTI_INPUT | 647 hdev->quirks |= HID_QUIRK_MULTI_INPUT;
648 HID_QUIRK_NO_EMPTY_INPUT;
649 drvdata->tp = &asus_t100chi_tp; 648 drvdata->tp = &asus_t100chi_tp;
650 } 649 }
651 650
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index 4fc08c38bc0e..a40681d5a2a3 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -1966,6 +1966,8 @@ static int hid_device_probe(struct device *dev)
1966 } 1966 }
1967 } 1967 }
1968 1968
1969 /* reset the quirks that has been previously set */
1970 hdev->quirks = hid_lookup_quirk(hdev);
1969 hdev->driver = hdrv; 1971 hdev->driver = hdrv;
1970 if (hdrv->probe) { 1972 if (hdrv->probe) {
1971 ret = hdrv->probe(hdev, id); 1973 ret = hdrv->probe(hdev, id);
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
index d86398755b0d..6836a856c243 100644
--- a/drivers/hid/hid-input.c
+++ b/drivers/hid/hid-input.c
@@ -1657,16 +1657,16 @@ int hidinput_connect(struct hid_device *hid, unsigned int force)
1657 } 1657 }
1658 1658
1659 list_for_each_entry_safe(hidinput, next, &hid->inputs, list) { 1659 list_for_each_entry_safe(hidinput, next, &hid->inputs, list) {
1660 if ((hid->quirks & HID_QUIRK_NO_EMPTY_INPUT) && 1660 if (drv->input_configured &&
1661 !hidinput_has_been_populated(hidinput)) { 1661 drv->input_configured(hid, hidinput))
1662 goto out_unwind;
1663
1664 if (!hidinput_has_been_populated(hidinput)) {
1662 /* no need to register an input device not populated */ 1665 /* no need to register an input device not populated */
1663 hidinput_cleanup_hidinput(hid, hidinput); 1666 hidinput_cleanup_hidinput(hid, hidinput);
1664 continue; 1667 continue;
1665 } 1668 }
1666 1669
1667 if (drv->input_configured &&
1668 drv->input_configured(hid, hidinput))
1669 goto out_unwind;
1670 if (input_register_device(hidinput->input)) 1670 if (input_register_device(hidinput->input))
1671 goto out_unwind; 1671 goto out_unwind;
1672 hidinput->registered = true; 1672 hidinput->registered = true;
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
index 2e1736ba2444..ba32f0172030 100644
--- a/drivers/hid/hid-multitouch.c
+++ b/drivers/hid/hid-multitouch.c
@@ -74,6 +74,7 @@ MODULE_LICENSE("GPL");
74#define MT_QUIRK_TOUCH_SIZE_SCALING BIT(15) 74#define MT_QUIRK_TOUCH_SIZE_SCALING BIT(15)
75#define MT_QUIRK_STICKY_FINGERS BIT(16) 75#define MT_QUIRK_STICKY_FINGERS BIT(16)
76#define MT_QUIRK_ASUS_CUSTOM_UP BIT(17) 76#define MT_QUIRK_ASUS_CUSTOM_UP BIT(17)
77#define MT_QUIRK_WIN8_PTP_BUTTONS BIT(18)
77 78
78#define MT_INPUTMODE_TOUCHSCREEN 0x02 79#define MT_INPUTMODE_TOUCHSCREEN 0x02
79#define MT_INPUTMODE_TOUCHPAD 0x03 80#define MT_INPUTMODE_TOUCHPAD 0x03
@@ -126,7 +127,6 @@ struct mt_device {
126 int left_button_state; /* left button state */ 127 int left_button_state; /* left button state */
127 unsigned last_slot_field; /* the last field of a slot */ 128 unsigned last_slot_field; /* the last field of a slot */
128 unsigned mt_report_id; /* the report ID of the multitouch device */ 129 unsigned mt_report_id; /* the report ID of the multitouch device */
129 unsigned long initial_quirks; /* initial quirks state */
130 __s16 inputmode; /* InputMode HID feature, -1 if non-existent */ 130 __s16 inputmode; /* InputMode HID feature, -1 if non-existent */
131 __s16 inputmode_index; /* InputMode HID feature index in the report */ 131 __s16 inputmode_index; /* InputMode HID feature index in the report */
132 __s16 maxcontact_report_id; /* Maximum Contact Number HID feature, 132 __s16 maxcontact_report_id; /* Maximum Contact Number HID feature,
@@ -183,6 +183,7 @@ static void mt_post_parse(struct mt_device *td);
183#define MT_CLS_ASUS 0x010b 183#define MT_CLS_ASUS 0x010b
184#define MT_CLS_VTL 0x0110 184#define MT_CLS_VTL 0x0110
185#define MT_CLS_GOOGLE 0x0111 185#define MT_CLS_GOOGLE 0x0111
186#define MT_CLS_RAZER_BLADE_STEALTH 0x0112
186 187
187#define MT_DEFAULT_MAXCONTACT 10 188#define MT_DEFAULT_MAXCONTACT 10
188#define MT_MAX_MAXCONTACT 250 189#define MT_MAX_MAXCONTACT 250
@@ -241,7 +242,8 @@ static struct mt_class mt_classes[] = {
241 MT_QUIRK_IGNORE_DUPLICATES | 242 MT_QUIRK_IGNORE_DUPLICATES |
242 MT_QUIRK_HOVERING | 243 MT_QUIRK_HOVERING |
243 MT_QUIRK_CONTACT_CNT_ACCURATE | 244 MT_QUIRK_CONTACT_CNT_ACCURATE |
244 MT_QUIRK_STICKY_FINGERS }, 245 MT_QUIRK_STICKY_FINGERS |
246 MT_QUIRK_WIN8_PTP_BUTTONS },
245 { .name = MT_CLS_EXPORT_ALL_INPUTS, 247 { .name = MT_CLS_EXPORT_ALL_INPUTS,
246 .quirks = MT_QUIRK_ALWAYS_VALID | 248 .quirks = MT_QUIRK_ALWAYS_VALID |
247 MT_QUIRK_CONTACT_CNT_ACCURATE, 249 MT_QUIRK_CONTACT_CNT_ACCURATE,
@@ -250,7 +252,8 @@ static struct mt_class mt_classes[] = {
250 .quirks = MT_QUIRK_ALWAYS_VALID | 252 .quirks = MT_QUIRK_ALWAYS_VALID |
251 MT_QUIRK_IGNORE_DUPLICATES | 253 MT_QUIRK_IGNORE_DUPLICATES |
252 MT_QUIRK_HOVERING | 254 MT_QUIRK_HOVERING |
253 MT_QUIRK_CONTACT_CNT_ACCURATE, 255 MT_QUIRK_CONTACT_CNT_ACCURATE |
256 MT_QUIRK_WIN8_PTP_BUTTONS,
254 .export_all_inputs = true }, 257 .export_all_inputs = true },
255 258
256 /* 259 /*
@@ -323,6 +326,13 @@ static struct mt_class mt_classes[] = {
323 MT_QUIRK_SLOT_IS_CONTACTID | 326 MT_QUIRK_SLOT_IS_CONTACTID |
324 MT_QUIRK_HOVERING 327 MT_QUIRK_HOVERING
325 }, 328 },
329 { .name = MT_CLS_RAZER_BLADE_STEALTH,
330 .quirks = MT_QUIRK_ALWAYS_VALID |
331 MT_QUIRK_IGNORE_DUPLICATES |
332 MT_QUIRK_HOVERING |
333 MT_QUIRK_CONTACT_CNT_ACCURATE |
334 MT_QUIRK_WIN8_PTP_BUTTONS,
335 },
326 { } 336 { }
327}; 337};
328 338
@@ -369,7 +379,6 @@ static const struct attribute_group mt_attribute_group = {
369 379
370static void mt_get_feature(struct hid_device *hdev, struct hid_report *report) 380static void mt_get_feature(struct hid_device *hdev, struct hid_report *report)
371{ 381{
372 struct mt_device *td = hid_get_drvdata(hdev);
373 int ret; 382 int ret;
374 u32 size = hid_report_len(report); 383 u32 size = hid_report_len(report);
375 u8 *buf; 384 u8 *buf;
@@ -378,7 +387,7 @@ static void mt_get_feature(struct hid_device *hdev, struct hid_report *report)
378 * Do not fetch the feature report if the device has been explicitly 387 * Do not fetch the feature report if the device has been explicitly
379 * marked as non-capable. 388 * marked as non-capable.
380 */ 389 */
381 if (td->initial_quirks & HID_QUIRK_NO_INIT_REPORTS) 390 if (hdev->quirks & HID_QUIRK_NO_INIT_REPORTS)
382 return; 391 return;
383 392
384 buf = hid_alloc_report_buf(report, GFP_KERNEL); 393 buf = hid_alloc_report_buf(report, GFP_KERNEL);
@@ -660,8 +669,7 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
660 * MS PTP spec says that external buttons left and right have 669 * MS PTP spec says that external buttons left and right have
661 * usages 2 and 3. 670 * usages 2 and 3.
662 */ 671 */
663 if ((cls->name == MT_CLS_WIN_8 || 672 if ((cls->quirks & MT_QUIRK_WIN8_PTP_BUTTONS) &&
664 cls->name == MT_CLS_WIN_8_DUAL) &&
665 field->application == HID_DG_TOUCHPAD && 673 field->application == HID_DG_TOUCHPAD &&
666 (usage->hid & HID_USAGE) > 1) 674 (usage->hid & HID_USAGE) > 1)
667 code--; 675 code--;
@@ -773,9 +781,7 @@ static void mt_complete_slot(struct mt_device *td, struct input_dev *input)
773 */ 781 */
774static void mt_sync_frame(struct mt_device *td, struct input_dev *input) 782static void mt_sync_frame(struct mt_device *td, struct input_dev *input)
775{ 783{
776 __s32 cls = td->mtclass.name; 784 if (td->mtclass.quirks & MT_QUIRK_WIN8_PTP_BUTTONS)
777
778 if (cls == MT_CLS_WIN_8 || cls == MT_CLS_WIN_8_DUAL)
779 input_event(input, EV_KEY, BTN_LEFT, td->left_button_state); 785 input_event(input, EV_KEY, BTN_LEFT, td->left_button_state);
780 786
781 input_mt_sync_frame(input); 787 input_mt_sync_frame(input);
@@ -827,7 +833,6 @@ static void mt_process_mt_event(struct hid_device *hid, struct hid_field *field,
827 bool first_packet) 833 bool first_packet)
828{ 834{
829 struct mt_device *td = hid_get_drvdata(hid); 835 struct mt_device *td = hid_get_drvdata(hid);
830 __s32 cls = td->mtclass.name;
831 __s32 quirks = td->mtclass.quirks; 836 __s32 quirks = td->mtclass.quirks;
832 struct input_dev *input = field->hidinput->input; 837 struct input_dev *input = field->hidinput->input;
833 838
@@ -905,7 +910,7 @@ static void mt_process_mt_event(struct hid_device *hid, struct hid_field *field,
905 * non finger/touch events in the first_packet of 910 * non finger/touch events in the first_packet of
906 * a (possible) multi-packet frame. 911 * a (possible) multi-packet frame.
907 */ 912 */
908 if ((cls == MT_CLS_WIN_8 || cls == MT_CLS_WIN_8_DUAL) && 913 if ((quirks & MT_QUIRK_WIN8_PTP_BUTTONS) &&
909 !first_packet) 914 !first_packet)
910 return; 915 return;
911 916
@@ -916,7 +921,7 @@ static void mt_process_mt_event(struct hid_device *hid, struct hid_field *field,
916 * BTN_LEFT if either is pressed, so we or all values 921 * BTN_LEFT if either is pressed, so we or all values
917 * together and report the result in mt_sync_frame(). 922 * together and report the result in mt_sync_frame().
918 */ 923 */
919 if ((cls == MT_CLS_WIN_8 || cls == MT_CLS_WIN_8_DUAL) && 924 if ((quirks & MT_QUIRK_WIN8_PTP_BUTTONS) &&
920 usage->type == EV_KEY && usage->code == BTN_LEFT) { 925 usage->type == EV_KEY && usage->code == BTN_LEFT) {
921 td->left_button_state |= value; 926 td->left_button_state |= value;
922 return; 927 return;
@@ -940,7 +945,6 @@ static void mt_process_mt_event(struct hid_device *hid, struct hid_field *field,
940static void mt_touch_report(struct hid_device *hid, struct hid_report *report) 945static void mt_touch_report(struct hid_device *hid, struct hid_report *report)
941{ 946{
942 struct mt_device *td = hid_get_drvdata(hid); 947 struct mt_device *td = hid_get_drvdata(hid);
943 __s32 cls = td->mtclass.name;
944 struct hid_field *field; 948 struct hid_field *field;
945 bool first_packet; 949 bool first_packet;
946 unsigned count; 950 unsigned count;
@@ -969,7 +973,7 @@ static void mt_touch_report(struct hid_device *hid, struct hid_report *report)
969 * of a possible multi-packet frame be checking that the 973 * of a possible multi-packet frame be checking that the
970 * timestamp has changed. 974 * timestamp has changed.
971 */ 975 */
972 if ((cls == MT_CLS_WIN_8 || cls == MT_CLS_WIN_8_DUAL) && 976 if ((td->mtclass.quirks & MT_QUIRK_WIN8_PTP_BUTTONS) &&
973 td->num_received == 0 && td->prev_scantime != scantime) 977 td->num_received == 0 && td->prev_scantime != scantime)
974 td->num_expected = value; 978 td->num_expected = value;
975 /* A non 0 contact count always indicates a first packet */ 979 /* A non 0 contact count always indicates a first packet */
@@ -1448,11 +1452,6 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
1448 if (id->vendor == HID_ANY_ID && id->product == HID_ANY_ID) 1452 if (id->vendor == HID_ANY_ID && id->product == HID_ANY_ID)
1449 td->serial_maybe = true; 1453 td->serial_maybe = true;
1450 1454
1451 /*
1452 * Store the initial quirk state
1453 */
1454 td->initial_quirks = hdev->quirks;
1455
1456 /* This allows the driver to correctly support devices 1455 /* This allows the driver to correctly support devices
1457 * that emit events over several HID messages. 1456 * that emit events over several HID messages.
1458 */ 1457 */
@@ -1464,22 +1463,6 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
1464 * device. 1463 * device.
1465 */ 1464 */
1466 hdev->quirks |= HID_QUIRK_MULTI_INPUT; 1465 hdev->quirks |= HID_QUIRK_MULTI_INPUT;
1467 hdev->quirks |= HID_QUIRK_NO_EMPTY_INPUT;
1468
1469 /*
1470 * Some multitouch screens do not like to be polled for input
1471 * reports. Fortunately, the Win8 spec says that all touches
1472 * should be sent during each report, making the initialization
1473 * of input reports unnecessary. For Win7 devices, well, let's hope
1474 * they will still be happy (this is only be a problem if a touch
1475 * was already there while probing the device).
1476 *
1477 * In addition some touchpads do not behave well if we read
1478 * all feature reports from them. Instead we prevent
1479 * initial report fetching and then selectively fetch each
1480 * report we are interested in.
1481 */
1482 hdev->quirks |= HID_QUIRK_NO_INIT_REPORTS;
1483 1466
1484 timer_setup(&td->release_timer, mt_expired_timeout, 0); 1467 timer_setup(&td->release_timer, mt_expired_timeout, 0);
1485 1468
@@ -1538,7 +1521,6 @@ static void mt_remove(struct hid_device *hdev)
1538 1521
1539 sysfs_remove_group(&hdev->dev.kobj, &mt_attribute_group); 1522 sysfs_remove_group(&hdev->dev.kobj, &mt_attribute_group);
1540 hid_hw_stop(hdev); 1523 hid_hw_stop(hdev);
1541 hdev->quirks = td->initial_quirks;
1542} 1524}
1543 1525
1544/* 1526/*
@@ -1794,6 +1776,11 @@ static const struct hid_device_id mt_devices[] = {
1794 MT_USB_DEVICE(USB_VENDOR_ID_QUANTA, 1776 MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
1795 USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001) }, 1777 USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001) },
1796 1778
1779 /* Razer touchpads */
1780 { .driver_data = MT_CLS_RAZER_BLADE_STEALTH,
1781 HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
1782 USB_VENDOR_ID_SYNAPTICS, 0x8323) },
1783
1797 /* Stantum panels */ 1784 /* Stantum panels */
1798 { .driver_data = MT_CLS_CONFIDENCE, 1785 { .driver_data = MT_CLS_CONFIDENCE,
1799 MT_USB_DEVICE(USB_VENDOR_ID_STANTUM_STM, 1786 MT_USB_DEVICE(USB_VENDOR_ID_STANTUM_STM,
diff --git a/drivers/hid/hid-uclogic.c b/drivers/hid/hid-uclogic.c
index e3e6e5c893cc..56b196d60041 100644
--- a/drivers/hid/hid-uclogic.c
+++ b/drivers/hid/hid-uclogic.c
@@ -946,7 +946,6 @@ static int uclogic_probe(struct hid_device *hdev,
946 * than the pen, so use QUIRK_MULTI_INPUT for all tablets. 946 * than the pen, so use QUIRK_MULTI_INPUT for all tablets.
947 */ 947 */
948 hdev->quirks |= HID_QUIRK_MULTI_INPUT; 948 hdev->quirks |= HID_QUIRK_MULTI_INPUT;
949 hdev->quirks |= HID_QUIRK_NO_EMPTY_INPUT;
950 949
951 /* Allocate and assign driver data */ 950 /* Allocate and assign driver data */
952 drvdata = devm_kzalloc(&hdev->dev, sizeof(*drvdata), GFP_KERNEL); 951 drvdata = devm_kzalloc(&hdev->dev, sizeof(*drvdata), GFP_KERNEL);
diff --git a/include/linux/hid.h b/include/linux/hid.h
index 0efe80b59156..0f5cc64b2e51 100644
--- a/include/linux/hid.h
+++ b/include/linux/hid.h
@@ -26,6 +26,7 @@
26#define __HID_H 26#define __HID_H
27 27
28 28
29#include <linux/bitops.h>
29#include <linux/types.h> 30#include <linux/types.h>
30#include <linux/slab.h> 31#include <linux/slab.h>
31#include <linux/list.h> 32#include <linux/list.h>
@@ -310,13 +311,13 @@ struct hid_item {
310 * HID connect requests 311 * HID connect requests
311 */ 312 */
312 313
313#define HID_CONNECT_HIDINPUT 0x01 314#define HID_CONNECT_HIDINPUT BIT(0)
314#define HID_CONNECT_HIDINPUT_FORCE 0x02 315#define HID_CONNECT_HIDINPUT_FORCE BIT(1)
315#define HID_CONNECT_HIDRAW 0x04 316#define HID_CONNECT_HIDRAW BIT(2)
316#define HID_CONNECT_HIDDEV 0x08 317#define HID_CONNECT_HIDDEV BIT(3)
317#define HID_CONNECT_HIDDEV_FORCE 0x10 318#define HID_CONNECT_HIDDEV_FORCE BIT(4)
318#define HID_CONNECT_FF 0x20 319#define HID_CONNECT_FF BIT(5)
319#define HID_CONNECT_DRIVER 0x40 320#define HID_CONNECT_DRIVER BIT(6)
320#define HID_CONNECT_DEFAULT (HID_CONNECT_HIDINPUT|HID_CONNECT_HIDRAW| \ 321#define HID_CONNECT_DEFAULT (HID_CONNECT_HIDINPUT|HID_CONNECT_HIDRAW| \
321 HID_CONNECT_HIDDEV|HID_CONNECT_FF) 322 HID_CONNECT_HIDDEV|HID_CONNECT_FF)
322 323
@@ -329,25 +330,25 @@ struct hid_item {
329 */ 330 */
330#define MAX_USBHID_BOOT_QUIRKS 4 331#define MAX_USBHID_BOOT_QUIRKS 4
331 332
332#define HID_QUIRK_INVERT 0x00000001 333#define HID_QUIRK_INVERT BIT(0)
333#define HID_QUIRK_NOTOUCH 0x00000002 334#define HID_QUIRK_NOTOUCH BIT(1)
334#define HID_QUIRK_IGNORE 0x00000004 335#define HID_QUIRK_IGNORE BIT(2)
335#define HID_QUIRK_NOGET 0x00000008 336#define HID_QUIRK_NOGET BIT(3)
336#define HID_QUIRK_HIDDEV_FORCE 0x00000010 337#define HID_QUIRK_HIDDEV_FORCE BIT(4)
337#define HID_QUIRK_BADPAD 0x00000020 338#define HID_QUIRK_BADPAD BIT(5)
338#define HID_QUIRK_MULTI_INPUT 0x00000040 339#define HID_QUIRK_MULTI_INPUT BIT(6)
339#define HID_QUIRK_HIDINPUT_FORCE 0x00000080 340#define HID_QUIRK_HIDINPUT_FORCE BIT(7)
340#define HID_QUIRK_NO_EMPTY_INPUT 0x00000100 341/* BIT(8) reserved for backward compatibility, was HID_QUIRK_NO_EMPTY_INPUT */
341/* 0x00000200 reserved for backward compatibility, was NO_INIT_INPUT_REPORTS */ 342/* BIT(9) reserved for backward compatibility, was NO_INIT_INPUT_REPORTS */
342#define HID_QUIRK_ALWAYS_POLL 0x00000400 343#define HID_QUIRK_ALWAYS_POLL BIT(10)
343#define HID_QUIRK_SKIP_OUTPUT_REPORTS 0x00010000 344#define HID_QUIRK_SKIP_OUTPUT_REPORTS BIT(16)
344#define HID_QUIRK_SKIP_OUTPUT_REPORT_ID 0x00020000 345#define HID_QUIRK_SKIP_OUTPUT_REPORT_ID BIT(17)
345#define HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP 0x00040000 346#define HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP BIT(18)
346#define HID_QUIRK_HAVE_SPECIAL_DRIVER 0x00080000 347#define HID_QUIRK_HAVE_SPECIAL_DRIVER BIT(19)
347#define HID_QUIRK_FULLSPEED_INTERVAL 0x10000000 348#define HID_QUIRK_FULLSPEED_INTERVAL BIT(28)
348#define HID_QUIRK_NO_INIT_REPORTS 0x20000000 349#define HID_QUIRK_NO_INIT_REPORTS BIT(29)
349#define HID_QUIRK_NO_IGNORE 0x40000000 350#define HID_QUIRK_NO_IGNORE BIT(30)
350#define HID_QUIRK_NO_INPUT_SYNC 0x80000000 351#define HID_QUIRK_NO_INPUT_SYNC BIT(31)
351 352
352/* 353/*
353 * HID device groups 354 * HID device groups
@@ -494,13 +495,13 @@ struct hid_output_fifo {
494 char *raw_report; 495 char *raw_report;
495}; 496};
496 497
497#define HID_CLAIMED_INPUT 1 498#define HID_CLAIMED_INPUT BIT(0)
498#define HID_CLAIMED_HIDDEV 2 499#define HID_CLAIMED_HIDDEV BIT(1)
499#define HID_CLAIMED_HIDRAW 4 500#define HID_CLAIMED_HIDRAW BIT(2)
500#define HID_CLAIMED_DRIVER 8 501#define HID_CLAIMED_DRIVER BIT(3)
501 502
502#define HID_STAT_ADDED 1 503#define HID_STAT_ADDED BIT(0)
503#define HID_STAT_PARSED 2 504#define HID_STAT_PARSED BIT(1)
504 505
505struct hid_input { 506struct hid_input {
506 struct list_head list; 507 struct list_head list;