ThinkPad ACPI 额外驱动程序

版本 0.25

2013 年 10 月 16 日

http://ibm-acpi.sf.net/

这是一个用于 IBM 和联想 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 内核版本中,由于长度限制,“thinkpad-acpi”过长时,使用“tpacpi”作为缩写。

状态

目前支持的功能如下(详细说明见下文)

  • 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 接口的版本,作为无符号长整型(以十六进制格式输出:0xAAAABBCC),其中

AAAA
  • 主修订版本

BB
  • 次要修订版本

CC
  • 错误修复修订版本

驱动程序的 sysfs 接口版本更改日志可以在本文档末尾找到。内核子系统对 sysfs 接口所做的更改在此处没有记录,也没有通过此属性进行跟踪。

对 thinkpad-acpi sysfs 接口的更改仅在提交到 Linux 主线时才被视为非实验性,届时此接口的更改将被记录,并且 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 上,仍然可以通过每秒至少轮询“CMOS NVRAM”10 次来支持一些额外的热键。驱动程序尝试在需要时自动启用此功能。

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 轮询控制。为了保持最大的 bug-to-bug 兼容性,它不报告任何掩码,也不允许在固件根本不支持掩码时操作热键掩码,即使正在使用 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

热键轮询的频率(赫兹)。它必须在 0 到 25 赫兹之间。仅在严格需要时才执行轮询。

将 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: 电池 (罕见) 联想: 屏幕锁定

0x1003

0x02

FN+F3

许多 IBM 型号总是报告此热键,即使热键被禁用或 Fn+F3 被屏蔽。IBM:屏幕锁定,通常会附带关闭 ThinkLight 的副作用。联想:电池

0x1004

0x03

FN+F4

睡眠按钮 (ACPI 睡眠按钮语义,即睡眠到 RAM)。它总是生成某种事件,无论是热键事件还是 ACPI 睡眠按钮事件。固件可能会拒绝生成进一步的 FN+F4 键按下事件,直到执行 S3 或 S4 ACPI 睡眠周期或经过一段时间。

0x1005

0x04

FN+F5

无线电。如果由固件控制,则启用/禁用内部蓝牙硬件和广域网卡。不影响无线局域网卡。实际上,应该用于打开/关闭所有无线电(蓝牙+广域网+无线局域网)。

0x1006

0x05

FN+F6

0x1007

0x06

FN+F7

视频输出循环。今天您感觉幸运吗?

0x1008

0x07

FN+F8

IBM: 切换屏幕扩展 联想: 配置 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+BACKSPACE

0x100E

0x0D

FN+INSERT

0x100F

0x0E

FN+DELETE

0x1010

0x0F

FN+HOME

亮度调高。此键在 IBM ThinkPad 中始终由固件处理,即使未屏蔽。请勿干预。对于采用新 BIOS 的联想 ThinkPad,它必须由 ACPI OSI 或用户空间处理。驱动程序会正确处理,切勿随意更改。

0x1011

0x10

FN+END

亮度调低。详情请参阅亮度调高部分。

0x1012

0x11

FN+PGUP

ThinkLight 切换。此键始终由固件处理,即使未屏蔽。

0x1013

0x12

FN+PGDOWN

0x1014

0x13

FN+SPACE

缩放键

0x1015

0x14

音量调高

内部混音器音量调高。此键始终由固件处理,即使未屏蔽。注意:联想似乎正在更改此设置。

0x1016

0x15

音量调低

内部混音器音量调高。此键始终由固件处理,即使未屏蔽。注意:联想似乎正在更改此设置。

0x1017

0x16

静音

静音内部混音器。此键始终由固件处理,即使未屏蔽。

0x1018

0x17

THINKPAD

ThinkPad/Access 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 及更高版本的硬件 rfkill 拨动开关

SW_TABLET_MODE

平板电脑 ThinkPad HKEY 事件 0x5009 和 0x500A

非热键 ACPI HKEY 事件映射

驱动程序从不传播的事件

0x2304

系统从挂起状态唤醒以取消停靠

0x2305

系统从挂起状态唤醒以弹出托架

0x2404

系统从休眠状态唤醒以取消停靠

0x2405

系统从休眠状态唤醒以弹出托架

0x5001

盖子合上

0x5002

盖子打开

0x5009

平板电脑旋转:切换到平板模式

0x500A

平板电脑旋转:切换到正常模式

0x5010

亮度级别更改/控制事件

0x6000

键盘:Numlock 键按下

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/交流适配器相关(待验证)

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 设备属性启用/禁用,并且还可以查询其当前状态。

启用

  • 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 方法。控制台上的视频切换应该仍然有效。

更新:请参阅 https://bugs.freedesktop.org/show_bug.cgi?id=2000

