内核驱动 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 寄存器。