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-c...@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

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to