核心驅動 vt1211

支援的晶片

  • VIA VT1211

    字首:‘vt1211’

    掃描地址:無,地址從 Super-I/O 配置空間讀取

    資料手冊:由 VIA 應要求提供,並受 NDA 約束

作者:Juerg Haefliger <juergh@gmail.com>

此驅動程式基於 Mark D. Studebaker 針對核心 2.4 的驅動程式及其 Lars Ekman 移植到核心 2.6 的版本。

感謝 VIA 的 Joseph Chan 和 Fiona Gatt 提供文件和技術支援。

模組引數

  • uch_config: int

    覆蓋通道 1-5 的 BIOS 預設通用通道 (UCH) 配置。合法值為 0-31 範圍內的整數。位 0 對映到 UCH1,位 1 對映到 UCH2,依此類推。將某個位設定為 1 會啟用該特定 UCH 的熱輸入,將某個位設定為 0 會啟用電壓輸入。

  • int_mode: int

    覆蓋 BIOS 預設溫度中斷模式。唯一可能的值是 0,它強制中斷模式為 0。在這種模式下,讀取狀態暫存器時會清除任何掛起的中斷,但只要溫度保持在遲滯限制之上,就會重新生成中斷。

請注意,覆蓋 BIOS 預設值可能會導致一些不良的副作用!

描述

VIA VT1211 Super-I/O 晶片包括完整的硬體監控功能。它可以監控 2 個專用的溫度感測器輸入(temp1 和 temp2)、1 個專用電壓 (in5) 和 2 個風扇。此外,該晶片還實現了 5 個通用輸入通道 (UCH1-5),可以單獨程式設計以監控電壓或溫度。

該晶片還提供風扇速度的手動和自動控制(根據資料手冊)。該驅動程式僅支援自動控制,因為手動模式似乎無法像資料手冊中宣傳的那樣工作。事實上,我根本無法使手動模式工作!請注意,由於我的 EPIA M10000 沒有將風扇連線到 VT1211 的 PWM 輸出,因此自動模式沒有經過很好的測試 :-().

下表顯示了 vt1211 輸入和 sysfs 節點之間的關係。

感測器

電壓模式

溫度模式

預設用途(來自資料手冊)

讀數 1

temp1

Intel 熱二極體

讀數 3

temp2

內部熱二極體

UCH1/讀數2

in0

temp3

NTC 型熱敏電阻

UCH2

in1

temp4

+2.5V

UCH3

in2

temp5

VccP(處理器核心)

UCH4

in3

temp6

+5V

UCH5

in4

temp7

+12V

+3.3V

in5

內部 VCC (+3.3V)

電壓監控

電壓由一個 8 位 ADC 取樣,其 LSB 約為 10mV。因此,支援的輸入範圍是從 0 到 2.60V。超出此範圍的電壓值需要外部縮放電阻。需要透過 sensors.conf 中的計算行來補償此外部縮放,例如

compute inx @*(1+R1/R2), @/(1+R1/R2)

根據 VIA 的建議,板級縮放電阻如下。這當然完全取決於實際的板實現 :-) 您將需要找到自己主機板的文件並相應地編輯 sensors.conf。

電壓

R1

R2

分壓

原始值

+2.5V

2K

10K

1.2

2083 mV

VccP

---

---

1.0

1400 mV [1]

+5V

14K

10K

2.4

2083 mV

+12V

47K

10K

5.7

2105 mV

+3.3V (int)

2K

3.4K

1.588

3300 mV [2]

+3.3V (ext)

6.8K

10K

1.68

1964 mV

每個測量的電壓都有一個相關的低限和高限,當交叉時會觸發警報。

溫度監控

溫度以千分之一攝氏度報告。每個測量的溫度都有一個高限,如果交叉會觸發警報。每個溫度都有一個相關的遲滯值,溫度必須降到該值以下才能清除警報(這僅適用於中斷模式 0)。如果 BIOS 沒有自動執行,則可以強制中斷模式為 0。有關詳細資訊,請參閱“模組引數”部分。

