power: pmic: rk808: add RK818 support
authorJacob Chen <jacob-chen@iotwrt.com>
Tue, 2 May 2017 06:54:49 +0000 (14:54 +0800)
committerSimon Glass <sjg@chromium.org>
Wed, 10 May 2017 19:37:22 +0000 (13:37 -0600)
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.

Signed-off-by: Jacob Chen <jacob-chen@iotwrt.com>
drivers/power/pmic/rk808.c
include/power/rk808_pmic.h

index 3f5f316..582e456 100644 (file)
@@ -80,6 +80,20 @@ 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;
+
+       return 0;
+}
+
 static struct dm_pmic_ops rk808_ops = {
        .reg_count = rk808_reg_count,
        .read = rk808_read,
@@ -88,6 +102,7 @@ static struct dm_pmic_ops rk808_ops = {
 
 static const struct udevice_id rk808_ids[] = {
        { .compatible = "rockchip,rk808" },
+       { .compatible = "rockchip,rk818" },
        { }
 };
 
@@ -98,5 +113,6 @@ U_BOOT_DRIVER(pmic_rk808) = {
 #if CONFIG_IS_ENABLED(PMIC_CHILDREN)
        .bind = rk808_bind,
 #endif
+       .probe = rk808_probe,
        .ops = &rk808_ops,
 };
index d29c2b3..c370c32 100644 (file)
@@ -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