ThinkPad ACPI 额外驱动程序¶
版本 0.25
2013 年 10 月 16 日
Borislav Deianov <borislav@users.sf.net>
Henrique de Moraes Holschuh <hmh@hmh.eng.br>
这是适用于 IBM 和 Lenovo ThinkPad 笔记本电脑的 Linux 驱动程序。它支持这些笔记本电脑的各种功能,这些功能可以通过 ACPI 和 ACPI EC 框架访问,但通用 Linux ACPI 驱动程序无法完全支持。
在内核 2.6.21 和版本 0.13-20070314 之前,此驱动程序曾被命名为 ibm-acpi。它曾经位于 drivers/acpi 树中,但在内核 2.6.22 和版本 0.14 时,它被移动到 drivers/misc 树并重命名为 thinkpad-acpi。在内核 2.6.29 和版本 0.22 时,它被移动到 drivers/platform/x86。
该驱动程序名为 “thinkpad-acpi”。在某些地方,例如模块名称和日志消息中,由于用户空间问题,使用了 “thinkpad_acpi”。
在某些 Linux 内核版本中,由于长度限制,“tpacpi” 用作 “thinkpad-acpi” 的简写。
状态¶
目前支持的功能如下(有关详细说明,请参见下文)
Fn 键组合
蓝牙启用和禁用
视频输出切换,扩展控制
ThinkLight 开和关
CMOS/UCMS 控制
LED 控制
ACPI 声音
温度传感器
实验性:嵌入式控制器寄存器转储
LCD 亮度控制
音量控制
风扇控制和监控:风扇速度、风扇启用/禁用
WAN 启用和禁用
UWB 启用和禁用
LCD 阴影(PrivacyGuard)启用和禁用
膝上模式传感器
设置键盘语言
WWAN 天线类型
Auxmac
网站上维护了一个按型号和功能划分的兼容性表,http://ibm-acpi.sf.net/。我感谢任何成功或失败的报告,特别是那些添加到或更正兼容性表的报告。请在您的报告中包含以下信息
ThinkPad 型号名称
使用 “acpidump” 实用程序复制您的 ACPI 表
使用 dmidecode 的输出副本,其中已屏蔽序列号和 UUID
哪些驱动程序功能有效,哪些无效
无效功能的观察行为
也欢迎任何其他评论或补丁。
安装¶
如果您要编译此驱动程序(如 Linux 内核源代码中所包含的那样),请查找 CONFIG_THINKPAD_ACPI Kconfig 选项。它位于菜单路径:“Device Drivers” -> “X86 Platform Specific Device Drivers” -> “ThinkPad ACPI Laptop Extras”。
功能¶
该驱动程序向用户空间导出两个不同的接口,可以使用这些接口来访问其提供的功能。一个是基于旧的 procfs 的接口,它将在将来的某个时候被删除。另一个是新的基于 sysfs 的接口,它尚未完成。
procfs 接口创建 /proc/acpi/ibm 目录。在该目录下,每个受支持的功能都有一个文件。procfs 接口基本上是冻结的,即使有变化也会非常小:它不会被扩展以在驱动程序中添加任何新功能,而是所有新功能都将在 sysfs 接口上实现。
sysfs 接口尝试尽可能地融入通用的 Linux sysfs 子系统和类。由于其中一些子系统尚未准备就绪或稳定,因此预计此接口将会更改,并且任何和所有用户空间程序都必须处理它。
有关 sysfs 接口的说明¶
与 procfs 接口不同,在与 sysfs 接口通信时将强制执行正确性,并且在 thinkpad-acpi 实现 sysfs 接口时也将强制执行正确性。
此外,thinkpad-acpi sysfs 驱动程序代码或 thinkpad-acpi 的 sysfs 接口实现中的任何错误都将进行修复,以实现最大程度的正确性,即使这意味着以不兼容的方式更改接口。随着这些接口在内核和 thinkpad-acpi 中的成熟,此类更改应该会变得非常罕见。
与 thinkpad-acpi sysfs 接口交互的应用程序必须遵循所有 sysfs 指南,并正确处理所有错误(sysfs 接口广泛使用错误)。还必须正确实现对 sysfs inode 的文件描述符和打开/关闭操作。
驱动程序将 thinkpad-acpi 的 sysfs 接口版本导出为驱动程序属性(请参见下文)。
sysfs 驱动程序属性位于驱动程序的 sysfs 属性空间中,对于 2.6.23+,这是 /sys/bus/platform/drivers/thinkpad_acpi/ 和 /sys/bus/platform/drivers/thinkpad_hwmon/。
sysfs 设备属性位于 thinkpad_acpi 设备 sysfs 属性空间中,对于 2.6.23+,这是 /sys/devices/platform/thinkpad_acpi/。
传感器和风扇的 sysfs 设备属性位于 thinkpad_hwmon 设备的 sysfs 属性空间中,但是您应该通过查找名称属性为 “thinkpad” 的 hwmon 设备来找到它,或者最好是通过 libsensors。对于 4.14+,sysfs 属性已移动到 hwmon 设备(/sys/bus/platform/devices/thinkpad_hwmon/hwmon/hwmon? 或 /sys/class/hwmon/hwmon?)。
驱动程序版本¶
procfs: /proc/acpi/ibm/driver
sysfs 驱动程序属性:version
驱动程序名称和版本。无法向此文件写入任何命令。
Sysfs 接口版本¶
sysfs 驱动程序属性:interface_version
thinkpad-acpi sysfs 接口的版本,以无符号 long 形式(以十六进制格式输出:0xAAAABBCC),其中
- AAAA
主修订版
- BB
次修订版
- CC
bugfix 修订版
驱动程序的 sysfs 接口版本更改日志可以在本文档的末尾找到。内核子系统对 sysfs 接口所做的更改不会在此处记录,也不会由此属性跟踪。
只有在提交到 Linux 主线时,才会将对 thinkpad-acpi sysfs 接口的更改视为非实验性,此时会记录此接口中的更改,并且可能会更新 interface_version。如果您正在使用任何尚未发送到主线进行合并的 thinkpad-acpi 功能,则您需要自行承担风险:这些功能可能会消失,或者在合并到 Linux 主线时以不同的和不兼容的方式实现。
本质上向后兼容的更改(例如,添加不会改变其他属性工作方式的属性)并不总是需要更新 interface_version。因此,必须预料到某个属性可能不存在,并正确处理它(某个属性不存在是一种有效的方式,用来明确表示 sysfs 中不提供该功能)。
热键¶
procfs: /proc/acpi/ibm/hotkey
sysfs 设备属性:hotkey_*
在 ThinkPad 中,ACPI HKEY 处理程序负责向操作系统传递一些重要事件以及键盘热键按下事件。启用 thinkpad-acpi 的热键功能会向固件发出信号,表明存在这样的驱动程序,并会修改 ThinkPad 固件在许多情况下的行为。
驱动程序在加载时自动启用 HKEY(“热键”)事件报告,并在移除时禁用它。
驱动程序将以以下格式报告 HKEY 事件
ibm/hotkey HKEY 00000080 0000xxxx
其中一些事件指的是热键按下,但并非全部。
驱动程序将通过输入层生成热键和无线电开关的事件,并通过 ACPI netlink 层生成其他事件。输入层支持接受标准的 IOCTL,以重新映射分配给每个热键的键码。
热键位掩码允许控制哪些热键生成事件。如果某个键被“屏蔽”(掩码中的位设置为 0),则固件将处理它。如果它被“解除屏蔽”,则会向固件发出信号,表明 thinkpad-acpi 希望处理它,如果固件愿意允许它(但通常不会!)。
并非掩码中的所有位都可以修改。并非所有可以修改的位都会执行任何操作。并非所有热键都可以通过掩码单独控制。某些型号根本不支持掩码。因此,掩码的行为高度依赖于 ThinkPad 型号。
驱动程序将过滤掉任何未屏蔽的热键,因此即使固件不允许禁用特定的热键,驱动程序也不会报告未屏蔽的热键的事件。
请注意,取消屏蔽某些键会阻止它们的默认行为。例如,如果取消屏蔽 Fn+F5,则该键将不再在固件中自行启用/禁用蓝牙。
另请注意,并非所有 Fn 键组合都通过 ACPI 支持,具体取决于 ThinkPad 型号和固件版本。在这些 ThinkPad 上,仍然可以通过至少每秒 10 次轮询“CMOS NVRAM”来支持一些额外的热键。驱动程序会在需要时尝试自动启用此功能。
procfs 说明¶
以下命令可以写入到 /proc/acpi/ibm/hotkey 文件中
echo 0xffffffff > /proc/acpi/ibm/hotkey -- enable all hot keys
echo 0 > /proc/acpi/ibm/hotkey -- disable all possible hot keys
... any other 8-hex-digit mask ...
echo reset > /proc/acpi/ibm/hotkey -- restore the recommended mask
以下命令已被弃用,并将导致内核记录警告
echo enable > /proc/acpi/ibm/hotkey -- does nothing
echo disable > /proc/acpi/ibm/hotkey -- returns an error
procfs 接口不支持 NVRAM 轮询控制。为了保持最大的兼容性,它不会报告任何掩码,也不允许在固件根本不支持掩码时操作热键掩码,即使在使用 NVRAM 轮询时也是如此。
sysfs 说明¶
- hotkey_bios_enabled
已弃用,即将删除。
返回 0。
- hotkey_bios_mask
已弃用,请勿使用,将来会删除。
返回加载 thinkpad-acpi 时热键的掩码。在模块卸载时,热键掩码将恢复为此值。这始终是 0x80c,因为这些是古代不支持掩码的固件所支持的热键。
- hotkey_enable
已弃用,即将删除。
0:返回 -EPERM 1:不执行任何操作
- hotkey_mask
位掩码,用于启用每个热键的报告(以及取决于固件的 ACPI 事件生成)(请参见上文)。返回热键掩码的当前状态,并允许修改它。
- hotkey_all_mask
当回显到上面的 hotkey_mask 时,应启用所有受支持热键的事件报告的位掩码。除非您知道哪些事件需要被动处理(因为固件无论如何都会处理它们),否则不要使用 hotkey_all_mask。请改用 hotkey_recommended_mask。已警告过您。
- hotkey_recommended_mask
位掩码,应启用所有受支持的热键的事件报告,但那些始终由固件处理的热键除外。将其回显到上面的 hotkey_mask 以使用。这是驱动程序使用的默认掩码。
- hotkey_source_mask
位掩码,用于选择驱动程序将轮询 NVRAM 的热键。这是由驱动程序根据 ACPI 固件报告的功能自动检测的,但可以在运行时覆盖。
在 hotkey_source_mask 中设置了位的热键会在 NVRAM 中轮询,并在 hotkey_mask 中启用时报告为热键事件。只有少数热键可通过 CMOS NVRAM 轮询获得。
警告:当处于 NVRAM 模式时,音量增大/减小/静音键会根据混音器中的更改进行合成,混音器使用单个音量增大或音量减小热键来取消静音,按照 ThinkPad 音量混音器用户界面的方式。当处于 ACPI 事件模式时,音量增大/减小/静音事件由固件报告,并且行为可能不同(并且这种行为会随着固件版本而变化 - 不仅仅是固件型号 - 以及 OSI(Linux) 状态)。
- hotkey_poll_freq
热键轮询的频率,单位为 Hz。它必须介于 0 和 25 Hz 之间。仅在绝对必要时才进行轮询。
将 hotkey_poll_freq 设置为零会禁用轮询,并会导致需要 NVRAM 轮询的热键按下事件永远不会报告。
将 hotkey_poll_freq 设置得太低可能会导致重复按下同一热键被错误地报告为单个按键,或者甚至根本检测不到。建议的轮询频率为 10Hz。
- hotkey_radio_sw
如果 ThinkPad 有硬件无线电开关,则当开关处于“无线电禁用”位置时,此属性将读取 0,当开关处于“无线电启用”位置时,此属性将读取 1。
此属性支持 poll()/select()。
- hotkey_tablet_mode
如果 ThinkPad 具有平板电脑功能,则当 ThinkPad 处于正常模式时,此属性将读取 0,当 ThinkPad 处于平板电脑模式时,此属性将读取 1。
此属性支持 poll()/select()。
- wakeup_reason
如果系统因用户请求弹出托架而唤醒,则设置为 1。如果系统因用户请求系统取消坞站而唤醒,则设置为 2。对于正常唤醒或因未知原因唤醒,则设置为零。
此属性支持 poll()/select()。
- wakeup_hotunplug_complete
如果系统因取消坞站或托架弹出请求而唤醒,并且该请求已成功完成,则设置为 1。此时,根据用户的选择,可能可以将系统送回睡眠状态。请参阅下面的 HKEY 事件 0x4003 和 0x3003。
此属性支持 poll()/select()。
输入层说明¶
热键映射到单个输入层 EV_KEY 事件,可能后跟一个 EV_MSC MSC_SCAN 事件,该事件应包含该键的扫描码。将始终生成一个 EV_SYN 事件以标记事件块的结束。
不要使用 EV_MSC MSC_SCAN 事件来处理键。它们仅用作重新映射键的助手。它们在重新映射 KEY_UNKNOWN 键时特别有用。
这些事件在具有以下 ID 的输入设备中可用
总线
BUS_HOST
供应商
0x1014 (PCI_VENDOR_ID_IBM) 或 0x17aa (PCI_VENDOR_ID_LENOVO)
产品
0x5054 (“TP”)
版本
0x4101
如果密钥映射以向后兼容的方式更改,则版本的 LSB 将递增。此输入设备的 MSB 应始终为 0x41。如果 MSB 不是 0x41,请勿按本节中的描述使用该设备,因为它要么是其他设备(例如,thinkpad 驱动程序导出的另一个输入设备,例如 HDAPS),要么其功能已以不向后兼容的方式更改。
为此输入设备添加其他功能的其他事件类型应被视为向后兼容的更改。
Thinkpad-acpi 热键事件映射(版本 0x4101)
ACPI |
扫描 |
||
---|---|---|---|
事件 |
代码 |
键 |
注释 |
0x1001 |
0x00 |
FN+F1 |
|
0x1002 |
0x01 |
FN+F2 |
IBM:电池(很少见)Lenovo:屏幕锁定 |
0x1003 |
0x02 |
FN+F3 |
许多 IBM 型号始终报告此热键,即使禁用了热键或屏蔽了 Fn+F3 也是如此。IBM:屏幕锁定,通常会关闭 ThinkLight,作为副作用。Lenovo:电池 |
0x1004 |
0x03 |
FN+F4 |
睡眠按钮(ACPI 睡眠按钮语义,即睡眠到 RAM)。它始终会生成某种事件,无论是热键事件还是 ACPI 睡眠按钮事件。固件可能会拒绝生成进一步的 FN+F4 按键事件,直到执行 S3 或 S4 ACPI 睡眠周期或经过一段时间。 |
0x1005 |
0x04 |
FN+F5 |
无线电。如果由固件控制,则启用/禁用内部蓝牙硬件和 W-WAN 卡。不影响 WLAN 卡。实际上应该用于打开/关闭所有无线电(蓝牙+W-WAN+WLAN)。 |
0x1006 |
0x05 |
FN+F6 |
|
0x1007 |
0x06 |
FN+F7 |
视频输出循环。您今天感觉幸运吗? |
0x1008 |
0x07 |
FN+F8 |
IBM:切换屏幕展开 Lenovo:配置 UltraNav 或切换屏幕展开。在 2024 平台上被 0x131f 取代(请参见下文),在较新的平台(2025+)上,键码被 0x1401 取代(请参见下文)。 |
0x1009 |
0x08 |
FN+F9 |
|
... |
... |
... |
... |
0x100B |
0x0A |
FN+F11 |
|
0x100C |
0x0B |
FN+F12 |
睡眠到磁盘。您应该始终自己处理它,无论是通过 ACPI 事件还是通过热键事件。固件可能会拒绝生成进一步的 FN+F12 按键事件,直到执行 S3 或 S4 ACPI 睡眠周期或经过一段时间。 |
0x100D |
0x0C |
FN+退格键 |
|
0x100E |
0x0D |
FN+插入 |
|
0x100F |
0x0E |
FN+删除 |
|
0x1010 |
0x0F |
FN+HOME |
亮度调高。此键始终由 IBM ThinkPad 中的固件处理,即使取消屏蔽也是如此。不要管它。对于具有新 BIOS 的 Lenovo ThinkPad,必须由 ACPI OSI 或用户空间处理。驱动程序会做正确的事情,永远不要乱用它。 |
0x1011 |
0x10 |
FN+END |
亮度调低。有关详细信息,请参见亮度调高。 |
0x1012 |
0x11 |
FN+PGUP |
ThinkLight 切换。此键始终由固件处理,即使取消屏蔽也是如此。 |
0x1013 |
0x12 |
FN+PGDOWN |
|
0x1014 |
0x13 |
FN+空格键 |
缩放键 |
0x1015 |
0x14 |
音量调高 |
内部混音器音量调高。此键始终由固件处理,即使取消屏蔽也是如此。注意:Lenovo 似乎正在更改此项。 |
0x1016 |
0x15 |
音量调低 |
内部混音器音量调高。此键始终由固件处理,即使取消屏蔽也是如此。注意:Lenovo 似乎正在更改此项。 |
0x1017 |
0x16 |
静音 |
使内部混音器静音。此键始终由固件处理,即使取消屏蔽也是如此。 |
0x1018 |
0x17 |
THINKPAD |
ThinkPad/访问 IBM/Lenovo 键 |
0x1019 |
0x18 |
未知 |
|
0x131f |
... |
FN+F8 |
平台模式更改(2024 系统)。在驱动程序中实现。 |
0x1401 |
... |
FN+F8 |
平台模式更改(2025+ 系统)。在驱动程序中实现。 |
... |
... |
... |
|
0x1020 |
0x1F |
未知 |
ThinkPad 固件不允许区分大多数热键是按下还是释放(或者说,我们目前还不知道如何区分)。对于这些键,驱动程序会为按键按下生成一组事件,并立即为按键释放发出相同的一组事件。驱动程序不知道 ThinkPad 固件是在热键按下还是释放时触发这些事件,但固件会对其中之一进行触发,而不是两者都触发。
如果一个键被映射到 KEY_RESERVED,则不会生成任何输入事件。如果一个键被映射到 KEY_UNKNOWN,则会生成包含扫描码的输入事件。如果一个键被映射到其他任何值,则会生成输入设备 EV_KEY 事件。
除了 EV_KEY 事件之外,thinkpad-acpi 还可以为开关发出 EV_SW 事件。
SW_RFKILL_ALL |
T60 及更高版本的硬件射频禁用翘板开关 |
SW_TABLET_MODE |
平板 ThinkPad HKEY 事件 0x5009 和 0x500A |
非热键 ACPI HKEY 事件映射¶
驱动程序永远不会传播的事件
0x2304 |
系统正在从挂起到取消停靠唤醒 |
0x2305 |
系统正在从挂起到弹出扩展槽唤醒 |
0x2404 |
系统正在从休眠到取消停靠唤醒 |
0x2405 |
系统正在从休眠到弹出扩展槽唤醒 |
0x5001 |
盖子已关闭 |
0x5002 |
盖子已打开 |
0x5009 |
平板电脑旋转:切换到平板电脑模式 |
0x500A |
平板电脑旋转:切换到正常模式 |
0x5010 |
亮度级别已更改/控制事件 |
0x6000 |
键盘:数字锁定键已按下 |
0x6005 |
键盘:Fn 键已按下(待验证) |
0x7000 |
无线开关状态可能已更改 |
驱动程序传播到用户空间的事件
0x2313 |
警报:系统正在从挂起中唤醒,因为电池电量即将耗尽 |
0x2413 |
警报:系统正在从休眠中唤醒,因为电池电量即将耗尽 |
0x3003 |
扩展槽弹出(参见 0x2x05)完成,可以再次休眠 |
0x3006 |
扩展槽热插拔请求(提示在光驱托盘弹出时启动 SATA 链接) |
0x4003 |
已取消停靠(参见 0x2x04),可以再次休眠 |
0x4010 |
已停靠到热插拔端口复制器(非 ACPI 坞站) |
0x4011 |
已从热插拔端口复制器(非 ACPI 坞站)取消停靠 |
0x500B |
平板电脑笔已插入其存放槽 |
0x500C |
平板电脑笔已从其存放槽移除 |
0x6011 |
警报:电池温度过高 |
0x6012 |
警报:电池温度极高 |
0x6021 |
警报:传感器温度过高 |
0x6022 |
警报:传感器温度极高 |
0x6030 |
系统热表已更改 |
0x6032 |
热控制命令集完成(DYTC,Windows) |
0x6040 |
Nvidia Optimus/AC 适配器相关(待验证) |
0x60C0 |
X1 Yoga 2016,平板电脑模式状态已更改 |
0x60F0 |
热转换已更改 (GMTS, Windows) |
电池电量即将耗尽的警报是让操作系统干净地休眠或关机(0x2313)或干净地关机(0x2413)的最后尝试,以避免电源丢失。必须对其进行处理,因为固件引起的唤醒会使大多数安全保护失效……
根据联想的说法,当任何“温度过高”警报发生时,用户应暂停或休眠笔记本电脑(如果是电池警报,则拔下交流适配器)以使其冷却。这些警报表明有问题,在正常运行条件下不应发生。
“温度极高”警报是紧急情况。根据联想的说法,操作系统应强制立即暂停或休眠,或强制系统关机。显然,如果发生这种情况,说明问题非常严重。
亮度热键说明¶
不要在 ThinkPad 中干扰亮度热键。如果需要 OSD 通知,请使用 sysfs 背光类事件支持。
对于用户空间必须执行某些操作以实现亮度更改的情况,驱动程序会自动发出 KEY_BRIGHTNESS_UP 和 KEY_BRIGHTNESS_DOWN 事件。当您覆盖这些事件时,要么无法正确处理需要显式操作才能更改背光亮度的 ThinkPad,要么无法处理需要不采取任何操作才能正常工作的 ThinkPad。
蓝牙¶
procfs: /proc/acpi/ibm/bluetooth
sysfs 设备属性:bluetooth_enable(已弃用)
sysfs rfkill 类:开关“tpacpi_bluetooth_sw”
此功能显示内部 ThinkPad CDC 插槽中 ThinkPad 蓝牙设备的存在和当前状态。
如果 ThinkPad 支持,则蓝牙状态存储在 NVRAM 中,因此可以在重启和关机时保留。
Procfs 说明¶
如果安装了蓝牙,可以使用以下命令
echo enable > /proc/acpi/ibm/bluetooth
echo disable > /proc/acpi/ibm/bluetooth
Sysfs 说明¶
如果安装了蓝牙 CDC 卡,可以通过“bluetooth_enable”thinkpad-acpi 设备属性启用/禁用它,也可以查询其当前状态。
enable
0:禁用蓝牙/蓝牙已禁用
1:启用蓝牙/蓝牙已启用。
注意:此接口已被通用的 rfkill 类取代。它已被弃用,将于 2010 年被移除。
rfkill 控制器开关“tpacpi_bluetooth_sw”:有关详细信息,请参阅 rfkill - RF 禁用开关支持。
视频输出控制 -- /proc/acpi/ibm/video¶
此功能允许控制用于视频输出的设备 - LCD、CRT 或 DVI(如果可用)。以下命令可用
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
- 注意
出于安全原因,对该功能的访问仅限于拥有 CAP_SYS_ADMIN 功能的进程,因为它可能会与某些版本的 X.org 产生不良交互,从而导致其崩溃。
每个视频输出设备都可以单独启用或禁用。读取 /proc/acpi/ibm/video 会显示每个设备的状态。
可以启用或禁用自动视频切换。启用自动视频切换后,某些事件(例如,打开盖子、停靠或取消停靠)会导致视频输出设备自动更改。虽然这可能很有用,但也会导致闪烁,并且在 X40 上,还会导致视频损坏。通过禁用自动切换,可以避免闪烁或视频损坏。
video_switch 命令会循环切换可用的视频输出(它模拟 Fn-F7 的行为)。
可以通过此功能切换视频扩展。这控制当使用低于完整分辨率的模式时,是否将显示扩展以填充整个 LCD 屏幕。请注意,无法通过此功能确定当前的视频扩展状态。
请注意,在许多型号(尤其是使用 Radeon 显卡芯片的型号)上,X 驱动程序配置显卡的方式会阻止 Fn-F7 工作。这也会禁用此驱动程序的视频输出切换功能,因为它使用与 Fn-F7 相同的 ACPI 方法。控制台上的视频切换应该仍然有效。
ThinkLight 控制¶
procfs: /proc/acpi/ibm/light
sysfs 属性:与 LED 类相同,用于“tpacpi::thinklight”LED
procfs 说明¶
可以通过 procfs 接口读取和设置 ThinkLight 状态。一些不提供状态的型号会将 ThinkLight 状态显示为“unknown”。可用的命令为
echo on > /proc/acpi/ibm/light
echo off > /proc/acpi/ibm/light
sysfs 说明¶
ThinkLight sysfs 接口在 Linux 下的 LED 处理 中,由 LED 类文档记录。ThinkLight LED 名称为“tpacpi::thinklight”。
由于 sysfs LED 类的限制,如果无法读取 ThinkLight 的状态,或者状态未知,thinkpad-acpi 会将其报告为“off”。无法知道通过 sysfs 返回的状态是否有效。
CMOS/UCMS 控制¶
procfs: /proc/acpi/ibm/cmos
sysfs 设备属性:cmos_command
此功能主要由 ACPI 固件在内部使用,以保持旧 CMOS NVRAM 位与当前机器状态同步,并记录此状态,以便 ThinkPad 在重启后保留这些设置。
其中一些命令实际上在某些 ThinkPad 型号中执行操作,但预计这种情况在新型号中会越来越少。例如,在 T43 和 X40 中,命令 12 和 13 仍然可以实际控制 ThinkLight 状态,但命令 0 到 2 不再控制混音器(它们已被逐步淘汰),而只是更新 NVRAM。
有效的 cmos 命令编号范围为 0 到 21,但并非所有命令都有效,并且行为因型号而异。以下是 X40 上的行为(tpb 是 ThinkPad Buttons 实用程序)
0 - 与“降低音量”键按下相关
1 - 与“增大音量”键按下相关
2 - 与“静音”键按下相关
3 - 与“访问 IBM”键按下相关
4 - 与“LCD 亮度调高”键按下相关
5 - 与“LCD 亮度调低”键按下相关
11 - 与“切换屏幕扩展”键按下/功能相关
12 - 与“ThinkLight 开”相关
13 - 与“ThinkLight 关”相关
14 - 与“ThinkLight”键按下(切换 ThinkLight)相关
cmos 命令接口容易出现固件脑裂问题,因为在较新的 ThinkPad 中,它只是一个兼容性层。不要使用它,它只是作为调试工具导出。
LED 控制¶
procfs: /proc/acpi/ibm/led sysfs 属性:与 LED 类相同,名称见下文
可以通过此功能控制一些 LED 指示灯。在一些较旧的 ThinkPad 型号上,也可以查询 LED 指示灯的状态。较新的 ThinkPad 无法查询 LED 指示灯的实际状态。
由于滥用 LED 可能会导致不知情的用户执行危险操作(例如,在总线仍处于活动状态时取消停靠或弹出扩展槽设备),或者掩盖重要的警报(例如,电池电量即将耗尽或电池损坏),因此对大多数 LED 的访问受到限制。
要不受限制地访问所有 LED,需要使用启用 CONFIG_THINKPAD_ACPI_UNSAFE_LEDS 选项编译 thinkpad-acpi。发行版绝不能启用此选项。欢迎了解后果的个人用户启用它。
支持音频静音和麦克风静音 LED,但当前对用户空间不可见。它们由 snd-hda-intel 音频驱动程序使用。
procfs 说明¶
可用的命令为
echo '<LED number> on' >/proc/acpi/ibm/led
echo '<LED number> off' >/proc/acpi/ibm/led
echo '<LED number> blink' >/proc/acpi/ibm/led
<LED 编号> 范围为 0 到 15。可以控制的 LED 集因型号而异。以下是常见的 ThinkPad 映射
0 - 电源
1 - 电池(橙色)
2 - 电池(绿色)
3 - UltraBase/坞站
4 - UltraBay
5 - UltraBase 电池槽
6 -(未知)
7 - 待机
8 - 坞站状态 1
9 - 坞站状态 2
10、11 -(未知)
12 - thinkvantage
13、14、15 -(未知)
以上所有都可以打开和关闭,并且可以设置为闪烁。
sysfs 说明¶
ThinkPad LED sysfs 接口在 Linux 下的 LED 处理 中,由 LED 类文档详细描述。
LED 的名称(按 LED ID 顺序,从 0 到 12)为:“tpacpi::power”、“tpacpi:orange:batt”、“tpacpi:green:batt”、“tpacpi::dock_active”、“tpacpi::bay_active”、“tpacpi::dock_batt”、“tpacpi::unknown_led”、“tpacpi::standby”、“tpacpi::dock_status1”、“tpacpi::dock_status2”、“tpacpi::unknown_led2”、“tpacpi::unknown_led3”、“tpacpi::thinkvantage”。
由于 sysfs LED 类的限制,如果由于错误而无法读取 LED 指示灯的状态,thinkpad-acpi 将报告其亮度为零(与 LED 关闭相同)。
如果 thinkpad 固件不支持读取当前状态,尝试读取当前 LED 亮度只会返回上次写入该属性的亮度值。
这些 LED 可以使用硬件加速闪烁。要请求 ThinkPad 指示灯 LED 以硬件加速模式闪烁,请使用“timer”触发器,并将 delay_on 和 delay_off 参数设置为零(以请求硬件加速自动检测)。
已知在给定 ThinkPad 型号中不存在的 LED 不会通过 sysfs 接口提供。如果您有扩展坞,并且您注意到列出的 ThinkPad LED 并不存在(并且不在扩展坞中),或者如果您注意到有 LED 丢失,请向 ibm-acpi-devel@lists.sourceforge.net 报告,我们将不胜感激。
ACPI 声音 -- /proc/acpi/ibm/beep¶
ACPI 固件在内部使用 BEEP 方法,以便在各种情况下提供声音警报。此功能允许手动触发相同的声音。
命令为非负整数。
echo <number> >/proc/acpi/ibm/beep
有效的 <数字> 范围为 0 到 17。并非所有数字都会触发声音,并且声音因型号而异。以下是 X40 上的行为
0 - 停止正在进行的声音(但使用 17 停止 16)
2 - 两声嘟嘟声,暂停,第三声嘟嘟声(“电池电量低”)
3 - 单声嘟嘟声
4 - 高音,然后是低音嘟嘟声(“无法完成”)
5 - 单声嘟嘟声
6 - 非常高音,然后是高音嘟嘟声(“交流/直流”)
7 - 高音嘟嘟声
9 - 三声短促的嘟嘟声
10 - 非常长的嘟嘟声
12 - 低音嘟嘟声
15 - 三声高音嘟嘟声不断重复,用 0 停止
16 - 一声中音嘟嘟声不断重复,用 17 停止
17 - 停止 16
温度传感器¶
procfs:/proc/acpi/ibm/thermal
sysfs 设备属性:(hwmon “thinkpad”)temp*_input
大多数 ThinkPad 都包含六个或更多单独的温度传感器,但仅通过标准的 ACPI 方法公开 CPU 温度。此功能显示旧 ThinkPad 上多达八个不同传感器的读数,以及较新的 ThinkPad 上多达十六个不同传感器的读数。
例如,在 X40 上,典型的输出可能是
- 温度
42 42 45 41 36 -128 33 -128
在 T43/p 上,典型的输出可能是
- 温度
48 48 36 52 38 -128 31 -128 48 52 48 -128 -128 -128 -128 -128
热传感器到物理位置的映射因系统主板型号(以及 ThinkPad 型号)而异。
https://thinkwiki.org/wiki/Thermal_Sensors 是一个公共 wiki 页面,尝试跟踪各种型号的这些位置。
大多数(较新的?)型号似乎遵循这种模式
1:CPU
2:(取决于型号)
3:(取决于型号)
4:GPU
5:主电池:主传感器
6:扩展坞电池:主传感器
7:主电池:辅助传感器
8:扩展坞电池:辅助传感器
9-15:(取决于型号)
对于 R51(来源:Thomas Gruber)
2:Mini-PCI
3:内部 HDD
对于 T43、T43/p(来源:Shmidoax/Thinkwiki.org)https://thinkwiki.org/wiki/Thermal_Sensors#ThinkPad_T43.2C_T43p
2:系统主板,左侧(靠近 PCMCIA 插槽),报告为 HDAPS 温度
3:PCMCIA 插槽
9:MCH(北桥)到 DRAM 总线
- 10:时钟发生器、mini-pci 卡和 ICH(南桥),在 Mini-PCI 下
卡,在触摸板下方
11:电源稳压器,系统主板底面,在 F2 键下方
A31 的热传感器布局非常不典型(来源:Milos Popovic,https://thinkwiki.org/wiki/Thermal_Sensors#ThinkPad_A31)
1:CPU
2:主电池:主传感器
3:电源转换器
4:扩展坞电池:主传感器
5:MCH(北桥)
6:PCMCIA/环境
7:主电池:辅助传感器
8:扩展坞电池:辅助传感器
Procfs 注释¶
来自不可用传感器的读数返回 -128。无法向此文件写入任何命令。
Sysfs 注释¶
不可用的传感器返回 ENXIO 错误。此状态可能会在运行时更改,因为存在热插拔热传感器,例如电池和扩展坞内的传感器。
thinkpad-acpi 热传感器通过 hwmon 子系统报告,并遵循 Documentation/hwmon 中的所有 hwmon 指南。
实验性:嵌入式控制器寄存器转储¶
此功能不再包含在 thinkpad 驱动程序中。相反,可以通过 /sys/kernel/debug/ec 访问 EC,并使用一个用户空间工具,该工具可以在这里找到:ftp://ftp.suse.com/pub/people/trenn/sources/ec
使用它来确定某些型号上保存风扇速度的寄存器。为此,请执行以下操作
确保电池已充满电
确保风扇正在运行
使用上述工具读取 EC
通常,风扇和温度值在读数之间会变化。由于温度不会快速变化,因此您可以进行多次快速转储以消除它们。
您可以使用类似的方法来弄清楚其他嵌入式控制器寄存器的含义 - 例如,确保除了充电或放电电池外,没有其他变化,以确定哪些寄存器包含当前电池容量等。如果您对此进行实验,请将您的结果发送给我(包括一些完整的转储,其中包含拍摄时的条件描述。)
LCD 亮度控制¶
procfs:/proc/acpi/ibm/brightness
sysfs 背光设备 “thinkpad_screen”
此功能允许在没有硬件亮度滑块的 ThinkPad 型号上进行 LCD 亮度的软件控制。
它有一些限制:此接口实际上无法打开或关闭 LCD 背光,它只能控制背光亮度级别。
在 IBM(和一些较早的联想)ThinkPad 上,背光控制有八个亮度级别,范围从 0 到 7。某些级别可能不明显。实现 ACPI 显示背光亮度控制方法的较新的联想型号有 16 个级别,范围从 0 到 15。
对于 IBM ThinkPad,有两个接口可以用于直接亮度控制的固件,EC 和 UCMS(或 CMOS)。要选择应该使用哪个接口,请使用 brightness_mode 模块参数:brightness_mode=1 选择 EC 模式,brightness_mode=2 选择 UCMS 模式,brightness_mode=3 选择具有 NVRAM 支持的 EC 模式(以便亮度更改在关闭/重新启动后仍然保留)。
驱动程序尝试从每个 ThinkPad 型号的默认值表中选择要使用的接口。如果它做出了错误的选择,请将其报告为错误,以便我们可以修复它。
联想 ThinkPad 仅支持 brightness_mode=2 (UCMS)。
当显示背光亮度控制可通过标准 ACPI 接口使用时,最好使用它而不是此直接的 ThinkPad 特定接口。如果驱动程序检测到标准 ACPI 接口在 ThinkPad 中可用,它将禁用其本机背光亮度控制接口。
如果您由于某种原因想要使用 thinkpad-acpi 背光亮度控制而不是通用的 ACPI 视频背光亮度控制,则应使用 acpi_backlight=vendor 内核参数。
brightness_enable 模块参数可用于控制当可用时是否启用 LCD 亮度控制功能。brightness_enable=0 强制禁用它。brightness_enable=1 强制在可用时启用它,即使标准 ACPI 接口也可用。
Procfs 注释¶
可用的命令为
echo up >/proc/acpi/ibm/brightness
echo down >/proc/acpi/ibm/brightness
echo 'level <level>' >/proc/acpi/ibm/brightness
Sysfs 注释¶
该接口通过背光 sysfs 类实现,该类目前文档不足。
在 /sys/class/backlight 下找到 thinkpad_screen 设备,在其中将有以下属性
- max_brightness
读取硬件可以设置的最大亮度。最小亮度始终为零。
- actual_brightness
读取屏幕在此刻设置的亮度。
- brightness
写入请求驱动程序将亮度更改为给定值。当“power”设置为零并且显示器未被内核电源管理事件调暗时,读取将告诉您驱动程序尝试将显示器设置为的亮度。
- power
电源管理模式,其中 0 为“显示器开启”,1 到 3 会将显示器背光调暗到亮度级别 0,因为 thinkpad-acpi 无法真正关闭背光。内核电源管理事件可以暂时提高当前的电源管理级别,即它们可以调暗显示器。
警告
无论您做什么,都不要同时调用 thinkpad-acpi 背光级别更改接口和基于 ACPI 的背光级别更改接口(在较新的 BIOS 中可用,并由 Linux ACPI 视频驱动程序驱动)。这两者会以不良方式交互,执行一些奇怪的操作,并且可能会通过在每次更改时不必要地向上和向下踢其级别来缩短背光灯的使用寿命。
音量控制(控制台音频控制)¶
procfs:/proc/acpi/ibm/volume
ALSA:“ThinkPad Console Audio Control”,默认 ID:“ThinkPadEC”
注意:默认情况下,音量控制接口以只读模式运行,因为它应该用于屏幕显示目的。“volume_control=1”模块参数可启用读/写模式。
注意:强烈建议发行版不要默认启用 volume_control,这应该仅由本地管理员完成。ThinkPad UI 仅供控制台音频通过音量键进行控制,而桌面环境仅提供屏幕显示反馈。软件音量控制应仅在主 AC97/HDA 混音器中完成。
关于 ThinkPad 控制台音频控制¶
ThinkPad 具有一个内置放大器和静音电路,可驱动控制台耳机和扬声器。此电路在音频路径中的主 AC97 或 HDA 混音器之后,并由固件独占控制。
ThinkPad 有三个特殊的热键,用于与控制台音频控制进行交互:增大音量、减小音量和静音。
值得注意的是,静音功能的正常工作方式(在没有“静音 LED”的 ThinkPad 上)是
按静音以静音。它将始终静音,您可以根据需要按多次,声音将保持静音。
按任意音量键以取消 ThinkPad 静音(它将_不会_更改音量,它只会取消静音)。
与普通消费类笔记本电脑上常见的廉价的仅软件静音切换解决方案相比,这是一种非常优越的设计:您可以绝对确信,如果按下静音按钮,ThinkPad 将不会发出噪音,无论之前的状态如何。
IBM ThinkPad 和较早的联想 ThinkPad 具有可变增益放大器,可驱动扬声器和耳机输出,并且固件还可以处理这些 ThinkPad 上的耳机和扬声器的音量控制,而无需操作系统的任何帮助(此音量控制阶段存在于音频路径中的主 AC97 或 HDA 混音器之后)。
较新的联想型号仅具有固件静音控制,并依赖主 HDA 混音器进行音量控制(由操作系统完成)。在这种情况下,音量键会被过滤掉以防止静音键按下(此区域存在一些固件错误),并作为正常的按键传递给操作系统(thinkpad-acpi 不参与)。
ThinkPad-ACPI 音量控制¶
与控制台音频控制交互的首选方式是 ALSA 接口。
传统的 procfs 接口允许读取当前状态,如果启用音量控制,则接受以下命令
echo up >/proc/acpi/ibm/volume
echo down >/proc/acpi/ibm/volume
echo mute >/proc/acpi/ibm/volume
echo unmute >/proc/acpi/ibm/volume
echo 'level <level>' >/proc/acpi/ibm/volume
<level> 数字范围是 0 到 14,尽管并非所有数字都不同。要在静音命令后取消静音,请使用向上或向下命令(level 命令不会取消静音),或使用 unmute 命令。
您可以使用 volume_capabilities 参数告知驱动程序您的 ThinkPad 是否具有音量控制或仅静音控制:volume_capabilities=1 表示具有静音和音量控制的混音器,volume_capabilities=2 表示仅具有静音控制的混音器。
如果驱动程序错误地检测到您的 ThinkPad 型号的功能,请将其报告给 ibm-acpi-devel@lists.sourceforge.net,以便我们更新驱动程序。
音量控制有两种策略。要选择应使用哪一种,请使用 volume_mode 模块参数:volume_mode=1 选择 EC 模式,volume_mode=3 选择具有 NVRAM 支持的 EC 模式(以便在关机/重启后记住音量/静音更改)。
驱动程序默认以 volume_mode=3 模式运行。如果这在您的 ThinkPad 型号上效果不佳,请将其报告给 ibm-acpi-devel@lists.sourceforge.net。
驱动程序支持标准的 ALSA 模块参数。如果禁用 ALSA 混音器,驱动程序将禁用所有音量功能。
风扇控制和监控:风扇速度、风扇启用/禁用¶
procfs:/proc/acpi/ibm/fan
sysfs 设备属性:(hwmon “thinkpad”)fan1_input、pwm1、pwm1_enable、fan2_input
sysfs hwmon 驱动程序属性:fan_watchdog
- 注意 注意 注意
出于安全原因,默认情况下禁用风扇控制操作。要启用它们,必须为 thinkpad-acpi 提供模块参数“fan_control=1”。
此功能尝试显示当前风扇速度、控制模式和其他可能可用的风扇数据。速度直接从嵌入式控制器的硬件寄存器中读取。已知这在较新的 R、T、X 和 Z 系列 ThinkPad 上有效,但在其他型号上可能会显示错误的值。
某些联想 ThinkPad 支持辅助风扇。此风扇不能单独控制,它与主风扇控制共享。
风扇级别¶
大多数 ThinkPad 风扇在固件接口中以“级别”工作。级别 0 停止风扇。级别越高,风扇速度越快,尽管相邻级别通常映射到相同的风扇速度。7 是最高级别,风扇达到最大建议速度。
级别“auto”表示 EC 根据一些内部算法更改风扇级别,通常基于热传感器的读数。
还有一个“全速”级别,也称为“脱离”级别。在此级别中,EC 禁用速度锁定的闭环风扇控制,并尽可能快地驱动风扇,这可能会超过硬件限制,因此请谨慎使用此级别。
风扇通常从一个速度缓慢地加速或减速到另一个速度,并且 EC 通常需要几秒钟才能对风扇命令做出反应。全速级别可能需要长达两分钟才能加速到最大速度,并且在某些 ThinkPad 中,当 EC 过渡到全速级别时,转速计读数会过时。
警告 警告 警告:除非您正在监控所有温度传感器读数,并且准备在必要时启用风扇以避免过热,否则请勿禁用风扇。
如果 EC 认为 ThinkPad 足够凉爽并且不需要额外的气流,则处于“自动”级别的已启用风扇可能会停止旋转。这是正常的,如果各种热读数过高,EC 会启动风扇。
在 X40 上,这似乎取决于 CPU 和 HDD 温度。具体来说,当 CPU 温度升至 56 度或 HDD 温度升至 46 度时,风扇会打开。当 CPU 温度降至 49 度并且 HDD 温度降至 41 度时,风扇会关闭。这些阈值目前无法控制。
ThinkPad 的 ACPI DSDT 代码会在满足某些条件时自行重新编程风扇。它将覆盖通过 thinkpad-acpi 完成的任何风扇编程。
如果用户空间未发出 procfs 风扇命令之一:“enable”、“disable”、“level”或“watchdog”,或者在可配置的时间(最多 120 秒)内没有写入 pwm1_enable(或者 *当且仅当* pwm1_enable 设置为 1,手动模式时,才写入 pwm1),则可以将 thinkpad-acpi 内核驱动程序编程为将风扇级别恢复到安全设置。此功能称为风扇安全看门狗。
请注意,看门狗定时器在启用风扇后停止。当收到上述风扇命令之一时,它将自动重新武装(使用相同的间隔)。因此,风扇看门狗不适合防止通过“enable”、“disable”和“level”procfs 风扇命令或 hwmon 风扇控制 sysfs 接口以外的方式进行的风扇模式更改。
Procfs 注意事项¶
可以使用以下命令启用或禁用风扇
echo enable >/proc/acpi/ibm/fan
echo disable >/proc/acpi/ibm/fan
将风扇置于级别 0 与禁用风扇相同。如果风扇速度太慢或已禁用,启用风扇将尝试将其置于安全级别。
可以使用以下命令控制风扇级别
echo 'level <level>' > /proc/acpi/ibm/fan
其中 <level> 是一个从 0 到 7 的整数,或者是单词“auto”或“full-speed”之一(不带引号)。并非所有 ThinkPad 都支持“auto”和“full-speed”级别。驱动程序接受“disengaged”作为“full-speed”的别名,并将其报告为“disengaged”以实现向后兼容。
在 X31 和 X40 上(并且 *仅* 在这些型号上),风扇速度可以在一定程度上控制。一旦风扇运行,可以使用以下命令强制其运行更快或更慢
echo 'speed <speed>' > /proc/acpi/ibm/fan
X40 上风扇速度的可持续范围似乎约为 3700 到 7350。超出此范围的值要么没有任何效果,要么风扇速度最终会稳定在该范围内的某个位置。无法使用此命令停止或启动风扇。此功能不完整,并且无法通过 sysfs 接口使用。
要对安全看门狗进行编程,请使用“watchdog”命令
echo 'watchdog <interval in seconds>' > /proc/acpi/ibm/fan
如果要禁用看门狗,请使用 0 作为间隔。
Sysfs 注意事项¶
sysfs 接口在很大程度上遵循 hwmon 子系统指南,例外情况是风扇安全看门狗。
如果给定 ThinkPad 中不支持该操作,或者参数超出范围,则写入任何 sysfs 属性可能会返回 EINVAL 错误;如果被禁止,则返回 EPERM。它们也可能返回 EINTR(中断的系统调用)和 EIO(尝试与固件通信时出现 I/O 错误)。
驱动程序尚未实现的功能返回 ENOSYS。
- hwmon 设备属性 pwm1_enable
0:PWM 离线(风扇设置为全速模式)
1:手动 PWM 控制(使用 pwm1 设置风扇级别)
2:硬件 PWM 控制(EC“自动”模式)
3:保留(软件 PWM 控制,尚未实现)
并非所有 ThinkPad 都支持模式 0 和 2,并且驱动程序并不总是能够检测到这一点。如果它知道某个模式不受支持,则将返回 -EINVAL。
- hwmon 设备属性 pwm1
风扇级别,从固件值 0-7 缩放到 hwmon 比例 0-255。0 表示风扇停止,255 表示最高正常速度(级别 7)。
仅当 pmw1_enable 设置为 1(手动 PWM 控制)时,此属性才会命令风扇。
- hwmon 设备属性 fan1_input
风扇转速计读数,以 RPM 为单位。当 EC 将 PWM 过渡到离线模式时,在某些 ThinkPad 上可能会过时,这可能需要长达两分钟的时间。在较旧的 ThinkPad 上可能会返回垃圾值。
- hwmon 设备属性 fan2_input
辅助风扇的转速计读数,以 RPM 为单位。仅在某些 ThinkPad 上可用。如果未安装辅助风扇,则始终读取 0。
- hwmon 驱动程序属性 fan_watchdog
风扇安全看门狗定时器间隔,以秒为单位。最小值为 1 秒,最大值为 120 秒。0 禁用看门狗。
要停止风扇:将 pwm1 设置为零,并将 pwm1_enable 设置为 1。
要以安全模式启动风扇:将 pwm1_enable 设置为 2。如果失败并返回 EINVAL,请尝试将 pwm1_enable 设置为 1,并将 pwm1 设置为至少 128(255 将是最安全的选择)。
WAN¶
procfs:/proc/acpi/ibm/wan
sysfs 设备属性:wwan_enable(已弃用)
sysfs rfkill 类:开关“tpacpi_wwan_sw”
此功能显示内置无线 WAN 设备的存在和当前状态。
如果 ThinkPad 支持,则 WWAN 状态将存储在 NVRAM 中,因此它会在重启和关机后保留。
它已在联想 ThinkPad X60 上进行了测试。它应该可以在安装了此模块的其他 ThinkPad 型号上使用。
Procfs 注意事项¶
如果安装了 W-WAN 卡,可以使用以下命令
echo enable > /proc/acpi/ibm/wan
echo disable > /proc/acpi/ibm/wan
Sysfs 注意事项¶
如果安装了 W-WAN 卡,可以通过“wwan_enable”thinkpad-acpi 设备属性启用/禁用它,并且还可以查询其当前状态。
- enable
0:禁用 WWAN 卡/WWAN 卡已禁用
1:启用 WWAN 卡/WWAN 卡已启用。
注意:此接口已被通用的 rfkill 类取代。它已被弃用,将于 2010 年被移除。
rfkill 控制器开关“tpacpi_wwan_sw”:有关详细信息,请参阅 rfkill - RF 杀伤开关支持。
LCD 阴影控制¶
procfs:/proc/acpi/ibm/lcdshadow
某些较新的 T480s 和 T490s ThinkPad 提供一项名为 PrivacyGuard 的功能。通过打开此功能,可以限制 LCD 的可用垂直和水平视角(就像在显示屏前面手动应用了某种隐私屏幕一样)。
Procfs 注意事项¶
可用的命令为
echo '0' >/proc/acpi/ibm/lcdshadow
echo '1' >/proc/acpi/ibm/lcdshadow
第一个命令确保最佳视角,而第二个命令打开该功能,限制视角。
DYTC 膝上模式传感器¶
sysfs:dytc_lapmode
较新的 ThinkPad 和移动工作站能够确定设备是处于桌面模式还是膝上模式。用户空间使用此功能来决定是否可以将 WWAN 传输功率提高到最大功率,并且还有助于了解可用的不同热模式,因为它们在桌面模式和膝上模式之间有所不同。
该属性是只读的。如果平台不支持,则不会创建 sysfs 类。
实验性:UWB¶
此功能被认为是实验性的,因为它尚未在各种 ThinkPad 型号中进行广泛的测试和验证。该功能可能无法按预期工作。请谨慎使用!要使用此功能,您需要在加载模块时提供 experimental=1 参数。
sysfs rfkill 类:开关“tpacpi_uwb_sw”
如果 UWB 设备存在且在 BIOS 中启用,此功能会为该设备导出一个 rfkill 控制器。
Sysfs 说明¶
rfkill 控制器开关“tpacpi_uwb_sw”:有关详细信息,请参阅 rfkill - RF 开关支持。
设置键盘语言¶
sysfs:keyboard_lang
此功能用于使用 ASL 接口将键盘语言设置为 ECFW。较少的 ThinkPad 型号(如 T580、T590、T15 Gen 1 等)具有“=”、“(”、“)”数字键,当键盘语言不是“英语”时,这些键显示不正确。这是因为 ECFW 中的默认键盘语言设置为“英语”。因此,使用此 sysfs,用户可以将正确的键盘语言设置为 ECFW,然后这些键将正常工作。
下面提到设置键盘语言的命令示例
echo jp > /sys/devices/platform/thinkpad_acpi/keyboard_lang
要在 sysfs 中设置的键盘布局对应的文本是:be(比利时语)、cz(捷克语)、da(丹麦语)、de(德语)、en(英语)、es(西班牙语)、et(爱沙尼亚语)、fr(法语)、fr-ch(法语(瑞士))、hu(匈牙利语)、it(意大利语)、jp(日语)、nl(荷兰语)、nn(挪威语)、pl(波兰语)、pt(葡萄牙语)、sl(斯洛文尼亚语)、sv(瑞典语)、tr(土耳其语)
WWAN 天线类型¶
sysfs:wwan_antenna_type
在一些较新的 ThinkPad 上,我们需要根据天线类型设置 SAR 值。用户空间将使用此接口获取天线类型并设置相应的 SAR 值,这是 FCC 认证所必需的。
可用的命令为
cat /sys/devices/platform/thinkpad_acpi/wwan_antenna_type
目前支持两种天线类型,如下所示:- 类型 a - 类型 b
该属性是只读的。如果平台不支持,则不会创建 sysfs 类。
Auxmac¶
sysfs:auxmac
一些较新的 ThinkPad 具有称为 MAC 地址直通的功能。此功能由系统固件实现,以提供系统唯一的 MAC,当连接到网络时,它可以覆盖坞站或 USB 以太网加密狗的 MAC。如果启用了此功能,此属性使用户空间能够轻松确定 MAC 地址。
此辅助 MAC 的值是
cat /sys/devices/platform/thinkpad_acpi/auxmac
如果禁用该功能,则该值将为“disabled”。
此属性是只读的。
自适应键盘¶
sysfs 设备属性:adaptive_kbd_mode
此 sysfs 属性控制将显示在 Lenovo X1 Carbon 第 2 代 (2014) 自适应键盘上的键盘“界面”。该值可以读取和设置。
0 = 主模式
1 = 浏览器模式
2 = 网络会议模式
3 = 功能模式
4 = 平放模式
有关哪些按钮将根据模式显示的其他详细信息,请查看笔记本电脑的用户指南:https://download.lenovo.com/ibmdl/pub/pc/pccbbs/mobiles_pdf/x1carbon_2_ug_en.pdf
电池充电控制¶
sysfs 属性:/sys/class/power_supply/BAT*/charge_control_{start,end}_threshold
为驱动程序支持的那些电池创建了这两个属性。它们使用户能够控制给定电池的电池充电阈值。这两个值都可以读取和设置。charge_control_start_threshold 接受 0 到 99(含)之间的整数;此值表示电池电量百分比水平,低于此水平将开始充电。charge_control_end_threshold 接受 1 到 100(含)之间的整数;此值表示电池电量百分比水平,高于此水平将停止充电。
有关这些属性的确切语义,请参见 Documentation/ABI/testing/sysfs-class-power。
多个命令、模块参数¶
可以通过用逗号分隔的方式将多个命令一次写入 proc 文件,例如
echo enable,0xffff > /proc/acpi/ibm/hotkey
echo lcd_disable,crt_enable > /proc/acpi/ibm/video
也可以在加载 thinkpad-acpi 模块时指定命令,例如
modprobe thinkpad_acpi hotkey=enable,0xffff video=auto_disable
启用调试输出¶
该模块接受一个 debug 参数,可用于有选择地启用各种类别的调试输出,例如
modprobe thinkpad_acpi debug=0xffff
将启用所有调试输出类别。它接受一个位掩码,因此要启用多个输出类别,只需将其值相加。
调试位掩码
描述
0x8000
公开访问驱动程序某些功能的用户空间程序的 PID
0x0001
初始化和探测
0x0002
移除
0x0004
射频发射器控制 (RFKILL)(蓝牙、WWAN、UWB...)
0x0008
HKEY 事件接口,热键
0x0010
风扇控制
0x0020
背光亮度
0x0040
音频混音器/音量控制
还有一个内核构建选项可以启用更多的调试信息,这对于调试驱动程序问题可能是必要的。
驱动程序输出的调试信息级别可以在运行时通过 sysfs 进行更改,使用驱动程序属性 debug_level。该属性采用与上面的 debug 模块参数相同的位掩码。
强制加载模块¶
如果 thinkpad-acpi 拒绝检测您的 ThinkPad,您可以尝试指定模块参数 force_load=1。无论这是否有效,请联系 ibm-acpi-devel@lists.sourceforge.net 并提交报告。
Sysfs 接口变更日志¶
0x000100 |
作为单个平台驱动程序和设备的初始 sysfs 支持。 |
0x000200 |
支持 32 个热键的热键支持和无线电滑块开关支持。 |
0x010000 |
现在默认情况下,热键通过输入层处理,无线电开关生成输入事件 EV_RADIO,并且驱动程序默认在固件中启用热键处理。 |
0x020000 |
ABI 修复:添加了一个单独的 hwmon 平台设备和驱动程序,该驱动程序必须按名称 (thinkpad) 和 hwmon 类(用于 libsensors4 (lm-sensors 3) 兼容性)定位。将所有 hwmon 属性移至此新平台设备。 |
0x020100 |
带有热键 NVRAM 轮询支持的 thinkpad-acpi 标记。如果必须,请使用它来知道您不应启动用户空间 NVRAM 轮询器(允许检测用户何时编译出 NVRAM,因为它首先是不需要/不希望的)。 |
0x020101 |
带有热键 NVRAM 轮询和正确 hotkey_mask 语义的 thinkpad-acpi 标记(NVRAM 轮询补丁的版本 8)。0.18 的一些开发快照具有较早的版本,该版本对 hotkey_mask 执行了奇怪的操作。 |
0x020200 |
为以下属性添加 poll()/select() 支持:hotkey_radio_sw、wakeup_hotunplug_complete、wakeup_reason |
0x020300 |
删除了热键启用/禁用支持,属性 hotkey_bios_enabled 和 hotkey_enable 已弃用并标记为删除。 |
0x020400 |
支持 16 个 LED 的标记。此外,已知在给定型号中不存在的 LED 不再注册到 LED sysfs 类。 |
0x020500 |
更新了热键驱动程序,hotkey_mask 始终可用,并且始终能够禁用热键。正确支持非常旧的 ThinkPad。hotkey_bios_mask 已弃用并标记为删除。 |
0x020600 |
支持背光更改事件的标记。 |
0x020700 |
支持仅静音混音器。默认情况下,以只读模式进行音量控制。ALSA 混音器支持的标记。 |
0x030000 |
热量和风扇 sysfs 属性已移至 hwmon 设备,而不是附加到后备平台设备。 |