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