1
2
3
4
5
6
7
8
9
10
11
12
13#ifndef __HID_H
14#define __HID_H
15
16
17#include <linux/bitops.h>
18#include <linux/types.h>
19#include <linux/slab.h>
20#include <linux/list.h>
21#include <linux/mod_devicetable.h>
22#include <linux/timer.h>
23#include <linux/workqueue.h>
24#include <linux/input.h>
25#include <linux/semaphore.h>
26#include <linux/mutex.h>
27#include <linux/power_supply.h>
28#include <uapi/linux/hid.h>
29
30
31
32
33
34
35
36struct hid_item {
37 unsigned format;
38 __u8 size;
39 __u8 type;
40 __u8 tag;
41 union {
42 __u8 u8;
43 __s8 s8;
44 __u16 u16;
45 __s16 s16;
46 __u32 u32;
47 __s32 s32;
48 __u8 *longdata;
49 } data;
50};
51
52
53
54
55
56#define HID_ITEM_FORMAT_SHORT 0
57#define HID_ITEM_FORMAT_LONG 1
58
59
60
61
62
63#define HID_ITEM_TAG_LONG 15
64
65
66
67
68
69#define HID_ITEM_TYPE_MAIN 0
70#define HID_ITEM_TYPE_GLOBAL 1
71#define HID_ITEM_TYPE_LOCAL 2
72#define HID_ITEM_TYPE_RESERVED 3
73
74
75
76
77
78#define HID_MAIN_ITEM_TAG_INPUT 8
79#define HID_MAIN_ITEM_TAG_OUTPUT 9
80#define HID_MAIN_ITEM_TAG_FEATURE 11
81#define HID_MAIN_ITEM_TAG_BEGIN_COLLECTION 10
82#define HID_MAIN_ITEM_TAG_END_COLLECTION 12
83
84
85
86
87
88#define HID_MAIN_ITEM_CONSTANT 0x001
89#define HID_MAIN_ITEM_VARIABLE 0x002
90#define HID_MAIN_ITEM_RELATIVE 0x004
91#define HID_MAIN_ITEM_WRAP 0x008
92#define HID_MAIN_ITEM_NONLINEAR 0x010
93#define HID_MAIN_ITEM_NO_PREFERRED 0x020
94#define HID_MAIN_ITEM_NULL_STATE 0x040
95#define HID_MAIN_ITEM_VOLATILE 0x080
96#define HID_MAIN_ITEM_BUFFERED_BYTE 0x100
97
98
99
100
101
102#define HID_COLLECTION_PHYSICAL 0
103#define HID_COLLECTION_APPLICATION 1
104#define HID_COLLECTION_LOGICAL 2
105
106
107
108
109
110#define HID_GLOBAL_ITEM_TAG_USAGE_PAGE 0
111#define HID_GLOBAL_ITEM_TAG_LOGICAL_MINIMUM 1
112#define HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM 2
113#define HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM 3
114#define HID_GLOBAL_ITEM_TAG_PHYSICAL_MAXIMUM 4
115#define HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT 5
116#define HID_GLOBAL_ITEM_TAG_UNIT 6
117#define HID_GLOBAL_ITEM_TAG_REPORT_SIZE 7
118#define HID_GLOBAL_ITEM_TAG_REPORT_ID 8
119#define HID_GLOBAL_ITEM_TAG_REPORT_COUNT 9
120#define HID_GLOBAL_ITEM_TAG_PUSH 10
121#define HID_GLOBAL_ITEM_TAG_POP 11
122
123
124
125
126
127#define HID_LOCAL_ITEM_TAG_USAGE 0
128#define HID_LOCAL_ITEM_TAG_USAGE_MINIMUM 1
129#define HID_LOCAL_ITEM_TAG_USAGE_MAXIMUM 2
130#define HID_LOCAL_ITEM_TAG_DESIGNATOR_INDEX 3
131#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MINIMUM 4
132#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MAXIMUM 5
133#define HID_LOCAL_ITEM_TAG_STRING_INDEX 7
134#define HID_LOCAL_ITEM_TAG_STRING_MINIMUM 8
135#define HID_LOCAL_ITEM_TAG_STRING_MAXIMUM 9
136#define HID_LOCAL_ITEM_TAG_DELIMITER 10
137
138
139
140
141
142#define HID_USAGE_PAGE 0xffff0000
143
144#define HID_UP_UNDEFINED 0x00000000
145#define HID_UP_GENDESK 0x00010000
146#define HID_UP_SIMULATION 0x00020000
147#define HID_UP_GENDEVCTRLS 0x00060000
148#define HID_UP_KEYBOARD 0x00070000
149#define HID_UP_LED 0x00080000
150#define HID_UP_BUTTON 0x00090000
151#define HID_UP_ORDINAL 0x000a0000
152#define HID_UP_TELEPHONY 0x000b0000
153#define HID_UP_CONSUMER 0x000c0000
154#define HID_UP_DIGITIZER 0x000d0000
155#define HID_UP_PID 0x000f0000
156#define HID_UP_BATTERY 0x00850000
157#define HID_UP_HPVENDOR 0xff7f0000
158#define HID_UP_HPVENDOR2 0xff010000
159#define HID_UP_MSVENDOR 0xff000000
160#define HID_UP_CUSTOM 0x00ff0000
161#define HID_UP_LOGIVENDOR 0xffbc0000
162#define HID_UP_LOGIVENDOR2 0xff090000
163#define HID_UP_LOGIVENDOR3 0xff430000
164#define HID_UP_LNVENDOR 0xffa00000
165#define HID_UP_SENSOR 0x00200000
166#define HID_UP_ASUSVENDOR 0xff310000
167#define HID_UP_GOOGLEVENDOR 0xffd10000
168
169#define HID_USAGE 0x0000ffff
170
171#define HID_GD_POINTER 0x00010001
172#define HID_GD_MOUSE 0x00010002
173#define HID_GD_JOYSTICK 0x00010004
174#define HID_GD_GAMEPAD 0x00010005
175#define HID_GD_KEYBOARD 0x00010006
176#define HID_GD_KEYPAD 0x00010007
177#define HID_GD_MULTIAXIS 0x00010008
178
179
180
181
182#define HID_GD_WIRELESS_RADIO_CTLS 0x0001000c
183
184
185
186
187#define HID_GD_SYSTEM_MULTIAXIS 0x0001000e
188
189#define HID_GD_X 0x00010030
190#define HID_GD_Y 0x00010031
191#define HID_GD_Z 0x00010032
192#define HID_GD_RX 0x00010033
193#define HID_GD_RY 0x00010034
194#define HID_GD_RZ 0x00010035
195#define HID_GD_SLIDER 0x00010036
196#define HID_GD_DIAL 0x00010037
197#define HID_GD_WHEEL 0x00010038
198#define HID_GD_HATSWITCH 0x00010039
199#define HID_GD_BUFFER 0x0001003a
200#define HID_GD_BYTECOUNT 0x0001003b
201#define HID_GD_MOTION 0x0001003c
202#define HID_GD_START 0x0001003d
203#define HID_GD_SELECT 0x0001003e
204#define HID_GD_VX 0x00010040
205#define HID_GD_VY 0x00010041
206#define HID_GD_VZ 0x00010042
207#define HID_GD_VBRX 0x00010043
208#define HID_GD_VBRY 0x00010044
209#define HID_GD_VBRZ 0x00010045
210#define HID_GD_VNO 0x00010046
211#define HID_GD_FEATURE 0x00010047
212#define HID_GD_RESOLUTION_MULTIPLIER 0x00010048
213#define HID_GD_SYSTEM_CONTROL 0x00010080
214#define HID_GD_UP 0x00010090
215#define HID_GD_DOWN 0x00010091
216#define HID_GD_RIGHT 0x00010092
217#define HID_GD_LEFT 0x00010093
218
219#define HID_GD_RFKILL_BTN 0x000100c6
220#define HID_GD_RFKILL_LED 0x000100c7
221#define HID_GD_RFKILL_SWITCH 0x000100c8
222
223#define HID_DC_BATTERYSTRENGTH 0x00060020
224
225#define HID_CP_CONSUMER_CONTROL 0x000c0001
226#define HID_CP_AC_PAN 0x000c0238
227
228#define HID_DG_DIGITIZER 0x000d0001
229#define HID_DG_PEN 0x000d0002
230#define HID_DG_LIGHTPEN 0x000d0003
231#define HID_DG_TOUCHSCREEN 0x000d0004
232#define HID_DG_TOUCHPAD 0x000d0005
233#define HID_DG_WHITEBOARD 0x000d0006
234#define HID_DG_STYLUS 0x000d0020
235#define HID_DG_PUCK 0x000d0021
236#define HID_DG_FINGER 0x000d0022
237#define HID_DG_TIPPRESSURE 0x000d0030
238#define HID_DG_BARRELPRESSURE 0x000d0031
239#define HID_DG_INRANGE 0x000d0032
240#define HID_DG_TOUCH 0x000d0033
241#define HID_DG_UNTOUCH 0x000d0034
242#define HID_DG_TAP 0x000d0035
243#define HID_DG_TABLETFUNCTIONKEY 0x000d0039
244#define HID_DG_PROGRAMCHANGEKEY 0x000d003a
245#define HID_DG_BATTERYSTRENGTH 0x000d003b
246#define HID_DG_INVERT 0x000d003c
247#define HID_DG_TILT_X 0x000d003d
248#define HID_DG_TILT_Y 0x000d003e
249#define HID_DG_TWIST 0x000d0041
250#define HID_DG_TIPSWITCH 0x000d0042
251#define HID_DG_TIPSWITCH2 0x000d0043
252#define HID_DG_BARRELSWITCH 0x000d0044
253#define HID_DG_ERASER 0x000d0045
254#define HID_DG_TABLETPICK 0x000d0046
255
256#define HID_CP_CONSUMERCONTROL 0x000c0001
257#define HID_CP_NUMERICKEYPAD 0x000c0002
258#define HID_CP_PROGRAMMABLEBUTTONS 0x000c0003
259#define HID_CP_MICROPHONE 0x000c0004
260#define HID_CP_HEADPHONE 0x000c0005
261#define HID_CP_GRAPHICEQUALIZER 0x000c0006
262#define HID_CP_FUNCTIONBUTTONS 0x000c0036
263#define HID_CP_SELECTION 0x000c0080
264#define HID_CP_MEDIASELECTION 0x000c0087
265#define HID_CP_SELECTDISC 0x000c00ba
266#define HID_CP_VOLUMEUP 0x000c00e9
267#define HID_CP_VOLUMEDOWN 0x000c00ea
268#define HID_CP_PLAYBACKSPEED 0x000c00f1
269#define HID_CP_PROXIMITY 0x000c0109
270#define HID_CP_SPEAKERSYSTEM 0x000c0160
271#define HID_CP_CHANNELLEFT 0x000c0161
272#define HID_CP_CHANNELRIGHT 0x000c0162
273#define HID_CP_CHANNELCENTER 0x000c0163
274#define HID_CP_CHANNELFRONT 0x000c0164
275#define HID_CP_CHANNELCENTERFRONT 0x000c0165
276#define HID_CP_CHANNELSIDE 0x000c0166
277#define HID_CP_CHANNELSURROUND 0x000c0167
278#define HID_CP_CHANNELLOWFREQUENCYENHANCEMENT 0x000c0168
279#define HID_CP_CHANNELTOP 0x000c0169
280#define HID_CP_CHANNELUNKNOWN 0x000c016a
281#define HID_CP_APPLICATIONLAUNCHBUTTONS 0x000c0180
282#define HID_CP_GENERICGUIAPPLICATIONCONTROLS 0x000c0200
283
284#define HID_DG_DEVICECONFIG 0x000d000e
285#define HID_DG_DEVICESETTINGS 0x000d0023
286#define HID_DG_AZIMUTH 0x000d003f
287#define HID_DG_CONFIDENCE 0x000d0047
288#define HID_DG_WIDTH 0x000d0048
289#define HID_DG_HEIGHT 0x000d0049
290#define HID_DG_CONTACTID 0x000d0051
291#define HID_DG_INPUTMODE 0x000d0052
292#define HID_DG_DEVICEINDEX 0x000d0053
293#define HID_DG_CONTACTCOUNT 0x000d0054
294#define HID_DG_CONTACTMAX 0x000d0055
295#define HID_DG_SCANTIME 0x000d0056
296#define HID_DG_SURFACESWITCH 0x000d0057
297#define HID_DG_BUTTONSWITCH 0x000d0058
298#define HID_DG_BUTTONTYPE 0x000d0059
299#define HID_DG_BARRELSWITCH2 0x000d005a
300#define HID_DG_TOOLSERIALNUMBER 0x000d005b
301#define HID_DG_LATENCYMODE 0x000d0060
302
303#define HID_BAT_ABSOLUTESTATEOFCHARGE 0x00850065
304
305#define HID_VD_ASUS_CUSTOM_MEDIA_KEYS 0xff310076
306
307
308
309
310#define HID_INPUT_REPORT 0
311#define HID_OUTPUT_REPORT 1
312#define HID_FEATURE_REPORT 2
313
314#define HID_REPORT_TYPES 3
315
316
317
318
319
320#define HID_CONNECT_HIDINPUT BIT(0)
321#define HID_CONNECT_HIDINPUT_FORCE BIT(1)
322#define HID_CONNECT_HIDRAW BIT(2)
323#define HID_CONNECT_HIDDEV BIT(3)
324#define HID_CONNECT_HIDDEV_FORCE BIT(4)
325#define HID_CONNECT_FF BIT(5)
326#define HID_CONNECT_DRIVER BIT(6)
327#define HID_CONNECT_DEFAULT (HID_CONNECT_HIDINPUT|HID_CONNECT_HIDRAW| \
328 HID_CONNECT_HIDDEV|HID_CONNECT_FF)
329
330
331
332
333
334
335
336
337#define MAX_USBHID_BOOT_QUIRKS 4
338
339#define HID_QUIRK_INVERT BIT(0)
340#define HID_QUIRK_NOTOUCH BIT(1)
341#define HID_QUIRK_IGNORE BIT(2)
342#define HID_QUIRK_NOGET BIT(3)
343#define HID_QUIRK_HIDDEV_FORCE BIT(4)
344#define HID_QUIRK_BADPAD BIT(5)
345#define HID_QUIRK_MULTI_INPUT BIT(6)
346#define HID_QUIRK_HIDINPUT_FORCE BIT(7)
347
348
349#define HID_QUIRK_ALWAYS_POLL BIT(10)
350#define HID_QUIRK_INPUT_PER_APP BIT(11)
351#define HID_QUIRK_SKIP_OUTPUT_REPORTS BIT(16)
352#define HID_QUIRK_SKIP_OUTPUT_REPORT_ID BIT(17)
353#define HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP BIT(18)
354#define HID_QUIRK_HAVE_SPECIAL_DRIVER BIT(19)
355#define HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE BIT(20)
356#define HID_QUIRK_FULLSPEED_INTERVAL BIT(28)
357#define HID_QUIRK_NO_INIT_REPORTS BIT(29)
358#define HID_QUIRK_NO_IGNORE BIT(30)
359#define HID_QUIRK_NO_INPUT_SYNC BIT(31)
360
361
362
363
364
365
366
367#define HID_GROUP_GENERIC 0x0001
368#define HID_GROUP_MULTITOUCH 0x0002
369#define HID_GROUP_SENSOR_HUB 0x0003
370#define HID_GROUP_MULTITOUCH_WIN_8 0x0004
371
372
373
374
375#define HID_GROUP_RMI 0x0100
376#define HID_GROUP_WACOM 0x0101
377#define HID_GROUP_LOGITECH_DJ_DEVICE 0x0102
378#define HID_GROUP_STEAM 0x0103
379#define HID_GROUP_LOGITECH_27MHZ_DEVICE 0x0104
380#define HID_GROUP_VIVALDI 0x0105
381
382
383
384
385#define HID_REPORT_PROTOCOL 1
386#define HID_BOOT_PROTOCOL 0
387
388
389
390
391
392
393
394struct hid_global {
395 unsigned usage_page;
396 __s32 logical_minimum;
397 __s32 logical_maximum;
398 __s32 physical_minimum;
399 __s32 physical_maximum;
400 __s32 unit_exponent;
401 unsigned unit;
402 unsigned report_id;
403 unsigned report_size;
404 unsigned report_count;
405};
406
407
408
409
410
411#define HID_MAX_USAGES 12288
412#define HID_DEFAULT_NUM_COLLECTIONS 16
413
414struct hid_local {
415 unsigned usage[HID_MAX_USAGES];
416 u8 usage_size[HID_MAX_USAGES];
417 unsigned collection_index[HID_MAX_USAGES];
418 unsigned usage_index;
419 unsigned usage_minimum;
420 unsigned delimiter_depth;
421 unsigned delimiter_branch;
422};
423
424
425
426
427
428
429struct hid_collection {
430 int parent_idx;
431 unsigned type;
432 unsigned usage;
433 unsigned level;
434};
435
436struct hid_usage {
437 unsigned hid;
438 unsigned collection_index;
439 unsigned usage_index;
440 __s8 resolution_multiplier;
441
442
443 __s8 wheel_factor;
444 __u16 code;
445 __u8 type;
446 __s8 hat_min;
447 __s8 hat_max;
448 __s8 hat_dir;
449 __s16 wheel_accumulated;
450};
451
452struct hid_input;
453
454struct hid_field {
455 unsigned physical;
456 unsigned logical;
457 unsigned application;
458 struct hid_usage *usage;
459 unsigned maxusage;
460 unsigned flags;
461 unsigned report_offset;
462 unsigned report_size;
463 unsigned report_count;
464 unsigned report_type;
465 __s32 *value;
466 __s32 logical_minimum;
467 __s32 logical_maximum;
468 __s32 physical_minimum;
469 __s32 physical_maximum;
470 __s32 unit_exponent;
471 unsigned unit;
472 struct hid_report *report;
473 unsigned index;
474
475 struct hid_input *hidinput;
476 __u16 dpad;
477};
478
479#define HID_MAX_FIELDS 256
480
481struct hid_report {
482 struct list_head list;
483 struct list_head hidinput_list;
484 unsigned int id;
485 unsigned int type;
486 unsigned int application;
487 struct hid_field *field[HID_MAX_FIELDS];
488 unsigned maxfield;
489 unsigned size;
490 struct hid_device *device;
491};
492
493#define HID_MAX_IDS 256
494
495struct hid_report_enum {
496 unsigned numbered;
497 struct list_head report_list;
498 struct hid_report *report_id_hash[HID_MAX_IDS];
499};
500
501#define HID_MIN_BUFFER_SIZE 64
502#define HID_MAX_BUFFER_SIZE 16384
503#define HID_CONTROL_FIFO_SIZE 256
504#define HID_OUTPUT_FIFO_SIZE 64
505
506struct hid_control_fifo {
507 unsigned char dir;
508 struct hid_report *report;
509 char *raw_report;
510};
511
512struct hid_output_fifo {
513 struct hid_report *report;
514 char *raw_report;
515};
516
517#define HID_CLAIMED_INPUT BIT(0)
518#define HID_CLAIMED_HIDDEV BIT(1)
519#define HID_CLAIMED_HIDRAW BIT(2)
520#define HID_CLAIMED_DRIVER BIT(3)
521
522#define HID_STAT_ADDED BIT(0)
523#define HID_STAT_PARSED BIT(1)
524#define HID_STAT_DUP_DETECTED BIT(2)
525#define HID_STAT_REPROBED BIT(3)
526
527struct hid_input {
528 struct list_head list;
529 struct hid_report *report;
530 struct input_dev *input;
531 const char *name;
532 bool registered;
533 struct list_head reports;
534 unsigned int application;
535};
536
537enum hid_type {
538 HID_TYPE_OTHER = 0,
539 HID_TYPE_USBMOUSE,
540 HID_TYPE_USBNONE
541};
542
543enum hid_battery_status {
544 HID_BATTERY_UNKNOWN = 0,
545 HID_BATTERY_QUERIED,
546 HID_BATTERY_REPORTED,
547};
548
549struct hid_driver;
550struct hid_ll_driver;
551
552struct hid_device {
553 __u8 *dev_rdesc;
554 unsigned dev_rsize;
555 __u8 *rdesc;
556 unsigned rsize;
557 struct hid_collection *collection;
558 unsigned collection_size;
559 unsigned maxcollection;
560 unsigned maxapplication;
561 __u16 bus;
562 __u16 group;
563 __u32 vendor;
564 __u32 product;
565 __u32 version;
566 enum hid_type type;
567 unsigned country;
568 struct hid_report_enum report_enum[HID_REPORT_TYPES];
569 struct work_struct led_work;
570
571 struct semaphore driver_input_lock;
572 struct device dev;
573 struct hid_driver *driver;
574
575 struct hid_ll_driver *ll_driver;
576 struct mutex ll_open_lock;
577 unsigned int ll_open_count;
578
579#ifdef CONFIG_HID_BATTERY_STRENGTH
580
581
582
583
584
585 struct power_supply *battery;
586 __s32 battery_capacity;
587 __s32 battery_min;
588 __s32 battery_max;
589 __s32 battery_report_type;
590 __s32 battery_report_id;
591 enum hid_battery_status battery_status;
592 bool battery_avoid_query;
593 ktime_t battery_ratelimit_time;
594#endif
595
596 unsigned long status;
597 unsigned claimed;
598 unsigned quirks;
599 bool io_started;
600
601 struct list_head inputs;
602 void *hiddev;
603 void *hidraw;
604
605 char name[128];
606 char phys[64];
607 char uniq[64];
608
609 void *driver_data;
610
611
612 int (*ff_init)(struct hid_device *);
613
614
615 int (*hiddev_connect)(struct hid_device *, unsigned int);
616 void (*hiddev_disconnect)(struct hid_device *);
617 void (*hiddev_hid_event) (struct hid_device *, struct hid_field *field,
618 struct hid_usage *, __s32);
619 void (*hiddev_report_event) (struct hid_device *, struct hid_report *);
620
621
622 unsigned short debug;
623 struct dentry *debug_dir;
624 struct dentry *debug_rdesc;
625 struct dentry *debug_events;
626 struct list_head debug_list;
627 spinlock_t debug_list_lock;
628 wait_queue_head_t debug_wait;
629};
630
631#define to_hid_device(pdev) \
632 container_of(pdev, struct hid_device, dev)
633
634static inline void *hid_get_drvdata(struct hid_device *hdev)
635{
636 return dev_get_drvdata(&hdev->dev);
637}
638
639static inline void hid_set_drvdata(struct hid_device *hdev, void *data)
640{
641 dev_set_drvdata(&hdev->dev, data);
642}
643
644#define HID_GLOBAL_STACK_SIZE 4
645#define HID_COLLECTION_STACK_SIZE 4
646
647#define HID_SCAN_FLAG_MT_WIN_8 BIT(0)
648#define HID_SCAN_FLAG_VENDOR_SPECIFIC BIT(1)
649#define HID_SCAN_FLAG_GD_POINTER BIT(2)
650
651struct hid_parser {
652 struct hid_global global;
653 struct hid_global global_stack[HID_GLOBAL_STACK_SIZE];
654 unsigned int global_stack_ptr;
655 struct hid_local local;
656 unsigned int *collection_stack;
657 unsigned int collection_stack_ptr;
658 unsigned int collection_stack_size;
659 struct hid_device *device;
660 unsigned int scan_flags;
661};
662
663struct hid_class_descriptor {
664 __u8 bDescriptorType;
665 __le16 wDescriptorLength;
666} __attribute__ ((packed));
667
668struct hid_descriptor {
669 __u8 bLength;
670 __u8 bDescriptorType;
671 __le16 bcdHID;
672 __u8 bCountryCode;
673 __u8 bNumDescriptors;
674
675 struct hid_class_descriptor desc[1];
676} __attribute__ ((packed));
677
678#define HID_DEVICE(b, g, ven, prod) \
679 .bus = (b), .group = (g), .vendor = (ven), .product = (prod)
680#define HID_USB_DEVICE(ven, prod) \
681 .bus = BUS_USB, .vendor = (ven), .product = (prod)
682#define HID_BLUETOOTH_DEVICE(ven, prod) \
683 .bus = BUS_BLUETOOTH, .vendor = (ven), .product = (prod)
684#define HID_I2C_DEVICE(ven, prod) \
685 .bus = BUS_I2C, .vendor = (ven), .product = (prod)
686
687#define HID_REPORT_ID(rep) \
688 .report_type = (rep)
689#define HID_USAGE_ID(uhid, utype, ucode) \
690 .usage_hid = (uhid), .usage_type = (utype), .usage_code = (ucode)
691
692#define HID_TERMINATOR (HID_ANY_ID - 1)
693
694struct hid_report_id {
695 __u32 report_type;
696};
697struct hid_usage_id {
698 __u32 usage_hid;
699 __u32 usage_type;
700 __u32 usage_code;
701};
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744struct hid_driver {
745 char *name;
746 const struct hid_device_id *id_table;
747
748 struct list_head dyn_list;
749 spinlock_t dyn_lock;
750
751 bool (*match)(struct hid_device *dev, bool ignore_special_driver);
752 int (*probe)(struct hid_device *dev, const struct hid_device_id *id);
753 void (*remove)(struct hid_device *dev);
754
755 const struct hid_report_id *report_table;
756 int (*raw_event)(struct hid_device *hdev, struct hid_report *report,
757 u8 *data, int size);
758 const struct hid_usage_id *usage_table;
759 int (*event)(struct hid_device *hdev, struct hid_field *field,
760 struct hid_usage *usage, __s32 value);
761 void (*report)(struct hid_device *hdev, struct hid_report *report);
762
763 __u8 *(*report_fixup)(struct hid_device *hdev, __u8 *buf,
764 unsigned int *size);
765
766 int (*input_mapping)(struct hid_device *hdev,
767 struct hid_input *hidinput, struct hid_field *field,
768 struct hid_usage *usage, unsigned long **bit, int *max);
769 int (*input_mapped)(struct hid_device *hdev,
770 struct hid_input *hidinput, struct hid_field *field,
771 struct hid_usage *usage, unsigned long **bit, int *max);
772 int (*input_configured)(struct hid_device *hdev,
773 struct hid_input *hidinput);
774 void (*feature_mapping)(struct hid_device *hdev,
775 struct hid_field *field,
776 struct hid_usage *usage);
777#ifdef CONFIG_PM
778 int (*suspend)(struct hid_device *hdev, pm_message_t message);
779 int (*resume)(struct hid_device *hdev);
780 int (*reset_resume)(struct hid_device *hdev);
781#endif
782
783 struct device_driver driver;
784};
785
786#define to_hid_driver(pdrv) \
787 container_of(pdrv, struct hid_driver, driver)
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804struct hid_ll_driver {
805 int (*start)(struct hid_device *hdev);
806 void (*stop)(struct hid_device *hdev);
807
808 int (*open)(struct hid_device *hdev);
809 void (*close)(struct hid_device *hdev);
810
811 int (*power)(struct hid_device *hdev, int level);
812
813 int (*parse)(struct hid_device *hdev);
814
815 void (*request)(struct hid_device *hdev,
816 struct hid_report *report, int reqtype);
817
818 int (*wait)(struct hid_device *hdev);
819
820 int (*raw_request) (struct hid_device *hdev, unsigned char reportnum,
821 __u8 *buf, size_t len, unsigned char rtype,
822 int reqtype);
823
824 int (*output_report) (struct hid_device *hdev, __u8 *buf, size_t len);
825
826 int (*idle)(struct hid_device *hdev, int report, int idle, int reqtype);
827};
828
829extern struct hid_ll_driver i2c_hid_ll_driver;
830extern struct hid_ll_driver hidp_hid_driver;
831extern struct hid_ll_driver uhid_hid_driver;
832extern struct hid_ll_driver usb_hid_driver;
833
834static inline bool hid_is_using_ll_driver(struct hid_device *hdev,
835 struct hid_ll_driver *driver)
836{
837 return hdev->ll_driver == driver;
838}
839
840#define PM_HINT_FULLON 1<<5
841#define PM_HINT_NORMAL 1<<1
842
843
844
845#define IS_INPUT_APPLICATION(a) \
846 (((a >= HID_UP_GENDESK) && (a <= HID_GD_MULTIAXIS)) \
847 || ((a >= HID_DG_PEN) && (a <= HID_DG_WHITEBOARD)) \
848 || (a == HID_GD_SYSTEM_CONTROL) || (a == HID_CP_CONSUMER_CONTROL) \
849 || (a == HID_GD_WIRELESS_RADIO_CTLS))
850
851
852
853extern int hid_debug;
854
855extern bool hid_ignore(struct hid_device *);
856extern int hid_add_device(struct hid_device *);
857extern void hid_destroy_device(struct hid_device *);
858
859extern struct bus_type hid_bus_type;
860
861extern int __must_check __hid_register_driver(struct hid_driver *,
862 struct module *, const char *mod_name);
863
864
865#define hid_register_driver(driver) \
866 __hid_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)
867
868extern void hid_unregister_driver(struct hid_driver *);
869
870
871
872
873
874
875
876
877
878#define module_hid_driver(__hid_driver) \
879 module_driver(__hid_driver, hid_register_driver, \
880 hid_unregister_driver)
881
882extern void hidinput_hid_event(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
883extern void hidinput_report_event(struct hid_device *hid, struct hid_report *report);
884extern int hidinput_connect(struct hid_device *hid, unsigned int force);
885extern void hidinput_disconnect(struct hid_device *);
886
887int hid_set_field(struct hid_field *, unsigned, __s32);
888int hid_input_report(struct hid_device *, int type, u8 *, u32, int);
889int hidinput_find_field(struct hid_device *hid, unsigned int type, unsigned int code, struct hid_field **field);
890struct hid_field *hidinput_get_led_field(struct hid_device *hid);
891unsigned int hidinput_count_leds(struct hid_device *hid);
892__s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code);
893void hid_output_report(struct hid_report *report, __u8 *data);
894int __hid_request(struct hid_device *hid, struct hid_report *rep, int reqtype);
895u8 *hid_alloc_report_buf(struct hid_report *report, gfp_t flags);
896struct hid_device *hid_allocate_device(void);
897struct hid_report *hid_register_report(struct hid_device *device,
898 unsigned int type, unsigned int id,
899 unsigned int application);
900int hid_parse_report(struct hid_device *hid, __u8 *start, unsigned size);
901struct hid_report *hid_validate_values(struct hid_device *hid,
902 unsigned int type, unsigned int id,
903 unsigned int field_index,
904 unsigned int report_counts);
905
906void hid_setup_resolution_multiplier(struct hid_device *hid);
907int hid_open_report(struct hid_device *device);
908int hid_check_keys_pressed(struct hid_device *hid);
909int hid_connect(struct hid_device *hid, unsigned int connect_mask);
910void hid_disconnect(struct hid_device *hid);
911bool hid_match_one_id(const struct hid_device *hdev,
912 const struct hid_device_id *id);
913const struct hid_device_id *hid_match_id(const struct hid_device *hdev,
914 const struct hid_device_id *id);
915const struct hid_device_id *hid_match_device(struct hid_device *hdev,
916 struct hid_driver *hdrv);
917bool hid_compare_device_paths(struct hid_device *hdev_a,
918 struct hid_device *hdev_b, char separator);
919s32 hid_snto32(__u32 value, unsigned n);
920__u32 hid_field_extract(const struct hid_device *hid, __u8 *report,
921 unsigned offset, unsigned n);
922
923
924
925
926
927
928
929
930
931
932static inline void hid_device_io_start(struct hid_device *hid) {
933 if (hid->io_started) {
934 dev_warn(&hid->dev, "io already started\n");
935 return;
936 }
937 hid->io_started = true;
938 up(&hid->driver_input_lock);
939}
940
941
942
943
944
945
946
947
948
949
950
951
952static inline void hid_device_io_stop(struct hid_device *hid) {
953 if (!hid->io_started) {
954 dev_warn(&hid->dev, "io already stopped\n");
955 return;
956 }
957 hid->io_started = false;
958 down(&hid->driver_input_lock);
959}
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975static inline void hid_map_usage(struct hid_input *hidinput,
976 struct hid_usage *usage, unsigned long **bit, int *max,
977 __u8 type, unsigned int c)
978{
979 struct input_dev *input = hidinput->input;
980 unsigned long *bmap = NULL;
981 unsigned int limit = 0;
982
983 switch (type) {
984 case EV_ABS:
985 bmap = input->absbit;
986 limit = ABS_MAX;
987 break;
988 case EV_REL:
989 bmap = input->relbit;
990 limit = REL_MAX;
991 break;
992 case EV_KEY:
993 bmap = input->keybit;
994 limit = KEY_MAX;
995 break;
996 case EV_LED:
997 bmap = input->ledbit;
998 limit = LED_MAX;
999 break;
1000 }
1001
1002 if (unlikely(c > limit || !bmap)) {
1003 pr_warn_ratelimited("%s: Invalid code %d type %d\n",
1004 input->name, c, type);
1005 *bit = NULL;
1006 return;
1007 }
1008
1009 usage->type = type;
1010 usage->code = c;
1011 *max = limit;
1012 *bit = bmap;
1013}
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028static inline void hid_map_usage_clear(struct hid_input *hidinput,
1029 struct hid_usage *usage, unsigned long **bit, int *max,
1030 __u8 type, __u16 c)
1031{
1032 hid_map_usage(hidinput, usage, bit, max, type, c);
1033 if (*bit)
1034 clear_bit(usage->code, *bit);
1035}
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046static inline int __must_check hid_parse(struct hid_device *hdev)
1047{
1048 return hid_open_report(hdev);
1049}
1050
1051int __must_check hid_hw_start(struct hid_device *hdev,
1052 unsigned int connect_mask);
1053void hid_hw_stop(struct hid_device *hdev);
1054int __must_check hid_hw_open(struct hid_device *hdev);
1055void hid_hw_close(struct hid_device *hdev);
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067static inline int hid_hw_power(struct hid_device *hdev, int level)
1068{
1069 return hdev->ll_driver->power ? hdev->ll_driver->power(hdev, level) : 0;
1070}
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080static inline void hid_hw_request(struct hid_device *hdev,
1081 struct hid_report *report, int reqtype)
1082{
1083 if (hdev->ll_driver->request)
1084 return hdev->ll_driver->request(hdev, report, reqtype);
1085
1086 __hid_request(hdev, report, reqtype);
1087}
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103static inline int hid_hw_raw_request(struct hid_device *hdev,
1104 unsigned char reportnum, __u8 *buf,
1105 size_t len, unsigned char rtype, int reqtype)
1106{
1107 if (len < 1 || len > HID_MAX_BUFFER_SIZE || !buf)
1108 return -EINVAL;
1109
1110 return hdev->ll_driver->raw_request(hdev, reportnum, buf, len,
1111 rtype, reqtype);
1112}
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123static inline int hid_hw_output_report(struct hid_device *hdev, __u8 *buf,
1124 size_t len)
1125{
1126 if (len < 1 || len > HID_MAX_BUFFER_SIZE || !buf)
1127 return -EINVAL;
1128
1129 if (hdev->ll_driver->output_report)
1130 return hdev->ll_driver->output_report(hdev, buf, len);
1131
1132 return -ENOSYS;
1133}
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143static inline int hid_hw_idle(struct hid_device *hdev, int report, int idle,
1144 int reqtype)
1145{
1146 if (hdev->ll_driver->idle)
1147 return hdev->ll_driver->idle(hdev, report, idle, reqtype);
1148
1149 return 0;
1150}
1151
1152
1153
1154
1155
1156
1157static inline void hid_hw_wait(struct hid_device *hdev)
1158{
1159 if (hdev->ll_driver->wait)
1160 hdev->ll_driver->wait(hdev);
1161}
1162
1163
1164
1165
1166
1167
1168static inline u32 hid_report_len(struct hid_report *report)
1169{
1170 return DIV_ROUND_UP(report->size, 8) + (report->id > 0);
1171}
1172
1173int hid_report_raw_event(struct hid_device *hid, int type, u8 *data, u32 size,
1174 int interrupt);
1175
1176
1177unsigned long hid_lookup_quirk(const struct hid_device *hdev);
1178int hid_quirks_init(char **quirks_param, __u16 bus, int count);
1179void hid_quirks_exit(__u16 bus);
1180
1181#ifdef CONFIG_HID_PID
1182int hid_pidff_init(struct hid_device *hid);
1183#else
1184#define hid_pidff_init NULL
1185#endif
1186
1187#define dbg_hid(fmt, ...) \
1188do { \
1189 if (hid_debug) \
1190 printk(KERN_DEBUG "%s: " fmt, __FILE__, ##__VA_ARGS__); \
1191} while (0)
1192
1193#define hid_err(hid, fmt, ...) \
1194 dev_err(&(hid)->dev, fmt, ##__VA_ARGS__)
1195#define hid_notice(hid, fmt, ...) \
1196 dev_notice(&(hid)->dev, fmt, ##__VA_ARGS__)
1197#define hid_warn(hid, fmt, ...) \
1198 dev_warn(&(hid)->dev, fmt, ##__VA_ARGS__)
1199#define hid_info(hid, fmt, ...) \
1200 dev_info(&(hid)->dev, fmt, ##__VA_ARGS__)
1201#define hid_dbg(hid, fmt, ...) \
1202 dev_dbg(&(hid)->dev, fmt, ##__VA_ARGS__)
1203
1204#define hid_err_once(hid, fmt, ...) \
1205 dev_err_once(&(hid)->dev, fmt, ##__VA_ARGS__)
1206#define hid_notice_once(hid, fmt, ...) \
1207 dev_notice_once(&(hid)->dev, fmt, ##__VA_ARGS__)
1208#define hid_warn_once(hid, fmt, ...) \
1209 dev_warn_once(&(hid)->dev, fmt, ##__VA_ARGS__)
1210#define hid_info_once(hid, fmt, ...) \
1211 dev_info_once(&(hid)->dev, fmt, ##__VA_ARGS__)
1212#define hid_dbg_once(hid, fmt, ...) \
1213 dev_dbg_once(&(hid)->dev, fmt, ##__VA_ARGS__)
1214
1215#endif
1216