123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474 |
- IBM ThinkPad ACPI Extras Driver
- Version 0.8
- 8 November 2004
- Borislav Deianov <borislav@users.sf.net>
- http://ibm-acpi.sf.net/
- This is a Linux ACPI driver for the IBM ThinkPad laptops. 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.
- Status
- ------
- The features currently supported are the following (see below for
- detailed description):
- - Fn key combinations
- - Bluetooth enable and disable
- - video output switching, expansion control
- - ThinkLight on and off
- - limited docking and undocking
- - UltraBay eject
- - Experimental: CMOS control
- - Experimental: LED control
- - Experimental: ACPI sounds
- A compatibility table by model and feature is maintained on the web
- site, http://ibm-acpi.sf.net/. I appreciate any success or failure
- reports, especially if they add to or correct the compatibility table.
- Please include the following information in your report:
- - ThinkPad model name
- - a copy of your DSDT, from /proc/acpi/dsdt
- - which driver features work and which don't
- - the observed behavior of non-working features
- Any other comments or patches are also more than welcome.
- Installation
- ------------
- If you are compiling this driver as included in the Linux kernel
- sources, simply enable the CONFIG_ACPI_IBM option (Power Management /
- ACPI / IBM ThinkPad Laptop Extras). The rest of this section describes
- how to install this driver when downloaded from the web site.
- First, you need to get a kernel with ACPI support up and running.
- Please refer to http://acpi.sourceforge.net/ for help with this
- step. How successful you will be depends a lot on you ThinkPad model,
- the kernel you are using and any additional patches applied. The
- kernel provided with your distribution may not be good enough. I
- needed to compile a 2.6.7 kernel with the 20040715 ACPI patch to get
- ACPI working reliably on my ThinkPad X40. Old ThinkPad models may not
- be supported at all.
- Assuming you have the basic ACPI support working (e.g. you can see the
- /proc/acpi directory), follow the following steps to install this
- driver:
- - unpack the archive:
- tar xzvf ibm-acpi-x.y.tar.gz; cd ibm-acpi-x.y
- - compile the driver:
- make
- - install the module in your kernel modules directory:
- make install
- - load the module:
- modprobe ibm_acpi
- After loading the module, check the "dmesg" output for any error messages.
- Features
- --------
- The driver creates the /proc/acpi/ibm directory. There is a file under
- that directory for each feature described below. Note that while the
- driver is still in the alpha stage, the exact proc file format and
- commands supported by the various features is guaranteed to change
- frequently.
- Driver Version -- /proc/acpi/ibm/driver
- --------------------------------------
- The driver name and version. No commands can be written to this file.
- Hot Keys -- /proc/acpi/ibm/hotkey
- ---------------------------------
- Without this driver, only the Fn-F4 key (sleep button) generates an
- ACPI event. With the driver loaded, the hotkey feature enabled and the
- mask set (see below), the various hot keys generate ACPI events in the
- following format:
- ibm/hotkey HKEY 00000080 0000xxxx
- The last four digits vary depending on the key combination pressed.
- All labeled Fn-Fx key combinations generate distinct events. In
- addition, the lid microswitch and some docking station buttons may
- also generate such events.
- The following commands can be written to this file:
- echo enable > /proc/acpi/ibm/hotkey -- enable the hot keys feature
- echo disable > /proc/acpi/ibm/hotkey -- disable the hot keys feature
- echo 0xffff > /proc/acpi/ibm/hotkey -- enable all possible hot keys
- echo 0x0000 > /proc/acpi/ibm/hotkey -- disable all possible hot keys
- ... any other 4-hex-digit mask ...
- echo reset > /proc/acpi/ibm/hotkey -- restore the original mask
- The bit mask allows some control over which hot keys generate ACPI
- events. Not all bits in the mask can be modified. Not all bits that
- can be modified do anything. Not all hot keys can be individually
- controlled by the mask. Most recent ThinkPad models honor the
- following bits (assuming the hot keys feature has been enabled):
- key bit behavior when set behavior when unset
- Fn-F3 always generates ACPI event
- Fn-F4 always generates ACPI event
- Fn-F5 0010 generate ACPI event enable/disable Bluetooth
- Fn-F7 0040 generate ACPI event switch LCD and external display
- Fn-F8 0080 generate ACPI event expand screen or none
- Fn-F9 0100 generate ACPI event none
- Fn-F12 always generates ACPI event
- Some models do not support all of the above. For example, the T30 does
- not support Fn-F5 and Fn-F9. Other models do not support the mask at
- all. On those models, hot keys cannot be controlled individually.
- Note that enabling ACPI events for some keys prevents their default
- behavior. For example, if events for Fn-F5 are enabled, that key will
- no longer enable/disable Bluetooth by itself. This can still be done
- from an acpid handler for the ibm/hotkey event.
- Note also that not all Fn key combinations are supported through
- ACPI. For example, on the X40, the brightness, volume and "Access IBM"
- buttons do not generate ACPI events even with this driver. They *can*
- be used through the "ThinkPad Buttons" utility, see
- http://www.nongnu.org/tpb/
- Bluetooth -- /proc/acpi/ibm/bluetooth
- -------------------------------------
- This feature shows the presence and current state of a Bluetooth
- device. If Bluetooth is installed, the following commands can be used:
- echo enable > /proc/acpi/ibm/bluetooth
- echo disable > /proc/acpi/ibm/bluetooth
- Video output control -- /proc/acpi/ibm/video
- --------------------------------------------
- This feature allows control over the devices used for video output -
- LCD, CRT or DVI (if available). The following commands are available:
- echo lcd_enable > /proc/acpi/ibm/video
- echo lcd_disable > /proc/acpi/ibm/video
- echo crt_enable > /proc/acpi/ibm/video
- echo crt_disable > /proc/acpi/ibm/video
- echo dvi_enable > /proc/acpi/ibm/video
- echo dvi_disable > /proc/acpi/ibm/video
- echo auto_enable > /proc/acpi/ibm/video
- echo auto_disable > /proc/acpi/ibm/video
- echo expand_toggle > /proc/acpi/ibm/video
- echo video_switch > /proc/acpi/ibm/video
- Each video output device can be enabled or disabled individually.
- Reading /proc/acpi/ibm/video shows the status of each device.
- Automatic video switching can be enabled or disabled. When automatic
- video switching is enabled, certain events (e.g. opening the lid,
- docking or undocking) cause the video output device to change
- automatically. While this can be useful, it also causes flickering
- and, on the X40, video corruption. By disabling automatic switching,
- the flickering or video corruption can be avoided.
- The video_switch command cycles through the available video outputs
- (it sumulates the behavior of Fn-F7).
- Video expansion can be toggled through this feature. This controls
- whether the display is expanded to fill the entire LCD screen when a
- mode with less than full resolution is used. Note that the current
- video expansion status cannot be determined through this feature.
- Note that on many models (particularly those using Radeon graphics
- chips) the X driver configures the video card in a way which prevents
- Fn-F7 from working. This also disables the video output switching
- features of this driver, as it uses the same ACPI methods as
- Fn-F7. Video switching on the console should still work.
- ThinkLight control -- /proc/acpi/ibm/light
- ------------------------------------------
- The current status of the ThinkLight can be found in this file. A few
- models which do not make the status available will show it as
- "unknown". The available commands are:
- echo on > /proc/acpi/ibm/light
- echo off > /proc/acpi/ibm/light
- Docking / Undocking -- /proc/acpi/ibm/dock
- ------------------------------------------
- Docking and undocking (e.g. with the X4 UltraBase) requires some
- actions to be taken by the operating system to safely make or break
- the electrical connections with the dock.
- The docking feature of this driver generates the following ACPI events:
- ibm/dock GDCK 00000003 00000001 -- eject request
- ibm/dock GDCK 00000003 00000002 -- undocked
- ibm/dock GDCK 00000000 00000003 -- docked
- NOTE: These events will only be generated if the laptop was docked
- when originally booted. This is due to the current lack of support for
- hot plugging of devices in the Linux ACPI framework. If the laptop was
- booted while not in the dock, the following message is shown in the
- logs: "ibm_acpi: dock device not present". No dock-related events are
- generated but the dock and undock commands described below still
- work. They can be executed manually or triggered by Fn key
- combinations (see the example acpid configuration files included in
- the driver tarball package available on the web site).
- When the eject request button on the dock is pressed, the first event
- above is generated. The handler for this event should issue the
- following command:
- echo undock > /proc/acpi/ibm/dock
- After the LED on the dock goes off, it is safe to eject the laptop.
- Note: if you pressed this key by mistake, go ahead and eject the
- laptop, then dock it back in. Otherwise, the dock may not function as
- expected.
- When the laptop is docked, the third event above is generated. The
- handler for this event should issue the following command to fully
- enable the dock:
- echo dock > /proc/acpi/ibm/dock
- The contents of the /proc/acpi/ibm/dock file shows the current status
- of the dock, as provided by the ACPI framework.
- The docking support in this driver does not take care of enabling or
- disabling any other devices you may have attached to the dock. For
- example, a CD drive plugged into the UltraBase needs to be disabled or
- enabled separately. See the provided example acpid configuration files
- for how this can be accomplished.
- There is no support yet for PCI devices that may be attached to a
- docking station, e.g. in the ThinkPad Dock II. The driver currently
- does not recognize, enable or disable such devices. This means that
- the only docking stations currently supported are the X-series
- UltraBase docks and "dumb" port replicators like the Mini Dock (the
- latter don't need any ACPI support, actually).
- UltraBay Eject -- /proc/acpi/ibm/bay
- ------------------------------------
- Inserting or ejecting an UltraBay device requires some actions to be
- taken by the operating system to safely make or break the electrical
- connections with the device.
- This feature generates the following ACPI events:
- ibm/bay MSTR 00000003 00000000 -- eject request
- ibm/bay MSTR 00000001 00000000 -- eject lever inserted
- NOTE: These events will only be generated if the UltraBay was present
- when the laptop was originally booted (on the X series, the UltraBay
- is in the dock, so it may not be present if the laptop was undocked).
- This is due to the current lack of support for hot plugging of devices
- in the Linux ACPI framework. If the laptop was booted without the
- UltraBay, the following message is shown in the logs: "ibm_acpi: bay
- device not present". No bay-related events are generated but the eject
- command described below still works. It can be executed manually or
- triggered by a hot key combination.
- Sliding the eject lever generates the first event shown above. The
- handler for this event should take whatever actions are necessary to
- shut down the device in the UltraBay (e.g. call idectl), then issue
- the following command:
- echo eject > /proc/acpi/ibm/bay
- After the LED on the UltraBay goes off, it is safe to pull out the
- device.
- When the eject lever is inserted, the second event above is
- generated. The handler for this event should take whatever actions are
- necessary to enable the UltraBay device (e.g. call idectl).
- The contents of the /proc/acpi/ibm/bay file shows the current status
- of the UltraBay, as provided by the ACPI framework.
- Experimental Features
- ---------------------
- The following features are marked experimental because using them
- involves guessing the correct values of some parameters. Guessing
- incorrectly may have undesirable effects like crashing your
- ThinkPad. USE THESE WITH CAUTION! To activate them, you'll need to
- supply the experimental=1 parameter when loading the module.
- Experimental: CMOS control - /proc/acpi/ibm/cmos
- ------------------------------------------------
- This feature is used internally by the ACPI firmware to control the
- ThinkLight on most newer ThinkPad models. It appears that it can also
- control LCD brightness, sounds volume and more, but only on some
- models.
- The commands are non-negative integer numbers:
- echo 0 >/proc/acpi/ibm/cmos
- echo 1 >/proc/acpi/ibm/cmos
- echo 2 >/proc/acpi/ibm/cmos
- ...
- The range of numbers which are used internally by various models is 0
- to 21, but it's possible that numbers outside this range have
- interesting behavior. Here is the behavior on the X40 (tpb is the
- ThinkPad Buttons utility):
- 0 - no effect but tpb reports "Volume down"
- 1 - no effect but tpb reports "Volume up"
- 2 - no effect but tpb reports "Mute on"
- 3 - simulate pressing the "Access IBM" button
- 4 - LCD brightness up
- 5 - LCD brightness down
- 11 - toggle screen expansion
- 12 - ThinkLight on
- 13 - ThinkLight off
- 14 - no effect but tpb reports ThinkLight status change
- If you try this feature, please send me a report similar to the
- above. On models which allow control of LCD brightness or sound
- volume, I'd like to provide this functionality in an user-friendly
- way, but first I need a way to identify the models which this is
- possible.
- Experimental: LED control - /proc/acpi/ibm/LED
- ----------------------------------------------
- Some of the LED indicators can be controlled through this feature. The
- available commands are:
- echo <led number> on >/proc/acpi/ibm/led
- echo <led number> off >/proc/acpi/ibm/led
- echo <led number> blink >/proc/acpi/ibm/led
- The <led number> parameter is a non-negative integer. The range of LED
- numbers used internally by various models is 0 to 7 but it's possible
- that numbers outside this range are also valid. Here is the mapping on
- the X40:
- 0 - power
- 1 - battery (orange)
- 2 - battery (green)
- 3 - UltraBase
- 4 - UltraBay
- 7 - standby
- All of the above can be turned on and off and can be made to blink.
- If you try this feature, please send me a report similar to the
- above. I'd like to provide this functionality in an user-friendly way,
- but first I need to identify the which numbers correspond to which
- LEDs on various models.
- Experimental: ACPI sounds - /proc/acpi/ibm/beep
- -----------------------------------------------
- The BEEP method is used internally by the ACPI firmware to provide
- audible alerts in various situtation. This feature allows the same
- sounds to be triggered manually.
- The commands are non-negative integer numbers:
- echo 0 >/proc/acpi/ibm/beep
- echo 1 >/proc/acpi/ibm/beep
- echo 2 >/proc/acpi/ibm/beep
- ...
- The range of numbers which are used internally by various models is 0
- to 17, but it's possible that numbers outside this range are also
- valid. Here is the behavior on the X40:
- 2 - two beeps, pause, third beep
- 3 - single beep
- 4 - "unable"
- 5 - single beep
- 6 - "AC/DC"
- 7 - high-pitched beep
- 9 - three short beeps
- 10 - very long beep
- 12 - low-pitched beep
- (I've only been able to identify a couple of them).
- If you try this feature, please send me a report similar to the
- above. I'd like to provide this functionality in an user-friendly way,
- but first I need to identify the which numbers correspond to which
- sounds on various models.
- Multiple Command, Module Parameters
- -----------------------------------
- Multiple commands can be written to the proc files in one shot by
- separating them with commas, for example:
- echo enable,0xffff > /proc/acpi/ibm/hotkey
- echo lcd_disable,crt_enable > /proc/acpi/ibm/video
- Commands can also be specified when loading the ibm_acpi module, for
- example:
- modprobe ibm_acpi hotkey=enable,0xffff video=auto_disable
- Example Configuration
- ---------------------
- The ACPI support in the kernel is intended to be used in conjunction
- with a user-space daemon, acpid. The configuration files for this
- daemon control what actions are taken in response to various ACPI
- events. An example set of configuration files are included in the
- config/ directory of the tarball package available on the web
- site. Note that these are provided for illustration purposes only and
- may need to be adapted to your particular setup.
- The following utility scripts are used by the example action
- scripts (included with ibm-acpi for completeness):
- /usr/local/sbin/idectl -- from the hdparm source distribution,
- see http://www.ibiblio.org/pub/Linux/system/hardware
- /usr/local/sbin/laptop_mode -- from the Linux kernel source
- distribution, see Documentation/laptop-mode.txt
- /sbin/service -- comes with Redhat/Fedora distributions
- Toan T Nguyen <ntt@control.uchicago.edu> has written a SuSE powersave
- script for the X20, included in config/usr/sbin/ibm_hotkeys_X20
- Henrik Brix Andersen <brix@gentoo.org> has written a Gentoo ACPI event
- handler script for the X31. You can get the latest version from
- http://dev.gentoo.org/~brix/files/x31.sh
- David Schweikert <dws@ee.eth.ch> has written an alternative blank.sh
- script which works on Debian systems, included in
- configs/etc/acpi/actions/blank-debian.sh
- TODO
- ----
- I'd like to implement the following features but haven't yet found the
- time and/or I don't yet know how to implement them:
- - UltraBay floppy drive support
|