ThinkLight 控制

procfs: /proc/acpi/ibm/light

sysfs 属性:根据 LED 类,“tpacpi::thinklight”LED

procfs 说明

ThinkLight 状态可以通过 procfs 接口读取和设置。少数不提供状态的型号会将 ThinkLight 状态显示为“未知”。可用命令如下:

echo on  > /proc/acpi/ibm/light
echo off > /proc/acpi/ibm/light

sysfs 说明

ThinkLight sysfs 接口由 LED 类文档详细说明,位于 Linux 下的 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 的无限制访问要求 thinkpad-acpi 编译时启用 CONFIG_THINKPAD_ACPI_UNSAFE_LEDS 选项。发行版绝不能启用此选项。了解后果的个人用户可以启用它。

支持音频静音和麦克风静音 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 number> 范围是 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 接口在 LED 类文档 Linux 下的 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

BEEP 方法由 ACPI 固件内部使用,用于在各种情况下提供 audible 警报。此功能允许手动触发相同的声音。

命令是非负整数

echo <number> >/proc/acpi/ibm/beep

有效的 <number> 范围是 0 到 17。并非所有数字都会触发声音,且声音因型号而异。以下是 X40 上的行为:

  • 0 - 停止正在播放的声音(但使用 17 停止 16)

  • 2 - 两声哔哔,暂停,第三声哔哔(“低电量”)

  • 3 - 单声哔哔

  • 4 - 高音,接着低音调哔哔(“无法”)

  • 5 - 单声哔哔

  • 6 - 极高音,接着高音调哔哔(“AC/DC”)

  • 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: 内部硬盘驱动器

对于 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: 时钟发生器、迷你 PCI 卡和 ICH (南桥),在迷你 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 驱动程序中。相反,EC 可以通过 /sys/kernel/debug/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 特有接口。如果驱动程序检测到 ThinkPad 中存在标准 ACPI 接口,它将禁用其本机背光亮度控制接口。

如果出于某种原因,您想使用 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

读取当前屏幕设置的亮度。

亮度

写入请求驱动程序将亮度更改为给定值。读取将告诉您当“power”设置为零且显示未因内核电源管理事件而变暗时,驱动程序正在尝试将显示器设置为的亮度。

电源

电源管理模式,其中 0 为“显示器开启”,1 至 3 将显示器背光调暗至亮度级别 0,因为 thinkpad-acpi 无法真正关闭背光。内核电源管理事件可以暂时提高当前电源管理级别,即它们可以调暗显示器。

警告

无论您做什么,切勿同时调用 thinkpad-acpi 背光级别更改接口和基于 ACPI 的背光级别更改接口(在较新的 BIOSes 上可用,并由 Linux ACPI 视频驱动程序驱动)。两者会产生不良交互,导致奇怪的行为,并可能通过不必要地频繁调整其亮度级别来缩短背光灯的寿命。

音量控制 (控制台音频控制)

procfs: /proc/acpi/ibm/volume

ALSA:“ThinkPad 控制台音频控制”,默认 ID:“ThinkPadEC”

注意:默认情况下,音量控制界面以只读模式操作,因为它应该用于屏幕显示目的。读/写模式可以通过使用“volume_control=1”模块参数启用。

注意:建议发行版不要默认启用 volume_control,这应仅由本地管理员完成。ThinkPad UI 旨在仅通过音量键进行控制台音频控制,并由桌面环境仅提供屏幕显示反馈。软件音量控制应仅在主 AC97/HDA 混音器中完成。

关于 ThinkPad 控制台音频控制

ThinkPad 内置了一个放大器和静音电路,用于驱动控制台耳机和扬声器。此电路位于音频路径中主 AC97 或 HDA 混音器之后,并由固件独占控制。

ThinkPad 有三个特殊的热键用于与控制台音频控制交互:音量调高、音量调低和静音。

值得注意的是,静音功能的正常工作方式(在没有“静音 LED”的 ThinkPad 上)是:

  1. 按下静音键以静音。它将*始终*静音,您可以随意按下多次,声音将保持静音。

  2. 按下任一音量键以解除 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 完成的任何风扇编程。

thinkpad-acpi 内核驱动程序可以被编程为在用户空间未发出 procfs 风扇命令:“enable”、“disable”、“level”或“watchdog”,或者在可配置的时间(最长 120 秒)内未对 pwm1_enable(或对 pwm1 *仅当* pwm1_enable 设置为 1,即手动模式时)进行写入时,将风扇级别恢复到安全设置。此功能称为风扇安全看门狗。

请注意,看门狗计时器在启用风扇后停止。当接收到上述风扇命令之一时,它将自动再次重新启动(使用相同的间隔)。因此,风扇看门狗不适合保护免受通过“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 子系统指南,但风扇安全看门狗除外。

