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

Robert Beckett bob.beckett at collabora.com
Wed Oct 23 18:22:02 UTC 2019


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

Signed-off-by: Robert Beckett <bob.beckett at 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..f93135c041 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_BUCKMODE_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



More information about the U-Boot mailing list