Kernel driver fs1412

Supported chips:

Authors:

Abdurrahman Hussain <abdurrahman@nexthop.ai>

Description

This driver implements support for the TDK FS1412 and FS1525 uPOL DC/DC regulators.

The FS1412 is a 12A part with PMBus monitoring of its input voltage, output voltage and temperature. It has over-current and over-temperature protection with programmable fault limits but no current telemetry, so no current attributes are provided.

The FS1525 is a 25A part that adds output current telemetry and an over-temperature warning limit.

Both parts read “KDT” from MFR_ID. The driver tells them apart by IC_DEVICE_ID and warns if the detected part does not match the one it was instantiated as.

The FS1412 answers on two I2C addresses: a register interface at the I2C base address (0x08 by default) and the PMBus interface at the PMBus base address (0x70 by default), each plus the offset strapped on the ADDR pin. This driver binds to the PMBus address.

The driver is a client driver to the core PMBus driver. Please see Kernel driver pmbus for details on PMBus client drivers.

Usage Notes

This driver does not auto-detect devices. You will have to instantiate the devices explicitly. Please see How to instantiate I2C devices for details.

Both parts store their output voltage limits relative to VOUT_COMMAND (VOUT_MODE bit 7 set). The PMBus core converts them to and from absolute voltages, so the output voltage limits read and write in volts. A written limit is stored as a fraction of VOUT_COMMAND in the resolution of VOUT_MODE (1/256 on the FS1412, 1/1024 on the FS1525), so it may read back rounded. The over-voltage protection itself engages at one of four thresholds the device rounds the fault limit to; see the datasheet.

When the output voltage is set with an external resistor divider, VOUT_COMMAND holds the feedback pin target rather than the output voltage, and the two parts differ:

  • The FS1412 reports READ_VOUT at the feedback pin, so in2_input and the in2 limits are all in the feedback domain. Scale them by the divider ratio in user space.

  • The FS1525 reports READ_VOUT as the output voltage. Its warning and under-voltage limits are compared by the device against READ_VOUT but are still relative to VOUT_COMMAND, so in2_max, in2_min and in2_lcrit are the thresholds the device actually applies to in2_input. Its over-voltage fault is an analog comparison at the feedback pin, which would read below in2_input on such boards, so in2_crit is not provided for the FS1525.

The FS1412 reports an over-temperature warning at room temperature and has no OT_WARN_LIMIT in its command table, so temp1_max and its alarm are not provided for it; temp1_crit comes from OT_FAULT_LIMIT.

Sysfs entries

in1_label

“vin”

in1_input

Measured input voltage

in1_min

Minimum input voltage

in1_min_alarm

Input voltage low alarm

in1_crit

Critical high input voltage

in1_crit_alarm

Input voltage critical high alarm

in2_label

“vout1”

in2_input

Measured output voltage (FS1412: at the feedback pin)

in2_min

Minimum output voltage

in2_min_alarm

Output voltage low alarm

in2_max

Maximum output voltage

in2_max_alarm

Output voltage high alarm

in2_lcrit

Critical low output voltage

in2_lcrit_alarm

Output voltage critical low alarm

in2_crit

Critical high output voltage (FS1412 only)

in2_crit_alarm

Output voltage critical high alarm (FS1412 only)

curr1_label

“iout1” (FS1525 only)

curr1_input

Measured output current (FS1525 only)

curr1_max

Maximum output current (FS1525 only)

curr1_max_alarm

Output current high alarm (FS1525 only)

curr1_crit

Critical high output current (FS1525 only)

curr1_crit_alarm

Output current critical high alarm (FS1525 only)

temp1_input

Measured temperature

temp1_max

Maximum temperature (FS1525 only)

temp1_max_alarm

Temperature high alarm (FS1525 only)

temp1_crit

Critical high temperature

temp1_crit_alarm

Temperature critical high alarm