1#ifndef __HID_H
2#define __HID_H
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34#define USB_INTERFACE_CLASS_HID 3
35
36
37
38
39
40#define USB_INTERFACE_SUBCLASS_BOOT 1
41#define USB_INTERFACE_PROTOCOL_KEYBOARD 1
42#define USB_INTERFACE_PROTOCOL_MOUSE 2
43
44
45
46
47
48#define HID_REQ_GET_REPORT 0x01
49#define HID_REQ_GET_IDLE 0x02
50#define HID_REQ_GET_PROTOCOL 0x03
51#define HID_REQ_SET_REPORT 0x09
52#define HID_REQ_SET_IDLE 0x0A
53#define HID_REQ_SET_PROTOCOL 0x0B
54
55
56
57
58
59#define HID_DT_HID (USB_TYPE_CLASS | 0x01)
60#define HID_DT_REPORT (USB_TYPE_CLASS | 0x02)
61#define HID_DT_PHYSICAL (USB_TYPE_CLASS | 0x03)
62
63#define HID_MAX_DESCRIPTOR_SIZE 4096
64
65#ifdef __KERNEL__
66
67#include <linux/types.h>
68#include <linux/slab.h>
69#include <linux/list.h>
70#include <linux/mod_devicetable.h>
71#include <linux/timer.h>
72#include <linux/workqueue.h>
73#include <linux/input.h>
74#include <linux/semaphore.h>
75#include <linux/power_supply.h>
76
77
78
79
80
81
82
83struct hid_item {
84 unsigned format;
85 __u8 size;
86 __u8 type;
87 __u8 tag;
88 union {
89 __u8 u8;
90 __s8 s8;
91 __u16 u16;
92 __s16 s16;
93 __u32 u32;
94 __s32 s32;
95 __u8 *longdata;
96 } data;
97};
98
99
100
101
102
103#define HID_ITEM_FORMAT_SHORT 0
104#define HID_ITEM_FORMAT_LONG 1
105
106
107
108
109
110#define HID_ITEM_TAG_LONG 15
111
112
113
114
115
116#define HID_ITEM_TYPE_MAIN 0
117#define HID_ITEM_TYPE_GLOBAL 1
118#define HID_ITEM_TYPE_LOCAL 2
119#define HID_ITEM_TYPE_RESERVED 3
120
121
122
123
124
125#define HID_MAIN_ITEM_TAG_INPUT 8
126#define HID_MAIN_ITEM_TAG_OUTPUT 9
127#define HID_MAIN_ITEM_TAG_FEATURE 11
128#define HID_MAIN_ITEM_TAG_BEGIN_COLLECTION 10
129#define HID_MAIN_ITEM_TAG_END_COLLECTION 12
130
131
132
133
134
135#define HID_MAIN_ITEM_CONSTANT 0x001
136#define HID_MAIN_ITEM_VARIABLE 0x002
137#define HID_MAIN_ITEM_RELATIVE 0x004
138#define HID_MAIN_ITEM_WRAP 0x008
139#define HID_MAIN_ITEM_NONLINEAR 0x010
140#define HID_MAIN_ITEM_NO_PREFERRED 0x020
141#define HID_MAIN_ITEM_NULL_STATE 0x040
142#define HID_MAIN_ITEM_VOLATILE 0x080
143#define HID_MAIN_ITEM_BUFFERED_BYTE 0x100
144
145
146
147
148
149#define HID_COLLECTION_PHYSICAL 0
150#define HID_COLLECTION_APPLICATION 1
151#define HID_COLLECTION_LOGICAL 2
152
153
154
155
156
157#define HID_GLOBAL_ITEM_TAG_USAGE_PAGE 0
158#define HID_GLOBAL_ITEM_TAG_LOGICAL_MINIMUM 1
159#define HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM 2
160#define HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM 3
161#define HID_GLOBAL_ITEM_TAG_PHYSICAL_MAXIMUM 4
162#define HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT 5
163#define HID_GLOBAL_ITEM_TAG_UNIT 6
164#define HID_GLOBAL_ITEM_TAG_REPORT_SIZE 7
165#define HID_GLOBAL_ITEM_TAG_REPORT_ID 8
166#define HID_GLOBAL_ITEM_TAG_REPORT_COUNT 9
167#define HID_GLOBAL_ITEM_TAG_PUSH 10
168#define HID_GLOBAL_ITEM_TAG_POP 11
169
170
171
172
173
174#define HID_LOCAL_ITEM_TAG_USAGE 0
175#define HID_LOCAL_ITEM_TAG_USAGE_MINIMUM 1
176#define HID_LOCAL_ITEM_TAG_USAGE_MAXIMUM 2
177#define HID_LOCAL_ITEM_TAG_DESIGNATOR_INDEX 3
178#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MINIMUM 4
179#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MAXIMUM 5
180#define HID_LOCAL_ITEM_TAG_STRING_INDEX 7
181#define HID_LOCAL_ITEM_TAG_STRING_MINIMUM 8
182#define HID_LOCAL_ITEM_TAG_STRING_MAXIMUM 9
183#define HID_LOCAL_ITEM_TAG_DELIMITER 10
184
185
186
187
188
189#define HID_USAGE_PAGE 0xffff0000
190
191#define HID_UP_UNDEFINED 0x00000000
192#define HID_UP_GENDESK 0x00010000
193#define HID_UP_SIMULATION 0x00020000
194#define HID_UP_GENDEVCTRLS 0x00060000
195#define HID_UP_KEYBOARD 0x00070000
196#define HID_UP_LED 0x00080000
197#define HID_UP_BUTTON 0x00090000
198#define HID_UP_ORDINAL 0x000a0000
199#define HID_UP_CONSUMER 0x000c0000
200#define HID_UP_DIGITIZER 0x000d0000
201#define HID_UP_PID 0x000f0000
202#define HID_UP_HPVENDOR 0xff7f0000
203#define HID_UP_HPVENDOR2 0xff010000
204#define HID_UP_MSVENDOR 0xff000000
205#define HID_UP_CUSTOM 0x00ff0000
206#define HID_UP_LOGIVENDOR 0xffbc0000
207
208#define HID_USAGE 0x0000ffff
209
210#define HID_GD_POINTER 0x00010001
211#define HID_GD_MOUSE 0x00010002
212#define HID_GD_JOYSTICK 0x00010004
213#define HID_GD_GAMEPAD 0x00010005
214#define HID_GD_KEYBOARD 0x00010006
215#define HID_GD_KEYPAD 0x00010007
216#define HID_GD_MULTIAXIS 0x00010008
217#define HID_GD_X 0x00010030
218#define HID_GD_Y 0x00010031
219#define HID_GD_Z 0x00010032
220#define HID_GD_RX 0x00010033
221#define HID_GD_RY 0x00010034
222#define HID_GD_RZ 0x00010035
223#define HID_GD_SLIDER 0x00010036
224#define HID_GD_DIAL 0x00010037
225#define HID_GD_WHEEL 0x00010038
226#define HID_GD_HATSWITCH 0x00010039
227#define HID_GD_BUFFER 0x0001003a
228#define HID_GD_BYTECOUNT 0x0001003b
229#define HID_GD_MOTION 0x0001003c
230#define HID_GD_START 0x0001003d
231#define HID_GD_SELECT 0x0001003e
232#define HID_GD_VX 0x00010040
233#define HID_GD_VY 0x00010041
234#define HID_GD_VZ 0x00010042
235#define HID_GD_VBRX 0x00010043
236#define HID_GD_VBRY 0x00010044
237#define HID_GD_VBRZ 0x00010045
238#define HID_GD_VNO 0x00010046
239#define HID_GD_FEATURE 0x00010047
240#define HID_GD_UP 0x00010090
241#define HID_GD_DOWN 0x00010091
242#define HID_GD_RIGHT 0x00010092
243#define HID_GD_LEFT 0x00010093
244
245#define HID_DC_BATTERYSTRENGTH 0x00060020
246
247#define HID_DG_DIGITIZER 0x000d0001
248#define HID_DG_PEN 0x000d0002
249#define HID_DG_LIGHTPEN 0x000d0003
250#define HID_DG_TOUCHSCREEN 0x000d0004
251#define HID_DG_TOUCHPAD 0x000d0005
252#define HID_DG_STYLUS 0x000d0020
253#define HID_DG_PUCK 0x000d0021
254#define HID_DG_FINGER 0x000d0022
255#define HID_DG_TIPPRESSURE 0x000d0030
256#define HID_DG_BARRELPRESSURE 0x000d0031
257#define HID_DG_INRANGE 0x000d0032
258#define HID_DG_TOUCH 0x000d0033
259#define HID_DG_UNTOUCH 0x000d0034
260#define HID_DG_TAP 0x000d0035
261#define HID_DG_TABLETFUNCTIONKEY 0x000d0039
262#define HID_DG_PROGRAMCHANGEKEY 0x000d003a
263#define HID_DG_INVERT 0x000d003c
264#define HID_DG_TIPSWITCH 0x000d0042
265#define HID_DG_TIPSWITCH2 0x000d0043
266#define HID_DG_BARRELSWITCH 0x000d0044
267#define HID_DG_ERASER 0x000d0045
268#define HID_DG_TABLETPICK 0x000d0046
269
270
271
272
273
274#define HID_DG_CONFIDENCE 0x000d0047
275#define HID_DG_WIDTH 0x000d0048
276#define HID_DG_HEIGHT 0x000d0049
277#define HID_DG_CONTACTID 0x000d0051
278#define HID_DG_INPUTMODE 0x000d0052
279#define HID_DG_DEVICEINDEX 0x000d0053
280#define HID_DG_CONTACTCOUNT 0x000d0054
281#define HID_DG_CONTACTMAX 0x000d0055
282
283
284
285
286
287#define HID_INPUT_REPORT 0
288#define HID_OUTPUT_REPORT 1
289#define HID_FEATURE_REPORT 2
290
291
292
293
294
295#define HID_CONNECT_HIDINPUT 0x01
296#define HID_CONNECT_HIDINPUT_FORCE 0x02
297#define HID_CONNECT_HIDRAW 0x04
298#define HID_CONNECT_HIDDEV 0x08
299#define HID_CONNECT_HIDDEV_FORCE 0x10
300#define HID_CONNECT_FF 0x20
301#define HID_CONNECT_DEFAULT (HID_CONNECT_HIDINPUT|HID_CONNECT_HIDRAW| \
302 HID_CONNECT_HIDDEV|HID_CONNECT_FF)
303
304
305
306
307
308
309
310
311#define MAX_USBHID_BOOT_QUIRKS 4
312
313#define HID_QUIRK_INVERT 0x00000001
314#define HID_QUIRK_NOTOUCH 0x00000002
315#define HID_QUIRK_IGNORE 0x00000004
316#define HID_QUIRK_NOGET 0x00000008
317#define HID_QUIRK_HIDDEV_FORCE 0x00000010
318#define HID_QUIRK_BADPAD 0x00000020
319#define HID_QUIRK_MULTI_INPUT 0x00000040
320#define HID_QUIRK_HIDINPUT_FORCE 0x00000080
321#define HID_QUIRK_SKIP_OUTPUT_REPORTS 0x00010000
322#define HID_QUIRK_FULLSPEED_INTERVAL 0x10000000
323#define HID_QUIRK_NO_INIT_REPORTS 0x20000000
324#define HID_QUIRK_NO_IGNORE 0x40000000
325#define HID_QUIRK_NO_INPUT_SYNC 0x80000000
326
327
328
329
330#define HID_GROUP_GENERIC 0x0001
331#define HID_GROUP_MULTITOUCH 0x0002
332
333
334
335
336
337
338
339struct hid_global {
340 unsigned usage_page;
341 __s32 logical_minimum;
342 __s32 logical_maximum;
343 __s32 physical_minimum;
344 __s32 physical_maximum;
345 __s32 unit_exponent;
346 unsigned unit;
347 unsigned report_id;
348 unsigned report_size;
349 unsigned report_count;
350};
351
352
353
354
355
356#define HID_MAX_USAGES 12288
357#define HID_DEFAULT_NUM_COLLECTIONS 16
358
359struct hid_local {
360 unsigned usage[HID_MAX_USAGES];
361 unsigned collection_index[HID_MAX_USAGES];
362 unsigned usage_index;
363 unsigned usage_minimum;
364 unsigned delimiter_depth;
365 unsigned delimiter_branch;
366};
367
368
369
370
371
372
373struct hid_collection {
374 unsigned type;
375 unsigned usage;
376 unsigned level;
377};
378
379struct hid_usage {
380 unsigned hid;
381 unsigned collection_index;
382
383 __u16 code;
384 __u8 type;
385 __s8 hat_min;
386 __s8 hat_max;
387 __s8 hat_dir;
388};
389
390struct hid_input;
391
392struct hid_field {
393 unsigned physical;
394 unsigned logical;
395 unsigned application;
396 struct hid_usage *usage;
397 unsigned maxusage;
398 unsigned flags;
399 unsigned report_offset;
400 unsigned report_size;
401 unsigned report_count;
402 unsigned report_type;
403 __s32 *value;
404 __s32 logical_minimum;
405 __s32 logical_maximum;
406 __s32 physical_minimum;
407 __s32 physical_maximum;
408 __s32 unit_exponent;
409 unsigned unit;
410 struct hid_report *report;
411 unsigned index;
412
413 struct hid_input *hidinput;
414 __u16 dpad;
415};
416
417#define HID_MAX_FIELDS 128
418
419struct hid_report {
420 struct list_head list;
421 unsigned id;
422 unsigned type;
423 struct hid_field *field[HID_MAX_FIELDS];
424 unsigned maxfield;
425 unsigned size;
426 struct hid_device *device;
427};
428
429struct hid_report_enum {
430 unsigned numbered;
431 struct list_head report_list;
432 struct hid_report *report_id_hash[256];
433};
434
435#define HID_REPORT_TYPES 3
436
437#define HID_MIN_BUFFER_SIZE 64
438#define HID_MAX_BUFFER_SIZE 4096
439#define HID_CONTROL_FIFO_SIZE 256
440#define HID_OUTPUT_FIFO_SIZE 64
441
442struct hid_control_fifo {
443 unsigned char dir;
444 struct hid_report *report;
445 char *raw_report;
446};
447
448struct hid_output_fifo {
449 struct hid_report *report;
450 char *raw_report;
451};
452
453#define HID_CLAIMED_INPUT 1
454#define HID_CLAIMED_HIDDEV 2
455#define HID_CLAIMED_HIDRAW 4
456
457#define HID_STAT_ADDED 1
458#define HID_STAT_PARSED 2
459
460struct hid_input {
461 struct list_head list;
462 struct hid_report *report;
463 struct input_dev *input;
464};
465
466enum hid_type {
467 HID_TYPE_OTHER = 0,
468 HID_TYPE_USBMOUSE,
469 HID_TYPE_USBNONE
470};
471
472struct hid_driver;
473struct hid_ll_driver;
474
475struct hid_device {
476 __u8 *dev_rdesc;
477 unsigned dev_rsize;
478 __u8 *rdesc;
479 unsigned rsize;
480 struct hid_collection *collection;
481 unsigned collection_size;
482 unsigned maxcollection;
483 unsigned maxapplication;
484 __u16 bus;
485 __u16 group;
486 __u32 vendor;
487 __u32 product;
488 __u32 version;
489 enum hid_type type;
490 unsigned country;
491 struct hid_report_enum report_enum[HID_REPORT_TYPES];
492
493 struct semaphore driver_lock;
494 struct device dev;
495 struct hid_driver *driver;
496 struct hid_ll_driver *ll_driver;
497
498#ifdef CONFIG_HID_BATTERY_STRENGTH
499
500
501
502
503
504 struct power_supply battery;
505 __s32 battery_min;
506 __s32 battery_max;
507 __s32 battery_report_type;
508 __s32 battery_report_id;
509#endif
510
511 unsigned int status;
512 unsigned claimed;
513 unsigned quirks;
514
515 struct list_head inputs;
516 void *hiddev;
517 void *hidraw;
518 int minor;
519
520 int open;
521 char name[128];
522 char phys[64];
523 char uniq[64];
524
525 void *driver_data;
526
527
528 int (*ff_init)(struct hid_device *);
529
530
531 int (*hiddev_connect)(struct hid_device *, unsigned int);
532 void (*hiddev_disconnect)(struct hid_device *);
533 void (*hiddev_hid_event) (struct hid_device *, struct hid_field *field,
534 struct hid_usage *, __s32);
535 void (*hiddev_report_event) (struct hid_device *, struct hid_report *);
536
537
538 int (*hid_get_raw_report) (struct hid_device *, unsigned char, __u8 *, size_t, unsigned char);
539
540
541 int (*hid_output_raw_report) (struct hid_device *, __u8 *, size_t, unsigned char);
542
543
544 unsigned short debug;
545 struct dentry *debug_dir;
546 struct dentry *debug_rdesc;
547 struct dentry *debug_events;
548 struct list_head debug_list;
549 wait_queue_head_t debug_wait;
550};
551
552static inline void *hid_get_drvdata(struct hid_device *hdev)
553{
554 return dev_get_drvdata(&hdev->dev);
555}
556
557static inline void hid_set_drvdata(struct hid_device *hdev, void *data)
558{
559 dev_set_drvdata(&hdev->dev, data);
560}
561
562#define HID_GLOBAL_STACK_SIZE 4
563#define HID_COLLECTION_STACK_SIZE 4
564
565struct hid_parser {
566 struct hid_global global;
567 struct hid_global global_stack[HID_GLOBAL_STACK_SIZE];
568 unsigned global_stack_ptr;
569 struct hid_local local;
570 unsigned collection_stack[HID_COLLECTION_STACK_SIZE];
571 unsigned collection_stack_ptr;
572 struct hid_device *device;
573};
574
575struct hid_class_descriptor {
576 __u8 bDescriptorType;
577 __le16 wDescriptorLength;
578} __attribute__ ((packed));
579
580struct hid_descriptor {
581 __u8 bLength;
582 __u8 bDescriptorType;
583 __le16 bcdHID;
584 __u8 bCountryCode;
585 __u8 bNumDescriptors;
586
587 struct hid_class_descriptor desc[1];
588} __attribute__ ((packed));
589
590#define HID_DEVICE(b, g, ven, prod) \
591 .bus = (b), .group = (g), .vendor = (ven), .product = (prod)
592#define HID_USB_DEVICE(ven, prod) \
593 .bus = BUS_USB, .vendor = (ven), .product = (prod)
594#define HID_BLUETOOTH_DEVICE(ven, prod) \
595 .bus = BUS_BLUETOOTH, .vendor = (ven), .product = (prod)
596
597#define HID_REPORT_ID(rep) \
598 .report_type = (rep)
599#define HID_USAGE_ID(uhid, utype, ucode) \
600 .usage_hid = (uhid), .usage_type = (utype), .usage_code = (ucode)
601
602#define HID_TERMINATOR (HID_ANY_ID - 1)
603
604struct hid_report_id {
605 __u32 report_type;
606};
607struct hid_usage_id {
608 __u32 usage_hid;
609 __u32 usage_type;
610 __u32 usage_code;
611};
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647struct hid_driver {
648 char *name;
649 const struct hid_device_id *id_table;
650
651 struct list_head dyn_list;
652 spinlock_t dyn_lock;
653
654 int (*probe)(struct hid_device *dev, const struct hid_device_id *id);
655 void (*remove)(struct hid_device *dev);
656
657 const struct hid_report_id *report_table;
658 int (*raw_event)(struct hid_device *hdev, struct hid_report *report,
659 u8 *data, int size);
660 const struct hid_usage_id *usage_table;
661 int (*event)(struct hid_device *hdev, struct hid_field *field,
662 struct hid_usage *usage, __s32 value);
663
664 __u8 *(*report_fixup)(struct hid_device *hdev, __u8 *buf,
665 unsigned int *size);
666
667 int (*input_mapping)(struct hid_device *hdev,
668 struct hid_input *hidinput, struct hid_field *field,
669 struct hid_usage *usage, unsigned long **bit, int *max);
670 int (*input_mapped)(struct hid_device *hdev,
671 struct hid_input *hidinput, struct hid_field *field,
672 struct hid_usage *usage, unsigned long **bit, int *max);
673 void (*feature_mapping)(struct hid_device *hdev,
674 struct hid_field *field,
675 struct hid_usage *usage);
676#ifdef CONFIG_PM
677 int (*suspend)(struct hid_device *hdev, pm_message_t message);
678 int (*resume)(struct hid_device *hdev);
679 int (*reset_resume)(struct hid_device *hdev);
680#endif
681
682 struct device_driver driver;
683};
684
685
686
687
688
689
690
691
692
693
694
695struct hid_ll_driver {
696 int (*start)(struct hid_device *hdev);
697 void (*stop)(struct hid_device *hdev);
698
699 int (*open)(struct hid_device *hdev);
700 void (*close)(struct hid_device *hdev);
701
702 int (*power)(struct hid_device *hdev, int level);
703
704 int (*hidinput_input_event) (struct input_dev *idev, unsigned int type,
705 unsigned int code, int value);
706
707 int (*parse)(struct hid_device *hdev);
708};
709
710#define PM_HINT_FULLON 1<<5
711#define PM_HINT_NORMAL 1<<1
712
713
714
715#define IS_INPUT_APPLICATION(a) (((a >= 0x00010000) && (a <= 0x00010008)) || (a == 0x00010080) || (a == 0x000c0001) || ((a >= 0x000d0002) && (a <= 0x000d0006)))
716
717
718
719extern int hid_debug;
720
721extern int hid_add_device(struct hid_device *);
722extern void hid_destroy_device(struct hid_device *);
723
724extern int __must_check __hid_register_driver(struct hid_driver *,
725 struct module *, const char *mod_name);
726
727
728#define hid_register_driver(driver) \
729 __hid_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)
730
731extern void hid_unregister_driver(struct hid_driver *);
732
733extern void hidinput_hid_event(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
734extern void hidinput_report_event(struct hid_device *hid, struct hid_report *report);
735extern int hidinput_connect(struct hid_device *hid, unsigned int force);
736extern void hidinput_disconnect(struct hid_device *);
737
738int hid_set_field(struct hid_field *, unsigned, __s32);
739int hid_input_report(struct hid_device *, int type, u8 *, int, int);
740int hidinput_find_field(struct hid_device *hid, unsigned int type, unsigned int code, struct hid_field **field);
741struct hid_field *hidinput_get_led_field(struct hid_device *hid);
742unsigned int hidinput_count_leds(struct hid_device *hid);
743void hid_output_report(struct hid_report *report, __u8 *data);
744struct hid_device *hid_allocate_device(void);
745struct hid_report *hid_register_report(struct hid_device *device, unsigned type, unsigned id);
746int hid_parse_report(struct hid_device *hid, __u8 *start, unsigned size);
747int hid_open_report(struct hid_device *device);
748int hid_check_keys_pressed(struct hid_device *hid);
749int hid_connect(struct hid_device *hid, unsigned int connect_mask);
750void hid_disconnect(struct hid_device *hid);
751const struct hid_device_id *hid_match_id(struct hid_device *hdev,
752 const struct hid_device_id *id);
753
754
755
756
757
758
759
760
761
762
763
764static inline void hid_map_usage(struct hid_input *hidinput,
765 struct hid_usage *usage, unsigned long **bit, int *max,
766 __u8 type, __u16 c)
767{
768 struct input_dev *input = hidinput->input;
769
770 usage->type = type;
771 usage->code = c;
772
773 switch (type) {
774 case EV_ABS:
775 *bit = input->absbit;
776 *max = ABS_MAX;
777 break;
778 case EV_REL:
779 *bit = input->relbit;
780 *max = REL_MAX;
781 break;
782 case EV_KEY:
783 *bit = input->keybit;
784 *max = KEY_MAX;
785 break;
786 case EV_LED:
787 *bit = input->ledbit;
788 *max = LED_MAX;
789 break;
790 }
791}
792
793
794
795
796
797
798
799static inline void hid_map_usage_clear(struct hid_input *hidinput,
800 struct hid_usage *usage, unsigned long **bit, int *max,
801 __u8 type, __u16 c)
802{
803 hid_map_usage(hidinput, usage, bit, max, type, c);
804 clear_bit(c, *bit);
805}
806
807
808
809
810
811
812
813
814
815
816static inline int __must_check hid_parse(struct hid_device *hdev)
817{
818 return hid_open_report(hdev);
819}
820
821
822
823
824
825
826
827
828
829
830
831static inline int __must_check hid_hw_start(struct hid_device *hdev,
832 unsigned int connect_mask)
833{
834 int ret = hdev->ll_driver->start(hdev);
835 if (ret || !connect_mask)
836 return ret;
837 ret = hid_connect(hdev, connect_mask);
838 if (ret)
839 hdev->ll_driver->stop(hdev);
840 return ret;
841}
842
843
844
845
846
847
848
849
850
851static inline void hid_hw_stop(struct hid_device *hdev)
852{
853 hid_disconnect(hdev);
854 hdev->ll_driver->stop(hdev);
855}
856
857
858
859
860
861
862
863
864
865
866static inline int __must_check hid_hw_open(struct hid_device *hdev)
867{
868 return hdev->ll_driver->open(hdev);
869}
870
871
872
873
874
875
876
877
878
879
880static inline void hid_hw_close(struct hid_device *hdev)
881{
882 hdev->ll_driver->close(hdev);
883}
884
885
886
887
888
889
890
891
892
893
894
895static inline int hid_hw_power(struct hid_device *hdev, int level)
896{
897 return hdev->ll_driver->power ? hdev->ll_driver->power(hdev, level) : 0;
898}
899
900int hid_report_raw_event(struct hid_device *hid, int type, u8 *data, int size,
901 int interrupt);
902
903extern int hid_generic_init(void);
904extern void hid_generic_exit(void);
905
906
907u32 usbhid_lookup_quirk(const u16 idVendor, const u16 idProduct);
908int usbhid_quirks_init(char **quirks_param);
909void usbhid_quirks_exit(void);
910void usbhid_set_leds(struct hid_device *hid);
911
912#ifdef CONFIG_HID_PID
913int hid_pidff_init(struct hid_device *hid);
914#else
915#define hid_pidff_init NULL
916#endif
917
918#define dbg_hid(format, arg...) \
919do { \
920 if (hid_debug) \
921 printk(KERN_DEBUG "%s: " format, __FILE__, ##arg); \
922} while (0)
923
924#define hid_printk(level, hid, fmt, arg...) \
925 dev_printk(level, &(hid)->dev, fmt, ##arg)
926#define hid_emerg(hid, fmt, arg...) \
927 dev_emerg(&(hid)->dev, fmt, ##arg)
928#define hid_crit(hid, fmt, arg...) \
929 dev_crit(&(hid)->dev, fmt, ##arg)
930#define hid_alert(hid, fmt, arg...) \
931 dev_alert(&(hid)->dev, fmt, ##arg)
932#define hid_err(hid, fmt, arg...) \
933 dev_err(&(hid)->dev, fmt, ##arg)
934#define hid_notice(hid, fmt, arg...) \
935 dev_notice(&(hid)->dev, fmt, ##arg)
936#define hid_warn(hid, fmt, arg...) \
937 dev_warn(&(hid)->dev, fmt, ##arg)
938#define hid_info(hid, fmt, arg...) \
939 dev_info(&(hid)->dev, fmt, ##arg)
940#define hid_dbg(hid, fmt, arg...) \
941 dev_dbg(&(hid)->dev, fmt, ##arg)
942
943#endif
944
945#endif
946
947