Skip to content

ThinkLight vs. Keyboard Backlight

Christian edited this page May 23, 2026 · 8 revisions

Note

This page is dedicated exclusively to ThinkPads!

Backlit Keyboard Detection

Possible candidate: Bit 6 @ 0x34

Confirmed with X230/T440p/T450s!

ThinkPad T440p/T450s

Stock BIOS

Keyboard Backlight

Can be turned off (0) and on (1-2) via ACPI/sysfs, get/set/clear BIT(6)/BIT(7) with ectool -w 0x0d -z ... works.

  • sysfs: /sys/class/leds/tpacpi::kbd_backlight/brightness
  • acpi_call:
    • \_SB.PCI0.LPC.EC.HKEY.MLCS 0: Turns backlight off.
    • \_SB.PCI0.LPC.EC.HKEY.MLCS 1: Turns backlight on (low).
    • \_SB.PCI0.LPC.EC.HKEY.MLCS 2: Turns backlight on (high).
    • \_SB.PCI0.LPC.EC.HKEY.MLCG: Correct value (bits) returned...
      • 0x50200 = Backlight off
      • 0x50201 = Backlight on (low)
      • 0x50202 = Backlight on (high)

Coreboot (only T440p)

Without Patch (2026-04-24)

Keyboard Backlight

Broken, wrong ACPI/sysfs status and can't be controlled via ACPI/sysfs!

  • sysfs: /sys/class/leds/tpacpi::kbd_backlight/brightness (always 0)
  • acpi_call:
    • \_SB.PCI0.LPCB.EC.HKEY.MLCS 0: Nothing happens... (wrong bit in EC RAM toggled)
    • \_SB.PCI0.LPCB.EC.HKEY.MLCS 1: Nothing happens... (wrong bit in EC RAM toggled)
    • \_SB.PCI0.LPCB.EC.HKEY.MLCS 2: Nothing happens... (wrong bit in EC RAM toggled)
    • \_SB.PCI0.LPCB.EC.HKEY.MLCG: Wrong value (bits) returned...
      • 0x200 = Backlight off
      • 0x200 = Backlight on (low)
      • 0x200 = Backlight on (high)

With Patch (CB:92412)

Keyboard Backlight

Can be turned off (0) and on (1-2) via ACPI/sysfs, correct status reported.

  • sysfs: /sys/class/leds/tpacpi::kbd_backlight/brightness
  • acpi_call:
    • \_SB.PCI0.LPCB.EC.HKEY.MLCS 0: Turns backlight off.
    • \_SB.PCI0.LPCB.EC.HKEY.MLCS 1: Turns backlight on (low).
    • \_SB.PCI0.LPCB.EC.HKEY.MLCS 2: Turns backlight on (high).
    • \_SB.PCI0.LPCB.EC.HKEY.MLCG: Correct value (bits) returned...
      • 0x200 = Backlight off
      • 0x201 = Backlight on (low)
      • 0x202 = Backlight on (high)

ThinkPad X230

Either ThinkLight or Backlight, you can't use both at the same time! One disables the other, even when controlled directly via ectool.

Stock BIOS

BIOS Options

Config » Keyboard/Mouse » Keyboard Illumination Control

EC RAM address: 0x01 (bit 2-3 confirmed)

  • ThinkLight Only: 0x08 (bit 3)
  • Keyboard Backlight Only: 0x04 (bit 2)
  • Both: 0x00

Keyboard Backlight

Can be turned off (0) and on (1-2) via ACPI/sysfs, get/set/clear BIT(6)/BIT(7) with ectool -w 0x0d -z ... works.

  • sysfs: /sys/class/leds/tpacpi::kbd_backlight/brightness
  • acpi_call:
    • \_SB.PCI0.LPC.EC.HKEY.MLCS 0: Turns backlight off.
    • \_SB.PCI0.LPC.EC.HKEY.MLCS 1: Turns backlight on (low).
    • \_SB.PCI0.LPC.EC.HKEY.MLCS 2: Turns backlight on (high).
    • \_SB.PCI0.LPC.EC.HKEY.MLCG: Correct value (bits) returned...
      • 0x00 (0x50200?) = Backlight off
      • 0x01 (0x50201?) = Backlight on (low)
      • 0x02 (0x50202?) = Backlight on (high)
      • 0x10 (0x50210?) = ThinkLight (!) on

ThinkLight

Can be turned off via ACPI/sysfs, but not turned on?! However, correct status reported by all interfaces.

  • sysfs: /sys/class/leds/tpacpi::thinklight/brightness
  • acpi_call:
    • \_SB.PCI0.LPC.EC.KBLT: Correct value returned. (0x00/0x01)
    • \UCMS 13 (0x0d): Turns ThinkLight off!
    • \UCMS 12 (0x0c): Nothing happens...

But get/set/clear BIT(1) with ectool -w 0x3b -z ... works. Not an EC bug, looks like ACPI/SMM bug?

Coreboot

Without Patch (2026-04-24)

Keyboard Backlight

Broken, wrong ACPI/sysfs status and can't be controlled via ACPI/sysfs!

  • sysfs: /sys/class/leds/tpacpi::kbd_backlight/brightness (always 0 / only 1 with ThinkLight enabled)
  • acpi_call:
    • \_SB.PCI0.LPCB.EC.HKEY.MLCS 0: Nothing happens... (wrong bit in EC RAM toggled)
    • \_SB.PCI0.LPCB.EC.HKEY.MLCS 1: Nothing happens... (wrong bit in EC RAM toggled)
    • \_SB.PCI0.LPCB.EC.HKEY.MLCS 2: Nothing happens... (wrong bit in EC RAM toggled)
    • \_SB.PCI0.LPCB.EC.HKEY.MLCG: Wrong value (bits) returned...
      • 0x200 = Backlight off
      • 0x200 = Backlight on (low)
      • 0x200 = Backlight on (high)
      • 0x201 = ThinkLight (!) on
ThinkLight

Can be turned off/on via ACPI/sysfs, correct status reported.

  • sysfs: /sys/class/leds/tpacpi::thinklight/brightness
  • acpi_call:
    • \_SB.PCI0.LPC.EC.KBLT: Correct value returned. (0x00/0x01)
    • \UCMS 13 (0x0d): Turns ThinkLight off.
    • \UCMS 12 (0x0c): Turns ThinkLight on.

With Patch (CB:92412)

Keyboard Backlight

Can be turned off (0) and on (1-2) via ACPI/sysfs, correct status reported.

  • sysfs: /sys/class/leds/tpacpi::kbd_backlight/brightness
  • acpi_call:
    • \_SB.PCI0.LPCB.EC.HKEY.MLCS 0: Turns backlight off.
    • \_SB.PCI0.LPCB.EC.HKEY.MLCS 1: Turns backlight on (low).
    • \_SB.PCI0.LPCB.EC.HKEY.MLCS 2: Turns backlight on (high).
    • \_SB.PCI0.LPCB.EC.HKEY.MLCG: Correct value (bits) returned...
      • 0x200 = Backlight off
      • 0x201 = Backlight on (low)
      • 0x202 = Backlight on (high)
      • 0x210 = ThinkLight (!) on
ThinkLight

Can be turned off/on via ACPI/sysfs, correct status reported.

  • sysfs: /sys/class/leds/tpacpi::thinklight/brightness
  • acpi_call:
    • \_SB.PCI0.LPC.EC.KBLT: Correct value returned. (0x00/0x01)
    • \UCMS 13 (0x0d): Turns ThinkLight off.
    • \UCMS 12 (0x0c): Turns ThinkLight on.