Difference between revisions of "Thinkpad-acpi"

From ThinkWiki
Jump to: navigation, search
m (External links related to thinkpad-acpi: +URL to wiki.gentoo.org)
 
(25 intermediate revisions by 6 users not shown)
Line 1: Line 1:
 +
{| width="100%"
 +
|style="vertical-align:top;padding-right:20px;width:10px;white-space:nowrap;" | __TOC__
 +
|style="vertical-align:top" |
 +
== thinkpad-acpi - ThinkPad ACPI Extras Driver ==
 +
This is a Linux ACPI driver for the ThinkPad laptops written by Borislav Deianov, and currently maintained by [[User:hmh|Henrique de Moraes Holschuh]] and is included with the Linux kernel. It aims to support various features of these laptops which are accessible through the ACPI framework but not otherwise supported by the generic Linux ACPI drivers. As a kernel module, thinkpad-acpi works as a bridge to deliver information about certain hardware events like key presses or control the state of certain hardware features by software.
 +
 +
{{WARN|As of kernel 2.6.27 the thinkpad-acpi bay and dock drivers should no longer be used. Instead use the standard ACPI bay and dock drivers. As of kernel 2.6.31 the thinkpad-acpi bay and dock drivers have been removed completely.}}
 +
 +
{{NOTE|As of kernel 2.6.33 the thinkpad_acpi driver now has a ALSA sub-driver which creates an additional ALSA volume control which represents the volume and mute buttons on the ThinkPad keyboard. Unfortunately no further integration exists at this point with userspace, such as PulseAudio and as such there is no effective change for the end-user}}
 +
|}
 +
 
==Thinkpad-specific ACPI driver==
 
==Thinkpad-specific ACPI driver==
This is a Linux ACPI driver for the IBM ThinkPad laptops written by Borislav Deianov and Henrique de Moraes Holschuh. The driver replaces [[ibm-acpi]] in Linux mainline as of 2.6.22 (March 2007). To confuse matters further, it appears that there was also an older (now abandoned) driver of the same name written by Erik Rigtorp which never made it into the mainline kernel. The current thinkpad-acpi contains essentially the same functionality as [[ibm-acpi]] with some added features. Among which are registering of acpi events to the "thinkvantage" and volume/mute buttons which could previously only be accessed through the use of the [[tpb]] utility.
+
This is a Linux ACPI driver for the ThinkPad laptops written by Borislav Deianov and Henrique de Moraes Holschuh. The driver replaces ibm-acpi in Linux mainline as of 2.6.22 (March 2007). To confuse matters further, it appears that there was also an older (now abandoned) driver of the same name written by Erik Rigtorp which never made it into the mainline kernel. The current thinkpad-acpi contains essentially the same functionality as ibm-acpi with some added features. Among which are registering of acpi events to the "thinkvantage" and volume/mute buttons which could previously only be accessed through the use of the [[tpb]] utility.
 +
 
 +
In Linux Kernel v2.6.31 "make menuconfig" the driver can be enabled in:
 +
<pre>
 +
  Device Drivers  --->
 +
    [*] X86 Platform Specific Device Drivers  ---> 
 +
      <M>  ThinkPad ACPI Laptop Extras         
 +
      [ ]    Maintainer debug facilities     
 +
      [ ]    Verbose debug mode                                                         
 +
      [ ]    Allow control of important LEDs (unsafe)
 +
      [ ]    Video output control support           
 +
      [ ]    Support NVRAM polling for hot keys     
 +
</pre>
 +
 
 +
==Hibernate==
 +
 
 +
When hibernating, thinkpad_acpi should be added to the modules which are unloaded before and reloaded after hibernation. Otherwise, thinkpad_acpi may not be loadable after hibernate again.
 +
 
 +
For pm-utils, just create the following file:
 +
 
 +
{{path|/etc/pm/config.d/thinkpad_acpi}}
 +
 
 +
SUSPEND_MODULES="thinkpad_acpi"
  
 
==Hotkeys==
 
==Hotkeys==
Line 15: Line 48:
  
 
====thinkpad_acpi====
 
====thinkpad_acpi====
{{path|/sys/devices/platform/thinkpad_acpi}} directory structure is as follows on a T60 with kernel 2.6.29
+
{{path|/sys/devices/platform/thinkpad_acpi}} directory structure is as follows on a T60 with kernel 2.6.31
 
