ThinkPad Edge E145 Backlight Brightness Issue
The backlight brightness can not be adjusted with backlight hotkeys while a indicator will be shown on the top left conner of screen. When I plug in and out a power cable, the backlight brightness is getting brighter and darker.
standard ACPI backlight interface
Standard ACPI backlight interface is in /sys/class/backlight/acpi_video0 directory. But, this does not work.
$ echo 50 | sudo tee /sys/class/backlight/acpi_video0/brightness
This interface can be disabled by kernel option in /etc/default/grub.
GRUB_CMDLINE_LINUX_DEFAULT="acpi_backlight=vendor"
fglrx
My video card can be checked with lspci command:
$ lspci | grep Radeon
00:01.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Kabini [Radeon HD 8240]
This page http://www.x.org/wiki/Projects/Drivers/ lists X.Org video drivers. Radeon has following choices:
- fglrx
- radeon
- fbdev
- vesa
The driver being used can be checked with xorg’s log:
$ grep -i "\bconnected" /var/log/Xorg.0.log
[ 75.225] (II) fglrx(0): Connected Display0: LVDS
[ 75.230] (II) fglrx(0): Output LVDS connected
[ 75.231] (II) fglrx(0): Adapter AMD Radeon HD 8240 has 2 configurable heads and 1 displays connected.
fglrx is used.
The X.org video driver fglrx requires a kernel driver fglrx, which has the same name. The kernel driver fglrx can be checked with lsmod command:
$ lsmod | grep fglrx
fglrx 8081247 53
amd_iommu_v2 19227 1 fglrx
The version of loaded fglrx kernel driver can be checked with dmesg command:
$ dmesg | grep "fglrx.*module loaded"
[ 19.306266] <6>[fglrx] module loaded - fglrx 13.35.5 [Jan 29 2014] with 1 minors
Unfortunately the kernel driver fglrx does not exposes a interface under /sys/class/backlight directory.
Catalyst Control Center (amdcccle) has a setting of PowerPlay which controls backlight brightness in case of plugging power cabel in and out.
This mode can be switched by aticonfig command.
The aticonfig will fail if /etc/X11/xorg.conf file does not exist.
The command sudo aticonfig --initial
should be invoked as the first time.
I created a script based on /usr/share/doc/fglrx/examples/etc/acpi/ati-powermode.sh.
#!/bin/bash
low=false
has_pplib=false
if [[ "$1" == -l ]]; then
low=true
fi
# If PPLIB is enabled
/usr/bin/aticonfig --pplib-cmd="get version" | grep -q PPLIB
if [[ $? == 0 ]]; then
has_pplib=true
fi
if $low; then
echo "Low power"
if $has_pplib; then
/usr/bin/aticonfig --pplib-cmd="notify psrc dc"
else
/usr/bin/aticonfig --set-powerstate=1 --effective=now
fi
else
echo "high power"
if $has_pplib; then
/usr/bin/aticonfig --pplib-cmd="notify psrc ac"
else
/usr/bin/aticonfig --set-powerstate=3 --effective=now
fi
fi
This script can turn backligh on and off, while this is not a ideal solution.
radeon
Unfortunately, a video driver radeon does not support Kabini (Radeon HD 8240) at the moment. On the other hand, the same name kernel driver radeon can handle backlight. The kernel driver radeon is blacklisted by fglrx. To use radeon, fglrx should be uninstalled.
$ sudo apt-get remove fglrx\*
The radeon kernel driver will be loaded after rebooting. The interface under /sys/class/backlight/radeon_bl0 directory works fine.
$ echo 50 | sudo tee /sys/class/backlight/radeon_bl0/brightness
50
$ echo 255 | sudo tee /sys/class/backlight/radeon_bl0/brightness
255
X.org selects vesa as the default video driver. This does not work. Specify fbdev in /etc/X11/xorg.conf.
Section "Device"
Identifier "Card1"
Driver "fbdev"
BusID "PCI:0:1:0"
EndSection
thinkpad_acpi
The kernel driver thinkpad_acpi is another backlight driver.
To clarify problem, I blacklisted fglrx and radeon.
$ sudo tee /etc/modprobe.d/blacklist-fbdev.conf <<EOF
blacklist fglrx
blacklist radeon
EOF
If the standard ACPI backlight interface is available, thinkpad_acpi disables its backlight control. Edit kernel option to disable it.
GRUB_CMDLINE_LINUX_DEFAULT="acpi_backlight=vendor"
Invoke sudo update-grub and reboot. thinkpad_acpi reports following unsupported message.
$ dmesg | grep thinkpad
[ 13.271147] thinkpad_acpi: ThinkPad ACPI Extras v0.25
[ 13.271157] thinkpad_acpi: http://ibm-acpi.sf.net/
[ 13.271161] thinkpad_acpi: ThinkPad BIOS HSET56WW (2.01 ), EC unknown
[ 13.271165] thinkpad_acpi: Lenovo ThinkPad Edge E145, model 20BCCTO1WW
[ 13.272291] thinkpad_acpi: Unsupported brightness interface, please contact ibm-acpi-devel@lists.sourceforge.net
[ 13.282550] thinkpad_acpi: radio switch found; radios are enabled
[ 13.282586] thinkpad_acpi: possible tablet mode switch found; ThinkPad in laptop mode
[ 13.294500] thinkpad_acpi: Console audio control enabled, mode: monitor (read only)
[ 13.300765] input: ThinkPad Extra Buttons as /devices/platform/thinkpad_acpi/input/input13
Added a kernel option acpi_osi=Linux.
GRUB_CMDLINE_LINUX_DEFAULT="acpi_osi=Linux acpi_backlight=vendor"
And, reboot.
$ dmesg | grep thinkpad
[ 11.975891] thinkpad_acpi: ThinkPad ACPI Extras v0.25
[ 11.975898] thinkpad_acpi: http://ibm-acpi.sf.net/
[ 11.975902] thinkpad_acpi: ThinkPad BIOS HSET56WW (2.01 ), EC unknown
[ 11.975905] thinkpad_acpi: Lenovo ThinkPad Edge E145, model 20BCCTO1WW
[ 12.003505] thinkpad_acpi: detected a 16-level brightness capable ThinkPad
[ 12.012390] thinkpad_acpi: radio switch found; radios are enabled
[ 12.012424] thinkpad_acpi: possible tablet mode switch found; ThinkPad in laptop mode
[ 12.098052] thinkpad_acpi: Standard ACPI backlight interface not available, thinkpad_acpi native brightness control enabled
[ 12.100469] thinkpad_acpi: Console audio control enabled, mode: monitor (read only)
[ 12.134546] input: ThinkPad Extra Buttons as /devices/platform/thinkpad_acpi/input/input11
This message looks good. But, interface under /sys/class/backlight/thinkpad_screen directory does not work expectedly.