42
42
#define APPLE_BACKLIGHT_CTL BIT(10)
43
43
#define APPLE_IS_NON_APPLE BIT(11)
44
44
#define APPLE_MAGIC_BACKLIGHT BIT(12)
45
+ #define APPLE_DISABLE_FKEYS BIT(13)
45
46
46
- #define APPLE_FLAG_FKEY 0x01
47
+ #define APPLE_FLAG_FKEY BIT(0)
48
+ #define APPLE_FLAG_TB_FKEY BIT(1)
47
49
48
50
#define HID_COUNTRY_INTERNATIONAL_ISO 13
49
51
#define APPLE_BATTERY_TIMEOUT_MS 60000
55
57
static unsigned int fnmode = 3 ;
56
58
module_param (fnmode , uint , 0644 );
57
59
MODULE_PARM_DESC (fnmode , "Mode of fn key on Apple keyboards (0 = disabled, "
58
- "1 = fkeyslast, 2 = fkeysfirst, [3] = auto)" );
60
+ "1 = fkeyslast, 2 = fkeysfirst, [3] = auto, 4 = fkeysdisabled )" );
59
61
60
62
static int iso_layout = -1 ;
61
63
module_param (iso_layout , int , 0644 );
@@ -121,7 +123,7 @@ struct apple_sc {
121
123
struct apple_key_translation {
122
124
u16 from ;
123
125
u16 to ;
124
- u8 flags ;
126
+ unsigned long flags ;
125
127
};
126
128
127
129
static const struct apple_key_translation magic_keyboard_alu_fn_keys [] = {
@@ -211,19 +213,19 @@ static const struct apple_key_translation macbookair_fn_keys[] = {
211
213
static const struct apple_key_translation macbookpro_no_esc_fn_keys [] = {
212
214
{ KEY_BACKSPACE , KEY_DELETE },
213
215
{ KEY_ENTER , KEY_INSERT },
214
- { KEY_GRAVE , KEY_ESC },
215
- { KEY_1 , KEY_F1 },
216
- { KEY_2 , KEY_F2 },
217
- { KEY_3 , KEY_F3 },
218
- { KEY_4 , KEY_F4 },
219
- { KEY_5 , KEY_F5 },
220
- { KEY_6 , KEY_F6 },
221
- { KEY_7 , KEY_F7 },
222
- { KEY_8 , KEY_F8 },
223
- { KEY_9 , KEY_F9 },
224
- { KEY_0 , KEY_F10 },
225
- { KEY_MINUS , KEY_F11 },
226
- { KEY_EQUAL , KEY_F12 },
216
+ { KEY_GRAVE , KEY_ESC , APPLE_FLAG_TB_FKEY },
217
+ { KEY_1 , KEY_F1 , APPLE_FLAG_TB_FKEY },
218
+ { KEY_2 , KEY_F2 , APPLE_FLAG_TB_FKEY },
219
+ { KEY_3 , KEY_F3 , APPLE_FLAG_TB_FKEY },
220
+ { KEY_4 , KEY_F4 , APPLE_FLAG_TB_FKEY },
221
+ { KEY_5 , KEY_F5 , APPLE_FLAG_TB_FKEY },
222
+ { KEY_6 , KEY_F6 , APPLE_FLAG_TB_FKEY },
223
+ { KEY_7 , KEY_F7 , APPLE_FLAG_TB_FKEY },
224
+ { KEY_8 , KEY_F8 , APPLE_FLAG_TB_FKEY },
225
+ { KEY_9 , KEY_F9 , APPLE_FLAG_TB_FKEY },
226
+ { KEY_0 , KEY_F10 , APPLE_FLAG_TB_FKEY },
227
+ { KEY_MINUS , KEY_F11 , APPLE_FLAG_TB_FKEY },
228
+ { KEY_EQUAL , KEY_F12 , APPLE_FLAG_TB_FKEY },
227
229
{ KEY_UP , KEY_PAGEUP },
228
230
{ KEY_DOWN , KEY_PAGEDOWN },
229
231
{ KEY_LEFT , KEY_HOME },
@@ -234,18 +236,18 @@ static const struct apple_key_translation macbookpro_no_esc_fn_keys[] = {
234
236
static const struct apple_key_translation macbookpro_dedicated_esc_fn_keys [] = {
235
237
{ KEY_BACKSPACE , KEY_DELETE },
236
238
{ KEY_ENTER , KEY_INSERT },
237
- { KEY_1 , KEY_F1 },
238
- { KEY_2 , KEY_F2 },
239
- { KEY_3 , KEY_F3 },
240
- { KEY_4 , KEY_F4 },
241
- { KEY_5 , KEY_F5 },
242
- { KEY_6 , KEY_F6 },
243
- { KEY_7 , KEY_F7 },
244
- { KEY_8 , KEY_F8 },
245
- { KEY_9 , KEY_F9 },
246
- { KEY_0 , KEY_F10 },
247
- { KEY_MINUS , KEY_F11 },
248
- { KEY_EQUAL , KEY_F12 },
239
+ { KEY_1 , KEY_F1 , APPLE_FLAG_TB_FKEY },
240
+ { KEY_2 , KEY_F2 , APPLE_FLAG_TB_FKEY },
241
+ { KEY_3 , KEY_F3 , APPLE_FLAG_TB_FKEY },
242
+ { KEY_4 , KEY_F4 , APPLE_FLAG_TB_FKEY },
243
+ { KEY_5 , KEY_F5 , APPLE_FLAG_TB_FKEY },
244
+ { KEY_6 , KEY_F6 , APPLE_FLAG_TB_FKEY },
245
+ { KEY_7 , KEY_F7 , APPLE_FLAG_TB_FKEY },
246
+ { KEY_8 , KEY_F8 , APPLE_FLAG_TB_FKEY },
247
+ { KEY_9 , KEY_F9 , APPLE_FLAG_TB_FKEY },
248
+ { KEY_0 , KEY_F10 , APPLE_FLAG_TB_FKEY },
249
+ { KEY_MINUS , KEY_F11 , APPLE_FLAG_TB_FKEY },
250
+ { KEY_EQUAL , KEY_F12 , APPLE_FLAG_TB_FKEY },
249
251
{ KEY_UP , KEY_PAGEUP },
250
252
{ KEY_DOWN , KEY_PAGEDOWN },
251
253
{ KEY_LEFT , KEY_HOME },
@@ -424,7 +426,12 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input,
424
426
unsigned int real_fnmode ;
425
427
426
428
if (fnmode == 3 ) {
427
- real_fnmode = (asc -> quirks & APPLE_IS_NON_APPLE ) ? 2 : 1 ;
429
+ if (asc -> quirks & APPLE_DISABLE_FKEYS )
430
+ real_fnmode = 4 ;
431
+ else if (asc -> quirks & APPLE_IS_NON_APPLE )
432
+ real_fnmode = 2 ;
433
+ else
434
+ real_fnmode = 1 ;
428
435
} else {
429
436
real_fnmode = fnmode ;
430
437
}
@@ -534,8 +541,16 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input,
534
541
do_translate = asc -> fn_on ;
535
542
break ;
536
543
default :
537
- /* should never happen */
544
+ /* case 4 */
545
+ do_translate = false;
546
+ }
547
+ } else if (trans -> flags & APPLE_FLAG_TB_FKEY ) {
548
+ switch (real_fnmode ) {
549
+ case 4 :
538
550
do_translate = false;
551
+ break ;
552
+ default :
553
+ do_translate = asc -> fn_on ;
539
554
}
540
555
} else {
541
556
do_translate = asc -> fn_on ;
@@ -1139,19 +1154,22 @@ static const struct hid_device_id apple_devices[] = {
1139
1154
{ HID_USB_DEVICE (USB_VENDOR_ID_APPLE , USB_DEVICE_ID_APPLE_WELLSPRINGT2_J140K ),
1140
1155
.driver_data = APPLE_HAS_FN | APPLE_BACKLIGHT_CTL | APPLE_ISO_TILDE_QUIRK },
1141
1156
{ HID_USB_DEVICE (USB_VENDOR_ID_APPLE , USB_DEVICE_ID_APPLE_WELLSPRINGT2_J132 ),
1142
- .driver_data = APPLE_HAS_FN | APPLE_BACKLIGHT_CTL | APPLE_ISO_TILDE_QUIRK },
1157
+ .driver_data = APPLE_HAS_FN | APPLE_BACKLIGHT_CTL | APPLE_ISO_TILDE_QUIRK |
1158
+ APPLE_DISABLE_FKEYS },
1143
1159
{ HID_USB_DEVICE (USB_VENDOR_ID_APPLE , USB_DEVICE_ID_APPLE_WELLSPRINGT2_J680 ),
1144
- .driver_data = APPLE_HAS_FN | APPLE_BACKLIGHT_CTL | APPLE_ISO_TILDE_QUIRK },
1160
+ .driver_data = APPLE_HAS_FN | APPLE_BACKLIGHT_CTL | APPLE_ISO_TILDE_QUIRK |
1161
+ APPLE_DISABLE_FKEYS },
1145
1162
{ HID_USB_DEVICE (USB_VENDOR_ID_APPLE , USB_DEVICE_ID_APPLE_WELLSPRINGT2_J213 ),
1146
- .driver_data = APPLE_HAS_FN | APPLE_BACKLIGHT_CTL | APPLE_ISO_TILDE_QUIRK },
1163
+ .driver_data = APPLE_HAS_FN | APPLE_BACKLIGHT_CTL | APPLE_ISO_TILDE_QUIRK |
1164
+ APPLE_DISABLE_FKEYS },
1147
1165
{ HID_USB_DEVICE (USB_VENDOR_ID_APPLE , USB_DEVICE_ID_APPLE_WELLSPRINGT2_J214K ),
1148
- .driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK },
1166
+ .driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK | APPLE_DISABLE_FKEYS },
1149
1167
{ HID_USB_DEVICE (USB_VENDOR_ID_APPLE , USB_DEVICE_ID_APPLE_WELLSPRINGT2_J223 ),
1150
- .driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK },
1168
+ .driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK | APPLE_DISABLE_FKEYS },
1151
1169
{ HID_USB_DEVICE (USB_VENDOR_ID_APPLE , USB_DEVICE_ID_APPLE_WELLSPRINGT2_J230K ),
1152
1170
.driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK },
1153
1171
{ HID_USB_DEVICE (USB_VENDOR_ID_APPLE , USB_DEVICE_ID_APPLE_WELLSPRINGT2_J152F ),
1154
- .driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK },
1172
+ .driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK | APPLE_DISABLE_FKEYS },
1155
1173
{ HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_APPLE , USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI ),
1156
1174
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
1157
1175
{ HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_APPLE , USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO ),
0 commit comments