<pre>
 
<pre>
bluetooth_enable
+
|-- bluetooth_enable
 
|-- cmos_command
 
|-- cmos_command
 
|-- driver -> ../../../bus/platform/drivers/thinkpad_acpi
 
|-- driver -> ../../../bus/platform/drivers/thinkpad_acpi
Line 26: Line 59:
 
|-- hotkey_mask
 
|-- hotkey_mask
 
|-- hotkey_poll_freq
 
|-- hotkey_poll_freq
 +
|-- hotkey_radio_sw
 
|-- hotkey_recommended_mask
 
|-- hotkey_recommended_mask
 
|-- hotkey_report_mode
 
|-- hotkey_report_mode
 
|-- hotkey_source_mask
 
|-- hotkey_source_mask
 
|-- leds
 
|-- leds
|  |-- tpacpi::bay_active
 
|  |  |-- brightness
 
|  |  |-- device -> ../../../thinkpad_acpi
 
|  |  |-- power
 
|  |  |  `-- wakeup
 
|  |  |-- subsystem -> ../../../../../class/leds
 
|  |  |-- trigger
 
|  |  `-- uevent
 
|  |-- tpacpi::dock_active
 
|  |  |-- brightness
 
|  |  |-- device -> ../../../thinkpad_acpi
 
|  |  |-- power
 
|  |  |  `-- wakeup
 
|  |  |-- subsystem -> ../../../../../class/leds
 
|  |  |-- trigger
 
|  |  `-- uevent
 
|  |-- tpacpi::dock_batt
 
|  |  |-- brightness
 
|  |  |-- device -> ../../../thinkpad_acpi
 
|  |  |-- power
 
|  |  |  `-- wakeup
 
|  |  |-- subsystem -> ../../../../../class/leds
 
|  |  |-- trigger
 
|  |  `-- uevent
 
 
|  |-- tpacpi::power
 
|  |-- tpacpi::power
 
|  |  |-- brightness
 
|  |  |-- brightness
 
|  |  |-- device -> ../../../thinkpad_acpi
 
|  |  |-- device -> ../../../thinkpad_acpi
 +
|  |  |-- max_brightness
 
|  |  |-- power
 
|  |  |-- power
 
|  |  |  `-- wakeup
 
|  |  |  `-- wakeup
Line 65: Line 76:
 
|  |  |-- brightness
 
|  |  |-- brightness
 
|  |  |-- device -> ../../../thinkpad_acpi
 
|  |  |-- device -> ../../../thinkpad_acpi
 +
|  |  |-- max_brightness
 
|  |  |-- power
 
|  |  |-- power
 
|  |  |  `-- wakeup
 
|  |  |  `-- wakeup
Line 73: Line 85:
 
|  |  |-- brightness
 
|  |  |-- brightness
 
|  |  |-- device -> ../../../thinkpad_acpi
 
|  |  |-- device -> ../../../thinkpad_acpi
 +
|  |  |-- max_brightness
 
|  |  |-- power
 
|  |  |-- power
 
|  |  |  `-- wakeup
 
|  |  |  `-- wakeup
Line 78: Line 91:
 
|  |  |-- trigger
 
|  |  |-- trigger
 
|  |  `-- uevent
 
|  |  `-- uevent
|  |-- tpacpi::unknown_led
+
|  `-- tpacpi::thinkvantage
|  |  |-- brightness
 
|  |  |-- device -> ../../../thinkpad_acpi
 
|  |  |-- power
 
|  |  |  `-- wakeup
 
|  |  |-- subsystem -> ../../../../../class/leds
 
|  |  |-- trigger
 
|  |  `-- uevent
 
|  |-- tpacpi:green:batt
 
|  |  |-- brightness
 
|  |  |-- device -> ../../../thinkpad_acpi
 
|  |  |-- power
 
|  |  |  `-- wakeup
 
|  |  |-- subsystem -> ../../../../../class/leds
 
|  |  |-- trigger
 
|  |  `-- uevent
 
|  `-- tpacpi:orange:batt
 
 
|      |-- brightness
 
|      |-- brightness
 
