HID: allow disabling hard-coded ISO-layout for Apple keyboards

This patch adds a new option named "iso_layout" to the driver
"hid-apple.ko", to allow disabling of the hard-coded ISO-layout.

Disabling the hard-coded layout solves the problem that the kernel-module only
works perfectly for the english/american version of the Apple aluminum
keyboard. Other versions have swapped keys, e.g. the "<"-key  is swapped with
"^"-key on the german keyboard. There is a very long bug-entry on Launchpad to
this problem:

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/214786

Signed-off-by: Stefan Glasenhardt <stefan@glasen-hardt.de>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
Stefan Glasenhardt 2010-01-05 23:30:30 +01:00 committed by Jiri Kosina
parent 722612cd51
commit 54a6593d65

View File

@ -40,6 +40,11 @@ module_param(fnmode, uint, 0644);
MODULE_PARM_DESC(fnmode, "Mode of fn key on Apple keyboards (0 = disabled, " MODULE_PARM_DESC(fnmode, "Mode of fn key on Apple keyboards (0 = disabled, "
"[1] = fkeyslast, 2 = fkeysfirst)"); "[1] = fkeyslast, 2 = fkeysfirst)");
static unsigned int iso_layout = 1;
module_param(iso_layout, uint, 0644);
MODULE_PARM_DESC(iso_layout, "Enable/Disable hardcoded ISO-layout of the keyboard. "
"(0 = disabled, [1] = enabled)");
struct apple_sc { struct apple_sc {
unsigned long quirks; unsigned long quirks;
unsigned int fn_on; unsigned int fn_on;
@ -199,11 +204,13 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input,
} }
} }
if (asc->quirks & APPLE_ISO_KEYBOARD) { if (iso_layout) {
trans = apple_find_translation(apple_iso_keyboard, usage->code); if (asc->quirks & APPLE_ISO_KEYBOARD) {
if (trans) { trans = apple_find_translation(apple_iso_keyboard, usage->code);
input_event(input, usage->type, trans->to, value); if (trans) {
return 1; input_event(input, usage->type, trans->to, value);
return 1;
}
} }
} }