diff options
Diffstat (limited to 'drivers/hid/hid-input.c')
-rw-r--r-- | drivers/hid/hid-input.c | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c index 998638020ea0..9cf591a1bda3 100644 --- a/drivers/hid/hid-input.c +++ b/drivers/hid/hid-input.c | |||
@@ -30,7 +30,6 @@ | |||
30 | #include <linux/module.h> | 30 | #include <linux/module.h> |
31 | #include <linux/slab.h> | 31 | #include <linux/slab.h> |
32 | #include <linux/kernel.h> | 32 | #include <linux/kernel.h> |
33 | #include <linux/usb/input.h> | ||
34 | 33 | ||
35 | #undef DEBUG | 34 | #undef DEBUG |
36 | 35 | ||
@@ -68,6 +67,7 @@ static const struct { | |||
68 | #define map_led(c) do { usage->code = c; usage->type = EV_LED; bit = input->ledbit; max = LED_MAX; } while (0) | 67 | #define map_led(c) do { usage->code = c; usage->type = EV_LED; bit = input->ledbit; max = LED_MAX; } while (0) |
69 | 68 | ||
70 | #define map_abs_clear(c) do { map_abs(c); clear_bit(c, bit); } while (0) | 69 | #define map_abs_clear(c) do { map_abs(c); clear_bit(c, bit); } while (0) |
70 | #define map_rel_clear(c) do { map_rel(c); clear_bit(c, bit); } while (0) | ||
71 | #define map_key_clear(c) do { map_key(c); clear_bit(c, bit); } while (0) | 71 | #define map_key_clear(c) do { map_key(c); clear_bit(c, bit); } while (0) |
72 | 72 | ||
73 | #ifdef CONFIG_USB_HIDINPUT_POWERBOOK | 73 | #ifdef CONFIG_USB_HIDINPUT_POWERBOOK |
@@ -292,7 +292,7 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel | |||
292 | } | 292 | } |
293 | } | 293 | } |
294 | 294 | ||
295 | map_key(code); | 295 | map_key_clear(code); |
296 | break; | 296 | break; |
297 | 297 | ||
298 | 298 | ||
@@ -343,9 +343,9 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel | |||
343 | case HID_GD_RX: case HID_GD_RY: case HID_GD_RZ: | 343 | case HID_GD_RX: case HID_GD_RY: case HID_GD_RZ: |
344 | case HID_GD_SLIDER: case HID_GD_DIAL: case HID_GD_WHEEL: | 344 | case HID_GD_SLIDER: case HID_GD_DIAL: case HID_GD_WHEEL: |
345 | if (field->flags & HID_MAIN_ITEM_RELATIVE) | 345 | if (field->flags & HID_MAIN_ITEM_RELATIVE) |
346 | map_rel(usage->hid & 0xf); | 346 | map_rel_clear(usage->hid & 0xf); |
347 | else | 347 | else |
348 | map_abs(usage->hid & 0xf); | 348 | map_abs_clear(usage->hid & 0xf); |
349 | break; | 349 | break; |
350 | 350 | ||
351 | case HID_GD_HATSWITCH: | 351 | case HID_GD_HATSWITCH: |
@@ -363,9 +363,22 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel | |||
363 | break; | 363 | break; |
364 | 364 | ||
365 | case HID_UP_LED: | 365 | case HID_UP_LED: |
366 | if (((usage->hid - 1) & 0xffff) >= LED_MAX) | 366 | |
367 | goto ignore; | 367 | switch (usage->hid & 0xffff) { /* HID-Value: */ |
368 | map_led((usage->hid - 1) & 0xffff); | 368 | case 0x01: map_led (LED_NUML); break; /* "Num Lock" */ |
369 | case 0x02: map_led (LED_CAPSL); break; /* "Caps Lock" */ | ||
370 | case 0x03: map_led (LED_SCROLLL); break; /* "Scroll Lock" */ | ||
371 | case 0x04: map_led (LED_COMPOSE); break; /* "Compose" */ | ||
372 | case 0x05: map_led (LED_KANA); break; /* "Kana" */ | ||
373 | case 0x27: map_led (LED_SLEEP); break; /* "Stand-By" */ | ||
374 | case 0x4c: map_led (LED_SUSPEND); break; /* "System Suspend" */ | ||
375 | case 0x09: map_led (LED_MUTE); break; /* "Mute" */ | ||
376 | case 0x4b: map_led (LED_MISC); break; /* "Generic Indicator" */ | ||
377 | case 0x19: map_led (LED_MAIL); break; /* "Message Waiting" */ | ||
378 | case 0x4d: map_led (LED_CHARGING); break; /* "External Power Connected" */ | ||
379 | |||
380 | default: goto ignore; | ||
381 | } | ||
369 | break; | 382 | break; |
370 | 383 | ||
371 | case HID_UP_DIGITIZER: | 384 | case HID_UP_DIGITIZER: |
@@ -500,7 +513,7 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel | |||
500 | case 0x22f: map_key_clear(KEY_ZOOMRESET); break; | 513 | case 0x22f: map_key_clear(KEY_ZOOMRESET); break; |
501 | case 0x233: map_key_clear(KEY_SCROLLUP); break; | 514 | case 0x233: map_key_clear(KEY_SCROLLUP); break; |
502 | case 0x234: map_key_clear(KEY_SCROLLDOWN); break; | 515 | case 0x234: map_key_clear(KEY_SCROLLDOWN); break; |
503 | case 0x238: map_rel(REL_HWHEEL); break; | 516 | case 0x238: map_rel_clear(REL_HWHEEL); break; |
504 | case 0x25f: map_key_clear(KEY_CANCEL); break; | 517 | case 0x25f: map_key_clear(KEY_CANCEL); break; |
505 | case 0x279: map_key_clear(KEY_REDO); break; | 518 | case 0x279: map_key_clear(KEY_REDO); break; |
506 | 519 | ||