aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/input/hid-input.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/input/hid-input.c')
-rw-r--r--drivers/usb/input/hid-input.c32
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;