|      |-- device -> ../../../thinkpad_acpi
 
|      |-- device -> ../../../thinkpad_acpi
 +
|      |-- max_brightness
 
|      |-- power
 
|      |-- power
 
|      |  `-- wakeup
 
|      |  `-- wakeup
Line 109: Line 107:
 
|      |-- claim
 
|      |-- claim
 
|      |-- device -> ../../../thinkpad_acpi
 
|      |-- device -> ../../../thinkpad_acpi
 +
|      |-- index
 
|      |-- name
 
|      |-- name
 +
|      |-- persistent
 
|      |-- power
 
|      |-- power
 
|      |  `-- wakeup
 
|      |  `-- wakeup
Line 121: Line 121:
 
`-- wakeup_reason
 
`-- wakeup_reason
 
</pre>
 
</pre>
 +
 
====thinkpad_hwmon====
 
====thinkpad_hwmon====
{{path|/sys/devices/platform/thinkpad_hwmon}} directory structure is as follows on a T60 with kernel 2.6.29
+
{{path|/sys/devices/platform/thinkpad_hwmon}} directory structure is as follows on a T60 with kernel 2.6.31
 
<pre>
 
<pre>
 
|-- driver -> ../../../bus/platform/drivers/thinkpad_hwmon
 
|-- driver -> ../../../bus/platform/drivers/thinkpad_hwmon
Line 140: Line 141:
 
|-- pwm1_enable
 
|-- pwm1_enable
 
|-- subsystem -> ../../../bus/platform
 
|-- subsystem -> ../../../bus/platform
 +
|-- temp10_input
 +
|-- temp11_input
 +
|-- temp12_input
 +
|-- temp13_input
 +
|-- temp14_input
 +
|-- temp15_input
 +
|-- temp16_input
 
|-- temp1_input
 
|-- temp1_input
 
|-- temp2_input
 
|-- temp2_input
Line 148: Line 156:
 
|-- temp7_input
 
|-- temp7_input
 
|-- temp8_input
 
|-- temp8_input
 +
|-- temp9_input
 
`-- uevent
 
`-- uevent
 
</pre>
 
</pre>
 +
 
==proc interface==
 
==proc interface==
 
some legacy interfaces can also be found under {{path|/proc/acpi/ibm}} these interfaces should be considered deprecated. Please use sysfs instead.
 
some legacy interfaces can also be found under {{path|/proc/acpi/ibm}} these interfaces should be considered deprecated. Please use sysfs instead.
  
 
<pre>
 
<pre>
|-- bay
 
 
|-- beep
 
|-- beep
 
|-- bluetooth
 
|-- bluetooth
|-- brightness
 
 
|-- cmos
 
|-- cmos
 
|-- driver
 
|-- driver
Line 168: Line 176:
 
`-- volume
 
`-- volume
 
</pre>
 
</pre>
 +
 
==Development==
 
==Development==
 
To help with development and maintenance of the thinkpad-acpi driver, please add your model to the [[List of DMI IDs]].
 
To help with development and maintenance of the thinkpad-acpi driver, please add your model to the [[List of DMI IDs]].
Line 173: Line 182:
 
==Further documentation==
 
==Further documentation==
 
More comprehensive documentation can be found in the kernel source tree under <tt>Documentation/thinkpad-acpi.txt</tt> or <tt>Documentation/laptops/thinkpad-acpi.txt</tt>.
 
More comprehensive documentation can be found in the kernel source tree under <tt>Documentation/thinkpad-acpi.txt</tt> or <tt>Documentation/laptops/thinkpad-acpi.txt</tt>.
 
For now, please refer to the [[ibm-acpi]] page, or ask on the linux-thinkpad mailinglist for any other information on the new thinkpad-acpi driver.
 
  
 
=== External links related to thinkpad-acpi ===
 
=== External links related to thinkpad-acpi ===
Line 181: Line 188:
 
