Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
linux
hid.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 1999 Andreas Gal
3
* Copyright (c) 2000-2001 Vojtech Pavlik
4
* Copyright (c) 2006-2007 Jiri Kosina
5
*/
6
/*
7
* This program is free software; you can redistribute it and/or modify
8
* it under the terms of the GNU General Public License as published by
9
* the Free Software Foundation; either version 2 of the License, or
10
* (at your option) any later version.
11
*
12
* This program is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* GNU General Public License for more details.
16
*
17
* You should have received a copy of the GNU General Public License
18
* along with this program; if not, write to the Free Software
19
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
*
21
* Should you need to contact me, the author, you can do so either by
22
* e-mail - mail your message to <
[email protected]
>, or by paper mail:
23
* Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
24
*/
25
#ifndef __HID_H
26
#define __HID_H
27
28
29
#include <linux/types.h>
30
#include <linux/slab.h>
31
#include <linux/list.h>
32
#include <
linux/mod_devicetable.h
>
/* hid_device_id */
33
#include <
linux/timer.h
>
34
#include <
linux/workqueue.h
>
35
#include <linux/input.h>
36
#include <
linux/semaphore.h
>
37
#include <
linux/power_supply.h
>
38
#include <
uapi/linux/hid.h
>
39
40
/*
41
* We parse each description item into this structure. Short items data
42
* values are expanded to 32-bit signed int, long items contain a pointer
43
* into the data area.
44
*/
45
46
struct
hid_item
{
47
unsigned
format
;
48
__u8
size
;
49
__u8
type
;
50
__u8
tag
;
51
union
{
52
__u8
u8
;
53
__s8
s8
;
54
__u16
u16
;
55
__s16
s16
;
56
__u32
u32
;
57
__s32
s32
;
58
__u8
*
longdata
;
59
}
data
;
60
};
61
62
/*
63
* HID report item format
64
*/
65
66
#define HID_ITEM_FORMAT_SHORT 0
67
#define HID_ITEM_FORMAT_LONG 1
68
69
/*
70
* Special tag indicating long items
71
*/
72
73
#define HID_ITEM_TAG_LONG 15
74
75
/*
76
* HID report descriptor item type (prefix bit 2,3)
77
*/
78
79
#define HID_ITEM_TYPE_MAIN 0
80
#define HID_ITEM_TYPE_GLOBAL 1
81
#define HID_ITEM_TYPE_LOCAL 2
82
#define HID_ITEM_TYPE_RESERVED 3
83
84
/*
85
* HID report descriptor main item tags
86
*/
87
88
#define HID_MAIN_ITEM_TAG_INPUT 8
89
#define HID_MAIN_ITEM_TAG_OUTPUT 9
90
#define HID_MAIN_ITEM_TAG_FEATURE 11
91
#define HID_MAIN_ITEM_TAG_BEGIN_COLLECTION 10
92
#define HID_MAIN_ITEM_TAG_END_COLLECTION 12
93
94
/*
95
* HID report descriptor main item contents
96
*/
97
98
#define HID_MAIN_ITEM_CONSTANT 0x001
99
#define HID_MAIN_ITEM_VARIABLE 0x002
100
#define HID_MAIN_ITEM_RELATIVE 0x004
101
#define HID_MAIN_ITEM_WRAP 0x008
102
#define HID_MAIN_ITEM_NONLINEAR 0x010
103
#define HID_MAIN_ITEM_NO_PREFERRED 0x020
104
#define HID_MAIN_ITEM_NULL_STATE 0x040
105
#define HID_MAIN_ITEM_VOLATILE 0x080
106
#define HID_MAIN_ITEM_BUFFERED_BYTE 0x100
107
108
/*
109
* HID report descriptor collection item types
110
*/
111
112
#define HID_COLLECTION_PHYSICAL 0
113
#define HID_COLLECTION_APPLICATION 1
114
#define HID_COLLECTION_LOGICAL 2
115
116
/*
117
* HID report descriptor global item tags
118
*/
119
120
#define HID_GLOBAL_ITEM_TAG_USAGE_PAGE 0
121
#define HID_GLOBAL_ITEM_TAG_LOGICAL_MINIMUM 1
122
#define HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM 2
123
#define HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM 3
124
#define HID_GLOBAL_ITEM_TAG_PHYSICAL_MAXIMUM 4
125
#define HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT 5
126
#define HID_GLOBAL_ITEM_TAG_UNIT 6
127
#define HID_GLOBAL_ITEM_TAG_REPORT_SIZE 7
128
#define HID_GLOBAL_ITEM_TAG_REPORT_ID 8
129
#define HID_GLOBAL_ITEM_TAG_REPORT_COUNT 9
130
#define HID_GLOBAL_ITEM_TAG_PUSH 10
131
#define HID_GLOBAL_ITEM_TAG_POP 11
132
133
/*
134
* HID report descriptor local item tags
135
*/
136
137
#define HID_LOCAL_ITEM_TAG_USAGE 0
138
#define HID_LOCAL_ITEM_TAG_USAGE_MINIMUM 1
139
#define HID_LOCAL_ITEM_TAG_USAGE_MAXIMUM 2
140
#define HID_LOCAL_ITEM_TAG_DESIGNATOR_INDEX 3
141
#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MINIMUM 4
142
#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MAXIMUM 5
143
#define HID_LOCAL_ITEM_TAG_STRING_INDEX 7
144
#define HID_LOCAL_ITEM_TAG_STRING_MINIMUM 8
145
#define HID_LOCAL_ITEM_TAG_STRING_MAXIMUM 9
146
#define HID_LOCAL_ITEM_TAG_DELIMITER 10
147
148
/*
149
* HID usage tables
150
*/
151
152
#define HID_USAGE_PAGE 0xffff0000
153
154
#define HID_UP_UNDEFINED 0x00000000
155
#define HID_UP_GENDESK 0x00010000
156
#define HID_UP_SIMULATION 0x00020000
157
#define HID_UP_GENDEVCTRLS 0x00060000
158
#define HID_UP_KEYBOARD 0x00070000
159
#define HID_UP_LED 0x00080000
160
#define HID_UP_BUTTON 0x00090000
161
#define HID_UP_ORDINAL 0x000a0000
162
#define HID_UP_CONSUMER 0x000c0000
163
#define HID_UP_DIGITIZER 0x000d0000
164
#define HID_UP_PID 0x000f0000
165
#define HID_UP_HPVENDOR 0xff7f0000
166
#define HID_UP_HPVENDOR2 0xff010000
167
#define HID_UP_MSVENDOR 0xff000000
168
#define HID_UP_CUSTOM 0x00ff0000
169
#define HID_UP_LOGIVENDOR 0xffbc0000
170
171
#define HID_USAGE 0x0000ffff
172
173
#define HID_GD_POINTER 0x00010001
174
#define HID_GD_MOUSE 0x00010002
175
#define HID_GD_JOYSTICK 0x00010004
176
#define HID_GD_GAMEPAD 0x00010005
177
#define HID_GD_KEYBOARD 0x00010006
178
#define HID_GD_KEYPAD 0x00010007
179
#define HID_GD_MULTIAXIS 0x00010008
180
#define HID_GD_X 0x00010030
181
#define HID_GD_Y 0x00010031
182
#define HID_GD_Z 0x00010032
183
#define HID_GD_RX 0x00010033
184
#define HID_GD_RY 0x00010034
185
#define HID_GD_RZ 0x00010035
186
#define HID_GD_SLIDER 0x00010036
187
#define HID_GD_DIAL 0x00010037
188
#define HID_GD_WHEEL 0x00010038
189
#define HID_GD_HATSWITCH 0x00010039
190
#define HID_GD_BUFFER 0x0001003a
191
#define HID_GD_BYTECOUNT 0x0001003b
192
#define HID_GD_MOTION 0x0001003c
193
#define HID_GD_START 0x0001003d
194
#define HID_GD_SELECT 0x0001003e
195
#define HID_GD_VX 0x00010040
196
#define HID_GD_VY 0x00010041
197
#define HID_GD_VZ 0x00010042
198
#define HID_GD_VBRX 0x00010043
199
#define HID_GD_VBRY 0x00010044
200
#define HID_GD_VBRZ 0x00010045
201
#define HID_GD_VNO 0x00010046
202
#define HID_GD_FEATURE 0x00010047
203
#define HID_GD_UP 0x00010090
204
#define HID_GD_DOWN 0x00010091
205
#define HID_GD_RIGHT 0x00010092
206
#define HID_GD_LEFT 0x00010093
207
208
#define HID_DC_BATTERYSTRENGTH 0x00060020
209
210
#define HID_DG_DIGITIZER 0x000d0001
211
#define HID_DG_PEN 0x000d0002
212
#define HID_DG_LIGHTPEN 0x000d0003
213
#define HID_DG_TOUCHSCREEN 0x000d0004
214
#define HID_DG_TOUCHPAD 0x000d0005
215
#define HID_DG_STYLUS 0x000d0020
216
#define HID_DG_PUCK 0x000d0021
217
#define HID_DG_FINGER 0x000d0022
218
#define HID_DG_TIPPRESSURE 0x000d0030
219
#define HID_DG_BARRELPRESSURE 0x000d0031
220
#define HID_DG_INRANGE 0x000d0032
221
#define HID_DG_TOUCH 0x000d0033
222
#define HID_DG_UNTOUCH 0x000d0034
223
#define HID_DG_TAP 0x000d0035
224
#define HID_DG_TABLETFUNCTIONKEY 0x000d0039
225
#define HID_DG_PROGRAMCHANGEKEY 0x000d003a
226
#define HID_DG_INVERT 0x000d003c
227
#define HID_DG_TIPSWITCH 0x000d0042
228
#define HID_DG_TIPSWITCH2 0x000d0043
229
#define HID_DG_BARRELSWITCH 0x000d0044
230
#define HID_DG_ERASER 0x000d0045
231
#define HID_DG_TABLETPICK 0x000d0046
232
/*
233
* as of May 20, 2009 the usages below are not yet in the official USB spec
234
* but are being pushed by Microsft as described in their paper "Digitizer
235
* Drivers for Windows Touch and Pen-Based Computers"
236
*/
237
#define HID_DG_CONFIDENCE 0x000d0047
238
#define HID_DG_WIDTH 0x000d0048
239
#define HID_DG_HEIGHT 0x000d0049
240
#define HID_DG_CONTACTID 0x000d0051
241
#define HID_DG_INPUTMODE 0x000d0052
242
#define HID_DG_DEVICEINDEX 0x000d0053
243
#define HID_DG_CONTACTCOUNT 0x000d0054
244
#define HID_DG_CONTACTMAX 0x000d0055
245
246
/*
247
* HID report types --- Ouch! HID spec says 1 2 3!
248
*/
249
250
#define HID_INPUT_REPORT 0
251
#define HID_OUTPUT_REPORT 1
252
#define HID_FEATURE_REPORT 2
253
254
/*
255
* HID connect requests
256
*/
257
258
#define HID_CONNECT_HIDINPUT 0x01
259
#define HID_CONNECT_HIDINPUT_FORCE 0x02
260
#define HID_CONNECT_HIDRAW 0x04
261
#define HID_CONNECT_HIDDEV 0x08
262
#define HID_CONNECT_HIDDEV_FORCE 0x10
263
#define HID_CONNECT_FF 0x20
264
#define HID_CONNECT_DEFAULT (HID_CONNECT_HIDINPUT|HID_CONNECT_HIDRAW| \
265
HID_CONNECT_HIDDEV|HID_CONNECT_FF)
266
267
/*
268
* HID device quirks.
269
*/
270
271
/*
272
* Increase this if you need to configure more HID quirks at module load time
273
*/
274
#define MAX_USBHID_BOOT_QUIRKS 4
275
276
#define HID_QUIRK_INVERT 0x00000001
277
#define HID_QUIRK_NOTOUCH 0x00000002
278
#define HID_QUIRK_IGNORE 0x00000004
279
#define HID_QUIRK_NOGET 0x00000008
280
#define HID_QUIRK_HIDDEV_FORCE 0x00000010
281
#define HID_QUIRK_BADPAD 0x00000020
282
#define HID_QUIRK_MULTI_INPUT 0x00000040
283
#define HID_QUIRK_HIDINPUT_FORCE 0x00000080
284
#define HID_QUIRK_SKIP_OUTPUT_REPORTS 0x00010000
285
#define HID_QUIRK_FULLSPEED_INTERVAL 0x10000000
286
#define HID_QUIRK_NO_INIT_REPORTS 0x20000000
287
#define HID_QUIRK_NO_IGNORE 0x40000000
288
#define HID_QUIRK_NO_INPUT_SYNC 0x80000000
289
290
/*
291
* HID device groups
292
*/
293
#define HID_GROUP_GENERIC 0x0001
294
#define HID_GROUP_MULTITOUCH 0x0002
295
296
/*
297
* This is the global environment of the parser. This information is
298
* persistent for main-items. The global environment can be saved and
299
* restored with PUSH/POP statements.
300
*/
301
302
struct
hid_global
{
303
unsigned
usage_page
;
304
__s32
logical_minimum
;
305
__s32
logical_maximum
;
306
__s32
physical_minimum
;
307
__s32
physical_maximum
;
308
__s32
unit_exponent
;
309
unsigned
unit
;
310
unsigned
report_id
;
311
unsigned
report_size
;
312
unsigned
report_count
;
313
};
314
315
/*
316
* This is the local environment. It is persistent up the next main-item.
317
*/
318
319
#define HID_MAX_USAGES 12288
320
#define HID_DEFAULT_NUM_COLLECTIONS 16
321
322
struct
hid_local
{
323
unsigned
usage
[
HID_MAX_USAGES
];
/* usage array */
324
unsigned
collection_index
[
HID_MAX_USAGES
];
/* collection index array */
325
unsigned
usage_index
;
326
unsigned
usage_minimum
;
327
unsigned
delimiter_depth
;
328
unsigned
delimiter_branch
;
329
};
330
331
/*
332
* This is the collection stack. We climb up the stack to determine
333
* application and function of each field.
334
*/
335
336
struct
hid_collection
{
337
unsigned
type
;
338
unsigned
usage
;
339
unsigned
level
;
340
};
341
342
struct
hid_usage
{
343
unsigned
hid
;
/* hid usage code */
344
unsigned
collection_index
;
/* index into collection array */
345
/* hidinput data */
346
__u16
code
;
/* input driver code */
347
__u8
type
;
/* input driver type */
348
__s8
hat_min
;
/* hat switch fun */
349
__s8
hat_max
;
/* ditto */
350
__s8
hat_dir
;
/* ditto */
351
};
352
353
struct
hid_input
;
354
355
struct
hid_field
{
356
unsigned
physical
;
/* physical usage for this field */
357
unsigned
logical
;
/* logical usage for this field */
358
unsigned
application
;
/* application usage for this field */
359
struct
hid_usage
*
usage
;
/* usage table for this function */
360
unsigned
maxusage
;
/* maximum usage index */
361
unsigned
flags
;
/* main-item flags (i.e. volatile,array,constant) */
362
unsigned
report_offset
;
/* bit offset in the report */
363
unsigned
report_size
;
/* size of this field in the report */
364
unsigned
report_count
;
/* number of this field in the report */
365
unsigned
report_type
;
/* (input,output,feature) */
366
__s32
*
value
;
/* last known value(s) */
367
__s32
logical_minimum
;
368
__s32
logical_maximum
;
369
__s32
physical_minimum
;
370
__s32
physical_maximum
;
371
__s32
unit_exponent
;
372
unsigned
unit
;
373
struct
hid_report
*
report
;
/* associated report */
374
unsigned
index
;
/* index into report->field[] */
375
/* hidinput data */
376
struct
hid_input
*
hidinput
;
/* associated input structure */
377
__u16
dpad
;
/* dpad input code */
378
};
379
380
#define HID_MAX_FIELDS 256
381
382
struct
hid_report
{
383
struct
list_head
list
;
384
unsigned
id
;
/* id of this report */
385
unsigned
type
;
/* report type */
386
struct
hid_field
*
field
[
HID_MAX_FIELDS
];
/* fields of the report */
387
unsigned
maxfield
;
/* maximum valid field index */
388
unsigned
size
;
/* size of the report (bits) */
389
struct
hid_device
*
device
;
/* associated device */
390
};
391
392
struct
hid_report_enum
{
393
unsigned
numbered
;
394
struct
list_head
report_list
;
395
struct
hid_report
*
report_id_hash
[256];
396
};
397
398
#define HID_REPORT_TYPES 3
399
400
#define HID_MIN_BUFFER_SIZE 64
/* make sure there is at least a packet size of space */
401
#define HID_MAX_BUFFER_SIZE 4096
/* 4kb */
402
#define HID_CONTROL_FIFO_SIZE 256
/* to init devices with >100 reports */
403
#define HID_OUTPUT_FIFO_SIZE 64
404
405
struct
hid_control_fifo
{
406
unsigned
char
dir
;
407
struct
hid_report
*
report
;
408
char
*
raw_report
;
409
};
410
411
struct
hid_output_fifo
{
412
struct
hid_report
*
report
;
413
char
*
raw_report
;
414
};
415
416
#define HID_CLAIMED_INPUT 1
417
#define HID_CLAIMED_HIDDEV 2
418
#define HID_CLAIMED_HIDRAW 4
419
420
#define HID_STAT_ADDED 1
421
#define HID_STAT_PARSED 2
422
423
struct
hid_input
{
424
struct
list_head
list
;
425
struct
hid_report
*
report
;
426
struct
input_dev *
input
;
427
};
428
429
enum
hid_type
{
430
HID_TYPE_OTHER
= 0,
431
HID_TYPE_USBMOUSE
,
432
HID_TYPE_USBNONE
433
};
434
435
struct
hid_driver
;
436
struct
hid_ll_driver
;
437
438
struct
hid_device
{
/* device report descriptor */
439
__u8
*
dev_rdesc
;
440
unsigned
dev_rsize
;
441
__u8
*
rdesc
;
442
unsigned
rsize
;
443
struct
hid_collection
*
collection
;
/* List of HID collections */
444
unsigned
collection_size
;
/* Number of allocated hid_collections */
445
unsigned
maxcollection
;
/* Number of parsed collections */
446
unsigned
maxapplication
;
/* Number of applications */
447
__u16
bus
;
/* BUS ID */
448
__u16
group
;
/* Report group */
449
__u32
vendor
;
/* Vendor ID */
450
__u32
product
;
/* Product ID */
451
__u32
version
;
/* HID version */
452
enum
hid_type
type
;
/* device type (mouse, kbd, ...) */
453
unsigned
country
;
/* HID country */
454
struct
hid_report_enum
report_enum
[
HID_REPORT_TYPES
];
455
456
struct
semaphore
driver_lock
;
/* protects the current driver */
457
struct
device
dev
;
/* device */
458
struct
hid_driver
*
driver
;
459
struct
hid_ll_driver
*
ll_driver
;
460
461
#ifdef CONFIG_HID_BATTERY_STRENGTH
462
/*
463
* Power supply information for HID devices which report
464
* battery strength. power_supply is registered iff
465
* battery.name is non-NULL.
466
*/
467
struct
power_supply
battery;
468
__s32
battery_min;
469
__s32
battery_max;
470
__s32
battery_report_type;
471
__s32
battery_report_id;
472
#endif
473
474
unsigned
int
status
;
/* see STAT flags above */
475
unsigned
claimed
;
/* Claimed by hidinput, hiddev? */
476
unsigned
quirks
;
/* Various quirks the device can pull on us */
477
478
struct
list_head
inputs
;
/* The list of inputs */
479
void
*
hiddev
;
/* The hiddev structure */
480
void
*
hidraw
;
481
int
minor
;
/* Hiddev minor number */
482
483
int
open
;
/* is the device open by anyone? */
484
char
name
[128];
/* Device name */
485
char
phys
[64];
/* Device physical location */
486
char
uniq
[64];
/* Device unique identifier (serial #) */
487
488
void
*
driver_data
;
489
490
/* temporary hid_ff handling (until moved to the drivers) */
491
int
(*
ff_init
)(
struct
hid_device
*);
492
493
/* hiddev event handler */
494
int
(*
hiddev_connect
)(
struct
hid_device
*,
unsigned
int
);
495
void
(*
hiddev_disconnect
)(
struct
hid_device
*);
496
void
(*
hiddev_hid_event
) (
struct
hid_device
*,
struct
hid_field
*
field
,
497
struct
hid_usage
*,
__s32
);
498
void
(*
hiddev_report_event
) (
struct
hid_device
*,
struct
hid_report
*);
499
500
/* handler for raw input (Get_Report) data, used by hidraw */
501
int
(*
hid_get_raw_report
) (
struct
hid_device
*,
unsigned
char
,
__u8
*,
size_t
,
unsigned
char
);
502
503
/* handler for raw output data, used by hidraw */
504
int
(*
hid_output_raw_report
) (
struct
hid_device
*,
__u8
*,
size_t
,
unsigned
char
);
505
506
/* debugging support via debugfs */
507
unsigned
short
debug
;
508
struct
dentry
*
debug_dir
;
509
struct
dentry
*
debug_rdesc
;
510
struct
dentry
*
debug_events
;
511
struct
list_head
debug_list
;
512
wait_queue_head_t
debug_wait
;
513
};
514
515
static
inline
void
*hid_get_drvdata(
struct
hid_device
*hdev)
516
{
517
return
dev_get_drvdata
(&hdev->
dev
);
518
}
519
520
static
inline
void
hid_set_drvdata(
struct
hid_device
*hdev,
void
*
data
)
521
{
522
dev_set_drvdata
(&hdev->
dev
, data);
523
}
524
525
#define HID_GLOBAL_STACK_SIZE 4
526
#define HID_COLLECTION_STACK_SIZE 4
527
528
struct
hid_parser
{
529
struct
hid_global
global
;
530
struct
hid_global
global_stack
[
HID_GLOBAL_STACK_SIZE
];
531
unsigned
global_stack_ptr
;
532
struct
hid_local
local
;
533
unsigned
collection_stack
[
HID_COLLECTION_STACK_SIZE
];
534
unsigned
collection_stack_ptr
;
535
struct
hid_device
*
device
;
536
};
537
538
struct
hid_class_descriptor
{
539
__u8
bDescriptorType
;
540
__le16
wDescriptorLength
;
541
}
__attribute__
((packed));
542
543
struct
hid_descriptor
{
544
__u8
bLength
;
545
__u8
bDescriptorType
;
546
__le16
bcdHID
;
547
__u8
bCountryCode
;
548
__u8
bNumDescriptors
;
549
550
struct
hid_class_descriptor
desc
[1];
551
}
__attribute__
((packed));
552
553
#define HID_DEVICE(b, g, ven, prod) \
554
.bus = (b), .group = (g), .vendor = (ven), .product = (prod)
555
#define HID_USB_DEVICE(ven, prod) \
556
.bus = BUS_USB, .vendor = (ven), .product = (prod)
557
#define HID_BLUETOOTH_DEVICE(ven, prod) \
558
.bus = BUS_BLUETOOTH, .vendor = (ven), .product = (prod)
559
560
#define HID_REPORT_ID(rep) \
561
.report_type = (rep)
562
#define HID_USAGE_ID(uhid, utype, ucode) \
563
.usage_hid = (uhid), .usage_type = (utype), .usage_code = (ucode)
564
/* we don't want to catch types and codes equal to 0 */
565
#define HID_TERMINATOR (HID_ANY_ID - 1)
566
567
struct
hid_report_id
{
568
__u32
report_type
;
569
};
570
struct
hid_usage_id
{
571
__u32
usage_hid
;
572
__u32
usage_type
;
573
__u32
usage_code
;
574
};
575
611
struct
hid_driver
{
612
char
*
name
;
613
const
struct
hid_device_id
*
id_table
;
614
615
struct
list_head
dyn_list
;
616
spinlock_t
dyn_lock
;
617
618
int
(*
probe
)(
struct
hid_device
*
dev
,
const
struct
hid_device_id
*
id
);
619
void
(*
remove
)(
struct
hid_device
*
dev
);
620
621
const
struct
hid_report_id
*
report_table
;
622
int
(*
raw_event
)(
struct
hid_device
*hdev,
struct
hid_report
*
report
,
623
u8
*
data
,
int
size
);
624
const
struct
hid_usage_id
*
usage_table
;
625
int
(*
event
)(
struct
hid_device
*hdev,
struct
hid_field
*
field
,
626
struct
hid_usage
*
usage
,
__s32
value
);
627
628
__u8
*(*report_fixup)(
struct
hid_device
*hdev,
__u8
*
buf
,
629
unsigned
int
*
size
);
630
631
int
(*
input_mapping
)(
struct
hid_device
*hdev,
632
struct
hid_input
*hidinput,
struct
hid_field
*
field
,
633
struct
hid_usage
*
usage
,
unsigned
long
**
bit
,
int
*
max
);
634
int
(*
input_mapped
)(
struct
hid_device
*hdev,
635
struct
hid_input
*hidinput,
struct
hid_field
*
field
,
636
struct
hid_usage
*
usage
,
unsigned
long
**
bit
,
int
*
max
);
637
void
(*
input_configured
)(
struct
hid_device
*hdev,
638
struct
hid_input
*hidinput);
639
void
(*
feature_mapping
)(
struct
hid_device
*hdev,
640
struct
hid_field
*
field
,
641
struct
hid_usage
*
usage
);
642
#ifdef CONFIG_PM
643
int
(*
suspend
)(
struct
hid_device
*hdev,
pm_message_t
message
);
644
int
(*
resume
)(
struct
hid_device
*hdev);
645
int
(*reset_resume)(
struct
hid_device
*hdev);
646
#endif
647
/* private: */
648
struct
device_driver
driver
;
649
};
650
661
struct
hid_ll_driver
{
662
int
(*
start
)(
struct
hid_device
*hdev);
663
void
(*
stop
)(
struct
hid_device
*hdev);
664
665
int
(*
open
)(
struct
hid_device
*hdev);
666
void
(*
close
)(
struct
hid_device
*hdev);
667
668
int
(*
power
)(
struct
hid_device
*hdev,
int
level
);
669
670
int
(*
hidinput_input_event
) (
struct
input_dev *
idev
,
unsigned
int
type
,
671
unsigned
int
code
,
int
value
);
672
673
int
(*
parse
)(
struct
hid_device
*hdev);
674
};
675
676
#define PM_HINT_FULLON 1<<5
677
#define PM_HINT_NORMAL 1<<1
678
679
/* Applications from HID Usage Tables 4/8/99 Version 1.1 */
680
/* We ignore a few input applications that are not widely used */
681
#define IS_INPUT_APPLICATION(a) (((a >= 0x00010000) && (a <= 0x00010008)) || (a == 0x00010080) || (a == 0x000c0001) || ((a >= 0x000d0002) && (a <= 0x000d0006)))
682
683
/* HID core API */
684
685
extern
int
hid_debug
;
686
687
extern
int
hid_add_device
(
struct
hid_device
*);
688
extern
void
hid_destroy_device
(
struct
hid_device
*);
689
690
extern
int
__must_check
__hid_register_driver
(
struct
hid_driver
*,
691
struct
module
*,
const
char
*mod_name);
692
693
/* use a define to avoid include chaining to get THIS_MODULE & friends */
694
#define hid_register_driver(driver) \
695
__hid_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)
696
697
extern
void
hid_unregister_driver
(
struct
hid_driver
*);
698
699
extern
void
hidinput_hid_event
(
struct
hid_device
*,
struct
hid_field
*,
struct
hid_usage
*,
__s32
);
700
extern
void
hidinput_report_event
(
struct
hid_device
*hid,
struct
hid_report
*
report
);
701
extern
int
hidinput_connect
(
struct
hid_device
*hid,
unsigned
int
force
);
702
extern
void
hidinput_disconnect
(
struct
hid_device
*);
703
704
int
hid_set_field
(
struct
hid_field
*,
unsigned
,
__s32
);
705
int
hid_input_report
(
struct
hid_device
*,
int
type
,
u8
*,
int
,
int
);
706
int
hidinput_find_field
(
struct
hid_device
*hid,
unsigned
int
type
,
unsigned
int
code
,
struct
hid_field
**
field
);
707
struct
hid_field
*
hidinput_get_led_field
(
struct
hid_device
*hid);
708
unsigned
int
hidinput_count_leds
(
struct
hid_device
*hid);
709
void
hid_output_report
(
struct
hid_report
*
report
,
__u8
*
data
);
710
struct
hid_device
*
hid_allocate_device
(
void
);
711
struct
hid_report
*
hid_register_report
(
struct
hid_device
*
device
,
unsigned
type
,
unsigned
id
);
712
int
hid_parse_report
(
struct
hid_device
*hid,
__u8
*
start
,
unsigned
size
);
713
int
hid_open_report
(
struct
hid_device
*
device
);
714
int
hid_check_keys_pressed
(
struct
hid_device
*hid);
715
int
hid_connect
(
struct
hid_device
*hid,
unsigned
int
connect_mask);
716
void
hid_disconnect
(
struct
hid_device
*hid);
717
const
struct
hid_device_id
*
hid_match_id
(
struct
hid_device
*hdev,
718
const
struct
hid_device_id
*
id
);
719
730
static
inline
void
hid_map_usage(
struct
hid_input
*hidinput,
731
struct
hid_usage
*
usage
,
unsigned
long
**
bit
,
int
*
max
,
732
__u8
type
,
__u16
c
)
733
{
734
struct
input_dev *
input
= hidinput->
input
;
735
736
usage->
type
=
type
;
737
usage->
code
=
c
;
738
739
switch
(type) {
740
case
EV_ABS
:
741
*bit = input->absbit;
742
*max =
ABS_MAX
;
743
break
;
744
case
EV_REL
:
745
*bit = input->relbit;
746
*max =
REL_MAX
;
747
break
;
748
case
EV_KEY
:
749
*bit = input->keybit;
750
*max =
KEY_MAX
;
751
break
;
752
case
EV_LED
:
753
*bit = input->ledbit;
754
*max =
LED_MAX
;
755
break
;
756
}
757
}
758
765
static
inline
void
hid_map_usage_clear(
struct
hid_input
*hidinput,
766
struct
hid_usage
*usage,
unsigned
long
**bit,
int
*max,
767
__u8
type,
__u16
c)
768
{
769
hid_map_usage(hidinput, usage, bit, max, type, c);
770
clear_bit
(c, *bit);
771
}
772
782
static
inline
int
__must_check
hid_parse(
struct
hid_device
*hdev)
783
{
784
return
hid_open_report
(hdev);
785
}
786
797
static
inline
int
__must_check
hid_hw_start(
struct
hid_device
*hdev,
798
unsigned
int
connect_mask)
799
{
800
int
ret
= hdev->
ll_driver
->start(hdev);
801
if
(ret || !connect_mask)
802
return
ret
;
803
ret =
hid_connect
(hdev, connect_mask);
804
if
(ret)
805
hdev->
ll_driver
->stop(hdev);
806
return
ret
;
807
}
808
817
static
inline
void
hid_hw_stop(
struct
hid_device
*hdev)
818
{
819
hid_disconnect
(hdev);
820
hdev->
ll_driver
->stop(hdev);
821
}
822
832
static
inline
int
__must_check
hid_hw_open(
struct
hid_device
*hdev)
833
{
834
return
hdev->
ll_driver
->open(hdev);
835
}
836
846
static
inline
void
hid_hw_close(
struct
hid_device
*hdev)
847
{
848
hdev->
ll_driver
->close(hdev);
849
}
850
861
static
inline
int
hid_hw_power(
struct
hid_device
*hdev,
int
level
)
862
{
863
return
hdev->
ll_driver
->power ? hdev->
ll_driver
->power(hdev, level) : 0;
864
}
865
866
int
hid_report_raw_event
(
struct
hid_device
*hid,
int
type,
u8
*
data
,
int
size
,
867
int
interrupt
);
868
869
extern
int
hid_generic_init
(
void
);
870
extern
void
hid_generic_exit
(
void
);
871
872
/* HID quirks API */
873
u32
usbhid_lookup_quirk
(
const
u16
idVendor,
const
u16
idProduct);
874
int
usbhid_quirks_init
(
char
**quirks_param);
875
void
usbhid_quirks_exit
(
void
);
876
void
usbhid_set_leds
(
struct
hid_device
*hid);
877
878
#ifdef CONFIG_HID_PID
879
int
hid_pidff_init
(
struct
hid_device
*hid);
880
#else
881
#define hid_pidff_init NULL
882
#endif
883
884
#define dbg_hid(format, arg...) \
885
do { \
886
if (hid_debug) \
887
printk(KERN_DEBUG "%s: " format, __FILE__, ##arg); \
888
} while (0)
889
890
#define hid_printk(level, hid, fmt, arg...) \
891
dev_printk(level, &(hid)->dev, fmt, ##arg)
892
#define hid_emerg(hid, fmt, arg...) \
893
dev_emerg(&(hid)->dev, fmt, ##arg)
894
#define hid_crit(hid, fmt, arg...) \
895
dev_crit(&(hid)->dev, fmt, ##arg)
896
#define hid_alert(hid, fmt, arg...) \
897
dev_alert(&(hid)->dev, fmt, ##arg)
898
#define hid_err(hid, fmt, arg...) \
899
dev_err(&(hid)->dev, fmt, ##arg)
900
#define hid_notice(hid, fmt, arg...) \
901
dev_notice(&(hid)->dev, fmt, ##arg)
902
#define hid_warn(hid, fmt, arg...) \
903
dev_warn(&(hid)->dev, fmt, ##arg)
904
#define hid_info(hid, fmt, arg...) \
905
dev_info(&(hid)->dev, fmt, ##arg)
906
#define hid_dbg(hid, fmt, arg...) \
907
dev_dbg(&(hid)->dev, fmt, ##arg)
908
909
#endif
Generated on Thu Jan 10 2013 14:51:30 for Linux Kernel by
1.8.2