Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  *  Copyright (c) 1999 Andreas Gal
0004  *  Copyright (c) 2000-2001 Vojtech Pavlik
0005  *  Copyright (c) 2006-2007 Jiri Kosina
0006  */
0007 /*
0008  *
0009  * Should you need to contact me, the author, you can do so either by
0010  * e-mail - mail your message to <vojtech@ucw.cz>, or by paper mail:
0011  * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
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  * We parse each description item into this structure. Short items data
0032  * values are expanded to 32-bit signed int, long items contain a pointer
0033  * into the data area.
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  * HID report item format
0054  */
0055 
0056 #define HID_ITEM_FORMAT_SHORT   0
0057 #define HID_ITEM_FORMAT_LONG    1
0058 
0059 /*
0060  * Special tag indicating long items
0061  */
0062 
0063 #define HID_ITEM_TAG_LONG   15
0064 
0065 /*
0066  * HID report descriptor item type (prefix bit 2,3)
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  * HID report descriptor main item tags
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  * HID report descriptor main item contents
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  * HID report descriptor collection item types
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  * HID report descriptor global item tags
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  * HID report descriptor local item tags
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  * HID usage tables
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  * Microsoft Win8 Wireless Radio Controls extensions CA, see:
0181  * http://www.usb.org/developers/hidpage/HUTRR40RadioHIDUsagesFinal.pdf
0182  */
0183 #define HID_GD_WIRELESS_RADIO_CTLS  0x0001000c
0184 /*
0185  * System Multi-Axis, see:
0186  * http://www.usb.org/developers/hidpage/HUTRR62_-_Generic_Desktop_CA_for_System_Multi-Axis_Controllers.txt
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 /* Microsoft Win8 Wireless Radio Controls CA usage codes */
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  * HID report types --- Ouch! HID spec says 1 2 3!
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  * HID connect requests
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  * HID device quirks.
0343  */
0344 
0345 /*
0346  * Increase this if you need to configure more HID quirks at module load time
0347  */
0348 #define MAX_USBHID_BOOT_QUIRKS 4
0349 
0350 /* BIT(0) reserved for backward compatibility, was HID_QUIRK_INVERT */
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 /* BIT(8) reserved for backward compatibility, was HID_QUIRK_NO_EMPTY_INPUT */
0359 /* BIT(9) reserved for backward compatibility, was NO_INIT_INPUT_REPORTS */
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  * HID device groups
0376  *
0377  * Note: HID_GROUP_ANY is declared in linux/mod_devicetable.h
0378  * and has a value of 0x0000
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  * Vendor specific HID device groups
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  * HID protocol status
0397  */
0398 #define HID_REPORT_PROTOCOL 1
0399 #define HID_BOOT_PROTOCOL   0
0400 
0401 /*
0402  * This is the global environment of the parser. This information is
0403  * persistent for main-items. The global environment can be saved and
0404  * restored with PUSH/POP statements.
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  * This is the local environment. It is persistent up the next main-item.
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]; /* usage array */
0429     u8 usage_size[HID_MAX_USAGES]; /* usage size array */
0430     unsigned collection_index[HID_MAX_USAGES]; /* collection index array */
0431     unsigned usage_index;
0432     unsigned usage_minimum;
0433     unsigned delimiter_depth;
0434     unsigned delimiter_branch;
0435 };
0436 
0437 /*
0438  * This is the collection stack. We climb up the stack to determine
0439  * application and function of each field.
0440  */
0441 
0442 struct hid_collection {
0443     int parent_idx; /* device->collection */
0444     unsigned type;
0445     unsigned usage;
0446     unsigned level;
0447 };
0448 
0449 struct hid_usage {
0450     unsigned  hid;          /* hid usage code */
0451     unsigned  collection_index; /* index into collection array */
0452     unsigned  usage_index;      /* index into usage array */
0453     __s8      resolution_multiplier;/* Effective Resolution Multiplier
0454                        (HUT v1.12, 4.3.1), default: 1 */
0455     /* hidinput data */
0456     __s8      wheel_factor;     /* 120/resolution_multiplier */
0457     __u16     code;         /* input driver code */
0458     __u8      type;         /* input driver type */
0459     __s8      hat_min;      /* hat switch fun */
0460     __s8      hat_max;      /* ditto */
0461     __s8      hat_dir;      /* ditto */
0462     __s16     wheel_accumulated;    /* hi-res wheel */
0463 };
0464 
0465 struct hid_input;
0466 
0467 struct hid_field {
0468     unsigned  physical;     /* physical usage for this field */
0469     unsigned  logical;      /* logical usage for this field */
0470     unsigned  application;      /* application usage for this field */
0471     struct hid_usage *usage;    /* usage table for this function */
0472     unsigned  maxusage;     /* maximum usage index */
0473     unsigned  flags;        /* main-item flags (i.e. volatile,array,constant) */
0474     unsigned  report_offset;    /* bit offset in the report */
0475     unsigned  report_size;      /* size of this field in the report */
0476     unsigned  report_count;     /* number of this field in the report */
0477     unsigned  report_type;      /* (input,output,feature) */
0478     __s32    *value;        /* last known value(s) */
0479     __s32    *new_value;        /* newly read value(s) */
0480     __s32    *usages_priorities;    /* priority of each usage when reading the report
0481                      * bits 8-16 are reserved for hid-input usage
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;      /* this field is ignored in this event */
0490     struct hid_report *report;  /* associated report */
0491     unsigned index;         /* index into report->field[] */
0492     /* hidinput data */
0493     struct hid_input *hidinput; /* associated input structure */
0494     __u16 dpad;         /* dpad input code */
0495     unsigned int slot_idx;      /* slot index in a report */
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;      /* ordered list of input fields */
0511     unsigned int id;                /* id of this report */
0512     unsigned int type;              /* report type */
0513     unsigned int application;           /* application usage for this report */
0514     struct hid_field *field[HID_MAX_FIELDS];    /* fields of the report */
0515     struct hid_field_entry *field_entries;      /* allocated memory of input field_entry */
0516     unsigned maxfield;              /* maximum valid field index */
0517     unsigned size;                  /* size of the report (bits) */
0518     struct hid_device *device;          /* associated device */
0519 
0520     /* tool related state */
0521     bool tool_active;               /* whether the current tool is active */
0522     unsigned int tool;              /* BTN_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      /* make sure there is at least a packet size of space */
0534 #define HID_MAX_BUFFER_SIZE 16384       /* 16kb */
0535 #define HID_CONTROL_FIFO_SIZE   256     /* to init devices with >100 reports */
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;   /* the list of reports */
0566     unsigned int application;   /* application usage for this input */
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,        /* Kernel explicitly queried battery strength */
0578     HID_BATTERY_REPORTED,       /* Device sent unsolicited battery strength report */
0579 };
0580 
0581 struct hid_driver;
0582 struct hid_ll_driver;
0583 
0584 struct hid_device {                         /* device report descriptor */
0585     __u8 *dev_rdesc;
0586     unsigned dev_rsize;
0587     __u8 *rdesc;
0588     unsigned rsize;
0589     struct hid_collection *collection;              /* List of HID collections */
0590     unsigned collection_size;                   /* Number of allocated hid_collections */
0591     unsigned maxcollection;                     /* Number of parsed collections */
0592     unsigned maxapplication;                    /* Number of applications */
0593     __u16 bus;                          /* BUS ID */
0594     __u16 group;                            /* Report group */
0595     __u32 vendor;                           /* Vendor ID */
0596     __u32 product;                          /* Product ID */
0597     __u32 version;                          /* HID version */
0598     enum hid_type type;                     /* device type (mouse, kbd, ...) */
0599     unsigned country;                       /* HID country */
0600     struct hid_report_enum report_enum[HID_REPORT_TYPES];
0601     struct work_struct led_work;                    /* delayed LED worker */
0602 
0603     struct semaphore driver_input_lock;             /* protects the current driver */
0604     struct device dev;                      /* device */
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      * Power supply information for HID devices which report
0614      * battery strength. power_supply was successfully registered if
0615      * battery is non-NULL.
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;                       /* see STAT flags above */
0629     unsigned claimed;                       /* Claimed by hidinput, hiddev? */
0630     unsigned quirks;                        /* Various quirks the device can pull on us */
0631     bool io_started;                        /* If IO has started */
0632 
0633     struct list_head inputs;                    /* The list of inputs */
0634     void *hiddev;                           /* The hiddev structure */
0635     void *hidraw;
0636 
0637     char name[128];                         /* Device name */
0638     char phys[64];                          /* Device physical location */
0639     char uniq[64];                          /* Device unique identifier (serial #) */
0640 
0641     void *driver_data;
0642 
0643     /* temporary hid_ff handling (until moved to the drivers) */
0644     int (*ff_init)(struct hid_device *);
0645 
0646     /* hiddev event handler */
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     /* debugging support via debugfs */
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 /* we don't want to catch types and codes equal to 0 */
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  * struct hid_driver
0737  * @name: driver name (e.g. "Footech_bar-wheel")
0738  * @id_table: which devices is this driver for (must be non-NULL for probe
0739  *        to be called)
0740  * @dyn_list: list of dynamically added device ids
0741  * @dyn_lock: lock protecting @dyn_list
0742  * @match: check if the given device is handled by this driver
0743  * @probe: new device inserted
0744  * @remove: device removed (NULL if not a hot-plug capable driver)
0745  * @report_table: on which reports to call raw_event (NULL means all)
0746  * @raw_event: if report in report_table, this hook is called (NULL means nop)
0747  * @usage_table: on which events to call event (NULL means all)
0748  * @event: if usage in usage_table, this hook is called (NULL means nop)
0749  * @report: this hook is called after parsing a report (NULL means nop)
0750  * @report_fixup: called before report descriptor parsing (NULL means nop)
0751  * @input_mapping: invoked on input registering before mapping an usage
0752  * @input_mapped: invoked on input registering after mapping an usage
0753  * @input_configured: invoked just before the device is registered
0754  * @feature_mapping: invoked on feature registering
0755  * @suspend: invoked on suspend (NULL means nop)
0756  * @resume: invoked on resume if device was not reset (NULL means nop)
0757  * @reset_resume: invoked on resume if device was reset (NULL means nop)
0758  *
0759  * probe should return -errno on error, or 0 on success. During probe,
0760  * input will not be passed to raw_event unless hid_device_io_start is
0761  * called.
0762  *
0763  * raw_event and event should return negative on error, any other value will
0764  * pass the event on to .event() typically return 0 for success.
0765  *
0766  * input_mapping shall return a negative value to completely ignore this usage
0767  * (e.g. doubled or invalid usage), zero to continue with parsing of this
0768  * usage by generic code (no special handling needed) or positive to skip
0769  * generic parsing (needed special handling which was done in the hook already)
0770  * input_mapped shall return negative to inform the layer that this usage
0771  * should not be considered for further processing or zero to notify that
0772  * no processing was performed and should be done in a generic manner
0773  * Both these functions may be NULL which means the same behavior as returning
0774  * zero from them.
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 /* private: */
0815     struct device_driver driver;
0816 };
0817 
0818 #define to_hid_driver(pdrv) \
0819     container_of(pdrv, struct hid_driver, driver)
0820 
0821 /**
0822  * struct hid_ll_driver - low level driver callbacks
0823  * @start: called on probe to start the device
0824  * @stop: called on remove
0825  * @open: called by input layer on open
0826  * @close: called by input layer on close
0827  * @power: request underlying hardware to enter requested power mode
0828  * @parse: this method is called only once to parse the device data,
0829  *     shouldn't allocate anything to not leak memory
0830  * @request: send report request to device (e.g. feature report)
0831  * @wait: wait for buffered io to complete (send/recv reports)
0832  * @raw_request: send raw report request to device (e.g. feature report)
0833  * @output_report: send output report to device
0834  * @idle: send idle request to device
0835  * @may_wakeup: return if device may act as a wakeup source during system-suspend
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 /* Applications from HID Usage Tables 4/8/99 Version 1.1 */
0883 /* We ignore a few input applications that are not widely used */
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 /* HID core API */
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 /* use a define to avoid include chaining to get THIS_MODULE & friends */
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  * module_hid_driver() - Helper macro for registering a HID driver
0911  * @__hid_driver: hid_driver struct
0912  *
0913  * Helper macro for HID drivers which do not do anything special in module
0914  * init/exit. This eliminates a lot of boilerplate. Each module may only
0915  * use this macro once, and calling it replaces module_init() and module_exit()
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  * hid_device_io_start - enable HID input during probe, remove
0973  *
0974  * @hid: the device
0975  *
0976  * This should only be called during probe or remove and only be
0977  * called by the thread calling probe or remove. It will allow
0978  * incoming packets to be delivered to the driver.
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  * hid_device_io_stop - disable HID input during probe, remove
0991  *
0992  * @hid: the device
0993  *
0994  * Should only be called after hid_device_io_start. It will prevent
0995  * incoming packets from going to the driver for the duration of
0996  * probe, remove. If called during probe, packets will still go to the
0997  * driver after probe is complete. This function should only be called
0998  * by the thread calling probe or remove.
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  * hid_map_usage - map usage input bits
1011  *
1012  * @hidinput: hidinput which we are interested in
1013  * @usage: usage to fill in
1014  * @bit: pointer to input->{}bit (out parameter)
1015  * @max: maximal valid usage->code to consider later (out parameter)
1016  * @type: input event type (EV_KEY, EV_REL, ...)
1017  * @c: code which corresponds to this usage and type
1018  *
1019  * The value pointed to by @bit will be set to NULL if either @type is
1020  * an unhandled event type, or if @c is out of range for @type. This
1021  * can be used as an error condition.
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  * hid_map_usage_clear - map usage input bits and clear the input bit
1069  *
1070  * @hidinput: hidinput which we are interested in
1071  * @usage: usage to fill in
1072  * @bit: pointer to input->{}bit (out parameter)
1073  * @max: maximal valid usage->code to consider later (out parameter)
1074  * @type: input event type (EV_KEY, EV_REL, ...)
1075  * @c: code which corresponds to this usage and type
1076  *
1077  * The same as hid_map_usage, except the @c bit is also cleared in supported
1078  * bits (@bit).
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  * hid_parse - parse HW reports
1091  *
1092  * @hdev: hid device
1093  *
1094  * Call this from probe after you set up the device (if needed). Your
1095  * report_fixup will be called (if non-NULL) after reading raw report from
1096  * device before passing it to hid layer for real parsing.
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  * hid_hw_power - requests underlying HW to go into given power mode
1117  *
1118  * @hdev: hid device
1119  * @level: requested power level (one of %PM_HINT_* defines)
1120  *
1121  * This function requests underlying hardware to enter requested power
1122  * mode.
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  * hid_hw_idle - send idle request to device
1133  *
1134  * @hdev: hid device
1135  * @report: report to control
1136  * @idle: idle state
1137  * @reqtype: hid request type
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  * hid_hw_may_wakeup - return if the hid device may act as a wakeup source during system-suspend
1150  *
1151  * @hdev: hid device
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  * hid_hw_wait - wait for buffered io to complete
1166  *
1167  * @hdev: hid device
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  * hid_report_len - calculate the report length
1177  *
1178  * @report: the report we want to know the length
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 /* HID quirks API */
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