summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Chen <jacob-chen@iotwrt.com>2017-05-02 06:54:49 (GMT)
committerSimon Glass <sjg@chromium.org>2017-05-10 19:37:22 (GMT)
commitd77af8a8c9f75cb8ffe7804dfe0c999cc727afdd (patch)
treeebe71c9598aaf5c21a2416dd323163420e6888ed
parent1daa93c0b494134d0daafab6944b3eefeb66acee (diff)
downloadu-boot-fsl-qoriq-d77af8a8c9f75cb8ffe7804dfe0c999cc727afdd.tar.xz
power: pmic: rk808: add RK818 support
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>
-rw-r--r--drivers/power/pmic/rk808.c16
-rw-r--r--include/power/rk808_pmic.h12
2 files changed, 28 insertions, 0 deletions
diff --git a/drivers/power/pmic/rk808.c b/drivers/power/pmic/rk808.c
index 3f5f316..582e456 100644
--- a/drivers/power/pmic/rk808.c
+++ b/drivers/power/pmic/rk808.c
@@ -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,
};
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