内核驱动 pmbus

支持的芯片

作者: Guenter Roeck <linux@roeck-us.net>

描述

此驱动程序支持各种符合 PMBus 规范的设备的硬件监控。它支持设备所支持的电压、电流、功率和温度传感器。

每个被监控的通道都有其自己的高限和低限,以及一个临界限值。

风扇支持将在该驱动程序的后续版本中添加。

使用说明

此驱动程序不探测 PMBus 设备,因为没有可安全用于识别芯片的寄存器 (MFG_ID 寄存器并非所有芯片都支持),并且 PMBus 设备没有明确定义的地址范围。您必须显式实例化这些设备。

示例:以下操作将在 I2C 总线 #1 上加载地址为 0x60 的 LTC2978 驱动程序

$ modprobe pmbus
$ echo ltc2978 0x60 > /sys/bus/i2c/devices/i2c-1/new_device

平台数据支持

通过在新芯片专用驱动文件中定义芯片参数,可以添加对更多 PMBus 芯片的支持。例如,添加对 Emerson DS1200 电源模块支持的(未经测试的)代码可能如下所示

static struct pmbus_driver_info ds1200_info = {
      .pages = 1,
      /* Note: All other sensors are in linear mode */
      .direct[PSC_VOLTAGE_OUT] = true,
      .direct[PSC_TEMPERATURE] = true,
      .direct[PSC_CURRENT_OUT] = true,
      .m[PSC_VOLTAGE_IN] = 1,
      .b[PSC_VOLTAGE_IN] = 0,
      .R[PSC_VOLTAGE_IN] = 3,
      .m[PSC_VOLTAGE_OUT] = 1,
      .b[PSC_VOLTAGE_OUT] = 0,
      .R[PSC_VOLTAGE_OUT] = 3,
      .m[PSC_TEMPERATURE] = 1,
      .b[PSC_TEMPERATURE] = 0,
      .R[PSC_TEMPERATURE] = 3,
      .func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_IIN | PMBUS_HAVE_STATUS_INPUT
                 | PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT
                 | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT
                 | PMBUS_HAVE_PIN | PMBUS_HAVE_POUT
                 | PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP
                 | PMBUS_HAVE_FAN12 | PMBUS_HAVE_STATUS_FAN12,
};

static int ds1200_probe(struct i2c_client *client)
{
      return pmbus_do_probe(client, &ds1200_info);
}

static const struct i2c_device_id ds1200_id[] = {
      {"ds1200"},
      {}
};

MODULE_DEVICE_TABLE(i2c, ds1200_id);

/* This is the driver that will be inserted */
static struct i2c_driver ds1200_driver = {
      .driver = {
                 .name = "ds1200",
                 },
      .probe = ds1200_probe,
      .id_table = ds1200_id,
};

static int __init ds1200_init(void)
{
      return i2c_add_driver(&ds1200_driver);
}

static void __exit ds1200_exit(void)
{
      i2c_del_driver(&ds1200_driver);
}

Sysfs 条目

探测芯片时,驱动程序会识别支持哪些 PMBus 寄存器,并根据此信息确定可用的传感器。属性文件仅在芯片支持相应传感器时存在。提供标签是为了告知用户与给定 sysfs 条目关联的传感器。

支持以下属性。限值是读写属性;所有其他属性都是只读属性。

inX_input

测量的电压。来自 READ_VIN 或 READ_VOUT 寄存器。

inX_min

最小电压。来自 VIN_UV_WARN_LIMIT 或 VOUT_UV_WARN_LIMIT 寄存器。

inX_max

最大电压。来自 VIN_OV_WARN_LIMIT 或 VOUT_OV_WARN_LIMIT 寄存器。

inX_lcrit

临界最小电压。来自 VIN_UV_FAULT_LIMIT 或 VOUT_UV_FAULT_LIMIT 寄存器。

inX_crit

临界最大电压。来自 VIN_OV_FAULT_LIMIT 或 VOUT_OV_FAULT_LIMIT 寄存器。

inX_min_alarm

电压低警报。来自 VOLTAGE_UV_WARNING 状态。

inX_max_alarm

电压高警报。来自 VOLTAGE_OV_WARNING 状态。

inX_lcrit_alarm

电压临界低警报。来自 VOLTAGE_UV_FAULT 状态。

