mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 17:13:52 +02:00
HID: apple: add fnmode=4 to disable translation of fkeys and make it default on Macs with Touch Bar
The kernel now has a dedicated driver for Touch Bar on Macs. Since function keys can now be accessed via the Touch Bar, emulating them using non standard ways like Fn+1=F1 should be avoided. This patch adds an fnmode=4 which ignores only the Function key translation, and is enabled by default on MacBook Pros with a Touch Bar. Signed-off-by: Aditya Garg <gargaditya08@live.com> Signed-off-by: Jiri Kosina <jkosina@suse.com>
This commit is contained in:
parent
4604baafaa
commit
a23ff6080e
|
|
@ -42,8 +42,10 @@
|
|||
#define APPLE_BACKLIGHT_CTL BIT(10)
|
||||
#define APPLE_IS_NON_APPLE BIT(11)
|
||||
#define APPLE_MAGIC_BACKLIGHT BIT(12)
|
||||
#define APPLE_DISABLE_FKEYS BIT(13)
|
||||
|
||||
#define APPLE_FLAG_FKEY 0x01
|
||||
#define APPLE_FLAG_FKEY BIT(0)
|
||||
#define APPLE_FLAG_TB_FKEY BIT(1)
|
||||
|
||||
#define HID_COUNTRY_INTERNATIONAL_ISO 13
|
||||
#define APPLE_BATTERY_TIMEOUT_MS 60000
|
||||
|
|
@ -55,7 +57,7 @@
|
|||
static unsigned int fnmode = 3;
|
||||
module_param(fnmode, uint, 0644);
|
||||
MODULE_PARM_DESC(fnmode, "Mode of fn key on Apple keyboards (0 = disabled, "
|
||||
"1 = fkeyslast, 2 = fkeysfirst, [3] = auto)");
|
||||
"1 = fkeyslast, 2 = fkeysfirst, [3] = auto, 4 = fkeysdisabled)");
|
||||
|
||||
static int iso_layout = -1;
|
||||
module_param(iso_layout, int, 0644);
|
||||
|
|
@ -121,7 +123,7 @@ struct apple_sc {
|
|||
struct apple_key_translation {
|
||||
u16 from;
|
||||
u16 to;
|
||||
u8 flags;
|
||||
unsigned long flags;
|
||||
};
|
||||
|
||||
static const struct apple_key_translation magic_keyboard_alu_fn_keys[] = {
|
||||
|
|
@ -211,19 +213,19 @@ static const struct apple_key_translation macbookair_fn_keys[] = {
|
|||
static const struct apple_key_translation macbookpro_no_esc_fn_keys[] = {
|
||||
{ KEY_BACKSPACE, KEY_DELETE },
|
||||
{ KEY_ENTER, KEY_INSERT },
|
||||
{ KEY_GRAVE, KEY_ESC },
|
||||
{ KEY_1, KEY_F1 },
|
||||
{ KEY_2, KEY_F2 },
|
||||
{ KEY_3, KEY_F3 },
|
||||
{ KEY_4, KEY_F4 },
|
||||
{ KEY_5, KEY_F5 },
|
||||
{ KEY_6, KEY_F6 },
|
||||
{ KEY_7, KEY_F7 },
|
||||
{ KEY_8, KEY_F8 },
|
||||
{ KEY_9, KEY_F9 },
|
||||
{ KEY_0, KEY_F10 },
|
||||
{ KEY_MINUS, KEY_F11 },
|
||||
{ KEY_EQUAL, KEY_F12 },
|
||||
{ KEY_GRAVE, KEY_ESC, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_1, KEY_F1, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_2, KEY_F2, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_3, KEY_F3, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_4, KEY_F4, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_5, KEY_F5, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_6, KEY_F6, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_7, KEY_F7, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_8, KEY_F8, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_9, KEY_F9, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_0, KEY_F10, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_MINUS, KEY_F11, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_EQUAL, KEY_F12, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_UP, KEY_PAGEUP },
|
||||
{ KEY_DOWN, KEY_PAGEDOWN },
|
||||
{ KEY_LEFT, KEY_HOME },
|
||||
|
|
@ -234,18 +236,18 @@ static const struct apple_key_translation macbookpro_no_esc_fn_keys[] = {
|
|||
static const struct apple_key_translation macbookpro_dedicated_esc_fn_keys[] = {
|
||||
{ KEY_BACKSPACE, KEY_DELETE },
|
||||
{ KEY_ENTER, KEY_INSERT },
|
||||
{ KEY_1, KEY_F1 },
|
||||
{ KEY_2, KEY_F2 },
|
||||
{ KEY_3, KEY_F3 },
|
||||
{ KEY_4, KEY_F4 },
|
||||
{ KEY_5, KEY_F5 },
|
||||
{ KEY_6, KEY_F6 },
|
||||
{ KEY_7, KEY_F7 },
|
||||
{ KEY_8, KEY_F8 },
|
||||
{ KEY_9, KEY_F9 },
|
||||
{ KEY_0, KEY_F10 },
|
||||
{ KEY_MINUS, KEY_F11 },
|
||||
{ KEY_EQUAL, KEY_F12 },
|
||||
{ KEY_1, KEY_F1, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_2, KEY_F2, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_3, KEY_F3, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_4, KEY_F4, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_5, KEY_F5, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_6, KEY_F6, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_7, KEY_F7, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_8, KEY_F8, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_9, KEY_F9, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_0, KEY_F10, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_MINUS, KEY_F11, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_EQUAL, KEY_F12, APPLE_FLAG_TB_FKEY },
|
||||
{ KEY_UP, KEY_PAGEUP },
|
||||
{ KEY_DOWN, KEY_PAGEDOWN },
|
||||
{ KEY_LEFT, KEY_HOME },
|
||||
|
|
@ -424,7 +426,12 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input,
|
|||
unsigned int real_fnmode;
|
||||
|
||||
if (fnmode == 3) {
|
||||
real_fnmode = (asc->quirks & APPLE_IS_NON_APPLE) ? 2 : 1;
|
||||
if (asc->quirks & APPLE_DISABLE_FKEYS)
|
||||
real_fnmode = 4;
|
||||
else if (asc->quirks & APPLE_IS_NON_APPLE)
|
||||
real_fnmode = 2;
|
||||
else
|
||||
real_fnmode = 1;
|
||||
} else {
|
||||
real_fnmode = fnmode;
|
||||
}
|
||||
|
|
@ -534,9 +541,17 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input,
|
|||
do_translate = asc->fn_on;
|
||||
break;
|
||||
default:
|
||||
/* should never happen */
|
||||
/* case 4 */
|
||||
do_translate = false;
|
||||
}
|
||||
} else if (trans->flags & APPLE_FLAG_TB_FKEY) {
|
||||
switch (real_fnmode) {
|
||||
case 4:
|
||||
do_translate = false;
|
||||
break;
|
||||
default:
|
||||
do_translate = asc->fn_on;
|
||||
}
|
||||
} else {
|
||||
do_translate = asc->fn_on;
|
||||
}
|
||||
|
|
@ -1139,19 +1154,22 @@ static const struct hid_device_id apple_devices[] = {
|
|||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRINGT2_J140K),
|
||||
.driver_data = APPLE_HAS_FN | APPLE_BACKLIGHT_CTL | APPLE_ISO_TILDE_QUIRK },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRINGT2_J132),
|
||||
.driver_data = APPLE_HAS_FN | APPLE_BACKLIGHT_CTL | APPLE_ISO_TILDE_QUIRK },
|
||||
.driver_data = APPLE_HAS_FN | APPLE_BACKLIGHT_CTL | APPLE_ISO_TILDE_QUIRK |
|
||||
APPLE_DISABLE_FKEYS },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRINGT2_J680),
|
||||
.driver_data = APPLE_HAS_FN | APPLE_BACKLIGHT_CTL | APPLE_ISO_TILDE_QUIRK },
|
||||
.driver_data = APPLE_HAS_FN | APPLE_BACKLIGHT_CTL | APPLE_ISO_TILDE_QUIRK |
|
||||
APPLE_DISABLE_FKEYS },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRINGT2_J213),
|
||||
.driver_data = APPLE_HAS_FN | APPLE_BACKLIGHT_CTL | APPLE_ISO_TILDE_QUIRK },
|
||||
.driver_data = APPLE_HAS_FN | APPLE_BACKLIGHT_CTL | APPLE_ISO_TILDE_QUIRK |
|
||||
APPLE_DISABLE_FKEYS },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRINGT2_J214K),
|
||||
.driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK },
|
||||
.driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK | APPLE_DISABLE_FKEYS },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRINGT2_J223),
|
||||
.driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK },
|
||||
.driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK | APPLE_DISABLE_FKEYS },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRINGT2_J230K),
|
||||
.driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRINGT2_J152F),
|
||||
.driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK },
|
||||
.driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK | APPLE_DISABLE_FKEYS },
|
||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI),
|
||||
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
|
||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO),
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user