static int tps65941_buck_enable(struct udevice *dev, int op, bool *enable)
{
- int ret;
+ int ret, idx;
unsigned int adr;
struct dm_regulator_uclass_plat *uc_pdata;
uc_pdata = dev_get_uclass_plat(dev);
adr = uc_pdata->ctrl_reg;
+ idx = dev->driver_data;
ret = pmic_reg_read(dev->parent, adr);
if (ret < 0)
return ret;
return 0;
} else if (op == PMIC_OP_SET) {
- if (*enable)
+ if (*enable) {
ret |= TPS65941_BUCK_MODE_MASK;
- else
+ /* Enable FPWM */
+ ret |= TPS65941_BUCK_FPWM_MASK;
+ /* If Multiphase enable FPWM_MP */
+ if (idx == TPS65941_BUCK_ID_12 ||
+ idx == TPS65941_BUCK_ID_123 ||
+ idx == TPS65941_BUCK_ID_1234)
+ ret |= TPS65941_BUCK_FPWM_MP_MASK;
+ } else {
ret &= ~TPS65941_BUCK_MODE_MASK;
+ }
ret = pmic_reg_write(dev->parent, adr, ret);
if (ret)
return ret;
#define TPS65941_BUCK_VOLT_MASK 0xFF
#define TPS65941_BUCK_VOLT_MAX_HEX 0xFF
#define TPS65941_BUCK_VOLT_MAX 3340000
-#define TPS65941_BUCK_MODE_MASK 0x1
+#define TPS65941_BUCK_MODE_MASK 0x1
+#define TPS65941_BUCK_FPWM_MASK 0x2
+#define TPS65941_BUCK_FPWM_MP_MASK 0x4
#define TPS65941_LDO_VOLT_MASK 0x7E
#define TPS65941_LDO_VOLT_MAX_HEX 0x3A