inX_crit_alarm

电压临界高警报。来自 VOLTAGE_OV_FAULT 状态。

inX_label

“vin”, “vcap”, 或 “voutY”

inX_rated_min

额定最小电压。来自 MFR_VIN_MIN 或 MFR_VOUT_MIN 寄存器。

inX_rated_max

额定最大电压。来自 MFR_VIN_MAX 或 MFR_VOUT_MAX 寄存器。

currX_input

测量的电流。来自 READ_IIN 或 READ_IOUT 寄存器。

currX_max

最大电流。来自 IIN_OC_WARN_LIMIT 或 IOUT_OC_WARN_LIMIT 寄存器。

currX_lcrit

临界最小输出电流。来自 IOUT_UC_FAULT_LIMIT 寄存器。

currX_crit

临界最大电流。来自 IIN_OC_FAULT_LIMIT 或 IOUT_OC_FAULT_LIMIT 寄存器。

currX_alarm

电流高警报。来自 IIN_OC_WARNING 或 IOUT_OC_WARNING 状态。

currX_max_alarm

电流高警报。来自 IIN_OC_WARN_LIMIT 或 IOUT_OC_WARN_LIMIT 状态。

currX_lcrit_alarm

输出电流临界低警报。来自 IOUT_UC_FAULT 状态。

currX_crit_alarm

电流临界高警报。来自 IIN_OC_FAULT 或 IOUT_OC_FAULT 状态。

currX_label

“iin”, “iinY”, “iinY.Z”, “ioutY”, 或 “ioutY.Z”,其中 Y 表示页码,Z 表示相数。

currX_rated_max

额定最大电流。来自 MFR_IIN_MAX 或 MFR_IOUT_MAX 寄存器。

powerX_input

测量的功率。来自 READ_PIN 或 READ_POUT 寄存器。

powerX_cap

输出功率上限。来自 POUT_MAX 寄存器。

powerX_max

功率限值。来自 PIN_OP_WARN_LIMIT 或 POUT_OP_WARN_LIMIT 寄存器。

powerX_crit

临界输出功率限值。来自 POUT_OP_FAULT_LIMIT 寄存器。

powerX_alarm

功率高警报。来自 PIN_OP_WARNING 或 POUT_OP_WARNING 状态。

powerX_crit_alarm

输出功率临界高警报。来自 POUT_OP_FAULT 状态。

powerX_label

“pin”, “pinY”, “pinY.Z”, “poutY”, 或 “poutY.Z”,其中 Y 表示页码,Z 表示相数。

powerX_rated_max

额定最大功率。来自 MFR_PIN_MAX 或 MFR_POUT_MAX 寄存器。

tempX_input

测量的温度。来自 READ_TEMPERATURE_X 寄存器。

tempX_min

最低温度。来自 UT_WARN_LIMIT 寄存器。

tempX_max

最高温度。来自 OT_WARN_LIMIT 寄存器。

tempX_lcrit

临界低温度。来自 UT_FAULT_LIMIT 寄存器。

tempX_crit

临界高温度。来自 OT_FAULT_LIMIT 寄存器。

tempX_min_alarm

芯片温度低警报。如果 TEMP_UT_WARNING 状态已设置,则通过将 READ_TEMPERATURE_X 与 UT_WARN_LIMIT 进行比较来设置。

tempX_max_alarm

芯片温度高警报。如果 TEMP_OT_WARNING 状态已设置,则通过将 READ_TEMPERATURE_X 与 OT_WARN_LIMIT 进行比较来设置。

tempX_lcrit_alarm

芯片温度临界低警报。如果 TEMP_UT_FAULT 状态已设置,则通过将 READ_TEMPERATURE_X 与 UT_FAULT_LIMIT 进行比较来设置。

tempX_crit_alarm

芯片温度临界高警报。如果 TEMP_OT_FAULT 状态已设置,则通过将 READ_TEMPERATURE_X 与 OT_FAULT_LIMIT 进行比较来设置。

tempX_rated_min

额定最低温度。来自 MFR_TAMBIENT_MIN 寄存器。

tempX_rated_max

额定最高温度。来自 MFR_TAMBIENT_MAX, MFR_MAX_TEMP_1, MFR_MAX_TEMP_2 或 MFR_MAX_TEMP_3 寄存器。