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 修改)