ACPI: thinkpad-acpi: add input device support to hotkey subdriver
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / Documentation / thinkpad-acpi.txt
blob91d08921a4cae6353863c38da8c4599b289c3319
1                      ThinkPad ACPI Extras Driver
3                             Version 0.14
4                           April 21st, 2007
6                Borislav Deianov <borislav@users.sf.net>
7              Henrique de Moraes Holschuh <hmh@hmh.eng.br>
8                       http://ibm-acpi.sf.net/
11 This is a Linux driver for the IBM and Lenovo ThinkPad laptops. It
12 supports various features of these laptops which are accessible
13 through the ACPI and ACPI EC framework, but not otherwise fully
14 supported by the generic Linux ACPI drivers.
16 This driver used to be named ibm-acpi until kernel 2.6.21 and release
17 0.13-20070314.  It used to be in the drivers/acpi tree, but it was
18 moved to the drivers/misc tree and renamed to thinkpad-acpi for kernel
19 2.6.22, and release 0.14.
22 Status
23 ------
25 The features currently supported are the following (see below for
26 detailed description):
28         - Fn key combinations
29         - Bluetooth enable and disable
30         - video output switching, expansion control
31         - ThinkLight on and off
32         - limited docking and undocking
33         - UltraBay eject
34         - CMOS control
35         - LED control
36         - ACPI sounds
37         - temperature sensors
38         - Experimental: embedded controller register dump
39         - LCD brightness control
40         - Volume control
41         - Fan control and monitoring: fan speed, fan enable/disable
42         - Experimental: WAN enable and disable
44 A compatibility table by model and feature is maintained on the web
45 site, http://ibm-acpi.sf.net/. I appreciate any success or failure
46 reports, especially if they add to or correct the compatibility table.
47 Please include the following information in your report:
49         - ThinkPad model name
50         - a copy of your DSDT, from /proc/acpi/dsdt
51         - a copy of the output of dmidecode, with serial numbers
52           and UUIDs masked off
53         - which driver features work and which don't
54         - the observed behavior of non-working features
56 Any other comments or patches are also more than welcome.
59 Installation
60 ------------
62 If you are compiling this driver as included in the Linux kernel
63 sources, simply enable the CONFIG_THINKPAD_ACPI option, and optionally
64 enable the CONFIG_THINKPAD_ACPI_BAY option if you want the
65 thinkpad-specific bay functionality.
67 Features
68 --------
70 The driver exports two different interfaces to userspace, which can be
71 used to access the features it provides.  One is a legacy procfs-based
72 interface, which will be removed at some time in the distant future.
73 The other is a new sysfs-based interface which is not complete yet.
75 The procfs interface creates the /proc/acpi/ibm directory.  There is a
76 file under that directory for each feature it supports.  The procfs
77 interface is mostly frozen, and will change very little if at all: it
78 will not be extended to add any new functionality in the driver, instead
79 all new functionality will be implemented on the sysfs interface.
81 The sysfs interface tries to blend in the generic Linux sysfs subsystems
82 and classes as much as possible.  Since some of these subsystems are not
83 yet ready or stabilized, it is expected that this interface will change,
84 and any and all userspace programs must deal with it.
87 Notes about the sysfs interface:
89 Unlike what was done with the procfs interface, correctness when talking
90 to the sysfs interfaces will be enforced, as will correctness in the
91 thinkpad-acpi's implementation of sysfs interfaces.
93 Also, any bugs in the thinkpad-acpi sysfs driver code or in the
94 thinkpad-acpi's implementation of the sysfs interfaces will be fixed for
95 maximum correctness, even if that means changing an interface in
96 non-compatible ways.  As these interfaces mature both in the kernel and
97 in thinkpad-acpi, such changes should become quite rare.
99 Applications interfacing to the thinkpad-acpi sysfs interfaces must
100 follow all sysfs guidelines and correctly process all errors (the sysfs
101 interface makes extensive use of errors).  File descriptors and open /
102 close operations to the sysfs inodes must also be properly implemented.
104 The version of thinkpad-acpi's sysfs interface is exported by the driver
105 as a driver attribute (see below).
107 Sysfs driver attributes are on the driver's sysfs attribute space,
108 for 2.6.20 this is /sys/bus/platform/drivers/thinkpad-acpi/.
110 Sysfs device attributes are on the driver's sysfs attribute space,
111 for 2.6.20 this is /sys/devices/platform/thinkpad-acpi/.
113 Driver version
114 --------------
116 procfs: /proc/acpi/ibm/driver
117 sysfs driver attribute: version
119 The driver name and version. No commands can be written to this file.
121 Sysfs interface version
122 -----------------------
124 sysfs driver attribute: interface_version
126 Version of the thinkpad-acpi sysfs interface, as an unsigned long
127 (output in hex format: 0xAAAABBCC), where:
128         AAAA - major revision
129         BB - minor revision
130         CC - bugfix revision
132 The sysfs interface version changelog for the driver can be found at the
133 end of this document.  Changes to the sysfs interface done by the kernel
134 subsystems are not documented here, nor are they tracked by this
135 attribute.
137 Changes to the thinkpad-acpi sysfs interface are only considered
138 non-experimental when they are submitted to Linux mainline, at which
139 point the changes in this interface are documented and interface_version
140 may be updated.  If you are using any thinkpad-acpi features not yet
141 sent to mainline for merging, you do so on your own risk: these features
142 may disappear, or be implemented in a different and incompatible way by
143 the time they are merged in Linux mainline.
145 Changes that are backwards-compatible by nature (e.g. the addition of
146 attributes that do not change the way the other attributes work) do not
147 always warrant an update of interface_version.  Therefore, one must
148 expect that an attribute might not be there, and deal with it properly
149 (an attribute not being there *is* a valid way to make it clear that a
150 feature is not available in sysfs).
152 Hot keys
153 --------
155 procfs: /proc/acpi/ibm/hotkey
156 sysfs device attribute: hotkey_*
158 Without this driver, only the Fn-F4 key (sleep button) generates an
159 ACPI event. With the driver loaded, the hotkey feature enabled and the
160 mask set (see below), the various hot keys generate ACPI events in the
161 following format:
163         ibm/hotkey HKEY 00000080 0000xxxx
165 The last four digits vary depending on the key combination pressed.
166 All labeled Fn-Fx key combinations generate distinct events. In
167 addition, the lid microswitch and some docking station buttons may
168 also generate such events.
170 Hot keys also generate regular keyboard key press/release events through
171 the input layer in addition to the ibm/hotkey ACPI events.  The input
172 layer support accepts the standard IOCTLs to remap the keycodes assigned
173 to each hotkey.
175 When the input device is open, the driver will suppress any ACPI hot key
176 events that get translated into a meaningful input layer event, in order
177 to avoid sending duplicate events to userspace.  Hot keys that are
178 mapped to KEY_RESERVED are not translated, and will always generate only
179 ACPI hot key event, and no input layer events.
181 The bit mask allows some control over which hot keys generate ACPI
182 events. Not all bits in the mask can be modified. Not all bits that can
183 be modified do anything. Not all hot keys can be individually controlled
184 by the mask. Some models do not support the mask at all. On those
185 models, hot keys cannot be controlled individually.
187 Note that enabling ACPI events for some keys prevents their default
188 behavior. For example, if events for Fn-F5 are enabled, that key will no
189 longer enable/disable Bluetooth by itself. This can still be done from
190 an acpid handler for the ibm/hotkey event.
192 On some models, even enabling/disabling the entire hot key feature may
193 change the way some keys behave (e.g. in a T43, Fn+F4 will generate an
194 button/sleep ACPI event if hot keys are disabled, and it will ignore its
195 mask when hot keys are enabled, so the key always does something.  On a
196 X40, Fn+F4 respects its mask status, but generates the button/sleep ACPI
197 event if masked off).
199 Note also that not all Fn key combinations are supported through
200 ACPI. For example, on the X40, the brightness, volume and "Access IBM"
201 buttons do not generate ACPI events even with this driver. They *can*
202 be used through the "ThinkPad Buttons" utility, see
203 http://www.nongnu.org/tpb/
205 procfs notes:
207 The following commands can be written to the /proc/acpi/ibm/hotkey file:
209         echo enable > /proc/acpi/ibm/hotkey -- enable the hot keys feature
210         echo disable > /proc/acpi/ibm/hotkey -- disable the hot keys feature
211         echo 0xffffffff > /proc/acpi/ibm/hotkey -- enable all hot keys
212         echo 0 > /proc/acpi/ibm/hotkey -- disable all possible hot keys
213         ... any other 8-hex-digit mask ...
214         echo reset > /proc/acpi/ibm/hotkey -- restore the original mask
216 sysfs notes:
218         hotkey_bios_enabled:
219                 Returns the status of the hot keys feature when
220                 thinkpad-acpi was loaded.  Upon module unload, the hot
221                 key feature status will be restored to this value.
223                 0: hot keys were disabled
224                 1: hot keys were enabled
226         hotkey_bios_mask:
227                 Returns the hot keys mask when thinkpad-acpi was loaded.
228                 Upon module unload, the hot keys mask will be restored
229                 to this value.
231         hotkey_enable:
232                 Enables/disables the hot keys feature, and reports
233                 current status of the hot keys feature.
235                 0: disables the hot keys feature / feature disabled
236                 1: enables the hot keys feature / feature enabled
238         hotkey_mask:
239                 bit mask to enable ACPI event generation for each hot
240                 key (see above).  Returns the current status of the hot
241                 keys mask, and allows one to modify it.
243         hotkey_all_mask:
244                 bit mask that should enable event reporting for all
245                 supported hot keys, when echoed to hotkey_mask above.
246                 Unless you know which events need to be handled
247                 passively (because the firmware *will* handle them
248                 anyway), do *not* use hotkey_all_mask.  Use
249                 hotkey_recommended_mask, instead. You have been warned.
251         hotkey_recommended_mask:
252                 bit mask that should enable event reporting for all
253                 supported hot keys, except those which are handled by
254                 the firmware.  Echo it to hotkey_mask above, to use.
256         hotkey_radio_sw:
257                 if the ThinkPad has a hardware radio switch, this
258                 attribute will read 0 if the switch is in the "radios
259                 disabled" postition, and 1 if the switch is in the
260                 "radios enabled" position.
262 input layer notes:
264 A Hot key is mapped to a single input layer EV_KEY event, possibly
265 followed by an EV_MSC MSC_SCAN event that shall contain that key's scan
266 code.  An EV_SYN event will always be generated to mark the end of the
267 event block.
269 Do not use the EV_MSC MSC_SCAN events to process keys.  They are to be
270 used as a helper to remap keys, only.  They are particularly useful when
271 remapping KEY_UNKNOWN keys.
273 The events are available in an input device, with the following id:
275         Bus:            BUS_HOST
276         vendor:         0x1014 (PCI_VENDOR_ID_IBM)
277         product:        0x5054 ("TP")
278         version:        0x4101
280 The version will have its LSB incremented if the keymap changes in a
281 backwards-compatible way.  The MSB shall always be 0x41 for this input
282 device.  If the MSB is not 0x41, do not use the device as described in
283 this section, as it is either something else (e.g. another input device
284 exported by a thinkpad driver, such as HDAPS) or its functionality has
285 been changed in a non-backwards compatible way.
287 Adding other event types for other functionalities shall be considered a
288 backwards-compatible change for this input device.
290 Thinkpad-acpi Hot Key event map (version 0x4101):
292 ACPI    Scan
293 event   code    Key             Notes
295 0x1001  0x00    FN+F1           -
296 0x1002  0x01    FN+F2           -
298 0x1003  0x02    FN+F3           Many models always report this
299                                 hot key, even with hot keys
300                                 disabled or with Fn+F3 masked
301                                 off
303 0x1004  0x03    FN+F4           Sleep button (ACPI sleep button
304                                 semanthics, i.e. sleep-to-RAM).
305                                 It is always generate some kind
306                                 of event, either the hot key
307                                 event or a ACPI sleep button
308                                 event. The firmware may
309                                 refuse to generate further FN+F4
310                                 key presses until a S3 or S4 ACPI
311                                 sleep cycle is performed or some
312                                 time passes.
314 0x1005  0x04    FN+F5           Radio.  Enables/disables
315                                 the internal BlueTooth hardware
316                                 and W-WAN card if left in control
317                                 of the firmware.  Does not affect
318                                 the WLAN card.
320 0x1006  0x05    FN+F6           -
322 0x1007  0x06    FN+F7           Video output cycle.
323                                 Do you feel lucky today?
325 0x1008  0x07    FN+F8           -
326         ..      ..              ..
327 0x100B  0x0A    FN+F11          -
329 0x100C  0x0B    FN+F12          Sleep to disk.  You are always
330                                 supposed to handle it yourself,
331                                 either through the ACPI event,
332                                 or through a hotkey event.
333                                 The firmware may refuse to
334                                 generate further FN+F4 key
335                                 press events until a S3 or S4
336                                 ACPI sleep cycle is performed,
337                                 or some time passes.
339 0x100D  0x0C    FN+BACKSPACE    -
340 0x100E  0x0D    FN+INSERT       -
341 0x100F  0x0E    FN+DELETE       -
343 0x1010  0x0F    FN+HOME         Brightness up.  This key is
344                                 always handled by the firmware,
345                                 even when unmasked.  Just leave
346                                 it alone.
347 0x1011  0x10    FN+END          Brightness down. This key is
348                                 always handled by the firmware,
349                                 even when unmasked.  Just leave
350                                 it alone.
351 0x1012  0x11    FN+PGUP         Thinklight toggle.  This key is
352                                 always handled by the firmware,
353                                 even when unmasked.
355 0x1013  0x12    FN+PGDOWN       -
357 0x1014  0x13    FN+SPACE        Zoom key
359 0x1015  0x14    VOLUME UP       Internal mixer volume up. This
360                                 key is always handled by the
361                                 firmware, even when unmasked.
362 0x1016  0x15    VOLUME DOWN     Internal mixer volume up. This
363                                 key is always handled by the
364                                 firmware, even when unmasked.
365 0x1017  0x16    MUTE            Mute internal mixer. This
366                                 key is always handled by the
367                                 firmware, even when unmasked.
369 0x1018  0x17    THINKPAD        Thinkpad/Access IBM/Lenovo key
371 0x1019  0x18    unknown
372 ..      ..      ..
373 0x1020  0x1F    unknown
375 The ThinkPad firmware does not allow one to differentiate when most hot
376 keys are pressed or released (either that, or we don't know how to, yet).
377 For these keys, the driver generates a set of events for a key press and
378 immediately issues the same set of events for a key release.  It is
379 unknown by the driver if the ThinkPad firmware triggered these events on
380 hot key press or release, but the firmware will do it for either one, not
381 both.
383 If a key is mapped to KEY_RESERVED, it generates no input events at all,
384 and it may generate a legacy thinkpad-acpi ACPI hotkey event.
386 If a key is mapped to KEY_UNKNOWN, it generates an input event that
387 includes an scan code, and it may also generate a legacy thinkpad-acpi
388 ACPI hotkey event.
390 If a key is mapped to anything else, it will only generate legacy
391 thinkpad-acpi ACPI hotkey events if nobody has opened the input device.
393 For userspace backwards-compatibility purposes, the keycode map is
394 initially filled with KEY_RESERVED and KEY_UNKNOWN mappings for scan codes
395 0x00 to 0x10 (and maybe others).
397 Non hot-key ACPI HKEY event map:
398 0x5001          Lid closed
399 0x5002          Lid opened
400 0x7000          Radio Switch may have changed state
403 Bluetooth
404 ---------
406 procfs: /proc/acpi/ibm/bluetooth
407 sysfs device attribute: bluetooth_enable
409 This feature shows the presence and current state of a ThinkPad
410 Bluetooth device in the internal ThinkPad CDC slot.
412 Procfs notes:
414 If Bluetooth is installed, the following commands can be used:
416         echo enable > /proc/acpi/ibm/bluetooth
417         echo disable > /proc/acpi/ibm/bluetooth
419 Sysfs notes:
421         If the Bluetooth CDC card is installed, it can be enabled /
422         disabled through the "bluetooth_enable" thinkpad-acpi device
423         attribute, and its current status can also be queried.
425         enable:
426                 0: disables Bluetooth / Bluetooth is disabled
427                 1: enables Bluetooth / Bluetooth is enabled.
429         Note: this interface will be probably be superseeded by the
430         generic rfkill class, so it is NOT to be considered stable yet.
432 Video output control -- /proc/acpi/ibm/video
433 --------------------------------------------
435 This feature allows control over the devices used for video output -
436 LCD, CRT or DVI (if available). The following commands are available:
438         echo lcd_enable > /proc/acpi/ibm/video
439         echo lcd_disable > /proc/acpi/ibm/video
440         echo crt_enable > /proc/acpi/ibm/video
441         echo crt_disable > /proc/acpi/ibm/video
442         echo dvi_enable > /proc/acpi/ibm/video
443         echo dvi_disable > /proc/acpi/ibm/video
444         echo auto_enable > /proc/acpi/ibm/video
445         echo auto_disable > /proc/acpi/ibm/video
446         echo expand_toggle > /proc/acpi/ibm/video
447         echo video_switch > /proc/acpi/ibm/video
449 Each video output device can be enabled or disabled individually.
450 Reading /proc/acpi/ibm/video shows the status of each device.
452 Automatic video switching can be enabled or disabled.  When automatic
453 video switching is enabled, certain events (e.g. opening the lid,
454 docking or undocking) cause the video output device to change
455 automatically. While this can be useful, it also causes flickering
456 and, on the X40, video corruption. By disabling automatic switching,
457 the flickering or video corruption can be avoided.
459 The video_switch command cycles through the available video outputs
460 (it simulates the behavior of Fn-F7).
462 Video expansion can be toggled through this feature. This controls
463 whether the display is expanded to fill the entire LCD screen when a
464 mode with less than full resolution is used. Note that the current
465 video expansion status cannot be determined through this feature.
467 Note that on many models (particularly those using Radeon graphics
468 chips) the X driver configures the video card in a way which prevents
469 Fn-F7 from working. This also disables the video output switching
470 features of this driver, as it uses the same ACPI methods as
471 Fn-F7. Video switching on the console should still work.
473 UPDATE: There's now a patch for the X.org Radeon driver which
474 addresses this issue. Some people are reporting success with the patch
475 while others are still having problems. For more information:
477 https://bugs.freedesktop.org/show_bug.cgi?id=2000
479 ThinkLight control -- /proc/acpi/ibm/light
480 ------------------------------------------
482 The current status of the ThinkLight can be found in this file. A few
483 models which do not make the status available will show it as
484 "unknown". The available commands are:
486         echo on  > /proc/acpi/ibm/light
487         echo off > /proc/acpi/ibm/light
489 Docking / undocking -- /proc/acpi/ibm/dock
490 ------------------------------------------
492 Docking and undocking (e.g. with the X4 UltraBase) requires some
493 actions to be taken by the operating system to safely make or break
494 the electrical connections with the dock.
496 The docking feature of this driver generates the following ACPI events:
498         ibm/dock GDCK 00000003 00000001 -- eject request
499         ibm/dock GDCK 00000003 00000002 -- undocked
500         ibm/dock GDCK 00000000 00000003 -- docked
502 NOTE: These events will only be generated if the laptop was docked
503 when originally booted. This is due to the current lack of support for
504 hot plugging of devices in the Linux ACPI framework. If the laptop was
505 booted while not in the dock, the following message is shown in the
506 logs:
508         Mar 17 01:42:34 aero kernel: thinkpad_acpi: dock device not present
510 In this case, no dock-related events are generated but the dock and
511 undock commands described below still work. They can be executed
512 manually or triggered by Fn key combinations (see the example acpid
513 configuration files included in the driver tarball package available
514 on the web site).
516 When the eject request button on the dock is pressed, the first event
517 above is generated. The handler for this event should issue the
518 following command:
520         echo undock > /proc/acpi/ibm/dock
522 After the LED on the dock goes off, it is safe to eject the laptop.
523 Note: if you pressed this key by mistake, go ahead and eject the
524 laptop, then dock it back in. Otherwise, the dock may not function as
525 expected.
527 When the laptop is docked, the third event above is generated. The
528 handler for this event should issue the following command to fully
529 enable the dock:
531         echo dock > /proc/acpi/ibm/dock
533 The contents of the /proc/acpi/ibm/dock file shows the current status
534 of the dock, as provided by the ACPI framework.
536 The docking support in this driver does not take care of enabling or
537 disabling any other devices you may have attached to the dock. For
538 example, a CD drive plugged into the UltraBase needs to be disabled or
539 enabled separately. See the provided example acpid configuration files
540 for how this can be accomplished.
542 There is no support yet for PCI devices that may be attached to a
543 docking station, e.g. in the ThinkPad Dock II. The driver currently
544 does not recognize, enable or disable such devices. This means that
545 the only docking stations currently supported are the X-series
546 UltraBase docks and "dumb" port replicators like the Mini Dock (the
547 latter don't need any ACPI support, actually).
549 UltraBay eject -- /proc/acpi/ibm/bay
550 ------------------------------------
552 Inserting or ejecting an UltraBay device requires some actions to be
553 taken by the operating system to safely make or break the electrical
554 connections with the device.
556 This feature generates the following ACPI events:
558         ibm/bay MSTR 00000003 00000000 -- eject request
559         ibm/bay MSTR 00000001 00000000 -- eject lever inserted
561 NOTE: These events will only be generated if the UltraBay was present
562 when the laptop was originally booted (on the X series, the UltraBay
563 is in the dock, so it may not be present if the laptop was undocked).
564 This is due to the current lack of support for hot plugging of devices
565 in the Linux ACPI framework. If the laptop was booted without the
566 UltraBay, the following message is shown in the logs:
568         Mar 17 01:42:34 aero kernel: thinkpad_acpi: bay device not present
570 In this case, no bay-related events are generated but the eject
571 command described below still works. It can be executed manually or
572 triggered by a hot key combination.
574 Sliding the eject lever generates the first event shown above. The
575 handler for this event should take whatever actions are necessary to
576 shut down the device in the UltraBay (e.g. call idectl), then issue
577 the following command:
579         echo eject > /proc/acpi/ibm/bay
581 After the LED on the UltraBay goes off, it is safe to pull out the
582 device.
584 When the eject lever is inserted, the second event above is
585 generated. The handler for this event should take whatever actions are
586 necessary to enable the UltraBay device (e.g. call idectl).
588 The contents of the /proc/acpi/ibm/bay file shows the current status
589 of the UltraBay, as provided by the ACPI framework.
591 EXPERIMENTAL warm eject support on the 600e/x, A22p and A3x (To use
592 this feature, you need to supply the experimental=1 parameter when
593 loading the module):
595 These models do not have a button near the UltraBay device to request
596 a hot eject but rather require the laptop to be put to sleep
597 (suspend-to-ram) before the bay device is ejected or inserted).
598 The sequence of steps to eject the device is as follows:
600         echo eject > /proc/acpi/ibm/bay
601         put the ThinkPad to sleep
602         remove the drive
603         resume from sleep
604         cat /proc/acpi/ibm/bay should show that the drive was removed
606 On the A3x, both the UltraBay 2000 and UltraBay Plus devices are
607 supported. Use "eject2" instead of "eject" for the second bay.
609 Note: the UltraBay eject support on the 600e/x, A22p and A3x is
610 EXPERIMENTAL and may not work as expected. USE WITH CAUTION!
612 CMOS control
613 ------------
615 procfs: /proc/acpi/ibm/cmos
616 sysfs device attribute: cmos_command
618 This feature is mostly used internally by the ACPI firmware to keep the legacy
619 CMOS NVRAM bits in sync with the current machine state, and to record this
620 state so that the ThinkPad will retain such settings across reboots.
622 Some of these commands actually perform actions in some ThinkPad models, but
623 this is expected to disappear more and more in newer models.  As an example, in
624 a T43 and in a X40, commands 12 and 13 still control the ThinkLight state for
625 real, but commands 0 to 2 don't control the mixer anymore (they have been
626 phased out) and just update the NVRAM.
628 The range of valid cmos command numbers is 0 to 21, but not all have an
629 effect and the behavior varies from model to model.  Here is the behavior
630 on the X40 (tpb is the ThinkPad Buttons utility):
632         0 - Related to "Volume down" key press
633         1 - Related to "Volume up" key press
634         2 - Related to "Mute on" key press
635         3 - Related to "Access IBM" key press
636         4 - Related to "LCD brightness up" key pess
637         5 - Related to "LCD brightness down" key press
638         11 - Related to "toggle screen expansion" key press/function
639         12 - Related to "ThinkLight on"
640         13 - Related to "ThinkLight off"
641         14 - Related to "ThinkLight" key press (toggle thinklight)
643 The cmos command interface is prone to firmware split-brain problems, as
644 in newer ThinkPads it is just a compatibility layer.  Do not use it, it is
645 exported just as a debug tool.
647 LED control -- /proc/acpi/ibm/led
648 ---------------------------------
650 Some of the LED indicators can be controlled through this feature. The
651 available commands are:
653         echo '<led number> on' >/proc/acpi/ibm/led
654         echo '<led number> off' >/proc/acpi/ibm/led
655         echo '<led number> blink' >/proc/acpi/ibm/led
657 The <led number> range is 0 to 7. The set of LEDs that can be
658 controlled varies from model to model. Here is the mapping on the X40:
660         0 - power
661         1 - battery (orange)
662         2 - battery (green)
663         3 - UltraBase
664         4 - UltraBay
665         7 - standby
667 All of the above can be turned on and off and can be made to blink.
669 ACPI sounds -- /proc/acpi/ibm/beep
670 ----------------------------------
672 The BEEP method is used internally by the ACPI firmware to provide
673 audible alerts in various situations. This feature allows the same
674 sounds to be triggered manually.
676 The commands are non-negative integer numbers:
678         echo <number> >/proc/acpi/ibm/beep
680 The valid <number> range is 0 to 17. Not all numbers trigger sounds
681 and the sounds vary from model to model. Here is the behavior on the
682 X40:
684         0 - stop a sound in progress (but use 17 to stop 16)
685         2 - two beeps, pause, third beep ("low battery")
686         3 - single beep
687         4 - high, followed by low-pitched beep ("unable")
688         5 - single beep
689         6 - very high, followed by high-pitched beep ("AC/DC")
690         7 - high-pitched beep
691         9 - three short beeps
692         10 - very long beep
693         12 - low-pitched beep
694         15 - three high-pitched beeps repeating constantly, stop with 0
695         16 - one medium-pitched beep repeating constantly, stop with 17
696         17 - stop 16
698 Temperature sensors
699 -------------------
701 procfs: /proc/acpi/ibm/thermal
702 sysfs device attributes: (hwmon) temp*_input
704 Most ThinkPads include six or more separate temperature sensors but
705 only expose the CPU temperature through the standard ACPI methods.
706 This feature shows readings from up to eight different sensors on older
707 ThinkPads, and it has experimental support for up to sixteen different
708 sensors on newer ThinkPads.
710 EXPERIMENTAL: The 16-sensors feature is marked EXPERIMENTAL because the
711 implementation directly accesses hardware registers and may not work as
712 expected. USE WITH CAUTION! To use this feature, you need to supply the
713 experimental=1 parameter when loading the module.  When EXPERIMENTAL
714 mode is enabled, reading the first 8 sensors on newer ThinkPads will
715 also use an new experimental thermal sensor access mode.
717 For example, on the X40, a typical output may be:
718 temperatures:   42 42 45 41 36 -128 33 -128
720 EXPERIMENTAL: On the T43/p, a typical output may be:
721 temperatures:   48 48 36 52 38 -128 31 -128 48 52 48 -128 -128 -128 -128 -128
723 The mapping of thermal sensors to physical locations varies depending on
724 system-board model (and thus, on ThinkPad model).
726 http://thinkwiki.org/wiki/Thermal_Sensors is a public wiki page that
727 tries to track down these locations for various models.
729 Most (newer?) models seem to follow this pattern:
731 1:  CPU
732 2:  (depends on model)
733 3:  (depends on model)
734 4:  GPU
735 5:  Main battery: main sensor
736 6:  Bay battery: main sensor
737 7:  Main battery: secondary sensor
738 8:  Bay battery: secondary sensor
739 9-15: (depends on model)
741 For the R51 (source: Thomas Gruber):
742 2:  Mini-PCI
743 3:  Internal HDD
745 For the T43, T43/p (source: Shmidoax/Thinkwiki.org)
746 http://thinkwiki.org/wiki/Thermal_Sensors#ThinkPad_T43.2C_T43p
747 2:  System board, left side (near PCMCIA slot), reported as HDAPS temp
748 3:  PCMCIA slot
749 9:  MCH (northbridge) to DRAM Bus
750 10: Clock-generator, mini-pci card and ICH (southbridge), under Mini-PCI
751     card, under touchpad
752 11: Power regulator, underside of system board, below F2 key
754 The A31 has a very atypical layout for the thermal sensors
755 (source: Milos Popovic, http://thinkwiki.org/wiki/Thermal_Sensors#ThinkPad_A31)
756 1:  CPU
757 2:  Main Battery: main sensor
758 3:  Power Converter
759 4:  Bay Battery: main sensor
760 5:  MCH (northbridge)
761 6:  PCMCIA/ambient
762 7:  Main Battery: secondary sensor
763 8:  Bay Battery: secondary sensor
766 Procfs notes:
767         Readings from sensors that are not available return -128.
768         No commands can be written to this file.
770 Sysfs notes:
771         Sensors that are not available return the ENXIO error.  This
772         status may change at runtime, as there are hotplug thermal
773         sensors, like those inside the batteries and docks.
775         thinkpad-acpi thermal sensors are reported through the hwmon
776         subsystem, and follow all of the hwmon guidelines at
777         Documentation/hwmon.
780 EXPERIMENTAL: Embedded controller register dump -- /proc/acpi/ibm/ecdump
781 ------------------------------------------------------------------------
783 This feature is marked EXPERIMENTAL because the implementation
784 directly accesses hardware registers and may not work as expected. USE
785 WITH CAUTION! To use this feature, you need to supply the
786 experimental=1 parameter when loading the module.
788 This feature dumps the values of 256 embedded controller
789 registers. Values which have changed since the last time the registers
790 were dumped are marked with a star:
792 [root@x40 ibm-acpi]# cat /proc/acpi/ibm/ecdump
793 EC       +00 +01 +02 +03 +04 +05 +06 +07 +08 +09 +0a +0b +0c +0d +0e +0f
794 EC 0x00:  a7  47  87  01  fe  96  00  08  01  00  cb  00  00  00  40  00
795 EC 0x10:  00  00  ff  ff  f4  3c  87  09  01  ff  42  01  ff  ff  0d  00
796 EC 0x20:  00  00  00  00  00  00  00  00  00  00  00  03  43  00  00  80
797 EC 0x30:  01  07  1a  00  30  04  00  00 *85  00  00  10  00  50  00  00
798 EC 0x40:  00  00  00  00  00  00  14  01  00  04  00  00  00  00  00  00
799 EC 0x50:  00  c0  02  0d  00  01  01  02  02  03  03  03  03 *bc *02 *bc
800 EC 0x60: *02 *bc *02  00  00  00  00  00  00  00  00  00  00  00  00  00
801 EC 0x70:  00  00  00  00  00  12  30  40 *24 *26 *2c *27 *20  80 *1f  80
802 EC 0x80:  00  00  00  06 *37 *0e  03  00  00  00  0e  07  00  00  00  00
803 EC 0x90:  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
804 EC 0xa0: *ff  09  ff  09  ff  ff *64  00 *00 *00 *a2  41 *ff *ff *e0  00
805 EC 0xb0:  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
806 EC 0xc0:  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
807 EC 0xd0:  03  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
808 EC 0xe0:  00  00  00  00  00  00  00  00  11  20  49  04  24  06  55  03
809 EC 0xf0:  31  55  48  54  35  38  57  57  08  2f  45  73  07  65  6c  1a
811 This feature can be used to determine the register holding the fan
812 speed on some models. To do that, do the following:
814         - make sure the battery is fully charged
815         - make sure the fan is running
816         - run 'cat /proc/acpi/ibm/ecdump' several times, once per second or so
818 The first step makes sure various charging-related values don't
819 vary. The second ensures that the fan-related values do vary, since
820 the fan speed fluctuates a bit. The third will (hopefully) mark the
821 fan register with a star:
823 [root@x40 ibm-acpi]# cat /proc/acpi/ibm/ecdump
824 EC       +00 +01 +02 +03 +04 +05 +06 +07 +08 +09 +0a +0b +0c +0d +0e +0f
825 EC 0x00:  a7  47  87  01  fe  96  00  08  01  00  cb  00  00  00  40  00
826 EC 0x10:  00  00  ff  ff  f4  3c  87  09  01  ff  42  01  ff  ff  0d  00
827 EC 0x20:  00  00  00  00  00  00  00  00  00  00  00  03  43  00  00  80
828 EC 0x30:  01  07  1a  00  30  04  00  00  85  00  00  10  00  50  00  00
829 EC 0x40:  00  00  00  00  00  00  14  01  00  04  00  00  00  00  00  00
830 EC 0x50:  00  c0  02  0d  00  01  01  02  02  03  03  03  03  bc  02  bc
831 EC 0x60:  02  bc  02  00  00  00  00  00  00  00  00  00  00  00  00  00
832 EC 0x70:  00  00  00  00  00  12  30  40  24  27  2c  27  21  80  1f  80
833 EC 0x80:  00  00  00  06 *be  0d  03  00  00  00  0e  07  00  00  00  00
834 EC 0x90:  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
835 EC 0xa0:  ff  09  ff  09  ff  ff  64  00  00  00  a2  41  ff  ff  e0  00
836 EC 0xb0:  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
837 EC 0xc0:  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
838 EC 0xd0:  03  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
839 EC 0xe0:  00  00  00  00  00  00  00  00  11  20  49  04  24  06  55  03
840 EC 0xf0:  31  55  48  54  35  38  57  57  08  2f  45  73  07  65  6c  1a
842 Another set of values that varies often is the temperature
843 readings. Since temperatures don't change vary fast, you can take
844 several quick dumps to eliminate them.
846 You can use a similar method to figure out the meaning of other
847 embedded controller registers - e.g. make sure nothing else changes
848 except the charging or discharging battery to determine which
849 registers contain the current battery capacity, etc. If you experiment
850 with this, do send me your results (including some complete dumps with
851 a description of the conditions when they were taken.)
853 LCD brightness control
854 ----------------------
856 procfs: /proc/acpi/ibm/brightness
857 sysfs backlight device "thinkpad_screen"
859 This feature allows software control of the LCD brightness on ThinkPad
860 models which don't have a hardware brightness slider.
862 It has some limitations: the LCD backlight cannot be actually turned on or off
863 by this interface, and in many ThinkPad models, the "dim while on battery"
864 functionality will be enabled by the BIOS when this interface is used, and
865 cannot be controlled.
867 The backlight control has eight levels, ranging from 0 to 7.  Some of the
868 levels may not be distinct.
870 Procfs notes:
872         The available commands are:
874         echo up   >/proc/acpi/ibm/brightness
875         echo down >/proc/acpi/ibm/brightness
876         echo 'level <level>' >/proc/acpi/ibm/brightness
878 Sysfs notes:
880 The interface is implemented through the backlight sysfs class, which is poorly
881 documented at this time.
883 Locate the thinkpad_screen device under /sys/class/backlight, and inside it
884 there will be the following attributes:
886         max_brightness:
887                 Reads the maximum brightness the hardware can be set to.
888                 The minimum is always zero.
890         actual_brightness:
891                 Reads what brightness the screen is set to at this instant.
893         brightness:
894                 Writes request the driver to change brightness to the given
895                 value.  Reads will tell you what brightness the driver is trying
896                 to set the display to when "power" is set to zero and the display
897                 has not been dimmed by a kernel power management event.
899         power:
900                 power management mode, where 0 is "display on", and 1 to 3 will
901                 dim the display backlight to brightness level 0 because
902                 thinkpad-acpi cannot really turn the backlight off.  Kernel
903                 power management events can temporarily increase the current
904                 power management level, i.e. they can dim the display.
907 Volume control -- /proc/acpi/ibm/volume
908 ---------------------------------------
910 This feature allows volume control on ThinkPad models which don't have
911 a hardware volume knob. The available commands are:
913         echo up   >/proc/acpi/ibm/volume
914         echo down >/proc/acpi/ibm/volume
915         echo mute >/proc/acpi/ibm/volume
916         echo 'level <level>' >/proc/acpi/ibm/volume
918 The <level> number range is 0 to 15 although not all of them may be
919 distinct. The unmute the volume after the mute command, use either the
920 up or down command (the level command will not unmute the volume).
921 The current volume level and mute state is shown in the file.
923 Fan control and monitoring: fan speed, fan enable/disable
924 ---------------------------------------------------------
926 procfs: /proc/acpi/ibm/fan
927 sysfs device attributes: (hwmon) fan_input, pwm1, pwm1_enable
929 NOTE NOTE NOTE: fan control operations are disabled by default for
930 safety reasons.  To enable them, the module parameter "fan_control=1"
931 must be given to thinkpad-acpi.
933 This feature attempts to show the current fan speed, control mode and
934 other fan data that might be available.  The speed is read directly
935 from the hardware registers of the embedded controller.  This is known
936 to work on later R, T, X and Z series ThinkPads but may show a bogus
937 value on other models.
939 Fan levels:
941 Most ThinkPad fans work in "levels" at the firmware interface.  Level 0
942 stops the fan.  The higher the level, the higher the fan speed, although
943 adjacent levels often map to the same fan speed.  7 is the highest
944 level, where the fan reaches the maximum recommended speed.
946 Level "auto" means the EC changes the fan level according to some
947 internal algorithm, usually based on readings from the thermal sensors.
949 There is also a "full-speed" level, also known as "disengaged" level.
950 In this level, the EC disables the speed-locked closed-loop fan control,
951 and drives the fan as fast as it can go, which might exceed hardware
952 limits, so use this level with caution.
954 The fan usually ramps up or down slowly from one speed to another, and
955 it is normal for the EC to take several seconds to react to fan
956 commands.  The full-speed level may take up to two minutes to ramp up to
957 maximum speed, and in some ThinkPads, the tachometer readings go stale
958 while the EC is transitioning to the full-speed level.
960 WARNING WARNING WARNING: do not leave the fan disabled unless you are
961 monitoring all of the temperature sensor readings and you are ready to
962 enable it if necessary to avoid overheating.
964 An enabled fan in level "auto" may stop spinning if the EC decides the
965 ThinkPad is cool enough and doesn't need the extra airflow.  This is
966 normal, and the EC will spin the fan up if the varios thermal readings
967 rise too much.
969 On the X40, this seems to depend on the CPU and HDD temperatures.
970 Specifically, the fan is turned on when either the CPU temperature
971 climbs to 56 degrees or the HDD temperature climbs to 46 degrees.  The
972 fan is turned off when the CPU temperature drops to 49 degrees and the
973 HDD temperature drops to 41 degrees.  These thresholds cannot
974 currently be controlled.
976 The ThinkPad's ACPI DSDT code will reprogram the fan on its own when
977 certain conditions are met.  It will override any fan programming done
978 through thinkpad-acpi.
980 The thinkpad-acpi kernel driver can be programmed to revert the fan
981 level to a safe setting if userspace does not issue one of the procfs
982 fan commands: "enable", "disable", "level" or "watchdog", or if there
983 are no writes to pwm1_enable (or to pwm1 *if and only if* pwm1_enable is
984 set to 1, manual mode) within a configurable amount of time of up to
985 120 seconds.  This functionality is called fan safety watchdog.
987 Note that the watchdog timer stops after it enables the fan.  It will be
988 rearmed again automatically (using the same interval) when one of the
989 above mentioned fan commands is received.  The fan watchdog is,
990 therefore, not suitable to protect against fan mode changes made through
991 means other than the "enable", "disable", and "level" procfs fan
992 commands, or the hwmon fan control sysfs interface.
994 Procfs notes:
996 The fan may be enabled or disabled with the following commands:
998         echo enable  >/proc/acpi/ibm/fan
999         echo disable >/proc/acpi/ibm/fan
1001 Placing a fan on level 0 is the same as disabling it.  Enabling a fan
1002 will try to place it in a safe level if it is too slow or disabled.
1004 The fan level can be controlled with the command:
1006         echo 'level <level>' > /proc/acpi/ibm/fan
1008 Where <level> is an integer from 0 to 7, or one of the words "auto" or
1009 "full-speed" (without the quotes).  Not all ThinkPads support the "auto"
1010 and "full-speed" levels.  The driver accepts "disengaged" as an alias for
1011 "full-speed", and reports it as "disengaged" for backwards
1012 compatibility.
1014 On the X31 and X40 (and ONLY on those models), the fan speed can be
1015 controlled to a certain degree.  Once the fan is running, it can be
1016 forced to run faster or slower with the following command:
1018         echo 'speed <speed>' > /proc/acpi/ibm/fan
1020 The sustainable range of fan speeds on the X40 appears to be from about
1021 3700 to about 7350. Values outside this range either do not have any
1022 effect or the fan speed eventually settles somewhere in that range.  The
1023 fan cannot be stopped or started with this command.  This functionality
1024 is incomplete, and not available through the sysfs interface.
1026 To program the safety watchdog, use the "watchdog" command.
1028         echo 'watchdog <interval in seconds>' > /proc/acpi/ibm/fan
1030 If you want to disable the watchdog, use 0 as the interval.
1032 Sysfs notes:
1034 The sysfs interface follows the hwmon subsystem guidelines for the most
1035 part, and the exception is the fan safety watchdog.
1037 Writes to any of the sysfs attributes may return the EINVAL error if
1038 that operation is not supported in a given ThinkPad or if the parameter
1039 is out-of-bounds, and EPERM if it is forbidden.  They may also return
1040 EINTR (interrupted system call), and EIO (I/O error while trying to talk
1041 to the firmware).
1043 Features not yet implemented by the driver return ENOSYS.
1045 hwmon device attribute pwm1_enable:
1046         0: PWM offline (fan is set to full-speed mode)
1047         1: Manual PWM control (use pwm1 to set fan level)
1048         2: Hardware PWM control (EC "auto" mode)
1049         3: reserved (Software PWM control, not implemented yet)
1051         Modes 0 and 2 are not supported by all ThinkPads, and the
1052         driver is not always able to detect this.  If it does know a
1053         mode is unsupported, it will return -EINVAL.
1055 hwmon device attribute pwm1:
1056         Fan level, scaled from the firmware values of 0-7 to the hwmon
1057         scale of 0-255.  0 means fan stopped, 255 means highest normal
1058         speed (level 7).
1060         This attribute only commands the fan if pmw1_enable is set to 1
1061         (manual PWM control).
1063 hwmon device attribute fan1_input:
1064         Fan tachometer reading, in RPM.  May go stale on certain
1065         ThinkPads while the EC transitions the PWM to offline mode,
1066         which can take up to two minutes.  May return rubbish on older
1067         ThinkPads.
1069 driver attribute fan_watchdog:
1070         Fan safety watchdog timer interval, in seconds.  Minimum is
1071         1 second, maximum is 120 seconds.  0 disables the watchdog.
1073 To stop the fan: set pwm1 to zero, and pwm1_enable to 1.
1075 To start the fan in a safe mode: set pwm1_enable to 2.  If that fails
1076 with EINVAL, try to set pwm1_enable to 1 and pwm1 to at least 128 (255
1077 would be the safest choice, though).
1080 EXPERIMENTAL: WAN
1081 -----------------
1083 procfs: /proc/acpi/ibm/wan
1084 sysfs device attribute: wwan_enable
1086 This feature is marked EXPERIMENTAL because the implementation
1087 directly accesses hardware registers and may not work as expected. USE
1088 WITH CAUTION! To use this feature, you need to supply the
1089 experimental=1 parameter when loading the module.
1091 This feature shows the presence and current state of a W-WAN (Sierra
1092 Wireless EV-DO) device.
1094 It was tested on a Lenovo Thinkpad X60. It should probably work on other
1095 Thinkpad models which come with this module installed.
1097 Procfs notes:
1099 If the W-WAN card is installed, the following commands can be used:
1101         echo enable > /proc/acpi/ibm/wan
1102         echo disable > /proc/acpi/ibm/wan
1104 Sysfs notes:
1106         If the W-WAN card is installed, it can be enabled /
1107         disabled through the "wwan_enable" thinkpad-acpi device
1108         attribute, and its current status can also be queried.
1110         enable:
1111                 0: disables WWAN card / WWAN card is disabled
1112                 1: enables WWAN card / WWAN card is enabled.
1114         Note: this interface will be probably be superseeded by the
1115         generic rfkill class, so it is NOT to be considered stable yet.
1117 Multiple Commands, Module Parameters
1118 ------------------------------------
1120 Multiple commands can be written to the proc files in one shot by
1121 separating them with commas, for example:
1123         echo enable,0xffff > /proc/acpi/ibm/hotkey
1124         echo lcd_disable,crt_enable > /proc/acpi/ibm/video
1126 Commands can also be specified when loading the thinkpad-acpi module,
1127 for example:
1129         modprobe thinkpad_acpi hotkey=enable,0xffff video=auto_disable
1131 Enabling debugging output
1132 -------------------------
1134 The module takes a debug paramater which can be used to selectively
1135 enable various classes of debugging output, for example:
1137          modprobe ibm_acpi debug=0xffff
1139 will enable all debugging output classes.  It takes a bitmask, so
1140 to enable more than one output class, just add their values.
1142         Debug bitmask           Description
1143         0x0001                  Initialization and probing
1144         0x0002                  Removal
1146 There is also a kernel build option to enable more debugging
1147 information, which may be necessary to debug driver problems.
1149 The level of debugging information output by the driver can be changed
1150 at runtime through sysfs, using the driver attribute debug_level.  The
1151 attribute takes the same bitmask as the debug module parameter above.
1153 Force loading of module
1154 -----------------------
1156 If thinkpad-acpi refuses to detect your ThinkPad, you can try to specify
1157 the module parameter force_load=1.  Regardless of whether this works or
1158 not, please contact ibm-acpi-devel@lists.sourceforge.net with a report.
1161 Sysfs interface changelog:
1163 0x000100:       Initial sysfs support, as a single platform driver and
1164                 device.
1165 0x000200:       Hot key support for 32 hot keys, and radio slider switch
1166                 support.