login
Header Space

 
 

Re: [PATCH] fix apple alu keyboard with numpad

Previous thread: [RFC v2 1/8] modpost: add support for hid by Jiri Slaby on Sunday, April 27, 2008 - 7:48 am. (9 messages)

Next thread: x86 pat.c:phys_mem_access_prot_allowed() bogosity by Adrian Bunk on Sunday, April 27, 2008 - 8:31 am. (2 messages)
To: <linux-input@...>, <linux-kernel@...>
Date: Sunday, April 27, 2008 - 7:19 am

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: dag@bakke.com

--- linux-2.6.25-gentoo/drivers/hid/hid-input.c 2008-04-17 04:49:44.000000000 +0200
+++ linux-2.6.25-gentoo-r1-apple/drivers/hid/hid-input.c        2008-04-25 23:07:52.925613698 +0200
@@ -34,7 +34,7 @@
  #include &lt;linux/hid.h&gt;
  #include &lt;linux/hid-debug.h&gt;

-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-&gt;code, hid-&gt;pb_pressed_numlock) ||
-                               test_bit(LED_NUML, input-&gt;led)) {
+               if ((test_bit(usage-&gt;code, hid-&gt;pb_pressed_numlock) ||
+                               test_bit(LED_NUML, input-&gt;led)) &amp;&amp;
+                               (hid-&gt;product &lt; 0x220 ||hid-&gt;product &gt;= 0x300)) {
                         trans = find_translation(powerbook_numlock_keys, usage-&gt;code);

                         if (trans) {

...
To: Dag Bakke <dag@...>
Cc: <linux-input@...>, <linux-kernel@...>, Jiri Kosina <jkosina@...>, Diego 'Flameeyes' Petteno <flameeyes@...>
Date: Tuesday, May 6, 2008 - 3:54 pm

On Sun, 27 Apr 2008 13:19:11 +0200

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" &lt;flameeyes@gmail.com&gt;



Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
---

 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(-)

diff -puN drivers/hid/hid-input.c~hid-disable-numlock-emulation-for-apple-aluminium-keyboards drivers/hid/hid-input.c
--- a/drivers/hid/hid-input.c~hid-disable-numlock-emulation-for-apple-aluminium-keyboards
+++ a/drivers/hid/hid-input.c
@@ -218,8 +218,9 @@ int hidinput_apple_event(struct hid_devi
 			}
 		}
 
-		if (test_bit(usage-&gt;code, hid-&gt;pb_pressed_numlock) ||
-				test_bit(LED_NUML, input-&gt;led)) {
+		if (hid-&gt;quirks &amp; HID_QUIRK_APPLE_NUMLOCK_EMULATION &amp;&amp; (
+				test_bit(usage-&gt;code, hid-&gt;pb_pressed_numlock) ||
+				test_bit(LED_NUML, input-&gt;led))) {
 			trans = find_translation(powerbook_numlock_keys, usage-&gt;code);
 
 			if (trans) {
diff -puN drivers/hid/usbhid/hid-quirks.c~hid-disable-numlock-emulation-for-apple-aluminium-keyboards drivers/hid/usbhid/hid-quirks.c
--- a/drivers/hid/usbhid/hid-quirks.c~hid-disable-numlock-emulation-for-apple-aluminium-keyboards
+++ a/drivers/hid/usbhid/hid-quirks.c
@@ -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...
To: Andrew Morton <akpm@...>
Cc: Dag Bakke <dag@...>, <linux-input@...>, <linux-kernel@...>, Jiri Kosina <jkosina@...>, Diego 'Flameeyes' Petteno <flameeyes@...>
Date: Tuesday, May 6, 2008 - 7:43 pm

Regardless of anything else, we don't want this hunk.

-- 
Matthew Garrett | mjg59@srcf.ucam.org
--
To: Matthew Garrett <mjg59@...>
Cc: Andrew Morton <akpm@...>, <linux-input@...>, <linux-kernel@...>, Jiri Kosina <jkosina@...>, Diego 'Flameeyes' Petteno <flameeyes@...>
Date: Thursday, May 8, 2008 - 1:29 pm

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
--
To: Dag Bakke <dag@...>
Cc: Andrew Morton <akpm@...>, <linux-input@...>, <linux-kernel@...>, Jiri Kosina <jkosina@...>, Diego 'Flameeyes' Petteno <flameeyes@...>
Date: Thursday, May 8, 2008 - 1:42 pm

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 :)

-- 
Matthew Garrett | mjg59@srcf.ucam.org
--
To: Andrew Morton <akpm@...>
Cc: Dag Bakke <dag@...>, <linux-input@...>, <linux-kernel@...>, Diego 'Flameeyes' Petteno <flameeyes@...>
Date: Tuesday, May 6, 2008 - 4:46 pm

Hi,

I have just today applied Diego's patch into my tree [1], he has provided 

Dag, I think Diego's patch should solve the issue you are seeing, right?

[1] http://git.kernel.org/?p=linux/kernel/git/jikos/hid.git;a=commit;h=ffe6f7b799e33f51732...

Thanks,

-- 
Jiri Kosina
--
To: Jiri Kosina <jkosina@...>
Cc: Andrew Morton <akpm@...>, <linux-input@...>, <linux-kernel@...>, Diego 'Flameeyes' Petteno <flameeyes@...>
Date: Thursday, May 8, 2008 - 1:24 pm

I'll give it a shot and let you know.

Dag B
--
To: Dag Bakke <dag@...>
Cc: Andrew Morton <akpm@...>, <linux-input@...>, <linux-kernel@...>, Diego 'Flameeyes' Petteno <flameeyes@...>
Date: Sunday, May 11, 2008 - 6:54 pm

Dag,

any update here, please?

Thanks,

-- 
Jiri Kosina
--
To: Jiri Kosina <jkosina@...>
Cc: Andrew Morton <akpm@...>, <linux-input@...>, <linux-kernel@...>, Diego 'Flameeyes' Petteno <flameeyes@...>
Date: Monday, May 12, 2008 - 3:45 am

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
--
Previous thread: [RFC v2 1/8] modpost: add support for hid by Jiri Slaby on Sunday, April 27, 2008 - 7:48 am. (9 messages)

Next thread: x86 pat.c:phys_mem_access_prot_allowed() bogosity by Adrian Bunk on Sunday, April 27, 2008 - 8:31 am. (2 messages)
speck-geostationary