内核驱动 lm93¶
支持的芯片
国家半导体 LM93
前缀 ‘lm93’
扫描的地址:I2C 0x2c-0x2e
国家半导体 LM94
前缀 ‘lm94’
扫描的地址:I2C 0x2c-0x2e
- 作者
Mark M. Hoffman <mhoffman@lightlink.com>
移植到 2.6 版本:Eric J. Bowersox <ericb@aspsys.com>
适配到 2.6.20 版本:Carsten Emde <ce@osadl.org>
修改为主线集成:Hans J. Koch <hjk@hansjkoch.de>
模块参数¶
init: 整数。设置为非零值以强制进行某些初始化(默认为 0)。
disable_block: 整数。“0”允许 SMBus 块数据事务(如果主机支持)。“1”禁用 SMBus 块数据事务。默认为 0。
vccp_limit_type: 整数数组 (2)。配置 in7 和 in8 的限制类型,其中 0 表示绝对,非零值表示相对。“相对”这里指的是数据手册中的“使用 VID 的动态 Vccp 监控”。它极大地简化了接口,使其一次只能启用一组限制(绝对或相对)(即使硬件能够同时启用两者)。无论如何,同时启用两者没有令人信服的用例。默认为“0,0”。
vid_agtl: 整数。“0”将 VID 引脚配置为 V(ih) = 2.1V 最小值,V(il) = 0.8V 最大值。“1”将 VID 引脚配置为 V(ih) = 0.8V 最小值,V(il) = 0.4V 最大值。(后一种设置在数据手册中称为 AGTL+ 兼容)。即,此参数控制 VID 引脚输入阈值;如果您的 VID 输入不起作用,请尝试更改此参数。默认值为“0”。
硬件描述¶
(来自数据手册)
LM93 硬件监视器具有与 SMBus 2.0 兼容的两线数字接口。使用 8 位 ADC,LM93 测量两个远程二极管连接晶体管以及自身芯片和 16 个电源电压的温度。为了设置风扇速度,LM93 有两个 PWM 输出,每个输出由最多四个温度区域控制。风扇控制算法基于查找表。LM93 包括一个数字滤波器,可以调用该滤波器来平滑温度读数,以便更好地控制风扇速度。LM93 有四个转速计输入来测量风扇速度。包括所有测量值的限制和状态寄存器。LM93 在以前的主板管理 ASIC 的功能基础上构建,并使用 LM85 的某些功能(即智能转速计模式)。它还增加了对动态 Vccp 监控和 PROCHOT 的测量和控制支持。它旨在通过最少的外部组件来监控双处理器 Xeon 类主板。
LM94 也支持 LM93 兼容模式。不支持 LM94 的额外传感器和功能。
用户界面¶
#PROCHOT¶
LM93 可以监控两个 #PROCHOT 信号。结果可以在 sysfs 文件 prochot1、prochot2、prochot1_avg、prochot2_avg、prochot1_max 和 prochot2_max 中找到。prochot1_max 和 prochot2_max 分别包含 #PROCHOT1 和 #PROCHOT2 的用户限制。prochot1 和 prochot2 包含最近完整时间间隔的当前读数。prochot1_avg 和 prochot2_avg 的值类似于 2 个周期的指数移动平均值(但并非完全如此 - 请查看数据手册)。请注意,第三个值是由芯片本身计算的。所有值的范围为 0-255,其中 0 表示未节流,255 表示 > 99.6%。
还可以配置两个 #PROCHOT 信号的监控间隔。这些间隔可以在 sysfs 文件 prochot1_interval 和 prochot2_interval 中找到。这些文件中的值分别指定 #P1_PROCHOT 和 #P2_PROCHOT 的间隔。选择列表中没有的值将导致驱动程序使用下一个最大的间隔。可用间隔为(以秒为单位):
- #PROCHOT 间隔
0.73, 1.46, 2.9, 5.8, 11.7, 23.3, 46.6, 93.2, 186, 372
可以将 LM93 配置为逻辑短路两个 #PROCHOT 信号。即,当 #P1_PROCHOT 被置位时,LM93 将自动置位 #P2_PROCHOT,反之亦然。通过向 sysfs 文件 prochot_short 写入非零整数来启用此模式。
LM93 还可以通过在其中一个或两个引脚上驱动 PWM 信号来覆盖 #PROCHOT 引脚。当被覆盖时,该信号的周期为 3.56 毫秒,最小脉冲宽度为 5 个时钟(在 22.5kHz 时 => 6.25% 占空比),最大脉冲宽度为 80 个时钟(在 22.5kHz 时 => 99.88% 占空比)。
sysfs 文件 prochot1_override 和 prochot2_override 包含布尔整数,它们分别启用或禁用 #P1_PROCHOT 和 #P2_PROCHOT 的覆盖功能。sysfs 文件 prochot_override_duty_cycle 包含一个值,用于控制启用覆盖功能时使用的 PWM 信号的占空比。此值的范围为 0 到 15,其中 0 表示最小占空比,15 表示最大占空比。
#VRD_HOT¶
LM93 可以监控两个 #VRD_HOT 信号。结果可以在 sysfs 文件 vrdhot1 和 vrdhot2 中找到。每个文件有一个值:一个布尔值,其中 1 表示 #VRD_HOT 被置位,0 表示它被否定。这些文件是只读的。
智能转速计模式(来自数据手册)
If a fan is driven using a low-side drive PWM, the tachometer
output of the fan is corrupted. The LM93 includes smart tachometer
circuitry that allows an accurate tachometer reading to be
achieved despite the signal corruption. In smart tach mode all
four signals are measured within 4 seconds.
通过向 sysfs 文件 fan<n>_smart_tach 写入 1 或 2(将风扇转速计与 pwm 关联),驱动程序会启用智能转速计模式。零将禁用该风扇的功能。请注意,如果 PWM 输出频率为 22500 Hz(见下文),则无法启用智能转速计模式。
手动 PWM¶
LM93 对两个 PWM 输出具有固定或覆盖模式(尽管仍然有一些条件会覆盖此模式 - 有关详细信息,请参阅数据手册的第 15.10.6 节)。sysfs 文件 pwm1_override 和 pwm2_override 用于启用此模式;每个都是一个布尔整数,其中 0 禁用手动控制模式,1 启用手动控制模式。sysfs 文件 pwm1 和 pwm2 用于设置手动占空比;每个都是一个整数 (0-255),其中 0 表示 0% 占空比,255 表示 100%。请注意,占空比值受硬件约束。选择不可用的值将导致驱动程序使用下一个最大的值。另请注意:当禁用手动 PWM 模式时,pwm1 和 pwm2 的值表示 h/w 选择的当前占空比。
PWM 输出频率¶
LM93 支持 PWM 输出通道的几种不同频率。sysfs 文件 pwm1_freq 和 pwm2_freq 用于选择频率。频率值受硬件约束。选择不可用的值将导致驱动程序使用下一个最大的值。另请注意,此参数对智能转速计模式有影响(见上文)。
- PWM 输出频率(单位:Hz)
12、36、48、60、72、84、96、22500(默认)
自动 PWM¶
LM93 能够进行复杂的自动风扇控制,具有许多不同的配置点。首先,每个 PWM 输出都可以绑定到八个控制源的任意组合。最终 PWM 是绑定到 PWM 输出的所有单个控制源中的最大值。
八个控制源是:temp1-temp4(也称为数据手册中的“区域”)、#PROCHOT 1 & 2 以及 #VRDHOT 1 & 2。绑定在 sysfs 文件 pwm<n>_auto_channels 中表示为位掩码,其中“1”启用绑定,“0”禁用绑定。h/w 默认值为 0x0f(所有温度绑定)。
0x01
温度 1
0x02
温度 2
0x04
温度 3
0x08
温度 4
0x10
#PROCHOT 1
0x20
#PROCHOT 2
0x40
#VRDHOT 1
0x80
#VRDHOT 2
函数 y = f(x) 将源温度 x 转换为 PWM 输出 y。LM93 的此函数是从基本温度和 12 个温度偏移表派生的。基本温度以摄氏度表示,位于 sysfs 文件 temp<n>_auto_base 中。偏移以累积摄氏度表示,温度值 <n> 的偏移 <i> 的值包含在文件 temp<n>_auto_offset<i> 中。例如,如果基本温度为 40C
偏移 #
temp<n>_auto_offset<i>
范围
pwm
1
0
25.00%
2
0
28.57%
3
1
40C - 41C
32.14%
4
1
41C - 42C
35.71%
5
2
42C - 44C
39.29%
6
2
44C - 46C
42.86%
7
2
48C - 50C
46.43%
8
2
50C - 52C
50.00%
9
2
52C - 54C
53.57%
10
2
54C - 56C
57.14%
11
2
56C - 58C
71.43%
12
2
58C - 60C
85.71%
> 60C
100.00%
有效偏移范围为 0C <= x <= 7.5C,增量为 0.5C。
每个温度通道都有一个独立的基本温度。但是,请注意,只有两个偏移表:每个表分别用于 temp[12] 和 temp[34]。因此,对例如 temp1_auto_offset<i> 的任何更改也会影响 temp2_auto_offset<i>。
LM93 还可以将滞后应用于偏移表,以防止偏移表中两个步骤之间发生不必要的振荡。这些值可以在 sysfs 文件 temp<n>_auto_offset_hyst 中找到。此文件中的值具有与 temp<n>_auto_offset<i> 中相同的表示形式。
如果温度读数低于该通道的基本值,则 LM93 将使用最小 PWM 值。这些值可以在 sysfs 文件 temp<n>_auto_pwm_min 中找到。请注意,只有两个最小值:每个最小值分别用于 temp[12] 和 temp[34]。因此,对例如 temp1_auto_pwm_min 的任何更改也会影响 temp2_auto_pwm_min。
PWM 启动周期¶
当 PWM 输出的占空比从 0% 命令到某个大于 0% 的值时,会发生启动周期。LM93 支持启动期间的最小占空比。这些值可以在 sysfs 文件 pwm<n>_auto_spinup_min 中找到。此文件中的值的表示方式与其他 PWM 占空比值相同。启动周期的持续时间也是可配置的。这些值可以在 sysfs 文件 pwm<n>_auto_spinup_time 中找到。此文件中的值是以秒为单位的启动时间。可用的启动时间受硬件限制。选择不可用的值将导致驱动程序使用下一个更大的值。
- 启动持续时间
0(禁用,硬件默认值),0.1、0.25、0.4、0.7、1.0、2.0、4.0
#PROCHOT 和 #VRDHOT PWM 斜坡¶
如果将 #PROCHOT 或 #VRDHOT 信号绑定到 PWM 输出通道时,它们被置为有效,LM93 将以离散的步长将 PWM 输出斜坡上升到 100% 占空比。每个步长的持续时间是可配置的。有两个文件,每个文件都有一个以秒为单位的值:pwm_auto_prochot_ramp 和 pwm_auto_vrdhot_ramp。可用的斜坡时间受硬件限制。选择不可用的值将导致驱动程序使用下一个更大的值。
- 斜坡时间
0(禁用,硬件默认值)到 0.75,以 0.05 秒的间隔递增
风扇增强¶
对于每个温度通道,都有一个增强温度:如果通道超过此限制,LM93 将立即将两个 PWM 输出驱动到 100%。此限制以摄氏度表示,位于 sysfs 文件 temp<n>_auto_boost 中。此功能还有一个迟滞温度:达到增强限制后,温度通道必须降至该值以下,才能禁用增强功能。此温度也以摄氏度表示,位于 sysfs 文件 temp<n>_auto_boost_hyst 中。
GPIO 引脚¶
LM93 可以监控四个专用 GPIO 引脚以及四个转速输入引脚的逻辑电平。GPIO0-GPIO3 分别对应于(风扇)转速 1-4。通过读取 sysfs 文件 gpio 中的位掩码来读取所有八个 GPIO。LSB 是 GPIO0,MSB 是 GPIO7。
LM93 独有的 sysfs 文件¶
文件 |
描述 |
---|---|
prochot<n> |
当前 #PROCHOT % |
prochot<n>_avg |
移动平均 #PROCHOT % |
prochot<n>_max |
限制 #PROCHOT % |
prochot_short |
启用或禁用逻辑 #PROCHOT 引脚短路 |
prochot<n>_override |
强制将 #PROCHOT 断言为 PWM |
prochot_override_duty_cycle |
覆盖 #PROCHOT 时使用的 PWM 信号的占空比 |
prochot<n>_interval |
#PROCHOT PWM 采样间隔 |
vrdhot<n> |
0 表示否定,1 表示断言 |
fan<n>_smart_tach |
启用或禁用智能转速模式 |
pwm<n>_auto_channels |
选择 PWM 输出的控制源 |
pwm<n>_auto_spinup_min |
启动期间的最小占空比 |
pwm<n>_auto_spinup_time |
启动的持续时间 |
pwm_auto_prochot_ramp |
断言 #PROCHOT 时的每个步长的斜坡时间 |
pwm_auto_vrdhot_ramp |
断言 #VRDHOT 时的每个步长的斜坡时间 |
temp<n>_auto_base |
温度通道基准 |
temp<n>_auto_offset[1-12] |
温度通道偏移 |
temp<n>_auto_offset_hyst |
温度通道偏移迟滞 |
temp<n>_auto_boost |
温度通道增强(PWM 到 100%)限制 |
temp<n>_auto_boost_hyst |
温度通道增强迟滞 |
gpio |
8 个 GPIO 引脚的输入状态;只读 |