diff options
| -rw-r--r-- | net/bluetooth/hidp/core.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c index ecfe8da1ce6b..d342e89b8bdd 100644 --- a/net/bluetooth/hidp/core.c +++ b/net/bluetooth/hidp/core.c | |||
| @@ -679,6 +679,27 @@ static void hidp_close(struct hid_device *hid) | |||
| 679 | { | 679 | { |
| 680 | } | 680 | } |
| 681 | 681 | ||
| 682 | static const struct { | ||
| 683 | __u16 idVendor; | ||
| 684 | __u16 idProduct; | ||
| 685 | unsigned quirks; | ||
| 686 | } hidp_blacklist[] = { | ||
| 687 | /* Apple wireless Mighty Mouse */ | ||
| 688 | { 0x05ac, 0x030c, HID_QUIRK_MIGHTYMOUSE | HID_QUIRK_INVERT_HWHEEL }, | ||
| 689 | |||
| 690 | { } /* Terminating entry */ | ||
| 691 | }; | ||
| 692 | |||
| 693 | static void hidp_setup_quirks(struct hid_device *hid) | ||
| 694 | { | ||
| 695 | unsigned int n; | ||
| 696 | |||
| 697 | for (n = 0; hidp_blacklist[n].idVendor; n++) | ||
| 698 | if (hidp_blacklist[n].idVendor == le16_to_cpu(hid->vendor) && | ||
| 699 | hidp_blacklist[n].idProduct == le16_to_cpu(hid->product)) | ||
| 700 | hid->quirks = hidp_blacklist[n].quirks; | ||
| 701 | } | ||
| 702 | |||
| 682 | static inline void hidp_setup_hid(struct hidp_session *session, struct hidp_connadd_req *req) | 703 | static inline void hidp_setup_hid(struct hidp_session *session, struct hidp_connadd_req *req) |
| 683 | { | 704 | { |
| 684 | struct hid_device *hid = session->hid; | 705 | struct hid_device *hid = session->hid; |
| @@ -708,6 +729,8 @@ static inline void hidp_setup_hid(struct hidp_session *session, struct hidp_conn | |||
| 708 | 729 | ||
| 709 | hid->hidinput_input_event = hidp_hidinput_event; | 730 | hid->hidinput_input_event = hidp_hidinput_event; |
| 710 | 731 | ||
| 732 | hidp_setup_quirks(hid); | ||
| 733 | |||
| 711 | list_for_each_entry(report, &hid->report_enum[HID_INPUT_REPORT].report_list, list) | 734 | list_for_each_entry(report, &hid->report_enum[HID_INPUT_REPORT].report_list, list) |
| 712 | hidp_send_report(session, report); | 735 | hidp_send_report(session, report); |
| 713 | 736 | ||
