diff options
| -rw-r--r-- | drivers/hid/hid-apple.c | 46 | ||||
| -rw-r--r-- | drivers/hid/hid-core.c | 12 | ||||
| -rw-r--r-- | drivers/hid/hid-ids.h | 6 |
3 files changed, 60 insertions, 4 deletions
diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c index eaeca564a8d3..6c52203cdbdf 100644 --- a/drivers/hid/hid-apple.c +++ b/drivers/hid/hid-apple.c | |||
| @@ -59,6 +59,27 @@ struct apple_key_translation { | |||
| 59 | u8 flags; | 59 | u8 flags; |
| 60 | }; | 60 | }; |
| 61 | 61 | ||
| 62 | static const struct apple_key_translation macbookair_fn_keys[] = { | ||
| 63 | { KEY_BACKSPACE, KEY_DELETE }, | ||
| 64 | { KEY_ENTER, KEY_INSERT }, | ||
| 65 | { KEY_F1, KEY_BRIGHTNESSDOWN, APPLE_FLAG_FKEY }, | ||
| 66 | { KEY_F2, KEY_BRIGHTNESSUP, APPLE_FLAG_FKEY }, | ||
| 67 | { KEY_F3, KEY_SCALE, APPLE_FLAG_FKEY }, | ||
| 68 | { KEY_F4, KEY_DASHBOARD, APPLE_FLAG_FKEY }, | ||
| 69 | { KEY_F6, KEY_PREVIOUSSONG, APPLE_FLAG_FKEY }, | ||
| 70 | { KEY_F7, KEY_PLAYPAUSE, APPLE_FLAG_FKEY }, | ||
| 71 | { KEY_F8, KEY_NEXTSONG, APPLE_FLAG_FKEY }, | ||
| 72 | { KEY_F9, KEY_MUTE, APPLE_FLAG_FKEY }, | ||
| 73 | { KEY_F10, KEY_VOLUMEDOWN, APPLE_FLAG_FKEY }, | ||
| 74 | { KEY_F11, KEY_VOLUMEUP, APPLE_FLAG_FKEY }, | ||
| 75 | { KEY_F12, KEY_EJECTCD, APPLE_FLAG_FKEY }, | ||
| 76 | { KEY_UP, KEY_PAGEUP }, | ||
| 77 | { KEY_DOWN, KEY_PAGEDOWN }, | ||
| 78 | { KEY_LEFT, KEY_HOME }, | ||
| 79 | { KEY_RIGHT, KEY_END }, | ||
| 80 | { } | ||
| 81 | }; | ||
| 82 | |||
| 62 | static const struct apple_key_translation apple_fn_keys[] = { | 83 | static const struct apple_key_translation apple_fn_keys[] = { |
| 63 | { KEY_BACKSPACE, KEY_DELETE }, | 84 | { KEY_BACKSPACE, KEY_DELETE }, |
| 64 | { KEY_ENTER, KEY_INSERT }, | 85 | { KEY_ENTER, KEY_INSERT }, |
| @@ -157,10 +178,15 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input, | |||
| 157 | if (fnmode) { | 178 | if (fnmode) { |
| 158 | int do_translate; | 179 | int do_translate; |
| 159 | 180 | ||
| 160 | trans = apple_find_translation((hid->product < 0x21d || | 181 | if(hid->product >= USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI && |
| 161 | hid->product >= 0x300) ? | 182 | hid->product <= USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS) { |
| 162 | powerbook_fn_keys : apple_fn_keys, | 183 | trans = apple_find_translation(macbookair_fn_keys, usage->code); |
| 163 | usage->code); | 184 | } else if (hid->product < 0x21d || hid->product >= 0x300) { |
| 185 | trans = apple_find_translation(powerbook_fn_keys, usage->code); | ||
| 186 | } else { | ||
| 187 | trans = apple_find_translation(apple_fn_keys, usage->code); | ||
| 188 | } | ||
| 189 | |||
| 164 | if (trans) { | 190 | if (trans) { |
| 165 | if (test_bit(usage->code, asc->pressed_fn)) | 191 | if (test_bit(usage->code, asc->pressed_fn)) |
| 166 | do_translate = 1; | 192 | do_translate = 1; |
| @@ -440,6 +466,18 @@ static const struct hid_device_id apple_devices[] = { | |||
| 440 | .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD }, | 466 | .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD }, |
| 441 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS), | 467 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS), |
| 442 | .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, | 468 | .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, |
| 469 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI), | ||
| 470 | .driver_data = APPLE_HAS_FN }, | ||
| 471 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ISO), | ||
| 472 | .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD }, | ||
| 473 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_JIS), | ||
| 474 | .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, | ||
| 475 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI), | ||
| 476 | .driver_data = APPLE_HAS_FN }, | ||
| 477 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO), | ||
| 478 | .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD }, | ||
| 479 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS), | ||
| 480 | .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, | ||
| 443 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI), | 481 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI), |
| 444 | .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN }, | 482 | .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN }, |
| 445 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO), | 483 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO), |
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index b3393e17b375..53ac909e2fff 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c | |||
| @@ -1276,6 +1276,12 @@ static const struct hid_device_id hid_blacklist[] = { | |||
| 1276 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI) }, | 1276 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI) }, |
| 1277 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ISO) }, | 1277 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ISO) }, |
| 1278 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS) }, | 1278 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS) }, |
| 1279 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI) }, | ||
| 1280 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ISO) }, | ||
| 1281 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_JIS) }, | ||
| 1282 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI) }, | ||
| 1283 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO) }, | ||
| 1284 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS) }, | ||
| 1279 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI) }, | 1285 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI) }, |
| 1280 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO) }, | 1286 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO) }, |
| 1281 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) }, | 1287 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) }, |
| @@ -1757,6 +1763,12 @@ static const struct hid_device_id hid_mouse_ignore_list[] = { | |||
| 1757 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI) }, | 1763 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI) }, |
| 1758 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ISO) }, | 1764 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ISO) }, |
| 1759 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS) }, | 1765 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS) }, |
| 1766 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI) }, | ||
| 1767 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ISO) }, | ||
| 1768 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_JIS) }, | ||
| 1769 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI) }, | ||
| 1770 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO) }, | ||
| 1771 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS) }, | ||
| 1760 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) }, | 1772 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) }, |
| 1761 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) }, | 1773 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) }, |
| 1762 | { } | 1774 | { } |
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h index 68114dbcd895..104b9f9a4c0b 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h | |||
| @@ -97,6 +97,12 @@ | |||
| 97 | #define USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI 0x0236 | 97 | #define USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI 0x0236 |
| 98 | #define USB_DEVICE_ID_APPLE_WELLSPRING3_ISO 0x0237 | 98 | #define USB_DEVICE_ID_APPLE_WELLSPRING3_ISO 0x0237 |
| 99 | #define USB_DEVICE_ID_APPLE_WELLSPRING3_JIS 0x0238 | 99 | #define USB_DEVICE_ID_APPLE_WELLSPRING3_JIS 0x0238 |
| 100 | #define USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI 0x023f | ||
| 101 | #define USB_DEVICE_ID_APPLE_WELLSPRING4_ISO 0x0240 | ||
| 102 | #define USB_DEVICE_ID_APPLE_WELLSPRING4_JIS 0x0241 | ||
| 103 | #define USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI 0x0242 | ||
| 104 | #define USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO 0x0243 | ||
| 105 | #define USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS 0x0244 | ||
| 100 | #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI 0x0239 | 106 | #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI 0x0239 |
| 101 | #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO 0x023a | 107 | #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO 0x023a |
| 102 | #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS 0x023b | 108 | #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS 0x023b |