* [http://www.kernel.org kernel.org main archives]
 
* [http://www.kernel.org kernel.org main archives]
 
* [http://repo.or.cz/w/linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git thinkpad-acpi development git tree]
 
* [http://repo.or.cz/w/linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git thinkpad-acpi development git tree]
 +
* [https://wiki.gentoo.org/wiki/ACPI/ThinkPad-special-buttons ACPI/ThinkPad-special-buttons on wiki.gentoo.org for T410]
  
 
[[Category:Drivers]]
 
[[Category:Drivers]]
[[Category:X32]]
 
[[Category:X61]]
 
  
{{Todo|needs editing}}: consider merging with [[ibm-acpi]]
+
=== Supported ThinkPads ===
 +
* {{770X}} , {{770Z}}
 +
* {{A Series}}
 +
* {{G Series}}
 +
* {{R Series}}
 +
* {{T Series}}
 +
* {{W Series}}
 +
* {{X Series}}
 +
* {{Z Series}}
 +
* {{TransNote}}

Latest revision as of 10:49, 5 July 2014

thinkpad-acpi - ThinkPad ACPI Extras Driver

This is a Linux ACPI driver for the ThinkPad laptops written by Borislav Deianov, and currently maintained by Henrique de Moraes Holschuh and is included with the Linux kernel. It aims to support various features of these laptops which are accessible through the ACPI framework but not otherwise supported by the generic Linux ACPI drivers. As a kernel module, thinkpad-acpi works as a bridge to deliver information about certain hardware events like key presses or control the state of certain hardware features by software.

ATTENTION!
As of kernel 2.6.27 the thinkpad-acpi bay and dock drivers should no longer be used. Instead use the standard ACPI bay and dock drivers. As of kernel 2.6.31 the thinkpad-acpi bay and dock drivers have been removed completely.
NOTE!
As of kernel 2.6.33 the thinkpad_acpi driver now has a ALSA sub-driver which creates an additional ALSA volume control which represents the volume and mute buttons on the ThinkPad keyboard. Unfortunately no further integration exists at this point with userspace, such as PulseAudio and as such there is no effective change for the end-user

Thinkpad-specific ACPI driver

This is a Linux ACPI driver for the ThinkPad laptops written by Borislav Deianov and Henrique de Moraes Holschuh. The driver replaces ibm-acpi in Linux mainline as of 2.6.22 (March 2007). To confuse matters further, it appears that there was also an older (now abandoned) driver of the same name written by Erik Rigtorp which never made it into the mainline kernel. The current thinkpad-acpi contains essentially the same functionality as ibm-acpi with some added features. Among which are registering of acpi events to the "thinkvantage" and volume/mute buttons which could previously only be accessed through the use of the tpb utility.

In Linux Kernel v2.6.31 "make menuconfig" the driver can be enabled in:

   Device Drivers  ---> 
     [*] X86 Platform Specific Device Drivers  --->  
       <M>   ThinkPad ACPI Laptop Extras          
       [ ]     Maintainer debug facilities       
       [ ]     Verbose debug mode                                                           
       [ ]     Allow control of important LEDs (unsafe)
       [ ]     Video output control support            
       [ ]     Support NVRAM polling for hot keys      

Hibernate

When hibernating, thinkpad_acpi should be added to the modules which are unloaded before and reloaded after hibernation. Otherwise, thinkpad_acpi may not be loadable after hibernate again.

For pm-utils, just create the following file:

/etc/pm/config.d/thinkpad_acpi

SUSPEND_MODULES="thinkpad_acpi"

Hotkeys

To view which hotkeys are active you can use "acpi_listen", but that is deprecated. A better way is to use "lsinput" and "input-events" commands to look at the output of the thinkpad-acpi input device(s).

One important difference from ibm-acpi for those who wish to enable all possible hot keys, is that thinkpad-acpi automatically enables them. One should not need to do anything to get the best possible thinkpad-acpi configuration for his ThinkPad (as long as he is using the latest thinkpad-acpi).

In particular, old documentation that tells you to "echo enable,0xffffffff >/proc/acpi/ibm/hotkey", or to give thinkpad-acpi any hotkey= module parameters to enable hot keys by default, is likely incorrect.

The thinkpad-acpi driver has detailed documentation, which is shipped inside the Linux kernel sources, as "Documentation/thinkpad-acpi.txt" or as "Documentation/laptops/thinkpad-acpi.txt". If you feel a need to change the hot key mask manually, it is probably best to look at that documentation first to understand the full side effects of any changes.

sysfs interface

some of the ThinkPad specific settings can be viewed or altered in sysfs under /sys/devices/platform/thinkpad_acpi and /sys/devices/platform/thinkpad_hwmon

thinkpad_acpi

/sys/devices/platform/thinkpad_acpi directory structure is as follows on a T60 with kernel 2.6.31

|-- bluetooth_enable
|-- cmos_command
|-- driver -> ../../../bus/platform/drivers/thinkpad_acpi
|-- hotkey_all_mask
|-- hotkey_bios_enabled
|-- hotkey_bios_mask
|-- hotkey_enable
|-- hotkey_mask
|-- hotkey_poll_freq
|-- hotkey_radio_sw
|-- hotkey_recommended_mask
|-- hotkey_report_mode
|-- hotkey_source_mask
|-- leds
|   |-- tpacpi::power
|   |   |-- brightness
|   |   |-- device -> ../../../thinkpad_acpi
|   |   |-- max_brightness
|   |   |-- power
|   |   |   `-- wakeup
|   |   |-- subsystem -> ../../../../../class/leds
|   |   |-- trigger
|   |   `-- uevent
|   |-- tpacpi::standby
|   |   |-- brightness
|   |   |-- device -> ../../../thinkpad_acpi
|   |   |-- max_brightness
|   |   |-- power
|   |   |   `-- wakeup
|   |   |-- subsystem -> ../../../../../class/leds
|   |   |-- trigger
|   |   `-- uevent
|   |-- tpacpi::thinklight
|   |   |-- brightness
|   |   |-- device -> ../../../thinkpad_acpi
|   |   |-- max_brightness
|   |   |-- power
|   |   |   `-- wakeup
|   |   |-- subsystem -> ../../../../../class/leds
|   |   |-- trigger
|   |   `-- uevent
|   `-- tpacpi::thinkvantage
|       |-- brightness
|       |-- device -> ../../../thinkpad_acpi
|       |-- max_brightness
|       |-- power
|       |   `-- wakeup
|       |-- subsystem -> ../../../../../class/leds
|       |-- trigger
|       `-- uevent
|-- modalias
|-- power
|   `-- wakeup
|-- rfkill
|   `-- rfkill0
|       |-- claim
|       |-- device -> ../../../thinkpad_acpi
|       |-- index
|       |-- name
|       |-- persistent
|       |-- power
|       |   `-- wakeup
|       |-- state
|       |-- subsystem -> ../../../../../class/rfkill
|       |-- type
|       `-- uevent
|-- subsystem -> ../../../bus/platform
|-- uevent
|-- wakeup_hotunplug_complete
`-- wakeup_reason

thinkpad_hwmon

/sys/devices/platform/thinkpad_hwmon directory structure is as follows on a T60 with kernel 2.6.31

|-- driver -> ../../../bus/platform/drivers/thinkpad_hwmon
|-- fan1_input
|-- hwmon
|   `-- hwmon0
|       |-- device -> ../../../thinkpad_hwmon
|       |-- power
|       |   `-- wakeup
|       |-- subsystem -> ../../../../../class/hwmon
|       `-- uevent
|-- modalias
|-- name
|-- power
|   `-- wakeup
|-- pwm1
|-- pwm1_enable
|-- subsystem -> ../../../bus/platform
|-- temp10_input
|-- temp11_input
|-- temp12_input
|-- temp13_input
|-- temp14_input
|-- temp15_input
|-- temp16_input
|-- temp1_input
|-- temp2_input
|-- temp3_input
|-- temp4_input
|-- temp5_input
|-- temp6_input
|-- temp7_input
|-- temp8_input
|-- temp9_input
`-- uevent

proc interface

some legacy interfaces can also be found under /proc/acpi/ibm these interfaces should be considered deprecated. Please use sysfs instead.

|-- beep
|-- bluetooth
|-- cmos
|-- driver
|-- fan
|-- hotkey
|-- led
|-- light
|-- thermal
|-- video
`-- volume

Development

To help with development and maintenance of the thinkpad-acpi driver, please add your model to the List of DMI IDs.

Further documentation

More comprehensive documentation can be found in the kernel source tree under Documentation/thinkpad-acpi.txt or Documentation/laptops/thinkpad-acpi.txt.

External links related to thinkpad-acpi

Supported ThinkPads