对任何 sysfs 属性的写入都可能返回 EINVAL 错误(如果该操作在给定 ThinkPad 中不受支持或参数超出范围),以及 EPERM 错误(如果禁止)。它们也可能返回 EINTR(系统调用中断)和 EIO(尝试与固件通信时发生 I/O 错误)。

驱动程序尚未实现的功能返回 ENOSYS。

hwmon 设备属性 pwm1_enable
  • 0: PWM 离线(风扇设置为全速模式)

  • 1: 手动 PWM 控制(使用 pwm1 设置风扇级别)

  • 2: 硬件 PWM 控制(EC“自动”模式)

  • 3: 保留(软件 PWM 控制,尚未实现)

模式 0 和 2 不受所有 ThinkPad 支持,并且驱动程序并非总是能够检测到这一点。如果它确实知道某个模式不受支持,它将返回 -EINVAL。

hwmon 设备属性 pwm1

风扇级别,从固件值 0-7 缩放到 hwmon 刻度 0-255。0 表示风扇停止,255 表示最高正常速度(7 级)。

此属性仅在 pmw1_enable 设置为 1(手动 PWM 控制)时才控制风扇。

hwmon 设备属性 fan1_input

风扇转速表读数,单位为 RPM。在某些 ThinkPad 上,当 EC 将 PWM 转换为离线模式时,此读数可能会失效,这可能需要长达两分钟。在较旧的 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”

此功能显示内置无线广域网设备的存在和当前状态。

如果 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 设备属性启用/禁用,并且还可以查询其当前状态。

启用
  • 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 设备的 rfkill 控制器,如果存在并在 BIOS 中启用。

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 类。

辅助MAC

sysfs: auxmac

一些较新的ThinkPad具有一项名为MAC地址直通的功能。此功能由系统固件实现,用于提供一个系统唯一的MAC地址,该地址在连接到网络时可以覆盖扩展坞或USB以太网适配器的MAC地址。如果此功能已启用,此属性允许用户空间轻松确定MAC地址。

此辅助MAC的值为

cat /sys/devices/platform/thinkpad_acpi/auxmac

如果此功能被禁用,其值将为“disabled”。

此属性是只读的。

自适应键盘

sysfs设备属性: adaptive_kbd_mode

此sysfs属性控制联想X1 Carbon 第二代(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(含)之间的整数;此值表示电池电量百分比水平,高于此水平将停止充电。

这些属性的确切语义可在ABI文件测试/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

启用调试输出

该模块接受一个调试参数,可用于选择性地启用不同类别的调试输出,例如

modprobe thinkpad_acpi debug=0xffff

将启用所有调试输出类别。它接受一个位掩码,因此要启用多个输出类别,只需将其值相加。

调试位掩码

描述

0x8000

披露访问驱动程序某些功能的用户空间程序的PID

0x0001

初始化和探测

0x0002

移除

0x0004

射频发射器控制 (RFKILL) (蓝牙, WWAN, UWB...)

0x0008

HKEY事件接口,热键

0x0010

风扇控制

0x0020

背光亮度

0x0040

音频混音器/音量控制

还有一个内核构建选项可以启用更多调试信息,这对于调试驱动程序问题可能是必要的。

驱动程序输出的调试信息级别可以通过sysfs在运行时更改,使用驱动程序属性debug_level。该属性接受与上述调试模块参数相同的位掩码。

强制加载模块

如果thinkpad-acpi拒绝检测您的ThinkPad,您可以尝试指定模块参数force_load=1。无论这是否有效,请通过ibm-acpi-devel@lists.sourceforge.net提交报告。

Sysfs接口变更日志

0x000100

初始sysfs支持,作为单个平台驱动程序和设备。

0x000200

支持32个热键,并支持无线电滑动开关。

0x010000

热键现在默认通过输入层处理,无线电开关生成输入事件EV_RADIO,并且驱动程序默认在固件中启用热键处理。

0x020000

ABI修复:添加了一个独立的hwmon平台设备和驱动程序,为了libsensors4 (lm-sensors 3) 兼容性,该设备和驱动程序必须通过名称 (thinkpad) 和hwmon类定位。所有hwmon属性都已移至此新平台设备。

0x020100

带有热键NVRAM轮询支持的thinkpad-acpi标记。如果必要,使用它来了解不应启动用户空间NVRAM轮询器(允许检测NVRAM是否因最初不需要/不希望而被用户编译出)。

0x020101

带有热键NVRAM轮询和正确 hotkey_mask 语义(NVRAM轮询补丁的第8版)的thinkpad-acpi标记。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设备,而不是附加到后端平台设备。