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裝置,而不是附加到後端平臺裝置。