diff options
Diffstat (limited to 'drivers/usb/input/hid-input.c')
-rw-r--r-- | drivers/usb/input/hid-input.c | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/drivers/usb/input/hid-input.c b/drivers/usb/input/hid-input.c index 25bc85f8ce39..2f665195f4ac 100644 --- a/drivers/usb/input/hid-input.c +++ b/drivers/usb/input/hid-input.c | |||
@@ -567,16 +567,14 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel | |||
567 | break; | 567 | break; |
568 | } | 568 | } |
569 | 569 | ||
570 | set_bit(usage->type, input->evbit); | 570 | if (device->quirks & HID_QUIRK_MIGHTYMOUSE) { |
571 | 571 | if (usage->hid == HID_GD_Z) | |
572 | while (usage->code <= max && test_and_set_bit(usage->code, bit)) | 572 | map_rel(REL_HWHEEL); |
573 | usage->code = find_next_zero_bit(bit, max + 1, usage->code); | 573 | else if (usage->code == BTN_1) |
574 | 574 | map_key(BTN_2); | |
575 | if (usage->code > max) | 575 | else if (usage->code == BTN_2) |
576 | goto ignore; | 576 | map_key(BTN_1); |
577 | 577 | } | |
578 | if (((device->quirks & (HID_QUIRK_2WHEEL_POWERMOUSE)) && (usage->hid == 0x00010032))) | ||
579 | map_rel(REL_HWHEEL); | ||
580 | 578 | ||
581 | if ((device->quirks & (HID_QUIRK_2WHEEL_MOUSE_HACK_7 | HID_QUIRK_2WHEEL_MOUSE_HACK_5)) && | 579 | if ((device->quirks & (HID_QUIRK_2WHEEL_MOUSE_HACK_7 | HID_QUIRK_2WHEEL_MOUSE_HACK_5)) && |
582 | (usage->type == EV_REL) && (usage->code == REL_WHEEL)) | 580 | (usage->type == EV_REL) && (usage->code == REL_WHEEL)) |
@@ -586,6 +584,15 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel | |||
586 | || ((device->quirks & HID_QUIRK_2WHEEL_MOUSE_HACK_7) && (usage->hid == 0x00090007))) | 584 | || ((device->quirks & HID_QUIRK_2WHEEL_MOUSE_HACK_7) && (usage->hid == 0x00090007))) |
587 | goto ignore; | 585 | goto ignore; |
588 | 586 | ||
587 | set_bit(usage->type, input->evbit); | ||
588 | |||
589 | while (usage->code <= max && test_and_set_bit(usage->code, bit)) | ||
590 | usage->code = find_next_zero_bit(bit, max + 1, usage->code); | ||
591 | |||
592 | if (usage->code > max) | ||
593 | goto ignore; | ||
594 | |||
595 | |||
589 | if (usage->type == EV_ABS) { | 596 | if (usage->type == EV_ABS) { |
590 | 597 | ||
591 | int a = field->logical_minimum; | 598 | int a = field->logical_minimum; |
@@ -647,6 +654,11 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct | |||
647 | return; | 654 | return; |
648 | } | 655 | } |
649 | 656 | ||
657 | if ((hid->quirks & HID_QUIRK_INVERT_HWHEEL) && (usage->code == REL_HWHEEL)) { | ||
658 | input_event(input, usage->type, usage->code, -value); | ||
659 | return; | ||
660 | } | ||
661 | |||
650 | if ((hid->quirks & HID_QUIRK_2WHEEL_MOUSE_HACK_ON) && (usage->code == REL_WHEEL)) { | 662 | if ((hid->quirks & HID_QUIRK_2WHEEL_MOUSE_HACK_ON) && (usage->code == REL_WHEEL)) { |
651 | input_event(input, usage->type, REL_HWHEEL, value); | 663 | input_event(input, usage->type, REL_HWHEEL, value); |
652 | return; | 664 | return; |