Merge branch 'thinkpad-acpi' into release

This commit is contained in:
Len Brown 2009-04-05 01:42:09 -04:00
commit 336d63b8a3
3 changed files with 656 additions and 245 deletions

View file

@ -20,7 +20,8 @@ moved to the drivers/misc tree and renamed to thinkpad-acpi for kernel
kernel 2.6.29 and release 0.22. kernel 2.6.29 and release 0.22.
The driver is named "thinkpad-acpi". In some places, like module The driver is named "thinkpad-acpi". In some places, like module
names, "thinkpad_acpi" is used because of userspace issues. names and log messages, "thinkpad_acpi" is used because of userspace
issues.
"tpacpi" is used as a shorthand where "thinkpad-acpi" would be too "tpacpi" is used as a shorthand where "thinkpad-acpi" would be too
long due to length limitations on some Linux kernel versions. long due to length limitations on some Linux kernel versions.
@ -37,7 +38,7 @@ detailed description):
- ThinkLight on and off - ThinkLight on and off
- limited docking and undocking - limited docking and undocking
- UltraBay eject - UltraBay eject
- CMOS control - CMOS/UCMS control
- LED control - LED control
- ACPI sounds - ACPI sounds
- temperature sensors - temperature sensors
@ -46,6 +47,7 @@ detailed description):
- Volume control - Volume control
- Fan control and monitoring: fan speed, fan enable/disable - Fan control and monitoring: fan speed, fan enable/disable
- WAN enable and disable - WAN enable and disable
- UWB enable and disable
A compatibility table by model and feature is maintained on the web A compatibility table by model and feature is maintained on the web
site, http://ibm-acpi.sf.net/. I appreciate any success or failure site, http://ibm-acpi.sf.net/. I appreciate any success or failure
@ -53,7 +55,7 @@ reports, especially if they add to or correct the compatibility table.
Please include the following information in your report: Please include the following information in your report:
- ThinkPad model name - ThinkPad model name
- a copy of your DSDT, from /proc/acpi/dsdt - a copy of your ACPI tables, using the "acpidump" utility
- a copy of the output of dmidecode, with serial numbers - a copy of the output of dmidecode, with serial numbers
and UUIDs masked off and UUIDs masked off
- which driver features work and which don't - which driver features work and which don't
@ -66,17 +68,18 @@ Installation
------------ ------------
If you are compiling this driver as included in the Linux kernel If you are compiling this driver as included in the Linux kernel
sources, simply enable the CONFIG_THINKPAD_ACPI option, and optionally sources, look for the CONFIG_THINKPAD_ACPI Kconfig option.
enable the CONFIG_THINKPAD_ACPI_BAY option if you want the It is located on the menu path: "Device Drivers" -> "X86 Platform
thinkpad-specific bay functionality. Specific Device Drivers" -> "ThinkPad ACPI Laptop Extras".
Features Features
-------- --------
The driver exports two different interfaces to userspace, which can be The driver exports two different interfaces to userspace, which can be
used to access the features it provides. One is a legacy procfs-based used to access the features it provides. One is a legacy procfs-based
interface, which will be removed at some time in the distant future. interface, which will be removed at some time in the future. The other
The other is a new sysfs-based interface which is not complete yet. is a new sysfs-based interface which is not complete yet.
The procfs interface creates the /proc/acpi/ibm directory. There is a The procfs interface creates the /proc/acpi/ibm directory. There is a
file under that directory for each feature it supports. The procfs file under that directory for each feature it supports. The procfs
@ -111,15 +114,17 @@ The version of thinkpad-acpi's sysfs interface is exported by the driver
as a driver attribute (see below). as a driver attribute (see below).
Sysfs driver attributes are on the driver's sysfs attribute space, Sysfs driver attributes are on the driver's sysfs attribute space,
for 2.6.23 this is /sys/bus/platform/drivers/thinkpad_acpi/ and for 2.6.23+ this is /sys/bus/platform/drivers/thinkpad_acpi/ and
/sys/bus/platform/drivers/thinkpad_hwmon/ /sys/bus/platform/drivers/thinkpad_hwmon/
Sysfs device attributes are on the thinkpad_acpi device sysfs attribute Sysfs device attributes are on the thinkpad_acpi device sysfs attribute
space, for 2.6.23 this is /sys/devices/platform/thinkpad_acpi/. space, for 2.6.23+ this is /sys/devices/platform/thinkpad_acpi/.
Sysfs device attributes for the sensors and fan are on the Sysfs device attributes for the sensors and fan are on the
thinkpad_hwmon device's sysfs attribute space, but you should locate it thinkpad_hwmon device's sysfs attribute space, but you should locate it
looking for a hwmon device with the name attribute of "thinkpad". looking for a hwmon device with the name attribute of "thinkpad", or
better yet, through libsensors.
Driver version Driver version
-------------- --------------
@ -129,6 +134,7 @@ sysfs driver attribute: version
The driver name and version. No commands can be written to this file. The driver name and version. No commands can be written to this file.
Sysfs interface version Sysfs interface version
----------------------- -----------------------
@ -160,6 +166,7 @@ expect that an attribute might not be there, and deal with it properly
(an attribute not being there *is* a valid way to make it clear that a (an attribute not being there *is* a valid way to make it clear that a
feature is not available in sysfs). feature is not available in sysfs).
Hot keys Hot keys
-------- --------
@ -172,17 +179,14 @@ system. Enabling the hotkey functionality of thinkpad-acpi signals the
firmware that such a driver is present, and modifies how the ThinkPad firmware that such a driver is present, and modifies how the ThinkPad
firmware will behave in many situations. firmware will behave in many situations.
The driver enables the hot key feature automatically when loaded. The The driver enables the HKEY ("hot key") event reporting automatically
feature can later be disabled and enabled back at runtime. The driver when loaded, and disables it when it is removed.
will also restore the hot key feature to its previous state and mask
when it is unloaded.
When the hotkey feature is enabled and the hot key mask is set (see The driver will report HKEY events in the following format:
below), the driver will report HKEY events in the following format:
ibm/hotkey HKEY 00000080 0000xxxx ibm/hotkey HKEY 00000080 0000xxxx
Some of these events refer to hot key presses, but not all. Some of these events refer to hot key presses, but not all of them.
The driver will generate events over the input layer for hot keys and The driver will generate events over the input layer for hot keys and
radio switches, and over the ACPI netlink layer for other events. The radio switches, and over the ACPI netlink layer for other events. The
@ -214,13 +218,17 @@ procfs notes:
The following commands can be written to the /proc/acpi/ibm/hotkey file: The following commands can be written to the /proc/acpi/ibm/hotkey file:
echo enable > /proc/acpi/ibm/hotkey -- enable the hot keys feature
echo disable > /proc/acpi/ibm/hotkey -- disable the hot keys feature
echo 0xffffffff > /proc/acpi/ibm/hotkey -- enable all hot keys echo 0xffffffff > /proc/acpi/ibm/hotkey -- enable all hot keys
echo 0 > /proc/acpi/ibm/hotkey -- disable all possible hot keys echo 0 > /proc/acpi/ibm/hotkey -- disable all possible hot keys
... any other 8-hex-digit mask ... ... any other 8-hex-digit mask ...
echo reset > /proc/acpi/ibm/hotkey -- restore the original mask echo reset > /proc/acpi/ibm/hotkey -- restore the original mask
The following commands have been deprecated and will cause the kernel
to log a warning:
echo enable > /proc/acpi/ibm/hotkey -- does nothing
echo disable > /proc/acpi/ibm/hotkey -- returns an error
The procfs interface does not support NVRAM polling control. So as to The procfs interface does not support NVRAM polling control. So as to
maintain maximum bug-to-bug compatibility, it does not report any masks, maintain maximum bug-to-bug compatibility, it does not report any masks,
nor does it allow one to manipulate the hot key mask when the firmware nor does it allow one to manipulate the hot key mask when the firmware
@ -229,12 +237,9 @@ does not support masks at all, even if NVRAM polling is in use.
sysfs notes: sysfs notes:
hotkey_bios_enabled: hotkey_bios_enabled:
Returns the status of the hot keys feature when DEPRECATED, WILL BE REMOVED SOON.
thinkpad-acpi was loaded. Upon module unload, the hot
key feature status will be restored to this value.
0: hot keys were disabled Returns 0.
1: hot keys were enabled (unusual)
hotkey_bios_mask: hotkey_bios_mask:
Returns the hot keys mask when thinkpad-acpi was loaded. Returns the hot keys mask when thinkpad-acpi was loaded.
@ -242,13 +247,10 @@ sysfs notes:
to this value. to this value.
hotkey_enable: hotkey_enable:
Enables/disables the hot keys feature in the ACPI DEPRECATED, WILL BE REMOVED SOON.
firmware, and reports current status of the hot keys
feature. Has no effect on the NVRAM hot key polling
functionality.
0: disables the hot keys feature / feature disabled 0: returns -EPERM
1: enables the hot keys feature / feature enabled 1: does nothing
hotkey_mask: hotkey_mask:
bit mask to enable driver-handling (and depending on bit mask to enable driver-handling (and depending on
@ -618,6 +620,7 @@ For Lenovo models *with* ACPI backlight control:
and map them to KEY_BRIGHTNESS_UP and KEY_BRIGHTNESS_DOWN. Process and map them to KEY_BRIGHTNESS_UP and KEY_BRIGHTNESS_DOWN. Process
these keys on userspace somehow (e.g. by calling xbacklight). these keys on userspace somehow (e.g. by calling xbacklight).
Bluetooth Bluetooth
--------- ---------
@ -628,6 +631,9 @@ sysfs rfkill class: switch "tpacpi_bluetooth_sw"
This feature shows the presence and current state of a ThinkPad This feature shows the presence and current state of a ThinkPad
Bluetooth device in the internal ThinkPad CDC slot. Bluetooth device in the internal ThinkPad CDC slot.
If the ThinkPad supports it, the Bluetooth state is stored in NVRAM,
so it is kept across reboots and power-off.
Procfs notes: Procfs notes:
If Bluetooth is installed, the following commands can be used: If Bluetooth is installed, the following commands can be used:
@ -652,6 +658,7 @@ Sysfs notes:
rfkill controller switch "tpacpi_bluetooth_sw": refer to rfkill controller switch "tpacpi_bluetooth_sw": refer to
Documentation/rfkill.txt for details. Documentation/rfkill.txt for details.
Video output control -- /proc/acpi/ibm/video Video output control -- /proc/acpi/ibm/video
-------------------------------------------- --------------------------------------------
@ -693,11 +700,8 @@ Fn-F7 from working. This also disables the video output switching
features of this driver, as it uses the same ACPI methods as features of this driver, as it uses the same ACPI methods as
Fn-F7. Video switching on the console should still work. Fn-F7. Video switching on the console should still work.
UPDATE: There's now a patch for the X.org Radeon driver which UPDATE: refer to https://bugs.freedesktop.org/show_bug.cgi?id=2000
addresses this issue. Some people are reporting success with the patch
while others are still having problems. For more information:
https://bugs.freedesktop.org/show_bug.cgi?id=2000
ThinkLight control ThinkLight control
------------------ ------------------
@ -720,10 +724,11 @@ The ThinkLight sysfs interface is documented by the LED class
documentation, in Documentation/leds-class.txt. The ThinkLight LED name documentation, in Documentation/leds-class.txt. The ThinkLight LED name
is "tpacpi::thinklight". is "tpacpi::thinklight".
Due to limitations in the sysfs LED class, if the status of the thinklight Due to limitations in the sysfs LED class, if the status of the ThinkLight
cannot be read or if it is unknown, thinkpad-acpi will report it as "off". cannot be read or if it is unknown, thinkpad-acpi will report it as "off".
It is impossible to know if the status returned through sysfs is valid. It is impossible to know if the status returned through sysfs is valid.
Docking / undocking -- /proc/acpi/ibm/dock Docking / undocking -- /proc/acpi/ibm/dock
------------------------------------------ ------------------------------------------
@ -784,6 +789,7 @@ the only docking stations currently supported are the X-series
UltraBase docks and "dumb" port replicators like the Mini Dock (the UltraBase docks and "dumb" port replicators like the Mini Dock (the
latter don't need any ACPI support, actually). latter don't need any ACPI support, actually).
UltraBay eject -- /proc/acpi/ibm/bay UltraBay eject -- /proc/acpi/ibm/bay
------------------------------------ ------------------------------------
@ -847,8 +853,9 @@ supported. Use "eject2" instead of "eject" for the second bay.
Note: the UltraBay eject support on the 600e/x, A22p and A3x is Note: the UltraBay eject support on the 600e/x, A22p and A3x is
EXPERIMENTAL and may not work as expected. USE WITH CAUTION! EXPERIMENTAL and may not work as expected. USE WITH CAUTION!
CMOS control
------------ CMOS/UCMS control
-----------------
procfs: /proc/acpi/ibm/cmos procfs: /proc/acpi/ibm/cmos
sysfs device attribute: cmos_command sysfs device attribute: cmos_command
@ -882,6 +889,7 @@ The cmos command interface is prone to firmware split-brain problems, as
in newer ThinkPads it is just a compatibility layer. Do not use it, it is in newer ThinkPads it is just a compatibility layer. Do not use it, it is
exported just as a debug tool. exported just as a debug tool.
LED control LED control
----------- -----------
@ -893,6 +901,17 @@ some older ThinkPad models, it is possible to query the status of the
LED indicators as well. Newer ThinkPads cannot query the real status LED indicators as well. Newer ThinkPads cannot query the real status
of the LED indicators. of the LED indicators.
Because misuse of the LEDs could induce an unaware user to perform
dangerous actions (like undocking or ejecting a bay device while the
buses are still active), or mask an important alarm (such as a nearly
empty battery, or a broken battery), access to most LEDs is
restricted.
Unrestricted access to all LEDs requires that thinkpad-acpi be
compiled with the CONFIG_THINKPAD_ACPI_UNSAFE_LEDS option enabled.
Distributions must never enable this option. Individual users that
are aware of the consequences are welcome to enabling it.
procfs notes: procfs notes:
The available commands are: The available commands are:
@ -939,6 +958,7 @@ ThinkPad indicator LED should blink in hardware accelerated mode, use the
"timer" trigger, and leave the delay_on and delay_off parameters set to "timer" trigger, and leave the delay_on and delay_off parameters set to
zero (to request hardware acceleration autodetection). zero (to request hardware acceleration autodetection).
ACPI sounds -- /proc/acpi/ibm/beep ACPI sounds -- /proc/acpi/ibm/beep
---------------------------------- ----------------------------------
@ -968,6 +988,7 @@ X40:
16 - one medium-pitched beep repeating constantly, stop with 17 16 - one medium-pitched beep repeating constantly, stop with 17
17 - stop 16 17 - stop 16
Temperature sensors Temperature sensors
------------------- -------------------
@ -1115,6 +1136,7 @@ registers contain the current battery capacity, etc. If you experiment
with this, do send me your results (including some complete dumps with with this, do send me your results (including some complete dumps with
a description of the conditions when they were taken.) a description of the conditions when they were taken.)
LCD brightness control LCD brightness control
---------------------- ----------------------
@ -1124,10 +1146,9 @@ sysfs backlight device "thinkpad_screen"
This feature allows software control of the LCD brightness on ThinkPad This feature allows software control of the LCD brightness on ThinkPad
models which don't have a hardware brightness slider. models which don't have a hardware brightness slider.
It has some limitations: the LCD backlight cannot be actually turned on or It has some limitations: the LCD backlight cannot be actually turned
off by this interface, and in many ThinkPad models, the "dim while on on or off by this interface, it just controls the backlight brightness
battery" functionality will be enabled by the BIOS when this interface is level.
used, and cannot be controlled.
On IBM (and some of the earlier Lenovo) ThinkPads, the backlight control On IBM (and some of the earlier Lenovo) ThinkPads, the backlight control
has eight brightness levels, ranging from 0 to 7. Some of the levels has eight brightness levels, ranging from 0 to 7. Some of the levels
@ -1136,10 +1157,15 @@ display backlight brightness control methods have 16 levels, ranging
from 0 to 15. from 0 to 15.
There are two interfaces to the firmware for direct brightness control, There are two interfaces to the firmware for direct brightness control,
EC and CMOS. To select which one should be used, use the EC and UCMS (or CMOS). To select which one should be used, use the
brightness_mode module parameter: brightness_mode=1 selects EC mode, brightness_mode module parameter: brightness_mode=1 selects EC mode,
brightness_mode=2 selects CMOS mode, brightness_mode=3 selects both EC brightness_mode=2 selects UCMS mode, brightness_mode=3 selects EC
and CMOS. The driver tries to auto-detect which interface to use. mode with NVRAM backing (so that brightness changes are remembered
across shutdown/reboot).
The driver tries to select which interface to use from a table of
defaults for each ThinkPad model. If it makes a wrong choice, please
report this as a bug, so that we can fix it.
When display backlight brightness controls are available through the When display backlight brightness controls are available through the
standard ACPI interface, it is best to use it instead of this direct standard ACPI interface, it is best to use it instead of this direct
@ -1201,6 +1227,7 @@ WARNING:
and maybe reduce the life of the backlight lamps by needlessly kicking and maybe reduce the life of the backlight lamps by needlessly kicking
its level up and down at every change. its level up and down at every change.
Volume control -- /proc/acpi/ibm/volume Volume control -- /proc/acpi/ibm/volume
--------------------------------------- ---------------------------------------
@ -1217,6 +1244,11 @@ distinct. The unmute the volume after the mute command, use either the
up or down command (the level command will not unmute the volume). up or down command (the level command will not unmute the volume).
The current volume level and mute state is shown in the file. The current volume level and mute state is shown in the file.
The ALSA mixer interface to this feature is still missing, but patches
to add it exist. That problem should be addressed in the not so
distant future.
Fan control and monitoring: fan speed, fan enable/disable Fan control and monitoring: fan speed, fan enable/disable
--------------------------------------------------------- ---------------------------------------------------------
@ -1383,8 +1415,11 @@ procfs: /proc/acpi/ibm/wan
sysfs device attribute: wwan_enable (deprecated) sysfs device attribute: wwan_enable (deprecated)
sysfs rfkill class: switch "tpacpi_wwan_sw" sysfs rfkill class: switch "tpacpi_wwan_sw"
This feature shows the presence and current state of a W-WAN (Sierra This feature shows the presence and current state of the built-in
Wireless EV-DO) device. Wireless WAN device.
If the ThinkPad supports it, the WWAN state is stored in NVRAM,
so it is kept across reboots and power-off.
It was tested on a Lenovo ThinkPad X60. It should probably work on other It was tested on a Lenovo ThinkPad X60. It should probably work on other
ThinkPad models which come with this module installed. ThinkPad models which come with this module installed.
@ -1413,6 +1448,7 @@ Sysfs notes:
rfkill controller switch "tpacpi_wwan_sw": refer to rfkill controller switch "tpacpi_wwan_sw": refer to
Documentation/rfkill.txt for details. Documentation/rfkill.txt for details.
EXPERIMENTAL: UWB EXPERIMENTAL: UWB
----------------- -----------------
@ -1431,6 +1467,7 @@ Sysfs notes:
rfkill controller switch "tpacpi_uwb_sw": refer to rfkill controller switch "tpacpi_uwb_sw": refer to
Documentation/rfkill.txt for details. Documentation/rfkill.txt for details.
Multiple Commands, Module Parameters Multiple Commands, Module Parameters
------------------------------------ ------------------------------------
@ -1445,6 +1482,7 @@ for example:
modprobe thinkpad_acpi hotkey=enable,0xffff video=auto_disable modprobe thinkpad_acpi hotkey=enable,0xffff video=auto_disable
Enabling debugging output Enabling debugging output
------------------------- -------------------------
@ -1457,8 +1495,15 @@ will enable all debugging output classes. It takes a bitmask, so
to enable more than one output class, just add their values. to enable more than one output class, just add their values.
Debug bitmask Description Debug bitmask Description
0x8000 Disclose PID of userspace programs
accessing some functions of the driver
0x0001 Initialization and probing 0x0001 Initialization and probing
0x0002 Removal 0x0002 Removal
0x0004 RF Transmitter control (RFKILL)
(bluetooth, WWAN, UWB...)
0x0008 HKEY event interface, hotkeys
0x0010 Fan control
0x0020 Backlight brightness
There is also a kernel build option to enable more debugging There is also a kernel build option to enable more debugging
information, which may be necessary to debug driver problems. information, which may be necessary to debug driver problems.
@ -1467,6 +1512,7 @@ The level of debugging information output by the driver can be changed
at runtime through sysfs, using the driver attribute debug_level. The at runtime through sysfs, using the driver attribute debug_level. The
attribute takes the same bitmask as the debug module parameter above. attribute takes the same bitmask as the debug module parameter above.
Force loading of module Force loading of module
----------------------- -----------------------
@ -1505,3 +1551,7 @@ Sysfs interface changelog:
0x020200: Add poll()/select() support to the following attributes: 0x020200: Add poll()/select() support to the following attributes:
hotkey_radio_sw, wakeup_hotunplug_complete, wakeup_reason hotkey_radio_sw, wakeup_hotunplug_complete, wakeup_reason
0x020300: hotkey enable/disable support removed, attributes
hotkey_bios_enabled and hotkey_enable deprecated and
marked for removal.

View file

@ -226,6 +226,30 @@ config THINKPAD_ACPI_DEBUG
If you are not sure, say N here. If you are not sure, say N here.
config THINKPAD_ACPI_UNSAFE_LEDS
bool "Allow control of important LEDs (unsafe)"
depends on THINKPAD_ACPI
default n
---help---
Overriding LED state on ThinkPads can mask important
firmware alerts (like critical battery condition), or misled
the user into damaging the hardware (undocking or ejecting
the bay while buses are still active), etc.
LED control on the ThinkPad is write-only (with very few
exceptions on very ancient models), which makes it
impossible to know beforehand if important information will
be lost when one changes LED state.
Users that know what they are doing can enable this option
and the driver will allow control of every LED, including
the ones on the dock stations.
Never enable this option on a distribution kernel.
Say N here, unless you are building a kernel for your own
use, and need to control the important firmware LEDs.
config THINKPAD_ACPI_DOCK config THINKPAD_ACPI_DOCK
bool "Legacy Docking Station Support" bool "Legacy Docking Station Support"
depends on THINKPAD_ACPI depends on THINKPAD_ACPI

File diff suppressed because it is too large Load diff