Messages in this thread Patch in this message | | | From | Jan Scholz <> | Subject | Re: [patch 41/47] bluetooth hid: enable quirk handling for Apple Wireless Keyboards in 2.6.27 | Date | Sat, 14 Feb 2009 23:50:39 +0100 |
| |
Greg KH <gregkh@suse.de> writes:
> 2.6.27-stable review patch. If anyone has any objections, please let us know. > > ------------------ > > From: Torsten Rausche <torsten@rausche.net> > > This patch is basically a backport of > commit ee8a1a0a1a5817accd03ced7e7ffde3a4430f485 upstream > which was made after the big HID overhaul in 2.6.28. > > Kernel 2.6.27 fails to handle quirks for the aluminum Apple Wireless > Keyboard because it is handled as USB device and not as Bluetooth > device. This patch expands 'hidp_blacklist' to make the kernel handle > the keyboard in the same way as the Apple wireless Mighty Mouse (also a > Bluetooth device). > > Signed-off-by: Torsten Rausche <torsten@rausche.net> > Cc: Jan Scholz <Scholz@fias.uni-frankfurt.de> > Cc: Jiri Kosina <jkosina@suse.cz> > Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> > > --- > --- > net/bluetooth/hidp/core.c | 4 ++++ > 1 file changed, 4 insertions(+) > > --- a/net/bluetooth/hidp/core.c > +++ b/net/bluetooth/hidp/core.c > @@ -684,6 +684,10 @@ static const struct { > } hidp_blacklist[] = { > /* Apple wireless Mighty Mouse */ > { 0x05ac, 0x030c, HID_QUIRK_MIGHTYMOUSE | HID_QUIRK_INVERT_HWHEEL }, > + /* Apple Wireless Keyboard */ > + { 0x05ac, 0x022c, HID_QUIRK_APPLE_NUMLOCK_EMULATION | HID_QUIRK_APPLE_HAS_FN }, > + { 0x05ac, 0x022d, HID_QUIRK_APPLE_NUMLOCK_EMULATION | HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_APPLE_ISO_KEYBOARD }, > + { 0x05ac, 0x022e, HID_QUIRK_APPLE_NUMLOCK_EMULATION | HID_QUIRK_APPLE_HAS_FN }, > > { } /* Terminating entry */ > }; > >
A very similar fix has been proposed by Paul Collins (see http://lkml.org/lkml/2008/6/14/26 ) a while ago.
Here on my ppc32 G4 it works only if I apply the following as well. I can't test it on x86, though.
Jan Scholz
-- removed 2 calls to le16_to_cpu from the bluetooth hid quirks
seems we're doing some endianness conversion one time to much
diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c index 28dc035..6b95a6d 100644 --- a/net/bluetooth/hidp/core.c +++ b/net/bluetooth/hidp/core.c @@ -699,8 +699,8 @@ 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)) + if (hidp_blacklist[n].idVendor == hid->vendor && + hidp_blacklist[n].idProduct == hid->product) hid->quirks = hidp_blacklist[n].quirks; }
| |