[PATCH v4 0/3] Add TI LM51772 buck-boost voltage regulator

From: Paul Louvel

Date: Wed Nov 04 2026 - 12:29:21 EST


Hi,

This series provides support for the LM51772, a buck-boost controller
from TI with I2C control, designed for USB Power Delivery applications.
The output voltage is software-configurable from 1 V to 48 V, and the
peak current limit threshold is programmed through software. The
LM51772 also provides an auxiliary fixed 5 V regulator output (VCC1).

Core changes
------------

Patch #2:

The voltage selector helpers can now handle regulators that keep their
selector in two consecutive 8-bit registers. The implementation
preserves bits outside the selector field.
Rejects the unsupported case where an oversized selector shares a
register with the range selector.

Thanks,

Signed-off-by: Paul Louvel <paul.louvel@xxxxxxxxxxx>
---
Changes in v4:
- Add STATUS_CLEAR_FAULTS to precious register to avoid debugfs
interfering.
- Instead of checking vsel_reg_oversize configuration coherency at each
read/write, do it once when registering the regulator.
- Use DISCHARGE_CONFIG{0,1} instead of FORCE_DISCH, to avoid extra power
drain for no reason when Vout regulator is enabled/disabled.
- Nit fixes.
- Remove dev_dbg() calls as they where only useful during testing.
- Set EN_ACTIVE_DVS bit.
- Link to v3: https://patch.msgid.link/20261030-paul-lm51772-v3-0-0de62c22f342@xxxxxxxxxxx

Changes in v3:
- Dropped the fixed OVP core patch. The driver now sets the OVP threshold
before ramping up and after ramping down, so the core change is no
longer needed.
- Fall back to the lowest OVP selector when the requested limit is below
the supported range, instead of failing the voltage change.
- Reworked the current limit to use the standard regmap helpers and a
table computed from the shunt resistor value, avoiding custom helpers.
- Moved ti,iset-pin and shunt-resistor-micro-ohms to the chip level in
the binding, and replaced ti,ivp and ti,ivr with ti,input-voltage-mode.
- If the iset pin is used, do not provide .{set/get}_current_limit()
callback.
- Fixed the regulator subnode schemas and removed the current limit
range from the binding description.
- Write the nINT configuration before requesting the IRQ.
- Enabled the IMON limiter, dropped the register defaults.
- Link to v2: https://patch.msgid.link/20261027-paul-lm51772-v2-0-b2a767e34722@xxxxxxxxxxx

Changes in v2:
- Dropped the regulator-boot-force-off binding and core patches.
After discussion, this property should not be in the binding because
it is Linux specific. Also, the situation described in the v1 cover
letter can be resolved by the driver getting exclusive ownership of
the regulator it uses.
- Added the fixed OVP core change. The custom .set_voltage_sel callback
for the LM51772 is no longer needed since this case can be handled by
the core now.
- Updated the LM51772 binding to the standard unit suffixes and
property names, and fixed the schema and example issues found.
- Reworked the two-register selector helper so it preserves unrelated
bits. Make it atomic by using a bulk read and write instead of two
separate regmap_update_bits().
- Cleaned up the driver around units, current-limit validation,
volatile fault status, IRQ fault reporting, voltage timing, and nINT
handling.
The .renable callback is not really needed when the nFLT/nINT pin is
used as nINT, as the device drives the pin low only when a change to
the status byte occurs.
- Link to v1: https://patch.msgid.link/20261021-paul-lm51772-v1-0-25f0ffbffa8d@xxxxxxxxxxx

---
Paul Louvel (3):
regulator: dt-bindings: Add TI LM51772 support
regulator: core: Support regulators where the voltage selector spans two registers
regulator: Add TI LM51772 support

.../devicetree/bindings/regulator/ti,lm51772.yaml | 230 ++++++
MAINTAINERS | 6 +
drivers/regulator/Kconfig | 11 +
drivers/regulator/Makefile | 1 +
drivers/regulator/core.c | 8 +
drivers/regulator/helpers.c | 67 +-
drivers/regulator/lm51772-regulator.c | 913 +++++++++++++++++++++
include/linux/regulator/driver.h | 2 +
8 files changed, 1228 insertions(+), 10 deletions(-)
---
base-commit: 0785f7172040512cba759838b27286646773c735
change-id: 20261021-paul-lm51772-c96bbce762a8

Best regards,
--
Paul Louvel, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com