Kernel driver w83791d¶
支持的芯片
Winbond W83791D
前缀: ‘w83791d’
扫描地址: I2C 0x2c - 0x2f
数据手册: http://www.winbond-usa.com/products/winbond_products/pdfs/PCIC/W83791D_W83791Gb.pdf
作者: Charles Spirakis <bezaur@gmail.com>
此驱动程序派生自 w83781d.c 和 w83792d.c 源代码文件。
致谢
w83781d.c
Frodo Looijaard <frodol@dds.nl>,
Philip Edelbrock <phil@netroedge.com>,
Mark Studebaker <mdsxyz123@yahoo.com>
w83792d.c
Shane Huang (Winbond),
Rudolf Marek <r.marek@assembler.cz>
其他贡献者
Sven Anders <anders@anduras.de>
Marc Hulsman <m.hulsman@tudelft.nl>
模块参数¶
- 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 仅支持手动模式。
|
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 修改) |