-
Notifications
You must be signed in to change notification settings - Fork 0
Fn key and Fn lock feature
Christian edited this page May 13, 2026
·
29 revisions
Note
This page is dedicated exclusively to ThinkPads!
- [2026-05-12] L440: BIOS 1.93 / ECP 1.11 (tested by killerbees19)
| Stock BIOS settings | Bit 0 @ 0x51 Bit 0 @ 0xc2 Bit 0 @ 0xc6 |
Bit 7 @ 0xc5 |
Bit 4 @ 0x0a Bit 4 @ 0x51 (1) default value (2) after Fn+Esc |
FnLk LED state (1) default state (2) after Fn+Esc (3) Fn keypress |
Notes |
|---|---|---|---|---|---|
sticky_fn=0 f1_to_f12_as_primary=0
|
0 | 0 | 0 / 1 | off / on / -
|
LED is off if hotkeys are active. LED is on if F1-F12 are active. Not affected by Fn keypress. |
sticky_fn=0 f1_to_f12_as_primary=1
|
0 | 1 | 0 / 1 | off / on / -
|
LED is on if hotkeys are active. LED is off if F1-F12 are active. Not affected by Fn keypress. |
sticky_fn=1 f1_to_f12_as_primary=0
|
1 | 0 | 0 / -
|
off / - / on
|
LED is always off by default. LED is on while Fn key is active. Fn+Esc is ignored! |
sticky_fn=1 f1_to_f12_as_primary=1
|
1 | 1 | 0 / -
|
off / - / on
|
LED is always off by default. LED is on while Fn key is active. Fn+Esc is ignored! |
- [2026-05-08] T440p: BIOS 2.56 / ECP 1.13 (tested by killerbees19)
- [2026-05-08] T450s: BIOS 1.37 / ECP 1.04 (tested by killerbees19)
- [2026-05-13] X1 Carbon Gen 9: BIOS 1.77 / ECP 1.37
| Stock BIOS settings |
Bit 3 @ 0x00
|
Bit 4 @ 0x03
|
Bits @ 0x09
|
Bit 3 @ 0x3b (1) default value (2) after Fn+Esc |
FnLk LED state (1) default state (2) after Fn+Esc (3) Fn keypress |
Notes |
|---|---|---|---|---|---|---|
sticky_fn=0 f1_to_f12_as_primary=0
|
0 | 0 | 0x08 |
0 / 1 | off / on / -
|
LED is off if hotkeys are active. LED is on if F1-F12 are active. Not affected by Fn keypress. |
sticky_fn=0 f1_to_f12_as_primary=1
|
0 | 0 | 0x04 |
0 / 1 | off / on / -
|
LED is on if hotkeys are active. LED is off if F1-F12 are active. Not affected by Fn keypress. |
sticky_fn=1 f1_to_f12_as_primary=0
|
1 | 1 | 0x08 |
0 / -
|
off / - / on
|
LED is always off by default. LED is on while Fn key is active. Fn+Esc is ignored! |
sticky_fn=1 f1_to_f12_as_primary=1
|
1 | 1 | 0x04 |
0 / -
|
off / - / on
|
LED is always off by default. LED is on while Fn key is active. Fn+Esc is ignored! |
| Test Case (T440p) |
Bit 3 @ 0x00
|
Bit 4 @ 0x03
|
Bits @ 0x09
|
Bit 3 @ 0x3b
|
Sticky Fn |
FnLk LED |
F1-F12 mapping |
Notes |
|---|---|---|---|---|---|---|---|---|
| cold boot (init) | 0 | 0 | 0x08 |
0 | off | off | hotkeys | - |
0x04 > 0x09
|
0 | 0 | 0x04 |
0 | off | off | primary | switched like BIOS |
| Fn+Esc pressed | 0 | 0 | 0x04 |
1 | off | on | hotkeys | switched with Fn+Esc |
0xd4 > 0x03
|
0 | 1 | 0x04 |
1 | off | off | hotkeys | LED is always off (except while pressing Fn) |
| Fn+Esc pressed | 0 | 1 | 0x04 |
0 | off | off | primary | LED is always off (except while pressing Fn) |
0xae > 0x00
|
1 | 1 | 0x04 |
0 | on | off | primary | LED represents sticky_fn state |
0xc4 > 0x03
|
1 | 0 | 0x04 |
0 | on | off | primary | LED is always off |
| Fn+Esc pressed | 1 | 0 | 0x04 |
1 | on | on | hotkeys | LED is always on |
0x08 > 0x09
|
1 | 0 | 0x08 |
1 | on | on | primary | LED is always on |
0x10 > 0x3b
|
1 | 0 | 0x08 |
0 | on | off | hotkeys | LED is always off |
Bits 0-1 in 0x0e are obviously reserved for sticky Fn operation! (Tested on T440p.)
-
0x0: Fn key not pressed -
0x1: Fn key pressed (pressed once; waiting for another scancode) -
0x2: Fn key sticky (pressed twice; waiting until pressed again)
- Bit 3 @
0x00: sticky_fn - Bit 3 @
0x3b: f1_to_f12_as_primary (!) - Bit 4 @
0xce: fn_ctrl_swap
- Bit 3 @
0x00: unchanged (sticky_fn) - Bit 4 @
0x03: add Sticky FnLock LED support - Bit 2-3 @
0x09: change f1_to_f12_as_primary EC RAM flag - Bit 3 @
0x3b: not used anymore (reserved for physical Fn+Esc action!) - Bit 4 @
0xce: unchanged (fn_ctrl_swap)
- CB:92601 ("ec/lenovo/h8: Implement FnLock LED")
- CB:92604 ("ec/lenovo/h8: Fix 'f1_to_f12_as_primary' EC RAM registers")
CB:92605 ("[ABANDONED] ec/lenovo/h8: Implement FnLock LED")
Tested with branch fnx/builds/26.03+fnx2 on T440p, with CB:92604/CB:92601/CB:92602.
| nvramtool settings |
Bit 3 @ 0x00
|
Bit 4 @ 0x03
|
Bits @ 0x09
|
Bit 3 @ 0x3b (1) default value (2) after Fn+Esc |
FnLk LED state (1) default state (2) after Fn+Esc (3) Fn keypress |
Notes |
|---|---|---|---|---|---|---|
sticky_fn=0 f1_to_f12_as_primary=0
|
0 | 0 | 0x09 |
0 / 1 | off / on / -
|
LED is off if hotkeys are active. LED is on if F1-F12 are active. Not affected by Fn keypress. |
sticky_fn=0 f1_to_f12_as_primary=1
|
0 | 0 | 0x05 |
0 / 1 | off / on / -
|
LED is on if hotkeys are active. LED is off if F1-F12 are active. Not affected by Fn keypress. |
sticky_fn=1 f1_to_f12_as_primary=0
|
1 | 1 | 0x09 |
0 / 1 | off / off / on | LED is always off by default. LED is on while Fn key is active. Fn+Esc is not ignored! |
sticky_fn=1 f1_to_f12_as_primary=1
|
1 | 1 | 0x05 |
0 / 1 | off / off / on | LED is always off by default. LED is on while Fn key is active. Fn+Esc is not ignored! |
Result: New behaviour matches stock BIOS. However, Fn+Esc is functional with coreboot while sticky_fn=1 is enabled! (It's ignored with stock BIOS.)
- CB:51179 by Jamal Wright ("T440P: Enable FN Lock Inversion")
ec-research wiki