内核驱动 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 支持热巡航模式,其中 PWM 会自动调节以分别将温度 1-3 保持在特定的目标温度。有关 sysfs 接口的描述,请参见下文。

w83791d 有一个全局位,用于在触发警报时启用扬声器发出哔哔声,以及一个位掩码来启用或禁用特定警报的哔哔声。您需要同时打开全局哔哔声启用位和相应的哔哔声位,才能使触发的警报发出哔哔声。

全局启用的 sysfs 接口通过 sysfs beep_enable 文件实现。此文件用于旧代码和新代码。

哔哔声位掩码的 sysfs 接口已从单个 sysfs beep_mask 文件的原始旧方法迁移到使用多个 *_beep 文件的新方法,如 sysfs 文件的命名和数据格式标准 中所述。

对于与警报相对应的位图也发生了类似的变化。原始的旧方法使用包含触发警报位图的单个 sysfs alarms 文件。较新的方法使用多个 sysfs *_alarm 文件(再次遵循 sysfs-interface 中描述的模式)。

由于这两种方法都读取和写入底层硬件,因此它们可以互换使用,并且一个方法中的更改将自动反映在另一个方法中。如果您使用旧的位掩码方法,则您的用户空间代码负责处理警报和 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

警报位图与 beep_mask 位掩码

对于使用 alarms 和 beep_mask 文件的旧代码

信号

警报

beep_mask

备注

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