[U-Boot] [PATCH 2/4] power: pmic: rk808: add RK818 support

Wadim Egorov w.egorov at phytec.de
Fri Apr 21 09:16:23 UTC 2017


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 at 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



More information about the U-Boot mailing list