0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #ifndef __HID_H
0014 #define __HID_H
0015
0016
0017 #include <linux/bitops.h>
0018 #include <linux/types.h>
0019 #include <linux/slab.h>
0020 #include <linux/list.h>
0021 #include <linux/mod_devicetable.h> /* hid_device_id */
0022 #include <linux/timer.h>
0023 #include <linux/workqueue.h>
0024 #include <linux/input.h>
0025 #include <linux/semaphore.h>
0026 #include <linux/mutex.h>
0027 #include <linux/power_supply.h>
0028 #include <uapi/linux/hid.h>
0029
0030
0031
0032
0033
0034
0035
0036 struct hid_item {
0037 unsigned format;
0038 __u8 size;
0039 __u8 type;
0040 __u8 tag;
0041 union {
0042 __u8 u8;
0043 __s8 s8;
0044 __u16 u16;
0045 __s16 s16;
0046 __u32 u32;
0047 __s32 s32;
0048 __u8 *longdata;
0049 } data;
0050 };
0051
0052
0053
0054
0055
0056 #define HID_ITEM_FORMAT_SHORT 0
0057 #define HID_ITEM_FORMAT_LONG 1
0058
0059
0060
0061
0062
0063 #define HID_ITEM_TAG_LONG 15
0064
0065
0066
0067
0068
0069 #define HID_ITEM_TYPE_MAIN 0
0070 #define HID_ITEM_TYPE_GLOBAL 1
0071 #define HID_ITEM_TYPE_LOCAL 2
0072 #define HID_ITEM_TYPE_RESERVED 3
0073
0074
0075
0076
0077
0078 #define HID_MAIN_ITEM_TAG_INPUT 8
0079 #define HID_MAIN_ITEM_TAG_OUTPUT 9
0080 #define HID_MAIN_ITEM_TAG_FEATURE 11
0081 #define HID_MAIN_ITEM_TAG_BEGIN_COLLECTION 10
0082 #define HID_MAIN_ITEM_TAG_END_COLLECTION 12
0083
0084
0085
0086
0087
0088 #define HID_MAIN_ITEM_CONSTANT 0x001
0089 #define HID_MAIN_ITEM_VARIABLE 0x002
0090 #define HID_MAIN_ITEM_RELATIVE 0x004
0091 #define HID_MAIN_ITEM_WRAP 0x008
0092 #define HID_MAIN_ITEM_NONLINEAR 0x010
0093 #define HID_MAIN_ITEM_NO_PREFERRED 0x020
0094 #define HID_MAIN_ITEM_NULL_STATE 0x040
0095 #define HID_MAIN_ITEM_VOLATILE 0x080
0096 #define HID_MAIN_ITEM_BUFFERED_BYTE 0x100
0097
0098
0099
0100
0101
0102 #define HID_COLLECTION_PHYSICAL 0
0103 #define HID_COLLECTION_APPLICATION 1
0104 #define HID_COLLECTION_LOGICAL 2
0105 #define HID_COLLECTION_NAMED_ARRAY 4
0106
0107
0108
0109
0110
0111 #define HID_GLOBAL_ITEM_TAG_USAGE_PAGE 0
0112 #define HID_GLOBAL_ITEM_TAG_LOGICAL_MINIMUM 1
0113 #define HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM 2
0114 #define HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM 3
0115 #define HID_GLOBAL_ITEM_TAG_PHYSICAL_MAXIMUM 4
0116 #define HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT 5
0117 #define HID_GLOBAL_ITEM_TAG_UNIT 6
0118 #define HID_GLOBAL_ITEM_TAG_REPORT_SIZE 7
0119 #define HID_GLOBAL_ITEM_TAG_REPORT_ID 8
0120 #define HID_GLOBAL_ITEM_TAG_REPORT_COUNT 9
0121 #define HID_GLOBAL_ITEM_TAG_PUSH 10
0122 #define HID_GLOBAL_ITEM_TAG_POP 11
0123
0124
0125
0126
0127
0128 #define HID_LOCAL_ITEM_TAG_USAGE 0
0129 #define HID_LOCAL_ITEM_TAG_USAGE_MINIMUM 1
0130 #define HID_LOCAL_ITEM_TAG_USAGE_MAXIMUM 2
0131 #define HID_LOCAL_ITEM_TAG_DESIGNATOR_INDEX 3
0132 #define HID_LOCAL_ITEM_TAG_DESIGNATOR_MINIMUM 4
0133 #define HID_LOCAL_ITEM_TAG_DESIGNATOR_MAXIMUM 5
0134 #define HID_LOCAL_ITEM_TAG_STRING_INDEX 7
0135 #define HID_LOCAL_ITEM_TAG_STRING_MINIMUM 8
0136 #define HID_LOCAL_ITEM_TAG_STRING_MAXIMUM 9
0137 #define HID_LOCAL_ITEM_TAG_DELIMITER 10
0138
0139
0140
0141
0142
0143 #define HID_USAGE_PAGE 0xffff0000
0144
0145 #define HID_UP_UNDEFINED 0x00000000
0146 #define HID_UP_GENDESK 0x00010000
0147 #define HID_UP_SIMULATION 0x00020000
0148 #define HID_UP_GENDEVCTRLS 0x00060000
0149 #define HID_UP_KEYBOARD 0x00070000
0150 #define HID_UP_LED 0x00080000
0151 #define HID_UP_BUTTON 0x00090000
0152 #define HID_UP_ORDINAL 0x000a0000
0153 #define HID_UP_TELEPHONY 0x000b0000
0154 #define HID_UP_CONSUMER 0x000c0000
0155 #define HID_UP_DIGITIZER 0x000d0000
0156 #define HID_UP_PID 0x000f0000
0157 #define HID_UP_BATTERY 0x00850000
0158 #define HID_UP_HPVENDOR 0xff7f0000
0159 #define HID_UP_HPVENDOR2 0xff010000
0160 #define HID_UP_MSVENDOR 0xff000000
0161 #define HID_UP_CUSTOM 0x00ff0000
0162 #define HID_UP_LOGIVENDOR 0xffbc0000
0163 #define HID_UP_LOGIVENDOR2 0xff090000
0164 #define HID_UP_LOGIVENDOR3 0xff430000
0165 #define HID_UP_LNVENDOR 0xffa00000
0166 #define HID_UP_SENSOR 0x00200000
0167 #define HID_UP_ASUSVENDOR 0xff310000
0168 #define HID_UP_GOOGLEVENDOR 0xffd10000
0169
0170 #define HID_USAGE 0x0000ffff
0171
0172 #define HID_GD_POINTER 0x00010001
0173 #define HID_GD_MOUSE 0x00010002
0174 #define HID_GD_JOYSTICK 0x00010004
0175 #define HID_GD_GAMEPAD 0x00010005
0176 #define HID_GD_KEYBOARD 0x00010006
0177 #define HID_GD_KEYPAD 0x00010007
0178 #define HID_GD_MULTIAXIS 0x00010008
0179
0180
0181
0182
0183 #define HID_GD_WIRELESS_RADIO_CTLS 0x0001000c
0184
0185
0186
0187
0188 #define HID_GD_SYSTEM_MULTIAXIS 0x0001000e
0189
0190 #define HID_GD_X 0x00010030
0191 #define HID_GD_Y 0x00010031
0192 #define HID_GD_Z 0x00010032
0193 #define HID_GD_RX 0x00010033
0194 #define HID_GD_RY 0x00010034
0195 #define HID_GD_RZ 0x00010035
0196 #define HID_GD_SLIDER 0x00010036
0197 #define HID_GD_DIAL 0x00010037
0198 #define HID_GD_WHEEL 0x00010038
0199 #define HID_GD_HATSWITCH 0x00010039
0200 #define HID_GD_BUFFER 0x0001003a
0201 #define HID_GD_BYTECOUNT 0x0001003b
0202 #define HID_GD_MOTION 0x0001003c
0203 #define HID_GD_START 0x0001003d
0204 #define HID_GD_SELECT 0x0001003e
0205 #define HID_GD_VX 0x00010040
0206 #define HID_GD_VY 0x00010041
0207 #define HID_GD_VZ 0x00010042
0208 #define HID_GD_VBRX 0x00010043
0209 #define HID_GD_VBRY 0x00010044
0210 #define HID_GD_VBRZ 0x00010045
0211 #define HID_GD_VNO 0x00010046
0212 #define HID_GD_FEATURE 0x00010047
0213 #define HID_GD_RESOLUTION_MULTIPLIER 0x00010048
0214 #define HID_GD_SYSTEM_CONTROL 0x00010080
0215 #define HID_GD_UP 0x00010090
0216 #define HID_GD_DOWN 0x00010091
0217 #define HID_GD_RIGHT 0x00010092
0218 #define HID_GD_LEFT 0x00010093
0219
0220 #define HID_GD_RFKILL_BTN 0x000100c6
0221 #define HID_GD_RFKILL_LED 0x000100c7
0222 #define HID_GD_RFKILL_SWITCH 0x000100c8
0223
0224 #define HID_DC_BATTERYSTRENGTH 0x00060020
0225
0226 #define HID_CP_CONSUMER_CONTROL 0x000c0001
0227 #define HID_CP_AC_PAN 0x000c0238
0228
0229 #define HID_DG_DIGITIZER 0x000d0001
0230 #define HID_DG_PEN 0x000d0002
0231 #define HID_DG_LIGHTPEN 0x000d0003
0232 #define HID_DG_TOUCHSCREEN 0x000d0004
0233 #define HID_DG_TOUCHPAD 0x000d0005
0234 #define HID_DG_WHITEBOARD 0x000d0006
0235 #define HID_DG_STYLUS 0x000d0020
0236 #define HID_DG_PUCK 0x000d0021
0237 #define HID_DG_FINGER 0x000d0022
0238 #define HID_DG_TIPPRESSURE 0x000d0030
0239 #define HID_DG_BARRELPRESSURE 0x000d0031
0240 #define HID_DG_INRANGE 0x000d0032
0241 #define HID_DG_TOUCH 0x000d0033
0242 #define HID_DG_UNTOUCH 0x000d0034
0243 #define HID_DG_TAP 0x000d0035
0244 #define HID_DG_TRANSDUCER_INDEX 0x000d0038
0245 #define HID_DG_TABLETFUNCTIONKEY 0x000d0039
0246 #define HID_DG_PROGRAMCHANGEKEY 0x000d003a
0247 #define HID_DG_BATTERYSTRENGTH 0x000d003b
0248 #define HID_DG_INVERT 0x000d003c
0249 #define HID_DG_TILT_X 0x000d003d
0250 #define HID_DG_TILT_Y 0x000d003e
0251 #define HID_DG_TWIST 0x000d0041
0252 #define HID_DG_TIPSWITCH 0x000d0042
0253 #define HID_DG_TIPSWITCH2 0x000d0043
0254 #define HID_DG_BARRELSWITCH 0x000d0044
0255 #define HID_DG_ERASER 0x000d0045
0256 #define HID_DG_TABLETPICK 0x000d0046
0257 #define HID_DG_PEN_COLOR 0x000d005c
0258 #define HID_DG_PEN_LINE_WIDTH 0x000d005e
0259 #define HID_DG_PEN_LINE_STYLE 0x000d0070
0260 #define HID_DG_PEN_LINE_STYLE_INK 0x000d0072
0261 #define HID_DG_PEN_LINE_STYLE_PENCIL 0x000d0073
0262 #define HID_DG_PEN_LINE_STYLE_HIGHLIGHTER 0x000d0074
0263 #define HID_DG_PEN_LINE_STYLE_CHISEL_MARKER 0x000d0075
0264 #define HID_DG_PEN_LINE_STYLE_BRUSH 0x000d0076
0265 #define HID_DG_PEN_LINE_STYLE_NO_PREFERENCE 0x000d0077
0266
0267 #define HID_CP_CONSUMERCONTROL 0x000c0001
0268 #define HID_CP_NUMERICKEYPAD 0x000c0002
0269 #define HID_CP_PROGRAMMABLEBUTTONS 0x000c0003
0270 #define HID_CP_MICROPHONE 0x000c0004
0271 #define HID_CP_HEADPHONE 0x000c0005
0272 #define HID_CP_GRAPHICEQUALIZER 0x000c0006
0273 #define HID_CP_FUNCTIONBUTTONS 0x000c0036
0274 #define HID_CP_SELECTION 0x000c0080
0275 #define HID_CP_MEDIASELECTION 0x000c0087
0276 #define HID_CP_SELECTDISC 0x000c00ba
0277 #define HID_CP_VOLUMEUP 0x000c00e9
0278 #define HID_CP_VOLUMEDOWN 0x000c00ea
0279 #define HID_CP_PLAYBACKSPEED 0x000c00f1
0280 #define HID_CP_PROXIMITY 0x000c0109
0281 #define HID_CP_SPEAKERSYSTEM 0x000c0160
0282 #define HID_CP_CHANNELLEFT 0x000c0161
0283 #define HID_CP_CHANNELRIGHT 0x000c0162
0284 #define HID_CP_CHANNELCENTER 0x000c0163
0285 #define HID_CP_CHANNELFRONT 0x000c0164
0286 #define HID_CP_CHANNELCENTERFRONT 0x000c0165
0287 #define HID_CP_CHANNELSIDE 0x000c0166
0288 #define HID_CP_CHANNELSURROUND 0x000c0167
0289 #define HID_CP_CHANNELLOWFREQUENCYENHANCEMENT 0x000c0168
0290 #define HID_CP_CHANNELTOP 0x000c0169
0291 #define HID_CP_CHANNELUNKNOWN 0x000c016a
0292 #define HID_CP_APPLICATIONLAUNCHBUTTONS 0x000c0180
0293 #define HID_CP_GENERICGUIAPPLICATIONCONTROLS 0x000c0200
0294
0295 #define HID_DG_DEVICECONFIG 0x000d000e
0296 #define HID_DG_DEVICESETTINGS 0x000d0023
0297 #define HID_DG_AZIMUTH 0x000d003f
0298 #define HID_DG_CONFIDENCE 0x000d0047
0299 #define HID_DG_WIDTH 0x000d0048
0300 #define HID_DG_HEIGHT 0x000d0049
0301 #define HID_DG_CONTACTID 0x000d0051
0302 #define HID_DG_INPUTMODE 0x000d0052
0303 #define HID_DG_DEVICEINDEX 0x000d0053
0304 #define HID_DG_CONTACTCOUNT 0x000d0054
0305 #define HID_DG_CONTACTMAX 0x000d0055
0306 #define HID_DG_SCANTIME 0x000d0056
0307 #define HID_DG_SURFACESWITCH 0x000d0057
0308 #define HID_DG_BUTTONSWITCH 0x000d0058
0309 #define HID_DG_BUTTONTYPE 0x000d0059
0310 #define HID_DG_BARRELSWITCH2 0x000d005a
0311 #define HID_DG_TOOLSERIALNUMBER 0x000d005b
0312 #define HID_DG_LATENCYMODE 0x000d0060
0313
0314 #define HID_BAT_ABSOLUTESTATEOFCHARGE 0x00850065
0315
0316 #define HID_VD_ASUS_CUSTOM_MEDIA_KEYS 0xff310076
0317
0318
0319
0320
0321 #define HID_INPUT_REPORT 0
0322 #define HID_OUTPUT_REPORT 1
0323 #define HID_FEATURE_REPORT 2
0324
0325 #define HID_REPORT_TYPES 3
0326
0327
0328
0329
0330
0331 #define HID_CONNECT_HIDINPUT BIT(0)
0332 #define HID_CONNECT_HIDINPUT_FORCE BIT(1)
0333 #define HID_CONNECT_HIDRAW BIT(2)
0334 #define HID_CONNECT_HIDDEV BIT(3)
0335 #define HID_CONNECT_HIDDEV_FORCE BIT(4)
0336 #define HID_CONNECT_FF BIT(5)
0337 #define HID_CONNECT_DRIVER BIT(6)
0338 #define HID_CONNECT_DEFAULT (HID_CONNECT_HIDINPUT|HID_CONNECT_HIDRAW| \
0339 HID_CONNECT_HIDDEV|HID_CONNECT_FF)
0340
0341
0342
0343
0344
0345
0346
0347
0348 #define MAX_USBHID_BOOT_QUIRKS 4
0349
0350
0351 #define HID_QUIRK_NOTOUCH BIT(1)
0352 #define HID_QUIRK_IGNORE BIT(2)
0353 #define HID_QUIRK_NOGET BIT(3)
0354 #define HID_QUIRK_HIDDEV_FORCE BIT(4)
0355 #define HID_QUIRK_BADPAD BIT(5)
0356 #define HID_QUIRK_MULTI_INPUT BIT(6)
0357 #define HID_QUIRK_HIDINPUT_FORCE BIT(7)
0358
0359
0360 #define HID_QUIRK_ALWAYS_POLL BIT(10)
0361 #define HID_QUIRK_INPUT_PER_APP BIT(11)
0362 #define HID_QUIRK_X_INVERT BIT(12)
0363 #define HID_QUIRK_Y_INVERT BIT(13)
0364 #define HID_QUIRK_SKIP_OUTPUT_REPORTS BIT(16)
0365 #define HID_QUIRK_SKIP_OUTPUT_REPORT_ID BIT(17)
0366 #define HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP BIT(18)
0367 #define HID_QUIRK_HAVE_SPECIAL_DRIVER BIT(19)
0368 #define HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE BIT(20)
0369 #define HID_QUIRK_FULLSPEED_INTERVAL BIT(28)
0370 #define HID_QUIRK_NO_INIT_REPORTS BIT(29)
0371 #define HID_QUIRK_NO_IGNORE BIT(30)
0372 #define HID_QUIRK_NO_INPUT_SYNC BIT(31)
0373
0374
0375
0376
0377
0378
0379
0380 #define HID_GROUP_GENERIC 0x0001
0381 #define HID_GROUP_MULTITOUCH 0x0002
0382 #define HID_GROUP_SENSOR_HUB 0x0003
0383 #define HID_GROUP_MULTITOUCH_WIN_8 0x0004
0384
0385
0386
0387
0388 #define HID_GROUP_RMI 0x0100
0389 #define HID_GROUP_WACOM 0x0101
0390 #define HID_GROUP_LOGITECH_DJ_DEVICE 0x0102
0391 #define HID_GROUP_STEAM 0x0103
0392 #define HID_GROUP_LOGITECH_27MHZ_DEVICE 0x0104
0393 #define HID_GROUP_VIVALDI 0x0105
0394
0395
0396
0397
0398 #define HID_REPORT_PROTOCOL 1
0399 #define HID_BOOT_PROTOCOL 0
0400
0401
0402
0403
0404
0405
0406
0407 struct hid_global {
0408 unsigned usage_page;
0409 __s32 logical_minimum;
0410 __s32 logical_maximum;
0411 __s32 physical_minimum;
0412 __s32 physical_maximum;
0413 __s32 unit_exponent;
0414 unsigned unit;
0415 unsigned report_id;
0416 unsigned report_size;
0417 unsigned report_count;
0418 };
0419
0420
0421
0422
0423
0424 #define HID_MAX_USAGES 12288
0425 #define HID_DEFAULT_NUM_COLLECTIONS 16
0426
0427 struct hid_local {
0428 unsigned usage[HID_MAX_USAGES];
0429 u8 usage_size[HID_MAX_USAGES];
0430 unsigned collection_index[HID_MAX_USAGES];
0431 unsigned usage_index;
0432 unsigned usage_minimum;
0433 unsigned delimiter_depth;
0434 unsigned delimiter_branch;
0435 };
0436
0437
0438
0439
0440
0441
0442 struct hid_collection {
0443 int parent_idx;
0444 unsigned type;
0445 unsigned usage;
0446 unsigned level;
0447 };
0448
0449 struct hid_usage {
0450 unsigned hid;
0451 unsigned collection_index;
0452 unsigned usage_index;
0453 __s8 resolution_multiplier;
0454
0455
0456 __s8 wheel_factor;
0457 __u16 code;
0458 __u8 type;
0459 __s8 hat_min;
0460 __s8 hat_max;
0461 __s8 hat_dir;
0462 __s16 wheel_accumulated;
0463 };
0464
0465 struct hid_input;
0466
0467 struct hid_field {
0468 unsigned physical;
0469 unsigned logical;
0470 unsigned application;
0471 struct hid_usage *usage;
0472 unsigned maxusage;
0473 unsigned flags;
0474 unsigned report_offset;
0475 unsigned report_size;
0476 unsigned report_count;
0477 unsigned report_type;
0478 __s32 *value;
0479 __s32 *new_value;
0480 __s32 *usages_priorities;
0481
0482
0483 __s32 logical_minimum;
0484 __s32 logical_maximum;
0485 __s32 physical_minimum;
0486 __s32 physical_maximum;
0487 __s32 unit_exponent;
0488 unsigned unit;
0489 bool ignored;
0490 struct hid_report *report;
0491 unsigned index;
0492
0493 struct hid_input *hidinput;
0494 __u16 dpad;
0495 unsigned int slot_idx;
0496 };
0497
0498 #define HID_MAX_FIELDS 256
0499
0500 struct hid_field_entry {
0501 struct list_head list;
0502 struct hid_field *field;
0503 unsigned int index;
0504 __s32 priority;
0505 };
0506
0507 struct hid_report {
0508 struct list_head list;
0509 struct list_head hidinput_list;
0510 struct list_head field_entry_list;
0511 unsigned int id;
0512 unsigned int type;
0513 unsigned int application;
0514 struct hid_field *field[HID_MAX_FIELDS];
0515 struct hid_field_entry *field_entries;
0516 unsigned maxfield;
0517 unsigned size;
0518 struct hid_device *device;
0519
0520
0521 bool tool_active;
0522 unsigned int tool;
0523 };
0524
0525 #define HID_MAX_IDS 256
0526
0527 struct hid_report_enum {
0528 unsigned numbered;
0529 struct list_head report_list;
0530 struct hid_report *report_id_hash[HID_MAX_IDS];
0531 };
0532
0533 #define HID_MIN_BUFFER_SIZE 64
0534 #define HID_MAX_BUFFER_SIZE 16384
0535 #define HID_CONTROL_FIFO_SIZE 256
0536 #define HID_OUTPUT_FIFO_SIZE 64
0537
0538 struct hid_control_fifo {
0539 unsigned char dir;
0540 struct hid_report *report;
0541 char *raw_report;
0542 };
0543
0544 struct hid_output_fifo {
0545 struct hid_report *report;
0546 char *raw_report;
0547 };
0548
0549 #define HID_CLAIMED_INPUT BIT(0)
0550 #define HID_CLAIMED_HIDDEV BIT(1)
0551 #define HID_CLAIMED_HIDRAW BIT(2)
0552 #define HID_CLAIMED_DRIVER BIT(3)
0553
0554 #define HID_STAT_ADDED BIT(0)
0555 #define HID_STAT_PARSED BIT(1)
0556 #define HID_STAT_DUP_DETECTED BIT(2)
0557 #define HID_STAT_REPROBED BIT(3)
0558
0559 struct hid_input {
0560 struct list_head list;
0561 struct hid_report *report;
0562 struct input_dev *input;
0563 const char *name;
0564 bool registered;
0565 struct list_head reports;
0566 unsigned int application;
0567 };
0568
0569 enum hid_type {
0570 HID_TYPE_OTHER = 0,
0571 HID_TYPE_USBMOUSE,
0572 HID_TYPE_USBNONE
0573 };
0574
0575 enum hid_battery_status {
0576 HID_BATTERY_UNKNOWN = 0,
0577 HID_BATTERY_QUERIED,
0578 HID_BATTERY_REPORTED,
0579 };
0580
0581 struct hid_driver;
0582 struct hid_ll_driver;
0583
0584 struct hid_device {
0585 __u8 *dev_rdesc;
0586 unsigned dev_rsize;
0587 __u8 *rdesc;
0588 unsigned rsize;
0589 struct hid_collection *collection;
0590 unsigned collection_size;
0591 unsigned maxcollection;
0592 unsigned maxapplication;
0593 __u16 bus;
0594 __u16 group;
0595 __u32 vendor;
0596 __u32 product;
0597 __u32 version;
0598 enum hid_type type;
0599 unsigned country;
0600 struct hid_report_enum report_enum[HID_REPORT_TYPES];
0601 struct work_struct led_work;
0602
0603 struct semaphore driver_input_lock;
0604 struct device dev;
0605 struct hid_driver *driver;
0606
0607 struct hid_ll_driver *ll_driver;
0608 struct mutex ll_open_lock;
0609 unsigned int ll_open_count;
0610
0611 #ifdef CONFIG_HID_BATTERY_STRENGTH
0612
0613
0614
0615
0616
0617 struct power_supply *battery;
0618 __s32 battery_capacity;
0619 __s32 battery_min;
0620 __s32 battery_max;
0621 __s32 battery_report_type;
0622 __s32 battery_report_id;
0623 enum hid_battery_status battery_status;
0624 bool battery_avoid_query;
0625 ktime_t battery_ratelimit_time;
0626 #endif
0627
0628 unsigned long status;
0629 unsigned claimed;
0630 unsigned quirks;
0631 bool io_started;
0632
0633 struct list_head inputs;
0634 void *hiddev;
0635 void *hidraw;
0636
0637 char name[128];
0638 char phys[64];
0639 char uniq[64];
0640
0641 void *driver_data;
0642
0643
0644 int (*ff_init)(struct hid_device *);
0645
0646
0647 int (*hiddev_connect)(struct hid_device *, unsigned int);
0648 void (*hiddev_disconnect)(struct hid_device *);
0649 void (*hiddev_hid_event) (struct hid_device *, struct hid_field *field,
0650 struct hid_usage *, __s32);
0651 void (*hiddev_report_event) (struct hid_device *, struct hid_report *);
0652
0653
0654 unsigned short debug;
0655 struct dentry *debug_dir;
0656 struct dentry *debug_rdesc;
0657 struct dentry *debug_events;
0658 struct list_head debug_list;
0659 spinlock_t debug_list_lock;
0660 wait_queue_head_t debug_wait;
0661 };
0662
0663 #define to_hid_device(pdev) \
0664 container_of(pdev, struct hid_device, dev)
0665
0666 static inline void *hid_get_drvdata(struct hid_device *hdev)
0667 {
0668 return dev_get_drvdata(&hdev->dev);
0669 }
0670
0671 static inline void hid_set_drvdata(struct hid_device *hdev, void *data)
0672 {
0673 dev_set_drvdata(&hdev->dev, data);
0674 }
0675
0676 #define HID_GLOBAL_STACK_SIZE 4
0677 #define HID_COLLECTION_STACK_SIZE 4
0678
0679 #define HID_SCAN_FLAG_MT_WIN_8 BIT(0)
0680 #define HID_SCAN_FLAG_VENDOR_SPECIFIC BIT(1)
0681 #define HID_SCAN_FLAG_GD_POINTER BIT(2)
0682
0683 struct hid_parser {
0684 struct hid_global global;
0685 struct hid_global global_stack[HID_GLOBAL_STACK_SIZE];
0686 unsigned int global_stack_ptr;
0687 struct hid_local local;
0688 unsigned int *collection_stack;
0689 unsigned int collection_stack_ptr;
0690 unsigned int collection_stack_size;
0691 struct hid_device *device;
0692 unsigned int scan_flags;
0693 };
0694
0695 struct hid_class_descriptor {
0696 __u8 bDescriptorType;
0697 __le16 wDescriptorLength;
0698 } __attribute__ ((packed));
0699
0700 struct hid_descriptor {
0701 __u8 bLength;
0702 __u8 bDescriptorType;
0703 __le16 bcdHID;
0704 __u8 bCountryCode;
0705 __u8 bNumDescriptors;
0706
0707 struct hid_class_descriptor desc[1];
0708 } __attribute__ ((packed));
0709
0710 #define HID_DEVICE(b, g, ven, prod) \
0711 .bus = (b), .group = (g), .vendor = (ven), .product = (prod)
0712 #define HID_USB_DEVICE(ven, prod) \
0713 .bus = BUS_USB, .vendor = (ven), .product = (prod)
0714 #define HID_BLUETOOTH_DEVICE(ven, prod) \
0715 .bus = BUS_BLUETOOTH, .vendor = (ven), .product = (prod)
0716 #define HID_I2C_DEVICE(ven, prod) \
0717 .bus = BUS_I2C, .vendor = (ven), .product = (prod)
0718
0719 #define HID_REPORT_ID(rep) \
0720 .report_type = (rep)
0721 #define HID_USAGE_ID(uhid, utype, ucode) \
0722 .usage_hid = (uhid), .usage_type = (utype), .usage_code = (ucode)
0723
0724 #define HID_TERMINATOR (HID_ANY_ID - 1)
0725
0726 struct hid_report_id {
0727 __u32 report_type;
0728 };
0729 struct hid_usage_id {
0730 __u32 usage_hid;
0731 __u32 usage_type;
0732 __u32 usage_code;
0733 };
0734
0735
0736
0737
0738
0739
0740
0741
0742
0743
0744
0745
0746
0747
0748
0749
0750
0751
0752
0753
0754
0755
0756
0757
0758
0759
0760
0761
0762
0763
0764
0765
0766
0767
0768
0769
0770
0771
0772
0773
0774
0775
0776 struct hid_driver {
0777 char *name;
0778 const struct hid_device_id *id_table;
0779
0780 struct list_head dyn_list;
0781 spinlock_t dyn_lock;
0782
0783 bool (*match)(struct hid_device *dev, bool ignore_special_driver);
0784 int (*probe)(struct hid_device *dev, const struct hid_device_id *id);
0785 void (*remove)(struct hid_device *dev);
0786
0787 const struct hid_report_id *report_table;
0788 int (*raw_event)(struct hid_device *hdev, struct hid_report *report,
0789 u8 *data, int size);
0790 const struct hid_usage_id *usage_table;
0791 int (*event)(struct hid_device *hdev, struct hid_field *field,
0792 struct hid_usage *usage, __s32 value);
0793 void (*report)(struct hid_device *hdev, struct hid_report *report);
0794
0795 __u8 *(*report_fixup)(struct hid_device *hdev, __u8 *buf,
0796 unsigned int *size);
0797
0798 int (*input_mapping)(struct hid_device *hdev,
0799 struct hid_input *hidinput, struct hid_field *field,
0800 struct hid_usage *usage, unsigned long **bit, int *max);
0801 int (*input_mapped)(struct hid_device *hdev,
0802 struct hid_input *hidinput, struct hid_field *field,
0803 struct hid_usage *usage, unsigned long **bit, int *max);
0804 int (*input_configured)(struct hid_device *hdev,
0805 struct hid_input *hidinput);
0806 void (*feature_mapping)(struct hid_device *hdev,
0807 struct hid_field *field,
0808 struct hid_usage *usage);
0809 #ifdef CONFIG_PM
0810 int (*suspend)(struct hid_device *hdev, pm_message_t message);
0811 int (*resume)(struct hid_device *hdev);
0812 int (*reset_resume)(struct hid_device *hdev);
0813 #endif
0814
0815 struct device_driver driver;
0816 };
0817
0818 #define to_hid_driver(pdrv) \
0819 container_of(pdrv, struct hid_driver, driver)
0820
0821
0822
0823
0824
0825
0826
0827
0828
0829
0830
0831
0832
0833
0834
0835
0836
0837 struct hid_ll_driver {
0838 int (*start)(struct hid_device *hdev);
0839 void (*stop)(struct hid_device *hdev);
0840
0841 int (*open)(struct hid_device *hdev);
0842 void (*close)(struct hid_device *hdev);
0843
0844 int (*power)(struct hid_device *hdev, int level);
0845
0846 int (*parse)(struct hid_device *hdev);
0847
0848 void (*request)(struct hid_device *hdev,
0849 struct hid_report *report, int reqtype);
0850
0851 int (*wait)(struct hid_device *hdev);
0852
0853 int (*raw_request) (struct hid_device *hdev, unsigned char reportnum,
0854 __u8 *buf, size_t len, unsigned char rtype,
0855 int reqtype);
0856
0857 int (*output_report) (struct hid_device *hdev, __u8 *buf, size_t len);
0858
0859 int (*idle)(struct hid_device *hdev, int report, int idle, int reqtype);
0860 bool (*may_wakeup)(struct hid_device *hdev);
0861 };
0862
0863 extern struct hid_ll_driver i2c_hid_ll_driver;
0864 extern struct hid_ll_driver hidp_hid_driver;
0865 extern struct hid_ll_driver uhid_hid_driver;
0866 extern struct hid_ll_driver usb_hid_driver;
0867
0868 static inline bool hid_is_using_ll_driver(struct hid_device *hdev,
0869 struct hid_ll_driver *driver)
0870 {
0871 return hdev->ll_driver == driver;
0872 }
0873
0874 static inline bool hid_is_usb(struct hid_device *hdev)
0875 {
0876 return hid_is_using_ll_driver(hdev, &usb_hid_driver);
0877 }
0878
0879 #define PM_HINT_FULLON 1<<5
0880 #define PM_HINT_NORMAL 1<<1
0881
0882
0883
0884 #define IS_INPUT_APPLICATION(a) \
0885 (((a >= HID_UP_GENDESK) && (a <= HID_GD_MULTIAXIS)) \
0886 || ((a >= HID_DG_PEN) && (a <= HID_DG_WHITEBOARD)) \
0887 || (a == HID_GD_SYSTEM_CONTROL) || (a == HID_CP_CONSUMER_CONTROL) \
0888 || (a == HID_GD_WIRELESS_RADIO_CTLS))
0889
0890
0891
0892 extern int hid_debug;
0893
0894 extern bool hid_ignore(struct hid_device *);
0895 extern int hid_add_device(struct hid_device *);
0896 extern void hid_destroy_device(struct hid_device *);
0897
0898 extern struct bus_type hid_bus_type;
0899
0900 extern int __must_check __hid_register_driver(struct hid_driver *,
0901 struct module *, const char *mod_name);
0902
0903
0904 #define hid_register_driver(driver) \
0905 __hid_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)
0906
0907 extern void hid_unregister_driver(struct hid_driver *);
0908
0909
0910
0911
0912
0913
0914
0915
0916
0917 #define module_hid_driver(__hid_driver) \
0918 module_driver(__hid_driver, hid_register_driver, \
0919 hid_unregister_driver)
0920
0921 extern void hidinput_hid_event(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);
0922 extern void hidinput_report_event(struct hid_device *hid, struct hid_report *report);
0923 extern int hidinput_connect(struct hid_device *hid, unsigned int force);
0924 extern void hidinput_disconnect(struct hid_device *);
0925
0926 int hid_set_field(struct hid_field *, unsigned, __s32);
0927 int hid_input_report(struct hid_device *, int type, u8 *, u32, int);
0928 struct hid_field *hidinput_get_led_field(struct hid_device *hid);
0929 unsigned int hidinput_count_leds(struct hid_device *hid);
0930 __s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code);
0931 void hid_output_report(struct hid_report *report, __u8 *data);
0932 int __hid_request(struct hid_device *hid, struct hid_report *rep, int reqtype);
0933 u8 *hid_alloc_report_buf(struct hid_report *report, gfp_t flags);
0934 struct hid_device *hid_allocate_device(void);
0935 struct hid_report *hid_register_report(struct hid_device *device,
0936 unsigned int type, unsigned int id,
0937 unsigned int application);
0938 int hid_parse_report(struct hid_device *hid, __u8 *start, unsigned size);
0939 struct hid_report *hid_validate_values(struct hid_device *hid,
0940 unsigned int type, unsigned int id,
0941 unsigned int field_index,
0942 unsigned int report_counts);
0943
0944 void hid_setup_resolution_multiplier(struct hid_device *hid);
0945 int hid_open_report(struct hid_device *device);
0946 int hid_check_keys_pressed(struct hid_device *hid);
0947 int hid_connect(struct hid_device *hid, unsigned int connect_mask);
0948 void hid_disconnect(struct hid_device *hid);
0949 bool hid_match_one_id(const struct hid_device *hdev,
0950 const struct hid_device_id *id);
0951 const struct hid_device_id *hid_match_id(const struct hid_device *hdev,
0952 const struct hid_device_id *id);
0953 const struct hid_device_id *hid_match_device(struct hid_device *hdev,
0954 struct hid_driver *hdrv);
0955 bool hid_compare_device_paths(struct hid_device *hdev_a,
0956 struct hid_device *hdev_b, char separator);
0957 s32 hid_snto32(__u32 value, unsigned n);
0958 __u32 hid_field_extract(const struct hid_device *hid, __u8 *report,
0959 unsigned offset, unsigned n);
0960
0961 #ifdef CONFIG_PM
0962 int hid_driver_suspend(struct hid_device *hdev, pm_message_t state);
0963 int hid_driver_reset_resume(struct hid_device *hdev);
0964 int hid_driver_resume(struct hid_device *hdev);
0965 #else
0966 static inline int hid_driver_suspend(struct hid_device *hdev, pm_message_t state) { return 0; }
0967 static inline int hid_driver_reset_resume(struct hid_device *hdev) { return 0; }
0968 static inline int hid_driver_resume(struct hid_device *hdev) { return 0; }
0969 #endif
0970
0971
0972
0973
0974
0975
0976
0977
0978
0979
0980 static inline void hid_device_io_start(struct hid_device *hid) {
0981 if (hid->io_started) {
0982 dev_warn(&hid->dev, "io already started\n");
0983 return;
0984 }
0985 hid->io_started = true;
0986 up(&hid->driver_input_lock);
0987 }
0988
0989
0990
0991
0992
0993
0994
0995
0996
0997
0998
0999
1000 static inline void hid_device_io_stop(struct hid_device *hid) {
1001 if (!hid->io_started) {
1002 dev_warn(&hid->dev, "io already stopped\n");
1003 return;
1004 }
1005 hid->io_started = false;
1006 down(&hid->driver_input_lock);
1007 }
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023 static inline void hid_map_usage(struct hid_input *hidinput,
1024 struct hid_usage *usage, unsigned long **bit, int *max,
1025 __u8 type, unsigned int c)
1026 {
1027 struct input_dev *input = hidinput->input;
1028 unsigned long *bmap = NULL;
1029 unsigned int limit = 0;
1030
1031 switch (type) {
1032 case EV_ABS:
1033 bmap = input->absbit;
1034 limit = ABS_MAX;
1035 break;
1036 case EV_REL:
1037 bmap = input->relbit;
1038 limit = REL_MAX;
1039 break;
1040 case EV_KEY:
1041 bmap = input->keybit;
1042 limit = KEY_MAX;
1043 break;
1044 case EV_LED:
1045 bmap = input->ledbit;
1046 limit = LED_MAX;
1047 break;
1048 case EV_MSC:
1049 bmap = input->mscbit;
1050 limit = MSC_MAX;
1051 break;
1052 }
1053
1054 if (unlikely(c > limit || !bmap)) {
1055 pr_warn_ratelimited("%s: Invalid code %d type %d\n",
1056 input->name, c, type);
1057 *bit = NULL;
1058 return;
1059 }
1060
1061 usage->type = type;
1062 usage->code = c;
1063 *max = limit;
1064 *bit = bmap;
1065 }
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080 static inline void hid_map_usage_clear(struct hid_input *hidinput,
1081 struct hid_usage *usage, unsigned long **bit, int *max,
1082 __u8 type, __u16 c)
1083 {
1084 hid_map_usage(hidinput, usage, bit, max, type, c);
1085 if (*bit)
1086 clear_bit(usage->code, *bit);
1087 }
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098 static inline int __must_check hid_parse(struct hid_device *hdev)
1099 {
1100 return hid_open_report(hdev);
1101 }
1102
1103 int __must_check hid_hw_start(struct hid_device *hdev,
1104 unsigned int connect_mask);
1105 void hid_hw_stop(struct hid_device *hdev);
1106 int __must_check hid_hw_open(struct hid_device *hdev);
1107 void hid_hw_close(struct hid_device *hdev);
1108 void hid_hw_request(struct hid_device *hdev,
1109 struct hid_report *report, int reqtype);
1110 int hid_hw_raw_request(struct hid_device *hdev,
1111 unsigned char reportnum, __u8 *buf,
1112 size_t len, unsigned char rtype, int reqtype);
1113 int hid_hw_output_report(struct hid_device *hdev, __u8 *buf, size_t len);
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125 static inline int hid_hw_power(struct hid_device *hdev, int level)
1126 {
1127 return hdev->ll_driver->power ? hdev->ll_driver->power(hdev, level) : 0;
1128 }
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139 static inline int hid_hw_idle(struct hid_device *hdev, int report, int idle,
1140 int reqtype)
1141 {
1142 if (hdev->ll_driver->idle)
1143 return hdev->ll_driver->idle(hdev, report, idle, reqtype);
1144
1145 return 0;
1146 }
1147
1148
1149
1150
1151
1152
1153 static inline bool hid_hw_may_wakeup(struct hid_device *hdev)
1154 {
1155 if (hdev->ll_driver->may_wakeup)
1156 return hdev->ll_driver->may_wakeup(hdev);
1157
1158 if (hdev->dev.parent)
1159 return device_may_wakeup(hdev->dev.parent);
1160
1161 return false;
1162 }
1163
1164
1165
1166
1167
1168
1169 static inline void hid_hw_wait(struct hid_device *hdev)
1170 {
1171 if (hdev->ll_driver->wait)
1172 hdev->ll_driver->wait(hdev);
1173 }
1174
1175
1176
1177
1178
1179
1180 static inline u32 hid_report_len(struct hid_report *report)
1181 {
1182 return DIV_ROUND_UP(report->size, 8) + (report->id > 0);
1183 }
1184
1185 int hid_report_raw_event(struct hid_device *hid, int type, u8 *data, u32 size,
1186 int interrupt);
1187
1188
1189 unsigned long hid_lookup_quirk(const struct hid_device *hdev);
1190 int hid_quirks_init(char **quirks_param, __u16 bus, int count);
1191 void hid_quirks_exit(__u16 bus);
1192
1193 #ifdef CONFIG_HID_PID
1194 int hid_pidff_init(struct hid_device *hid);
1195 #else
1196 #define hid_pidff_init NULL
1197 #endif
1198
1199 #define dbg_hid(fmt, ...) \
1200 do { \
1201 if (hid_debug) \
1202 printk(KERN_DEBUG "%s: " fmt, __FILE__, ##__VA_ARGS__); \
1203 } while (0)
1204
1205 #define hid_err(hid, fmt, ...) \
1206 dev_err(&(hid)->dev, fmt, ##__VA_ARGS__)
1207 #define hid_notice(hid, fmt, ...) \
1208 dev_notice(&(hid)->dev, fmt, ##__VA_ARGS__)
1209 #define hid_warn(hid, fmt, ...) \
1210 dev_warn(&(hid)->dev, fmt, ##__VA_ARGS__)
1211 #define hid_info(hid, fmt, ...) \
1212 dev_info(&(hid)->dev, fmt, ##__VA_ARGS__)
1213 #define hid_dbg(hid, fmt, ...) \
1214 dev_dbg(&(hid)->dev, fmt, ##__VA_ARGS__)
1215
1216 #define hid_err_once(hid, fmt, ...) \
1217 dev_err_once(&(hid)->dev, fmt, ##__VA_ARGS__)
1218 #define hid_notice_once(hid, fmt, ...) \
1219 dev_notice_once(&(hid)->dev, fmt, ##__VA_ARGS__)
1220 #define hid_warn_once(hid, fmt, ...) \
1221 dev_warn_once(&(hid)->dev, fmt, ##__VA_ARGS__)
1222 #define hid_info_once(hid, fmt, ...) \
1223 dev_info_once(&(hid)->dev, fmt, ##__VA_ARGS__)
1224 #define hid_dbg_once(hid, fmt, ...) \
1225 dev_dbg_once(&(hid)->dev, fmt, ##__VA_ARGS__)
1226
1227 #endif