From: Jacob Chen Date: Tue, 2 May 2017 06:54:49 +0000 (+0800) Subject: power: pmic: rk808: add RK818 support X-Git-Tag: v2017.07-rc1~356^2~14 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=d77af8a8c9f75cb8ffe7804dfe0c999cc727afdd;p=oweals%2Fu-boot.git 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 --- diff --git a/drivers/power/pmic/rk808.c b/drivers/power/pmic/rk808.c index 3f5f316b56..582e456d7f 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 d29c2b36b0..c370c32220 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