Add usb product-id to hid-quirks for detection of 3rd generation macbook keyboard and the new apple desktop keyboard.
Add alternative powerbook_fn_keytab for that kind of keyboards. Signed-off-by: Tobias Müller <[EMAIL PROTECTED]> --- --- a/include/linux/hid.h 2008-01-17 14:44:36.000000000 +0100 +++ b/include/linux/hid.h 2008-01-17 15:09:37.000000000 +0100 @@ -281,6 +281,7 @@ #define HID_QUIRK_LOGITECH_IGNORE_DOUBLED_WHEEL 0x00400000 #define HID_QUIRK_LOGITECH_EXPANDED_KEYMAP 0x00800000 #define HID_QUIRK_IGNORE_HIDINPUT 0x01000000 +#define HID_QUIRK_POWERBOOK_ALTERNATIVE_FN 0x02000000 /* * Separate quirks for runtime report descriptor fixup --- a/drivers/hid/usbhid/hid-quirks.c 2008-01-17 14:44:33.000000000 +0100 +++ b/drivers/hid/usbhid/hid-quirks.c 2008-01-17 16:12:40.000000000 +0100 @@ -59,6 +59,8 @@ #define USB_DEVICE_ID_APPLE_GEYSER4_ANSI 0x021a #define USB_DEVICE_ID_APPLE_GEYSER4_ISO 0x021b #define USB_DEVICE_ID_APPLE_GEYSER4_JIS 0x021c +#define USB_DEVICE_ID_APPLE_KEYBOARD_MB100ZA 0x0221 +#define USB_DEVICE_ID_APPLE_KEYBOARD_MACBOOK3 0x022a #define USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY 0x030a #define USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY 0x030b #define USB_DEVICE_ID_APPLE_IRCONTROL4 0x8242 @@ -553,6 +555,8 @@ { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_JIS, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE }, + { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_KEYBOARD_MB100ZA, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE | HID_QUIRK_POWERBOOK_ISO_KEYBOARD | HID_QUIRK_POWERBOOK_ALTERNATIVE_FN}, + { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_KEYBOARD_MACBOOK3, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE | HID_QUIRK_POWERBOOK_ALTERNATIVE_FN}, { 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 }, --- a/drivers/hid/hid-input.c 2008-01-17 14:44:33.000000000 +0100 +++ b/drivers/hid/hid-input.c 2008-01-17 15:23:45.000000000 +0100 @@ -119,6 +119,27 @@ { } }; +static struct hidinput_key_translation powerbook_alternative_fn_keys[] = { + { KEY_BACKSPACE, KEY_DELETE }, + { KEY_F1, KEY_BRIGHTNESSDOWN, POWERBOOK_FLAG_FKEY }, + { KEY_F2, KEY_BRIGHTNESSUP, POWERBOOK_FLAG_FKEY }, + { KEY_F3, KEY_PROG1, POWERBOOK_FLAG_FKEY }, + { KEY_F4, KEY_PROG2, POWERBOOK_FLAG_FKEY }, + { KEY_F5, KEY_FN_F5, POWERBOOK_FLAG_FKEY }, + { KEY_F6, KEY_FN_F6, POWERBOOK_FLAG_FKEY }, + { KEY_F7, KEY_BACK, POWERBOOK_FLAG_FKEY }, + { KEY_F8, KEY_PLAY, POWERBOOK_FLAG_FKEY }, + { KEY_F9, KEY_FASTFORWARD, POWERBOOK_FLAG_FKEY }, + { KEY_F10, KEY_MUTE, POWERBOOK_FLAG_FKEY }, + { KEY_F11, KEY_VOLUMEDOWN, POWERBOOK_FLAG_FKEY }, + { KEY_F12, KEY_VOLUMEUP, POWERBOOK_FLAG_FKEY }, + { KEY_UP, KEY_PAGEUP }, + { KEY_DOWN, KEY_PAGEDOWN }, + { KEY_LEFT, KEY_HOME }, + { KEY_RIGHT, KEY_END }, + { } +}; + static struct hidinput_key_translation powerbook_numlock_keys[] = { { KEY_J, KEY_KP1 }, { KEY_K, KEY_KP2 }, @@ -177,7 +198,12 @@ if (hid_pb_fnmode) { int do_translate; - trans = find_translation(powerbook_fn_keys, usage->code); + if (hid->quirks & HID_QUIRK_POWERBOOK_ALTERNATIVE_FN) { + trans = find_translation(powerbook_alternative_fn_keys, usage->code);+ } else { + trans = find_translation(powerbook_fn_keys, usage->code);
+ } + if (trans) { if (test_bit(usage->code, hid->pb_pressed_fn)) do_translate = 1; @@ -238,6 +264,9 @@ for (trans = powerbook_fn_keys; trans->from; trans++) set_bit(trans->to, input->keybit); + for (trans = powerbook_alternative_fn_keys; trans->from; trans++) + set_bit(trans->to, input->keybit); + for (trans = powerbook_numlock_keys; trans->from; trans++) set_bit(trans->to, input->keybit);
smime.p7s
Description: S/MIME Cryptographic Signature