pmic: rk8xx: add init register setting for rk817
1. set pmic_sleep as sleep function; 2. set pmic_int active low. Change-Id: I4bc4034e18b19dc9b1b328870db652d11173fe3a Signed-off-by: Joseph Chen <chenjh@rock-chips.com>
This commit is contained in:
parent
3c3675ddd7
commit
1c223666dc
|
|
@ -41,11 +41,6 @@
|
|||
#define RK805_PWRON_RISE_INT (1 << 0)
|
||||
#define RK805_PWRON_FALL_INT (1 << 7)
|
||||
|
||||
struct reg_data {
|
||||
u8 reg;
|
||||
u8 val;
|
||||
};
|
||||
|
||||
struct rk8xx_key_priv {
|
||||
u8 key_int_sts_reg;
|
||||
u8 key_int_msk_reg;
|
||||
|
|
|
|||
|
|
@ -13,6 +13,18 @@
|
|||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
/*
|
||||
* Only when system suspend while U-Boot charge needs this config support
|
||||
*/
|
||||
#ifdef CONFIG_DM_CHARGE_DISPLAY
|
||||
static struct reg_data rk817_init_reg[] = {
|
||||
/* Set pmic_sleep as sleep function */
|
||||
{ RK817_PMIC_SYS_CFG3, 0x08, 0x18 },
|
||||
/* Set pmic_int active low */
|
||||
{ RK817_GPIO_INT_CFG, 0x00, 0x02 },
|
||||
};
|
||||
#endif
|
||||
|
||||
static const struct pmic_child_info pmic_children_info[] = {
|
||||
{ .prefix = "DCDC_REG", .driver = "rk8xx_buck"},
|
||||
{ .prefix = "LDO_REG", .driver = "rk8xx_ldo"},
|
||||
|
|
@ -143,6 +155,9 @@ static int rk8xx_bind(struct udevice *dev)
|
|||
static int rk8xx_probe(struct udevice *dev)
|
||||
{
|
||||
struct rk8xx_priv *priv = dev_get_priv(dev);
|
||||
struct reg_data *init_data = NULL;
|
||||
int init_data_num = 0;
|
||||
int ret = 0, i;
|
||||
uint8_t msb, lsb, id_msb, id_lsb;
|
||||
|
||||
/* read Chip variant */
|
||||
|
|
@ -158,15 +173,37 @@ static int rk8xx_probe(struct udevice *dev)
|
|||
rk8xx_read(dev, id_lsb, &lsb, 1);
|
||||
|
||||
priv->variant = ((msb << 8) | lsb) & RK8XX_ID_MSK;
|
||||
if ((priv->variant != RK808_ID) &&
|
||||
(priv->variant != RK805_ID) &&
|
||||
(priv->variant != RK816_ID) &&
|
||||
(priv->variant != RK817_ID) &&
|
||||
(priv->variant != RK818_ID)) {
|
||||
switch (priv->variant) {
|
||||
case RK805_ID:
|
||||
case RK808_ID:
|
||||
case RK816_ID:
|
||||
case RK818_ID:
|
||||
break;
|
||||
case RK817_ID:
|
||||
#ifdef CONFIG_DM_CHARGE_DISPLAY
|
||||
init_data = rk817_init_reg;
|
||||
init_data_num = ARRAY_SIZE(rk817_init_reg);
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
printf("Unknown PMIC: RK%x!!\n", priv->variant);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
for (i = 0; i < init_data_num; i++) {
|
||||
ret = pmic_clrsetbits(dev,
|
||||
init_data[i].reg,
|
||||
init_data[i].mask,
|
||||
init_data[i].val);
|
||||
if (ret < 0) {
|
||||
printf("%s: i2c set reg 0x%x failed, ret=%d\n",
|
||||
__func__, init_data[i].reg, ret);
|
||||
}
|
||||
|
||||
debug("%s: reg[0x%x] = 0x%x\n", __func__, init_data[i].reg,
|
||||
pmic_reg_read(dev, init_data[i].reg));
|
||||
}
|
||||
|
||||
printf("PMIC: RK%x\n", priv->variant);
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -195,6 +195,15 @@ enum {
|
|||
#define RK817_ID_LSB 0xee
|
||||
#define RK8XX_ID_MSK 0xfff0
|
||||
|
||||
#define RK817_PMIC_SYS_CFG3 0xf4
|
||||
#define RK817_GPIO_INT_CFG 0xfe
|
||||
|
||||
struct reg_data {
|
||||
u8 reg;
|
||||
u8 val;
|
||||
u8 mask;
|
||||
};
|
||||
|
||||
struct rk8xx_reg_table {
|
||||
char *name;
|
||||
u8 reg_ctl;
|
||||
|
|
|
|||
Loading…
Reference in New Issue