[U-Boot] [PATCH 37/37] board: ge: bx50v3: use DM PMIC driver

Robert Beckett
2019-10-15T15:53:50Z

Convert the generic i2c PMIC init code to use the new da9063 driver.

Signed-off-by: Robert Beckett <bob.beckett@collabora.com>
---
board/ge/bx50v3/bx50v3.c | 81 ++++++++++---------------------------
configs/ge_bx50v3_defconfig | 3 ++
2 files changed, 24 insertions(+), 60 deletions(-)

diff --git a/board/ge/bx50v3/bx50v3.c b/board/ge/bx50v3/bx50v3.c
index aa4a3598c6..69057ede19 100644
--- a/board/ge/bx50v3/bx50v3.c
+++ b/board/ge/bx50v3/bx50v3.c
@@ -13,7 +13,6 @@
#include <linux/errno.h>
#include <linux/libfdt.h>
#include <asm/gpio.h>
-#include <asm/mach-imx/mxc_i2c.h>
#include <asm/mach-imx/iomux-v3.h>
#include <asm/mach-imx/boot_mode.h>
#include <asm/mach-imx/video.h>
@@ -26,7 +25,8 @@
#include <asm/arch/crm_regs.h>
#include <asm/io.h>
#include <asm/arch/sys_proto.h>
-#include <i2c.h>
+#include <power/regulator.h>
+#include <power/da9063_pmic.h>
#include <input.h>
#include <pwm.h>
#include <version.h>
@@ -460,65 +460,26 @@ static const struct boot_mode board_boot_modes[] = {

void pmic_init(void)
{
-#define DA9063_I2C_ADDR 0x58
-#define DA9063_REG_BCORE2_CFG 0x9D
-#define DA9063_REG_BCORE1_CFG 0x9E
-#define DA9063_REG_BPRO_CFG 0x9F
-#define DA9063_REG_BIO_CFG 0xA0
-#define DA9063_REG_BMEM_CFG 0xA1
-#define DA9063_REG_BPERI_CFG 0xA2
-#define DA9063_BUCK_MODE_MASK 0xC0
-#define DA9063_BUCK_MODE_MANUAL 0x00
-#define DA9063_BUCK_MODE_SLEEP 0x40
-#define DA9063_BUCK_MODE_SYNC 0x80
-#define DA9063_BUCK_MODE_AUTO 0xC0
-
- uchar val;
- struct udevice *dev, *bus;
- int ret;
-
- // TODO: Add a da9063 DM PMIC driver and use that.
- ret = uclass_get_device_by_name(UCLASS_I2C, "i2c at 21a8000", &bus);
- if (ret) {
- printf("%s: Unable to get I2C bus: %d\n", __func__, ret);
- return;
- }
-
- ret = dm_i2c_probe(bus, DA9063_I2C_ADDR, 0, &dev);
- if (ret) {
- printf("%s: Unable to get PMIC device: %d\n", __func__, ret);
- return;
+ struct udevice *reg;
+ int ret, i;
+ static const char * const bucks[] = {
+ "bcore1",
+ "bcore2",
+ "bpro",
+ "bmem",
+ "bio",
+ "bperi",
+ };
+
+ for (i = 0; i < ARRAY_SIZE(bucks); i++) {
+ ret = regulator_get_by_devname(bucks[i], &reg);
+ if (reg < 0) {
+ printf("%s(): Unable to get regulator %s: %d\n",
+ __func__, bucks[i], ret);
+ continue;
+ }
+ regulator_set_mode(reg, DA9063_OPMODE_SYNC);
}
-
- dm_i2c_read(dev, DA9063_REG_BCORE2_CFG, &val, 1);
- val &= ~DA9063_BUCK_MODE_MASK;
- val |= DA9063_BUCK_MODE_SYNC;
- dm_i2c_write(dev, DA9063_REG_BCORE2_CFG, &val, 1);
-
- dm_i2c_read(dev, DA9063_REG_BCORE1_CFG, &val, 1);
- val &= ~DA9063_BUCK_MODE_MASK;
- val |= DA9063_BUCK_MODE_SYNC;
- dm_i2c_write(dev, DA9063_REG_BCORE1_CFG, &val, 1);
-
- dm_i2c_read(dev, DA9063_REG_BPRO_CFG, &val, 1);
- val &= ~DA9063_BUCK_MODE_MASK;
- val |= DA9063_BUCK_MODE_SYNC;
- dm_i2c_write(dev, DA9063_REG_BPRO_CFG, &val, 1);
-
- dm_i2c_read(dev, DA9063_REG_BIO_CFG, &val, 1);
- val &= ~DA9063_BUCK_MODE_MASK;
- val |= DA9063_BUCK_MODE_SYNC;
- dm_i2c_write(dev, DA9063_REG_BIO_CFG, &val, 1);
-
- dm_i2c_read(dev, DA9063_REG_BMEM_CFG, &val, 1);
- val &= ~DA9063_BUCK_MODE_MASK;
- val |= DA9063_BUCK_MODE_SYNC;
- dm_i2c_write(dev, DA9063_REG_BMEM_CFG, &val, 1);
-
- dm_i2c_read(dev, DA9063_REG_BPERI_CFG, &val, 1);
- val &= ~DA9063_BUCK_MODE_MASK;
- val |= DA9063_BUCK_MODE_SYNC;
- dm_i2c_write(dev, DA9063_REG_BPERI_CFG, &val, 1);
}

int board_late_init(void)
diff --git a/configs/ge_bx50v3_defconfig b/configs/ge_bx50v3_defconfig
index 8acb41c046..e9ef2de24f 100644
--- a/configs/ge_bx50v3_defconfig
+++ b/configs/ge_bx50v3_defconfig
@@ -61,8 +61,11 @@ CONFIG_PINCTRL=y
CONFIG_PINCTRL_IMX6=y
CONFIG_PWM_IMX=y
CONFIG_DM_PWM=y
+CONFIG_DM_PMIC=y
+CONFIG_DM_PMIC_DA9063=y
CONFIG_DM_REGULATOR=y
CONFIG_DM_REGULATOR_FIXED=y
+CONFIG_DM_REGULATOR_DA9063=y
CONFIG_DM_RTC=y
CONFIG_RTC_RX8010SJ=y
# CONFIG_REQUIRE_SERIAL_CONSOLE is not set
--
2.20.1