Kernel driver w83791d

支援的晶片

作者: Charles Spirakis <bezaur@gmail.com>

此驅動程式派生自 w83781d.c 和 w83792d.c 原始碼檔案。

致謝

w83781d.c

w83792d.c

其他貢獻者

模組引數

  • init boolean

    (預設 0)

    使用 ‘init=1’ 使驅動程式執行額外的軟體初始化。預設行為是執行儘可能少的初始化,並依靠 BIOS 正確設定晶片。如果您知道您有一個 w83791d 並且遇到問題,請在嘗試 reset=1 之前嘗試 init=1。

  • reset boolean

    (預設 0)

    使用 ‘reset=1’ 重置晶片(透過索引 0x40,位 7)。預設行為是不重置晶片以保留 BIOS 設定。

  • force_subclients=bus,caddr,saddr,saddr

    用於強制特定晶片的子客戶端的 i2c 地址。例如,使用 force_subclients=0,0x2f,0x4a,0x4b 將匯流排 0 上晶片 0x2f 的子客戶端強制到 i2c 地址 0x4a 和 0x4b。

描述

此驅動程式實現對 Winbond W83791D 晶片的支援。 W83791G 晶片似乎與 W83791D 相同,但無鉛。

晶片的檢測有時可能會失敗,因為它可能處於不允許乾淨訪問的內部狀態(當前未選擇帶有 ID 暫存器的 Bank)。如果您知道晶片的地址,請使用“force”引數;這將首先使其進入更良性的狀態。

該驅動程式實現三個溫度感測器、十個電壓感測器、五個風扇轉速感測器和每個風扇的手動 PWM 控制。

溫度以攝氏度為單位測量,temp1 的測量解析度為 1 攝氏度,temp2 和 temp3 的測量解析度為 0.5 攝氏度。當溫度高於過溫關斷值時,會觸發警報;它會一直保持開啟狀態,直到溫度降至遲滯值以下。

電壓感測器(也稱為 IN 感測器)以毫伏為單位報告其值。如果電壓超過可程式設計的最小或最大限制,則會觸發警報。

風扇轉速以 RPM(每分鐘轉數)報告。如果轉速降至可程式設計限制以下,則會觸發警報。風扇讀數可以被可程式設計分頻器(所有風扇的 1、2、4、8、16、32、64 或 128)分割,以使讀數具有更大的範圍或準確性。

每個受控風扇都由 PWM 控制。可以單獨讀取和設定每個風扇的 PWM 佔空比。有效值範圍為 0(停止)到 255(全速)。 PWM 1-3 支援 Thermal Cruise 模式,在該模式下,PWM 會自動調節以使 temp 1-3 分別保持在特定的目標溫度。有關 sysfs 介面的描述,請參見下文。

w83791d 有一個全域性位,用於啟用在觸發警報時揚聲器發出蜂鳴聲,以及一個位掩碼,用於啟用或停用特定警報的蜂鳴聲。您需要同時啟用全域性蜂鳴聲啟用位和相應的蜂鳴聲位,才能使觸發的警報發出蜂鳴聲。

全域性啟用的 sysfs 介面是透過 sysfs beep_enable 檔案。此檔案用於傳統程式碼和新程式碼。

蜂鳴聲位掩碼的 sysfs 介面已從單個 sysfs beep_mask 檔案的原始傳統方法遷移到使用多個 *_beep 檔案的新方法,如 sysfs 檔案的命名和資料格式標準 中所述。

警報對應的點陣圖也發生了類似的更改。原始的傳統方法使用包含觸發警報點陣圖的單個 sysfs alarms 檔案。較新的方法使用多個 sysfs *_alarm 檔案(再次遵循 sysfs-interface 中描述的模式)。

由於這兩種方法都讀取和寫入底層硬體,因此可以互換使用它們,並且一種方法的更改會自動反映在另一種方法中。如果您使用傳統的位掩碼方法,則您的使用者空間程式碼負責處理 alarms 和 beep_mask 點陣圖不相同的事實(請參見下表)。

注意:所有新程式碼都應編寫為使用較新的 sysfs 介面規範,因為這樣可以避免點陣圖問題,並且是將來首選的介面。

驅動程式最多每三秒鐘讀取一次硬體晶片值。更頻繁地請求值的使用者模式程式碼將收到快取的值。

/sys 檔案

sysfs 介面記錄在“sysfs-interface”檔案中。此處僅記錄晶片特定的選項。

pwm[1-3]_enable

此檔案控制風扇/溫度控制模式,適用於風扇 1-3。風扇/PWM 4-5 僅支援手動模式。

  • 1 手動模式

  • 2 熱巡航模式

  • 3 風扇速度巡航模式(不再支援)

temp[1-3]_target

定義熱巡航模式的目標溫度。單位:千分之一攝氏度 RW

temp[1-3]_tolerance

熱巡航模式的溫度容差。指定目標溫度周圍的一個間隔,在該間隔內風扇速度不會改變。單位:千分之一攝氏度 RW

警報點陣圖 vs. beep_mask 位掩碼

對於使用 alarms 和 beep_mask 檔案的傳統程式碼

訊號

警報

beep_mask

Obs

in0 (VCORE)

0x000001

0x000001

in1 (VINR0)

0x000002

0x002000

<== 不匹配

in2 (+3.3VIN)

0x000004

0x000004

in3 (5VDD)

0x000008

0x000008

in4 (+12VIN)

0x000100

0x000100

in5 (-12VIN)

0x000200

0x000200

in6 (-5VIN)

0x000400

0x000400

in7 (VSB)

0x080000

0x010000

<== 不匹配

in8 (VBAT)

0x100000

0x020000

<== 不匹配

in9 (VINR1)

0x004000

0x004000

temp1

0x000010

0x000010

temp2

0x000020

0x000020

temp3

0x002000

0x000002

<== 不匹配

fan1

0x000040

0x000040

fan2

0x000080

0x000080

fan3

0x000800

0x000800

fan4

0x200000

0x200000

fan5

0x400000

0x400000

tart1

0x010000

0x040000

<== 不匹配

tart2

0x020000

0x080000

<== 不匹配

tart3

0x040000

0x100000

<== 不匹配

case_open

0x001000

0x001000

global_enable

0x800000

(透過 beep_enable 修改)