All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC] [PATCH] bluetooth hid quirks - mightymouse quirk
@ 2007-02-27 13:43 Jiri Kosina
  0 siblings, 0 replies; only message in thread
From: Jiri Kosina @ 2007-02-27 13:43 UTC (permalink / raw)
  To: Marcel Holtmann; +Cc: bluez-devel, linux-kernel

Hi,

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.

Is this the right thing to do?

Also, it would be great if anyone who actually owns the hardware could 
test that this makes the scrollwheel work.

Thanks.


From: Jiri Kosina <jkosina@suse.cz>

[PATCH] [Bluetooth] hid quirks - mightymouse quirk

This patch allows bluetooth hid devices to use quirks which are
already present in generic hid layer. It also adds quirk for
bluetooth version of apple mightymouse.

Signed-off-by: Jiri Kosina <jkosina@suse.cz>
---
 net/bluetooth/hidp/core.c |   13 +++++++++++++
 net/bluetooth/hidp/hidp.h |   17 +++++++++++++++++
 2 files changed, 30 insertions(+), 0 deletions(-)

diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
index 4c914df..bdd4fd8 100644
--- a/net/bluetooth/hidp/core.c
+++ b/net/bluetooth/hidp/core.c
@@ -679,6 +679,17 @@ static void hidp_close(struct hid_device *hid)
 {
 }
 
+static void hidp_setup_quirks(struct hid_device *hid)
+{
+	unsigned int n;
+
+	for (n = 0; hid_blacklist[n].idVendor; n++)
+		if ((hid_blacklist[n].idVendor == le16_to_cpu(hid->vendor)) &&
+				(hid_blacklist[n].idProduct == le16_to_cpu(hid->product)))
+			hid->quirks = hid_blacklist[n].quirks;
+
+}
+
 static inline void hidp_setup_hid(struct hidp_session *session, struct hidp_connadd_req *req)
 {
 	struct hid_device *hid = session->hid;
@@ -708,6 +719,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);
 
diff --git a/net/bluetooth/hidp/hidp.h b/net/bluetooth/hidp/hidp.h
index 343fb05..a262081 100644
--- a/net/bluetooth/hidp/hidp.h
+++ b/net/bluetooth/hidp/hidp.h
@@ -23,6 +23,7 @@
 #ifndef __HIDP_H
 #define __HIDP_H
 
+#include <linux/hid.h>
 #include <linux/types.h>
 #include <net/bluetooth/bluetooth.h>
 
@@ -166,4 +167,20 @@ static inline void hidp_schedule(struct hidp_session *session)
 extern int __init hidp_init_sockets(void);
 extern void __exit hidp_cleanup_sockets(void);
 
+/* HID blacklist and quirk entries */
+
+#define BT_VENDOR_ID_APPLE		0x05ac
+#define BT_DEVICE_ID_APPLE_MIGHTYMOUSE	0x030c
+
+static const struct hid_blacklist {
+	__u16 idVendor;
+	__u16 idProduct;
+	unsigned quirks;
+} hid_blacklist[] = {
+
+	{ BT_VENDOR_ID_APPLE, BT_DEVICE_ID_APPLE_MIGHTYMOUSE, HID_QUIRK_MIGHTYMOUSE | HID_QUIRK_INVERT_HWHEEL },
+
+	{ 0, 0 }
+};
+
 #endif /* __HIDP_H */


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2007-02-27 13:43 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-02-27 13:43 [RFC] [PATCH] bluetooth hid quirks - mightymouse quirk Jiri Kosina

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.