
Hi Jacob,
Am 21.04.2017 um 05:34 schrieb Jacob Chen:
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@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);
- }
I don't think this is the right place for this board specific setup. Not every RK818 based device has such a high power consumption and has to increase it's USB input current selection. You should move the USB_CTRL register write to board_init_f() and check for the board with #ifdef TARGET_XXX
Regards, Wadim
+#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