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