Skip to content

Commit

Permalink
[PATCH] bluetooth hid quirks: mightymouse quirk
Browse files Browse the repository at this point in the history
I have a bugreport that scrollwheel of bluetooth version of apple
mightymouse doesn't work.  The USB version of mightymouse works, as there
is a quirk for handling scrollwheel in hid/usbhid for it.

Now that bluetooth git tree is hooked to generic hid layer, it could easily
use the quirks which are already present in generic hid parser, hid-input,
etc.

Below is a simple patch against bluetooth git tree, which adds quirk
handling to current bluetooth hidp code, and sets quirk flags for device
0x05ac/0x030c, which is the bluetooth version of the apple mightymouse.

Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Jiri Kosina authored and Linus Torvalds committed Mar 29, 2007
1 parent e6d1fc3 commit cb3fecc
Showing 1 changed file with 23 additions and 0 deletions.
23 changes: 23 additions & 0 deletions net/bluetooth/hidp/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -679,6 +679,27 @@ static void hidp_close(struct hid_device *hid)
{
}

static const struct {
__u16 idVendor;
__u16 idProduct;
unsigned quirks;
} hidp_blacklist[] = {
/* Apple wireless Mighty Mouse */
{ 0x05ac, 0x030c, HID_QUIRK_MIGHTYMOUSE | HID_QUIRK_INVERT_HWHEEL },

{ } /* Terminating entry */
};

static void hidp_setup_quirks(struct hid_device *hid)
{
unsigned int n;

for (n = 0; hidp_blacklist[n].idVendor; n++)
if (hidp_blacklist[n].idVendor == le16_to_cpu(hid->vendor) &&
hidp_blacklist[n].idProduct == le16_to_cpu(hid->product))
hid->quirks = hidp_blacklist[n].quirks;
}

static inline void hidp_setup_hid(struct hidp_session *session, struct hidp_connadd_req *req)
{
struct hid_device *hid = session->hid;
Expand Down Expand Up @@ -708,6 +729,8 @@ static inline void hidp_setup_hid(struct hidp_session *session, struct hidp_conn

hid->hidinput_input_event = hidp_hidinput_event;

hidp_setup_quirks(hid);

list_for_each_entry(report, &hid->report_enum[HID_INPUT_REPORT].report_list, list)
hidp_send_report(session, report);

Expand Down

0 comments on commit cb3fecc

Please sign in to comment.