Re: [U-Boot] [PATCH v3 2/2] regulator: bd718x7: support ROHM BD71837 and BD71847 PMICs
Hi Matti, > On Mon, 2019-05-06 at 21:51 -0600, Simon Glass wrote: > > Hi Matti, > > > > On Thu, 25 Apr 2019 at 03:51, Matti Vaittinen > > wrote: > > > > > > BD71837 and BD71847 is PMIC intended for powering single-core, > > > dual-core, and quad-core SoC’s such as NXP-i.MX 8M. BD71847 > > > is used for example on NXP imx8mm EVK. > > > > > > Add regulator driver for ROHM BD71837 and BD71847 PMICs. > > > BD71837 contains 8 bucks and 7 LDOS. BD71847 is reduced > > > version containing 6 bucks and 6 LDOs. Voltages for DVS > > > bucks (1-4 on BD71837, 1 and 2 on BD71847) can be adjusted > > > when regulators are enabled. For other bucks and LDOs we may > > > have over- or undershooting if voltage is adjusted when > > > regulator is enabled. Thus this is prevented by default. > > > > > > BD718x7 has a quirk which may leave power output disabled > > > after reset if enable/disable state was controlled by SW. > > > Thus the SW control is only allowed for BD71837 bucks > > > 3 and 4 by default. The impact of this limitation must be > > > evaluated board-by board and restrictions may need to be > > > modified. (Linux driver get's these limitations from DT and we > > > may want to implement same on u-Boot driver). > > > > > > Signed-off-by: Matti Vaittinen > > > --- > > > > > > Changelog v2 => v3: > > > - remove unnecessary include > > > - use uint8_t instead of u8 > > > > Sorry I did not reply in time. I meant that you should use uint > > instead of u8. There is no need for the arg to be 8 bits and it may > > make the machine code larger. So try to use native times for function > > args (int, uint). > > Right. I'll craft a v4 then. What comes to 8bit types, which one is > preferred - u8 or uint8_t? u8 these days. patman should warn you about it. Regards, SImon ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
Re: [U-Boot] [PATCH v3 2/2] regulator: bd718x7: support ROHM BD71837 and BD71847 PMICs
On Mon, 2019-05-06 at 21:51 -0600, Simon Glass wrote: > Hi Matti, > > On Thu, 25 Apr 2019 at 03:51, Matti Vaittinen > wrote: > > > > BD71837 and BD71847 is PMIC intended for powering single-core, > > dual-core, and quad-core SoC’s such as NXP-i.MX 8M. BD71847 > > is used for example on NXP imx8mm EVK. > > > > Add regulator driver for ROHM BD71837 and BD71847 PMICs. > > BD71837 contains 8 bucks and 7 LDOS. BD71847 is reduced > > version containing 6 bucks and 6 LDOs. Voltages for DVS > > bucks (1-4 on BD71837, 1 and 2 on BD71847) can be adjusted > > when regulators are enabled. For other bucks and LDOs we may > > have over- or undershooting if voltage is adjusted when > > regulator is enabled. Thus this is prevented by default. > > > > BD718x7 has a quirk which may leave power output disabled > > after reset if enable/disable state was controlled by SW. > > Thus the SW control is only allowed for BD71837 bucks > > 3 and 4 by default. The impact of this limitation must be > > evaluated board-by board and restrictions may need to be > > modified. (Linux driver get's these limitations from DT and we > > may want to implement same on u-Boot driver). > > > > Signed-off-by: Matti Vaittinen > > --- > > > > Changelog v2 => v3: > > - remove unnecessary include > > - use uint8_t instead of u8 > > Sorry I did not reply in time. I meant that you should use uint > instead of u8. There is no need for the arg to be 8 bits and it may > make the machine code larger. So try to use native times for function > args (int, uint). Right. I'll craft a v4 then. What comes to 8bit types, which one is preferred - u8 or uint8_t? Br, Matti Vaittinen > > Regards, > Simon ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
Re: [U-Boot] [PATCH v3 2/2] regulator: bd718x7: support ROHM BD71837 and BD71847 PMICs
Hi Matti, On Thu, 25 Apr 2019 at 03:51, Matti Vaittinen wrote: > > BD71837 and BD71847 is PMIC intended for powering single-core, > dual-core, and quad-core SoC’s such as NXP-i.MX 8M. BD71847 > is used for example on NXP imx8mm EVK. > > Add regulator driver for ROHM BD71837 and BD71847 PMICs. > BD71837 contains 8 bucks and 7 LDOS. BD71847 is reduced > version containing 6 bucks and 6 LDOs. Voltages for DVS > bucks (1-4 on BD71837, 1 and 2 on BD71847) can be adjusted > when regulators are enabled. For other bucks and LDOs we may > have over- or undershooting if voltage is adjusted when > regulator is enabled. Thus this is prevented by default. > > BD718x7 has a quirk which may leave power output disabled > after reset if enable/disable state was controlled by SW. > Thus the SW control is only allowed for BD71837 bucks > 3 and 4 by default. The impact of this limitation must be > evaluated board-by board and restrictions may need to be > modified. (Linux driver get's these limitations from DT and we > may want to implement same on u-Boot driver). > > Signed-off-by: Matti Vaittinen > --- > > Changelog v2 => v3: > - remove unnecessary include > - use uint8_t instead of u8 Sorry I did not reply in time. I meant that you should use uint instead of u8. There is no need for the arg to be 8 bits and it may make the machine code larger. So try to use native times for function args (int, uint). Regards, Simon ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
[U-Boot] [PATCH v3 2/2] regulator: bd718x7: support ROHM BD71837 and BD71847 PMICs
BD71837 and BD71847 is PMIC intended for powering single-core, dual-core, and quad-core SoC’s such as NXP-i.MX 8M. BD71847 is used for example on NXP imx8mm EVK. Add regulator driver for ROHM BD71837 and BD71847 PMICs. BD71837 contains 8 bucks and 7 LDOS. BD71847 is reduced version containing 6 bucks and 6 LDOs. Voltages for DVS bucks (1-4 on BD71837, 1 and 2 on BD71847) can be adjusted when regulators are enabled. For other bucks and LDOs we may have over- or undershooting if voltage is adjusted when regulator is enabled. Thus this is prevented by default. BD718x7 has a quirk which may leave power output disabled after reset if enable/disable state was controlled by SW. Thus the SW control is only allowed for BD71837 bucks 3 and 4 by default. The impact of this limitation must be evaluated board-by board and restrictions may need to be modified. (Linux driver get's these limitations from DT and we may want to implement same on u-Boot driver). Signed-off-by: Matti Vaittinen --- Changelog v2 => v3: - remove unnecessary include - use uint8_t instead of u8 - improve Kconfig documentation - improve readability by inverting handling of 'not_found' variable to 'found' drivers/power/pmic/bd71837.c | 32 +- drivers/power/regulator/Kconfig | 17 ++ drivers/power/regulator/Makefile | 1 + drivers/power/regulator/bd71837.c | 468 ++ include/power/bd71837.h | 147 ++ 5 files changed, 607 insertions(+), 58 deletions(-) create mode 100644 drivers/power/regulator/bd71837.c diff --git a/drivers/power/pmic/bd71837.c b/drivers/power/pmic/bd71837.c index 24d9f7fab7..e292d42a8c 100644 --- a/drivers/power/pmic/bd71837.c +++ b/drivers/power/pmic/bd71837.c @@ -3,6 +3,8 @@ * Copyright 2018 NXP */ +#define DEBUG + #include #include #include @@ -15,15 +17,15 @@ DECLARE_GLOBAL_DATA_PTR; static const struct pmic_child_info pmic_children_info[] = { /* buck */ - { .prefix = "b", .driver = BD71837_REGULATOR_DRIVER}, + { .prefix = "b", .driver = BD718XX_REGULATOR_DRIVER}, /* ldo */ - { .prefix = "l", .driver = BD71837_REGULATOR_DRIVER}, + { .prefix = "l", .driver = BD718XX_REGULATOR_DRIVER}, { }, }; static int bd71837_reg_count(struct udevice *dev) { - return BD71837_REG_NUM; + return BD718XX_MAX_REGISTER - 1; } static int bd71837_write(struct udevice *dev, uint reg, const uint8_t *buff, @@ -54,7 +56,7 @@ static int bd71837_bind(struct udevice *dev) regulators_node = dev_read_subnode(dev, "regulators"); if (!ofnode_valid(regulators_node)) { - debug("%s: %s regulators subnode not found!", __func__, + debug("%s: %s regulators subnode not found!\n", __func__, dev->name); return -ENXIO; } @@ -69,6 +71,24 @@ static int bd71837_bind(struct udevice *dev) return 0; } +static int bd718x7_probe(struct udevice *dev) +{ + int ret; + uint8_t mask = BD718XX_REGLOCK_PWRSEQ | BD718XX_REGLOCK_VREG; + + /* Unlock the PMIC regulator control before probing the children */ + ret = pmic_clrsetbits(dev, BD718XX_REGLOCK, mask, 0); + if (ret) { + debug("%s: %s Failed to unlock regulator control\n", __func__, + dev->name); + return ret; + } + debug("%s: '%s' - BD718x7 PMIC registers unlocked\n", __func__, + dev->name); + + return 0; +} + static struct dm_pmic_ops bd71837_ops = { .reg_count = bd71837_reg_count, .read = bd71837_read, @@ -76,7 +96,8 @@ static struct dm_pmic_ops bd71837_ops = { }; static const struct udevice_id bd71837_ids[] = { - { .compatible = "rohm,bd71837", .data = 0x4b, }, + { .compatible = "rohm,bd71837", .data = ROHM_CHIP_TYPE_BD71837, }, + { .compatible = "rohm,bd71847", .data = ROHM_CHIP_TYPE_BD71847, }, { } }; @@ -85,5 +106,6 @@ U_BOOT_DRIVER(pmic_bd71837) = { .id = UCLASS_PMIC, .of_match = bd71837_ids, .bind = bd71837_bind, + .probe = bd718x7_probe, .ops = &bd71837_ops, }; diff --git a/drivers/power/regulator/Kconfig b/drivers/power/regulator/Kconfig index 3ed0dd2264..4687bee09c 100644 --- a/drivers/power/regulator/Kconfig +++ b/drivers/power/regulator/Kconfig @@ -43,6 +43,23 @@ config REGULATOR_AS3722 but does not yet support change voltages. Currently this must be done using direct register writes to the PMIC. +config DM_REGULATOR_BD71837 + bool "Enable Driver Model for ROHM BD71837/BD71847 regulators" + depends on DM_REGULATOR && DM_PMIC_BD71837 + help + This config enables implementation of driver-model regulator uclass + features for regulators on ROHM BD71837 and BD71847 PMICs. + BD71837 contains 8 bucks and 7 LDOS. BD71847 is reduced version + containing 6 bucks and 6 LDOs. The driver implements get/set api for + valu