内核驱动 adm1026

支持的芯片
作者

模块参数

  • gpio_input: int 数组 (min = 1, max = 17)

    要编程为输入的 GPIO 引脚列表 (0-16)

  • gpio_output: int 数组 (min = 1, max = 17)

    要编程为输出的 GPIO 引脚列表 (0-16)

  • gpio_inverted: int 数组 (min = 1, max = 17)

    要编程为反相的 GPIO 引脚列表 (0-16)

  • gpio_normal: int 数组 (min = 1, max = 17)

    要编程为正常/非反相的 GPIO 引脚列表 (0-16)

  • gpio_fan: int 数组 (min = 1, max = 8)

    要编程为风扇转速计的 GPIO 引脚列表 (0-7)

描述

此驱动程序实现了对 Analog Devices ADM1026 的支持。 Analog Devices 称其为 “完整的散热系统管理控制器”。

ADM1026 实现了三个 (3) 温度传感器、17 个电压传感器、16 个通用数字 I/O 线、八个 (8) 风扇速度传感器 (8 位)、一个模拟输出和一个 PWM 输出,以及所有上述各项的限制、警报和屏蔽位。 芯片上甚至还有 8k 字节的 EEPROM 存储器。

温度以摄氏度测量。 有两个外部传感器输入和一个内部传感器。 每个传感器都有一个高限和一个低限。 如果超过限制,则可以生成中断 (#SMBALERT)。 中断可以被屏蔽。 此外,每个传感器都有过温限制。 如果超过此限制,#THERM 输出将置位。 当前温度和限制的分辨率为 1 度。

风扇转速以 RPM(每分钟转数)报告,但以 22.5kHz 内部时钟的计数测量。 每个风扇都有一个上限,对应于最小风扇转速。 如果超过限制,则可以生成中断。 可以将每个风扇编程为将参考时钟除以 1、2、4 或 8。并非所有 RPM 值都可以精确表示,因此会进行一些舍入。 使用 8 的分频器,每个转速两个脉冲的风扇,可测量的最低速度为 661 RPM。

有 17 个电压传感器。 如果电压超过可编程的最小值或最大值限制,则会触发警报。 请注意,在这种情况下,最小值始终表示“最接近零”;这对于负电压测量很重要。 几个输入集成了衰减器,因此它们可以直接测量更高的电压。 3.3V、5V、12V、-12V 和电池电压都有专用输入。 有几个输入被缩放为 0-3V 满量程范围,用于 SCSI 终端电源。 剩余的输入未缩放,具有 0-2.5V 满量程范围。 提供 2.5V 或 1.82V 参考电压用于负电压测量。

如果警报被触发,它将保持触发状态,直到至少读取一次硬件寄存器。 这意味着警报的原因可能已经消失! 请注意,在当前的实现中,只要读取任何数据,就会读取所有硬件寄存器(除非距离上次更新的时间少于 2.0 秒)。 这意味着您很容易错过一次性警报。

ADM1026 连续测量。 模拟输入大约每秒测量 4 次。 风扇速度测量时间取决于风扇速度和除数。 测量所有风扇速度可能需要长达 1.5 秒。

ADM1026 具有基于温度传感器输入自动控制风扇速度的能力。 PWM 输出和 DAC 输出都可用于控制风扇速度。 通常只会使用这两个输出中的一个。 将最小 PWM 或 DAC 值写入相应的控制寄存器。 然后在每个温度传感器的 tmin 值中设置低温限制。 控制范围固定为 20 °C,温度传感器的当前值和 tmin 之间的最大差异设置控制输出。 有关使用 PWM 和 DAC 输出控制风扇速度的几个示例电路,请参见数据手册。 风扇速度传感器没有 PWM 补偿,因此最好从电源线而不是地线控制风扇电压。

数据手册显示了一个示例应用程序,其中 VID 信号连接到 GPIO 线。 遗憾的是,芯片可能不会以这种方式连接到 VID 线。 该驱动程序假设芯片 *确实* 以这种方式连接以获得 VID 电压。