除了 temp2 之外的所有溫度通道都是外部的。Temp2 是 VT1211 內部熱二極體,驅動程式執行 temp2 的所有縮放並以千分之一攝氏度為單位返回溫度。對於外部通道 temp1 和 temp3-temp7,縮放取決於板實現,需要在使用者空間中透過 sensors.conf 執行。

Temp1 是一種 Intel 型熱二極體,需要以下公式來轉換 sysfs 讀數和實際溫度

compute temp1 (@-Offset)/Gain, (@*Gain)+Offset

根據 VIA VT1211 BIOS 移植指南,應使用以下增益和偏移值

二極體型別

偏移

增益

英特爾 CPU

88.638 65.000

0.9528 0.9686 [3]

VIA C3 Ezra

83.869

0.9528

VIA C3 Ezra-T

73.869

0.9528

Temp3-temp7 支援 NTC 熱敏電阻。對於這些通道,驅動程式返回在 UCH1-UCH5 的各個引腳上看到的電壓。引腳上的電壓 (Vpin) 由熱敏電阻 (Rth) 和縮放電阻 (Rs) 構成的分壓器形成

Vpin = 2200 * Rth / (Rs + Rth)   (2200 is the ADC max limit of 2200 mV)

熱敏電阻的方程如下(如果您想了解更多資訊,請在 Google 上搜索)

Rth = Ro * exp(B * (1 / T - 1 / To))   (To is 298.15K (25C) and Ro is the
                                        nominal resistance at 25C)

將上述兩個方程混合在一起,並假設 Rs = Ro 且 B = 3435,則得出以下 sensors.conf 公式

compute tempx 1 / (1 / 298.15 - (` (2200 / @ - 1)) / 3435) - 273.15,
              2200 / (1 + (^ (3435 / 298.15 - 3435 / (273.15 + @))))

風扇速度控制

VT1211 提供 2 個可程式設計 PWM 輸出,用於控制 2 個風扇的速度。將 2 寫入任何兩個 pwm[1-2]_enable sysfs 節點會將 PWM 控制器置於自動模式。只有一個控制器可以控制兩個 PWM 輸出,但每個 PWM 輸出都可以單獨啟用和停用。

每個 PWM 都有 4 個相關的不同輸出佔空比:full、high、low 和 off。Full 和 off 在內部硬連線到 255 (100%) 和 0 (0%)。High 和 low 可以透過 pwm[1-2]_auto_point[2-3]_pwm 進行程式設計。每個 PWM 輸出都可以與不同的熱輸入相關聯,但是 - 這裡是奇怪的部分 - 只存在一組熱閾值,用於控制兩個 PWM 的輸出佔空比。可以透過 pwm[1-2]_auto_point[1-4]_temp 訪問熱閾值。請注意,即使有 2 組各 4 個自動點,它們也對映到 VT1211 中的相同暫存器,並且程式設計一組就足夠了(實際上只有第一組 pwm1_auto_point[1-4]_temp 是可寫的,第二組是隻讀的)。

PWM 自動點

PWM 輸出佔空比

pwm[1-2]_auto_point4_pwm

全速佔空比(硬連線到 255)

pwm[1-2]_auto_point3_pwm

高速佔空比

pwm[1-2]_auto_point2_pwm

低速佔空比

pwm[1-2]_auto_point1_pwm

關閉佔空比(硬連線到 0)

溫度自動點

熱閾值

pwm[1-2]_auto_point4_temp

全速溫度

pwm[1-2]_auto_point3_temp

高速溫度

pwm[1-2]_auto_point2_temp

低速溫度

pwm[1-2]_auto_point1_temp

關閉溫度

長話短說,控制器實現以下演算法來根據輸入溫度設定 PWM 輸出佔空比

熱閾值

輸出佔空比(溫度升高)

輸出佔空比(溫度下降)

全速佔空比

全速佔空比

全速溫度

高速佔空比

全速佔空比

高速溫度

低速佔空比

高速佔空比

低速溫度

關閉佔空比

低速佔空比

關閉溫度