fix apple alu keyboard with numpad
PATCH 1/1 fix apple alu keyboard with numpad
The nice apple alu keyboards with numpads are pretty much unusable in vanilla 2.6.25.
(http://images.apple.com/keyboard/images/gallery/wired_1_20070813.jpg)
Hitting the 'clear' key (=numlock) disables the numpad, and maps multiple alphanumeric keys to numpad symbols in typical laptopkeyboard fashion.
Furthermore, some of the F-keys do double duty as multimedia keys. The vanilla kernel defaults to multimedia keys, requiring the user to hit the 'fn' key to get F-key events. I use F-keys more often than multimedia keys, so I included the patch to change the default to be F-keys.
The following patch is taken from:
https://bugs.launchpad.net/mactel-support/+bug/201887
and appears to have been written by Eric Johney. I have merely lifted the two patches from the webpage above and submitted it, as I couldn't see it upstream after a brief search.
drivers/hid/hid-input.c 2008-04-25 23:07:52.925613698 +0200 renamed from drivers/hid/hid-input.c 2008-04-17 04:49:44.000000000 +0200 +4 -3
@@ -34,7 +34,7 @@ #include <linux/hid.h> #include <linux/hid-debug.h> -static int hid_apple_fnmode = 1; +static int hid_apple_fnmode = 2; module_param_named(pb_fnmode, hid_apple_fnmode, int, 0644); MODULE_PARM_DESC(pb_fnmode, "Mode of fn key on Apple keyboards (0 = disabled, 1 = fkeyslast, 2 = fkeysfirst)");
@@ -218,8 +218,9 @@ } } - if (test_bit(usage->code, hid->pb_pressed_numlock) || - test_bit(LED_NUML, input->led)) { + if ((test_bit(usage->code, hid->pb_pressed_numlock) || + test_bit(LED_NUML, input->led)) && + (hid->product < 0x220 ||hid->product >= 0x300)) { trans = find_translation(powerbook_numlock_keys, usage->code); if (trans) {
For "completeness" and the benfit of someone finding this in an archive later, the following 4 commands provides correct keys for the multimediakeys in X:
setxkbmap -model macintosh
xmodmap -e "keycode 162 = XF86AudioPlay"
xmodmap -e "keycode 153 = XF86AudioNext"
xmodmap -e "keycode 144 = XF86AudioPrev"
Works with a US layout keyboard, anyway.
Regards,
Dag B.
Quoted 50 lines · On Sun, 27 Apr 2008 13:19:11 +0200 Dag Bakke <[email protected]> wrote:
The nice apple alu keyboards with numpads are pretty much unusable in vanilla 2.6.25.
(http://images.apple.com/keyboard/images/gallery/wired_1_20070813.jpg)
Hitting the 'clear' key (=numlock) disables the numpad, and maps multiple alphanumeric keys to numpad symbols in typical laptopkeyboard fashion.Furthermore, some of the F-keys do double duty as multimedia keys. The vanilla kernel defaults to multimedia keys, requiring the user to hit the 'fn' key to get F-key events. I use F-keys more often than multimedia keys, so I included the patch to change the default to be F-keys.
The following patch is taken from:
https://bugs.launchpad.net/mactel-support/+bug/201887
and appears to have been written by Eric Johney. I have merely lifted the two patches from the webpage above and submitted it, as I couldn't see it upstream after a brief search.Tested-by [email protected]drivers/hid/hid-input.c 2008-04-25 23:07:52.925613698 +0200 renamed from drivers/hid/hid-input.c 2008-04-17 04:49:44.000000000 +0200 +4
-3@@ -34,7 +34,7 @@ #include <linux/hid.h> #include <linux/hid-debug.h> -static int hid_apple_fnmode = 1; +static int hid_apple_fnmode = 2; module_param_named(pb_fnmode, hid_apple_fnmode, int, 0644); MODULE_PARM_DESC(pb_fnmode, "Mode of fn key on Apple keyboards (0 = disabled, 1 = fkeyslast, 2 = fkeysfirst)");@@ -218,8 +218,9 @@ } } - if (test_bit(usage->code, hid->pb_pressed_numlock) || - test_bit(LED_NUML, input->led)) { + if ((test_bit(usage->code, hid->pb_pressed_numlock) || + test_bit(LED_NUML, input->led)) && + (hid->product < 0x220 ||hid->product >= 0x300)) { trans = find_translation(powerbook_numlock_keys, usage->code); if (trans) {For "completeness" and the benfit of someone finding this in an archive later, the following 4 commands provides correct keys for the multimediakeys in X:
Quoted 7 lines
setxkbmap -model macintosh
xmodmap -e "keycode 162 = XF86AudioPlay"
xmodmap -e "keycode 153 = XF86AudioNext"
xmodmap -e "keycode 144 = XF86AudioPrev"Works with a US layout keyboard, anyway.
This conflicts rather directly with hid-disable-numlock-emulation-for-apple-aluminium-keyboards.patch below (hm, seems we didn't get a changelog for that one).
Jiri, what should we do here?
Thanks
From: "Diego 'Flameeyes' Petteno" <[email protected]>
---
drivers/hid/hid-input.c | 5 ++-- drivers/hid/usbhid/hid-quirks.c | 32 +++++++++++++++--------------- include/linux/hid.h | 1 3 files changed, 20 insertions(+), 18 deletions(-)
drivers/hid/hid-input.c renamed from drivers/hid/hid-input.c~hid-disable-numlock-emulation-for-apple-aluminium-keyboards +3 -2
@@ -218,8 +218,9 @@ int hidinput_apple_event(struct hid_devi } } -if (test_bit (usage->code, hid->pb_pressed_numlock) || -test_bit (LED_NUML , input->led)) { +if (hid->quirks &HID_QUIRK_APPLE_NUMLOCK_EMULATION && ( +test_bit (usage->code, hid->pb_pressed_numlock) || +test_bit (LED_NUML , input->led))) { trans =find_translation (powerbook_numlock_keys, usage->code);if (trans) {
drivers/hid/usbhid/hid-quirks.c renamed from drivers/hid/usbhid/hid-quirks.c~hid-disable-numlock-emulation-for-apple-aluminium-keyboards +16 -16
@@ -613,28 +613,28 @@ static const struct hid_blacklist { { USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SMARTJOY_DUAL_PLUS, HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT }, - { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI, HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, - { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ISO, HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, - { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ANSI, HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, - { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ISO, HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE | HID_QUIRK_APPLE_ISO_KEYBOARD}, - { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_JIS, HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, - { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ANSI, HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, - { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ISO, HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE | HID_QUIRK_APPLE_ISO_KEYBOARD}, - { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_JIS, HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, - { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ANSI, HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, - { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ISO, HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE | HID_QUIRK_APPLE_ISO_KEYBOARD}, - { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_JIS, HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, + { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI, HID_QUIRK_APPLE_NUMLOCK_EMULATION | HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, + { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ISO, HID_QUIRK_APPLE_NUMLOCK_EMULATION | HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, + { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ANSI, HID_QUIRK_APPLE_NUMLOCK_EMULATION | QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, + { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ISO, HID_QUIRK_APPLE_NUMLOCK_EMULATION | HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE | HID_QUIRK_APPLE_ISO_KEYBOARD}, + { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_JIS, HID_QUIRK_APPLE_NUMLOCK_EMULATION | HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, + { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ANSI, HID_QUIRK_APPLE_NUMLOCK_EMULATION | HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, + { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ISO, HID_QUIRK_APPLE_NUMLOCK_EMULATION | HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE | HID_QUIRK_APPLE_ISO_KEYBOARD}, + { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_JIS, HID_QUIRK_APPLE_NUMLOCK_EMULATION | HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, + { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ANSI, HID_QUIRK_APPLE_NUMLOCK_EMULATION | HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, + { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ISO, HID_QUIRK_APPLE_NUMLOCK_EMULATION | HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE | HID_QUIRK_APPLE_ISO_KEYBOARD}, + { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_JIS, HID_QUIRK_APPLE_NUMLOCK_EMULATION | HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_ANSI, HID_QUIRK_APPLE_HAS_FN }, { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_ISO, HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_APPLE_ISO_KEYBOARD }, { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_JIS, HID_QUIRK_APPLE_HAS_FN }, - { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ANSI, HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, - { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ISO, HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, - { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_JIS, HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, + { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ANSI, HID_QUIRK_APPLE_NUMLOCK_EMULATION | HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, + { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ISO, HID_QUIRK_APPLE_NUMLOCK_EMULATION | HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, + { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_JIS, HID_QUIRK_APPLE_NUMLOCK_EMULATION | HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_ANSI, HID_QUIRK_APPLE_HAS_FN }, { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_ISO, HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_APPLE_ISO_KEYBOARD }, { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_JIS, HID_QUIRK_APPLE_HAS_FN }, - { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY, HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, - { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY, HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, + { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY, HID_QUIRK_APPLE_NUMLOCK_EMULATION | HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, + { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY, HID_QUIRK_APPLE_NUMLOCK_EMULATION | HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, { USB_VENDOR_ID_DELL, USB_DEVICE_ID_DELL_W7658, HID_QUIRK_RESET_LEDS }, { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_KBD, HID_QUIRK_RESET_LEDS },
include/linux/hid.h renamed from include/linux/hid.h~hid-disable-numlock-emulation-for-apple-aluminium-keyboards +1 -0
@@ -285,6 +285,7 @@ struct hid_item {#define HID_QUIRK_HWHEEL_WHEEL_INVERT 0x04000000#define HID_QUIRK_MICROSOFT_KEYS 0x08000000#define HID_QUIRK_FULLSPEED_INTERVAL 0x10000000 +#define HID_QUIRK_APPLE_NUMLOCK_EMULATION 0x20000000/* * Separate quirks for runtime report descriptor fixup
_
Quoted 8 lines · Andrew Morton
Quoted 5 lines
The nice apple alu keyboards with numpads are pretty much unusable in vanilla 2.6.25.
(http://images.apple.com/keyboard/images/gallery/wired_1_20070813.jpg)
Hitting the 'clear' key (=numlock) disables the numpad, and maps multiple alphanumeric keys to numpad symbols in typical laptopkeyboard fashion.This conflicts rather directly with hid-disable-numlock-emulation-for-apple-aluminium-keyboards.patch below (hm, seems we didn't get a changelog for that one).
Hi,
I have just today applied Diego's patch into my tree [1], he has provided the changelog out of list to me.
Quoted 1 line
Jiri, what should we do here?
Dag, I think Diego's patch should solve the issue you are seeing, right?
Thanks,
Signature · 1 line
Jiri Kosina
Jiri Kosina wrote, On 05/06/2008 10:46 PM:
Quoted 11 lines · Andrew Morton
Quoted 7 lines
Quoted 6 lines
The nice apple alu keyboards with numpads are pretty much unusable in vanilla 2.6.25.
(http://images.apple.com/keyboard/images/gallery/wired_1_20070813.jpg)
Hitting the 'clear' key (=numlock) disables the numpad, and maps multiple alphanumeric keys to numpad symbols in typical laptopkeyboard fashion.This conflicts rather directly with hid-disable-numlock-emulation-for-apple-aluminium-keyboards.patch below (hm, seems we didn't get a changelog for that one).
Hi,
Quoted 7 lines
I have just today applied Diego's patch into my tree [1], he has provided the changelog out of list to me.
Quoted 1 line
Jiri, what should we do here?
Dag, I think Diego's patch should solve the issue you are seeing, right?
I'll give it a shot and let you know.
Dag B
Quoted 5 lines · Dag Bakke
Quoted 4 lines
Dag, I think Diego's patch should solve the issue you are seeing, right?
I'll give it a shot and let you know.
Dag,
any update here, please?
Thanks,
Signature · 1 line
Jiri Kosina
Jiri Kosina wrote, On 05/12/2008 12:54 AM:
Quoted 6 lines · Dag Bakke
Quoted 5 lines
Quoted 5 lines
Dag, I think Diego's patch should solve the issue you are seeing, right?
Quoted 8 lines
Quoted 1 line
I'll give it a shot and let you know.
Dag,
any update here, please?
Thanks,
The patch works, thank you. Looks like all keys produce what I expect now.
Well. At least in X11 they do.
In the console, I get '~' instead of '=', when hitting the numpad '=' key.
This may have been no different with the patch I used previously.
Dag B
Quoted 2 lines · Andrew Morton
Review
Quoted 2 lines
(quoted diff) +1
-1-static int hid_apple_fnmode = 1; +static int hid_apple_fnmode = 2;
Regardless of anything else, we don't want this hunk.
Signature · 1 line
Matthew Garrett | [email protected]
Matthew Garrett wrote, On 05/07/2008 01:43 AM:
Quoted 7 lines · Andrew Morton
Quoted 3 lines
Review
Quoted 3 lines
(quoted diff) +1
-1-static int hid_apple_fnmode = 1; +static int hid_apple_fnmode = 2;Regardless of anything else, we don't want this hunk.
Was my reasoning for this change off ("F-keys used more often that multimediakeys, ergo make that the default"), or is your resistance to this change due to some kind of policy?
Sorry if the reason is obvious to you. It isn't to me, yet.
Regards,
Dag B
Quoted 9 lines · Dag Bakke
Matthew Garrett wrote, On 05/07/2008 01:43 AM:
Quoted 7 lines · Andrew Morton
Quoted 3 lines
Review
Quoted 3 lines
(quoted diff) +1
-1-static int hid_apple_fnmode = 1; +static int hid_apple_fnmode = 2;Regardless of anything else, we don't want this hunk.
Quoted 3 lines
Was my reasoning for this change off ("F-keys used more often that multimediakeys, ergo make that the default"), or is your resistance to this change due to some kind of policy?
It's a change in behaviour of a wide range of keyboards, and it's in a patch that is supposed to be fixing a single keyboard. Personally, I suspect that the people who are going to want the F-keys by default are the people who are easily able to change this behaviour and the ones who aren't are the ones who are going to expect their keyboard to behave like it did under MacOS. But that's a separate argument for a separate patch :)
Signature · 1 line
Matthew Garrett | [email protected]