[PATCH 1/3] power: regulator: pca9450: Update the BUCK1 voltage range

From: Joy Zou joy.zou@nxp.com
The pmic could be trimed with updated BUCK1 range, so update the range for trimed pmic. The default value of Toff_Deb is used to distinguish the non-trimed and trimed pmic.
Signed-off-by: Joy Zou joy.zou@nxp.com Reviewed-by: Ye Li ye.li@nxp.com Signed-off-by: Peng Fan peng.fan@nxp.com --- drivers/power/regulator/pca9450.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-)
diff --git a/drivers/power/regulator/pca9450.c b/drivers/power/regulator/pca9450.c index 9faf1eab5f9..86b22ead629 100644 --- a/drivers/power/regulator/pca9450.c +++ b/drivers/power/regulator/pca9450.c @@ -71,6 +71,10 @@ static struct pca9450_vrange pca9450_buck123_vranges[] = { PCA_RANGE(600000, 12500, 0, 0x7f), };
+static struct pca9450_vrange pca9450_trim_buck13_vranges[] = { + PCA_RANGE(650000, 12500, 0, 0x7f), +}; + static struct pca9450_vrange pca9450_buck456_vranges[] = { PCA_RANGE(600000, 25000, 0, 0x70), PCA_RANGE(3400000, 0, 0x71, 0x7f), @@ -105,12 +109,18 @@ static struct pca9450_plat pca9450_reg_data[] = { PCA_DATA("BUCK1", PCA9450_BUCK1CTRL, HW_STATE_CONTROL, PCA9450_BUCK1OUT_DVS0, PCA9450_DVS_BUCK_RUN_MASK, pca9450_buck123_vranges), + PCA_DATA("BUCK1_TRIM", PCA9450_BUCK1CTRL, HW_STATE_CONTROL, + PCA9450_BUCK1OUT_DVS0, PCA9450_DVS_BUCK_RUN_MASK, + pca9450_trim_buck13_vranges), PCA_DATA("BUCK2", PCA9450_BUCK2CTRL, HW_STATE_CONTROL, PCA9450_BUCK2OUT_DVS0, PCA9450_DVS_BUCK_RUN_MASK, pca9450_buck123_vranges), PCA_DATA("BUCK3", PCA9450_BUCK3CTRL, HW_STATE_CONTROL, PCA9450_BUCK3OUT_DVS0, PCA9450_DVS_BUCK_RUN_MASK, pca9450_buck123_vranges), + PCA_DATA("BUCK3_TRIM", PCA9450_BUCK3CTRL, HW_STATE_CONTROL, + PCA9450_BUCK3OUT_DVS0, PCA9450_DVS_BUCK_RUN_MASK, + pca9450_trim_buck13_vranges), /* Bucks 4-6 which do not support dynamic voltage scaling */ PCA_DATA("BUCK4", PCA9450_BUCK4CTRL, HW_STATE_CONTROL, PCA9450_BUCK4OUT, PCA9450_DVS_BUCK_RUN_MASK, @@ -271,7 +281,9 @@ static int pca9450_set_value(struct udevice *dev, int uvolt) static int pca9450_regulator_probe(struct udevice *dev) { struct pca9450_plat *plat = dev_get_plat(dev); - int i, type; + int i, type, ret; + unsigned int val; + bool pmic_trim = false;
type = dev_get_driver_data(dev_get_parent(dev));
@@ -281,10 +293,25 @@ static int pca9450_regulator_probe(struct udevice *dev) return -EINVAL; }
+ ret = pmic_reg_read(dev->parent, PCA9450_PWR_CTRL); + if (ret < 0) + return ret; + + val = ret; + + if (type == NXP_CHIP_TYPE_PCA9451A && (val & PCA9450_REG_PWRCTRL_TOFF_DEB)) + pmic_trim = true; + for (i = 0; i < ARRAY_SIZE(pca9450_reg_data); i++) { if (strcmp(dev->name, pca9450_reg_data[i].name)) continue;
+ if (pmic_trim && (!strcmp(pca9450_reg_data[i].name, "BUCK1") || + !strcmp(pca9450_reg_data[i].name, "BUCK3"))) { + *plat = pca9450_reg_data[i + 1]; + return 0; + } + /* PCA9450B/PCA9450C uses BUCK1 and BUCK3 in dual-phase */ if (type == NXP_CHIP_TYPE_PCA9450BC && !strcmp(pca9450_reg_data[i].name, "BUCK3")) {

From: Joy Zou joy.zou@nxp.com
Add PCA9452 PMIC/Regulator support.
Signed-off-by: Joy Zou joy.zou@nxp.com Reviewed-by: Ye Li ye.li@nxp.com Signed-off-by: Peng Fan peng.fan@nxp.com --- drivers/power/pmic/pca9450.c | 1 + drivers/power/regulator/pca9450.c | 11 +++++++++-- include/power/pca9450.h | 1 + 3 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/drivers/power/pmic/pca9450.c b/drivers/power/pmic/pca9450.c index 07af6273d8a..5025e2d338b 100644 --- a/drivers/power/pmic/pca9450.c +++ b/drivers/power/pmic/pca9450.c @@ -121,6 +121,7 @@ static const struct udevice_id pca9450_ids[] = { { .compatible = "nxp,pca9450b", .data = NXP_CHIP_TYPE_PCA9450BC, }, { .compatible = "nxp,pca9450c", .data = NXP_CHIP_TYPE_PCA9450BC, }, { .compatible = "nxp,pca9451a", .data = NXP_CHIP_TYPE_PCA9451A, }, + { .compatible = "nxp,pca9452", .data = NXP_CHIP_TYPE_PCA9452, }, { } };
diff --git a/drivers/power/regulator/pca9450.c b/drivers/power/regulator/pca9450.c index 86b22ead629..a2a34244723 100644 --- a/drivers/power/regulator/pca9450.c +++ b/drivers/power/regulator/pca9450.c @@ -288,7 +288,7 @@ static int pca9450_regulator_probe(struct udevice *dev) type = dev_get_driver_data(dev_get_parent(dev));
if (type != NXP_CHIP_TYPE_PCA9450A && type != NXP_CHIP_TYPE_PCA9450BC && - type != NXP_CHIP_TYPE_PCA9451A) { + type != NXP_CHIP_TYPE_PCA9451A && type != NXP_CHIP_TYPE_PCA9452) { debug("Unknown PMIC type\n"); return -EINVAL; } @@ -299,7 +299,8 @@ static int pca9450_regulator_probe(struct udevice *dev)
val = ret;
- if (type == NXP_CHIP_TYPE_PCA9451A && (val & PCA9450_REG_PWRCTRL_TOFF_DEB)) + if ((type == NXP_CHIP_TYPE_PCA9451A || type == NXP_CHIP_TYPE_PCA9452) && + (val & PCA9450_REG_PWRCTRL_TOFF_DEB)) pmic_trim = true;
for (i = 0; i < ARRAY_SIZE(pca9450_reg_data); i++) { @@ -326,6 +327,12 @@ static int pca9450_regulator_probe(struct udevice *dev) continue; }
+ if (type == NXP_CHIP_TYPE_PCA9452 && + (!strcmp(pca9450_reg_data[i].name, "BUCK3") || + !strcmp(pca9450_reg_data[i].name, "LDO2"))) { + continue; + } + *plat = pca9450_reg_data[i];
return 0; diff --git a/include/power/pca9450.h b/include/power/pca9450.h index b8219d535ad..f380b0195c6 100644 --- a/include/power/pca9450.h +++ b/include/power/pca9450.h @@ -60,6 +60,7 @@ enum { NXP_CHIP_TYPE_PCA9450A = 0, NXP_CHIP_TYPE_PCA9450BC, NXP_CHIP_TYPE_PCA9451A, + NXP_CHIP_TYPE_PCA9452, NXP_CHIP_TYPE_AMOUNT };

From: Joy Zou joy.zou@nxp.com
Add newline character in log info end.
Signed-off-by: Joy Zou joy.zou@nxp.com Reviewed-by: Ye Li ye.li@nxp.com Signed-off-by: Peng Fan peng.fan@nxp.com --- drivers/power/pmic/pca9450.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/power/pmic/pca9450.c b/drivers/power/pmic/pca9450.c index 5025e2d338b..9d875f8bdbe 100644 --- a/drivers/power/pmic/pca9450.c +++ b/drivers/power/pmic/pca9450.c @@ -42,7 +42,7 @@ static int pca9450_write(struct udevice *dev, uint reg, const uint8_t *buff, int len) { if (dm_i2c_write(dev, reg, buff, len)) { - pr_err("write error to device: %p register: %#x!", dev, reg); + pr_err("write error to device: %p register: %#x!\n", dev, reg); return -EIO; }
@@ -53,7 +53,7 @@ static int pca9450_read(struct udevice *dev, uint reg, uint8_t *buff, int len) { if (dm_i2c_read(dev, reg, buff, len)) { - pr_err("read error from device: %p register: %#x!", dev, reg); + pr_err("read error from device: %p register: %#x!\n", dev, reg); return -EIO; }

On Mon, 23 Sep 2024 21:11:31 +0800, Peng Fan (OSS) wrote:
The pmic could be trimed with updated BUCK1 range, so update the range for trimed pmic. The default value of Toff_Deb is used to distinguish the non-trimed and trimed pmic.
Applied to u-boot/master, thanks!
participants (2)
-
Peng Fan (OSS)
-
Tom Rini