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