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