[U-Boot] [PATCH 2/4] power: pmic: rk808: add RK818 support

Jacob Chen jacob-chen at iotwrt.com
Fri Apr 21 03:34:06 UTC 2017


The RK818 chip is a Power Management IC (PMIC) for multimedia and handheld
devices.

For boards use rk818, the input current should be set in the early stage, before
ddr initialization.

To use rk818,below configs should be enabled:
	CONFIG_SPL_I2C_SUPPORT=y
	CONFIG_SPL_POWER_SUPPORT=y
and rk818 device should probe in spl board_init_f.

Signed-off-by: Jacob Chen <jacob-chen at iotwrt.com>
---

 drivers/power/pmic/rk808.c | 29 +++++++++++++++++++++++++++++
 include/power/rk808_pmic.h | 12 ++++++++++++
 2 files changed, 41 insertions(+)

diff --git a/drivers/power/pmic/rk808.c b/drivers/power/pmic/rk808.c
index 3f5f316..2d764d9 100644
--- a/drivers/power/pmic/rk808.c
+++ b/drivers/power/pmic/rk808.c
@@ -80,6 +80,33 @@ static int rk808_bind(struct udevice *dev)
 }
 #endif
 
+static int rk808_probe(struct udevice *dev)
+{
+	struct rk808_priv *priv = dev_get_priv(dev);
+	uint8_t msb, lsb;
+
+	/* read Chip variant */
+	rk808_read(dev, ID_MSB, &msb, 1);
+	rk808_read(dev, ID_LSB, &lsb, 1);
+
+	priv->variant = ((msb << 8) | lsb) & RK8XX_ID_MSK;
+
+#ifdef CONFIG_SPL_BUILD
+	if (priv->variant == RK818_ID) {
+		uint8_t txdata;
+		/*
+		 * Increase USB input current selection to 2A and close charger
+		 * when usb lower then 3.4V.
+		 */
+		txdata = 0x77;
+		rk808_write(dev, REG_USB_CTRL, &txdata, 1);
+		udelay(3);
+	}
+#endif
+
+	return 0;
+}
+
 static struct dm_pmic_ops rk808_ops = {
 	.reg_count = rk808_reg_count,
 	.read = rk808_read,
@@ -88,6 +115,7 @@ static struct dm_pmic_ops rk808_ops = {
 
 static const struct udevice_id rk808_ids[] = {
 	{ .compatible = "rockchip,rk808" },
+	{ .compatible = "rockchip,rk818" },
 	{ }
 };
 
@@ -98,5 +126,6 @@ U_BOOT_DRIVER(pmic_rk808) = {
 #if CONFIG_IS_ENABLED(PMIC_CHILDREN)
 	.bind = rk808_bind,
 #endif
+	.probe = rk808_probe,
 	.ops = &rk808_ops,
 };
diff --git a/include/power/rk808_pmic.h b/include/power/rk808_pmic.h
index d29c2b3..c370c32 100644
--- a/include/power/rk808_pmic.h
+++ b/include/power/rk808_pmic.h
@@ -170,12 +170,24 @@ enum {
 	RK808_NUM_OF_REGS,
 };
 
+enum {
+	RK805_ID = 0x8050,
+	RK808_ID = 0x0000,
+	RK818_ID = 0x8180,
+};
+
+#define RK8XX_ID_MSK	0xfff0
+
 struct rk808_reg_table {
 	char *name;
 	u8 reg_ctl;
 	u8 reg_vol;
 };
 
+struct rk808_priv {
+	int variant;
+};
+
 int rk808_spl_configure_buck(struct udevice *pmic, int buck, int uvolt);
 
 #endif
-- 
2.7.4



More information about the U-Boot mailing list