mfd: rk808: Add Rockchip rk817 battery charger support

Add rk817 charger support cell to rk808 mfd driver.

Signed-off-by: Chris Morgan <macromorgan@hotmail.com>
Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com>
Signed-off-by: Lee Jones <lee@kernel.org>
Link: https://lore.kernel.org/r/20220808173809.11320-3-macroalpha82@gmail.com
This commit is contained in:
Chris Morgan 2022-08-08 12:38:07 -05:00 committed by Lee Jones
parent 03f271b0b1
commit 2d48bfca42
2 changed files with 106 additions and 1 deletions

View File

@ -67,6 +67,10 @@ static bool rk817_is_volatile_reg(struct device *dev, unsigned int reg)
case RK817_SECONDS_REG ... RK817_WEEKS_REG:
case RK817_RTC_STATUS_REG:
case RK817_CODEC_DTOP_LPT_SRST:
case RK817_GAS_GAUGE_ADC_CONFIG0 ... RK817_GAS_GAUGE_CUR_ADC_K0:
case RK817_PMIC_CHRG_STS:
case RK817_PMIC_CHRG_OUT:
case RK817_PMIC_CHRG_IN:
case RK817_INT_STS_REG0:
case RK817_INT_STS_REG1:
case RK817_INT_STS_REG2:
@ -74,7 +78,7 @@ static bool rk817_is_volatile_reg(struct device *dev, unsigned int reg)
return true;
}
return true;
return false;
}
static const struct regmap_config rk818_regmap_config = {
@ -127,6 +131,11 @@ static const struct resource rk817_pwrkey_resources[] = {
DEFINE_RES_IRQ(RK817_IRQ_PWRON_FALL),
};
static const struct resource rk817_charger_resources[] = {
DEFINE_RES_IRQ(RK817_IRQ_PLUG_IN),
DEFINE_RES_IRQ(RK817_IRQ_PLUG_OUT),
};
static const struct mfd_cell rk805s[] = {
{ .name = "rk808-clkout", },
{ .name = "rk808-regulator", },
@ -166,6 +175,11 @@ static const struct mfd_cell rk817s[] = {
.resources = &rk817_rtc_resources[0],
},
{ .name = "rk817-codec",},
{
.name = "rk817-charger",
.num_resources = ARRAY_SIZE(rk817_charger_resources),
.resources = &rk817_charger_resources[0],
},
};
static const struct mfd_cell rk818s[] = {

View File

@ -519,6 +519,77 @@ enum rk809_reg_id {
#define MIC_DIFF_DIS (0x0 << 7)
#define MIC_DIFF_EN (0x1 << 7)
/* RK817 Battery Registers */
#define RK817_GAS_GAUGE_ADC_CONFIG0 0x50
#define RK817_GG_EN (0x1 << 7)
#define RK817_SYS_VOL_ADC_EN (0x1 << 6)
#define RK817_TS_ADC_EN (0x1 << 5)
#define RK817_USB_VOL_ADC_EN (0x1 << 4)
#define RK817_BAT_VOL_ADC_EN (0x1 << 3)
#define RK817_BAT_CUR_ADC_EN (0x1 << 2)
#define RK817_GAS_GAUGE_ADC_CONFIG1 0x55
#define RK817_VOL_CUR_CALIB_UPD BIT(7)
#define RK817_GAS_GAUGE_GG_CON 0x56
#define RK817_GAS_GAUGE_GG_STS 0x57
#define RK817_BAT_CON (0x1 << 4)
#define RK817_RELAX_VOL_UPD (0x3 << 2)
#define RK817_RELAX_STS (0x1 << 1)
#define RK817_GAS_GAUGE_RELAX_THRE_H 0x58
#define RK817_GAS_GAUGE_RELAX_THRE_L 0x59
#define RK817_GAS_GAUGE_OCV_THRE_VOL 0x62
#define RK817_GAS_GAUGE_OCV_VOL_H 0x63
#define RK817_GAS_GAUGE_OCV_VOL_L 0x64
#define RK817_GAS_GAUGE_PWRON_VOL_H 0x6b
#define RK817_GAS_GAUGE_PWRON_VOL_L 0x6c
#define RK817_GAS_GAUGE_PWRON_CUR_H 0x6d
#define RK817_GAS_GAUGE_PWRON_CUR_L 0x6e
#define RK817_GAS_GAUGE_OFF_CNT 0x6f
#define RK817_GAS_GAUGE_Q_INIT_H3 0x70
#define RK817_GAS_GAUGE_Q_INIT_H2 0x71
#define RK817_GAS_GAUGE_Q_INIT_L1 0x72
#define RK817_GAS_GAUGE_Q_INIT_L0 0x73
#define RK817_GAS_GAUGE_Q_PRES_H3 0x74
#define RK817_GAS_GAUGE_Q_PRES_H2 0x75
#define RK817_GAS_GAUGE_Q_PRES_L1 0x76
#define RK817_GAS_GAUGE_Q_PRES_L0 0x77
#define RK817_GAS_GAUGE_BAT_VOL_H 0x78
#define RK817_GAS_GAUGE_BAT_VOL_L 0x79
#define RK817_GAS_GAUGE_BAT_CUR_H 0x7a
#define RK817_GAS_GAUGE_BAT_CUR_L 0x7b
#define RK817_GAS_GAUGE_USB_VOL_H 0x7e
#define RK817_GAS_GAUGE_USB_VOL_L 0x7f
#define RK817_GAS_GAUGE_SYS_VOL_H 0x80
#define RK817_GAS_GAUGE_SYS_VOL_L 0x81
#define RK817_GAS_GAUGE_Q_MAX_H3 0x82
#define RK817_GAS_GAUGE_Q_MAX_H2 0x83
#define RK817_GAS_GAUGE_Q_MAX_L1 0x84
#define RK817_GAS_GAUGE_Q_MAX_L0 0x85
#define RK817_GAS_GAUGE_SLEEP_CON_SAMP_CUR_H 0x8f
#define RK817_GAS_GAUGE_SLEEP_CON_SAMP_CUR_L 0x90
#define RK817_GAS_GAUGE_CAL_OFFSET_H 0x91
#define RK817_GAS_GAUGE_CAL_OFFSET_L 0x92
#define RK817_GAS_GAUGE_VCALIB0_H 0x93
#define RK817_GAS_GAUGE_VCALIB0_L 0x94
#define RK817_GAS_GAUGE_VCALIB1_H 0x95
#define RK817_GAS_GAUGE_VCALIB1_L 0x96
#define RK817_GAS_GAUGE_IOFFSET_H 0x97
#define RK817_GAS_GAUGE_IOFFSET_L 0x98
#define RK817_GAS_GAUGE_BAT_R1 0x9a
#define RK817_GAS_GAUGE_BAT_R2 0x9b
#define RK817_GAS_GAUGE_BAT_R3 0x9c
#define RK817_GAS_GAUGE_DATA0 0x9d
#define RK817_GAS_GAUGE_DATA1 0x9e
#define RK817_GAS_GAUGE_DATA2 0x9f
#define RK817_GAS_GAUGE_DATA3 0xa0
#define RK817_GAS_GAUGE_DATA4 0xa1
#define RK817_GAS_GAUGE_DATA5 0xa2
#define RK817_GAS_GAUGE_CUR_ADC_K0 0xb0
#define RK817_POWER_EN_REG(i) (0xb1 + (i))
#define RK817_POWER_SLP_EN_REG(i) (0xb5 + (i))
@ -544,10 +615,30 @@ enum rk809_reg_id {
#define RK817_LDO_ON_VSEL_REG(idx) (0xcc + (idx) * 2)
#define RK817_BOOST_OTG_CFG (0xde)
#define RK817_PMIC_CHRG_OUT 0xe4
#define RK817_CHRG_VOL_SEL (0x07 << 4)
#define RK817_CHRG_CUR_SEL (0x07 << 0)
#define RK817_PMIC_CHRG_IN 0xe5
#define RK817_USB_VLIM_EN (0x01 << 7)
#define RK817_USB_VLIM_SEL (0x07 << 4)
#define RK817_USB_ILIM_EN (0x01 << 3)
#define RK817_USB_ILIM_SEL (0x07 << 0)
#define RK817_PMIC_CHRG_TERM 0xe6
#define RK817_CHRG_TERM_ANA_DIG (0x01 << 2)
#define RK817_CHRG_TERM_ANA_SEL (0x03 << 0)
#define RK817_CHRG_EN (0x01 << 6)
#define RK817_PMIC_CHRG_STS 0xeb
#define RK817_BAT_EXS BIT(7)
#define RK817_CHG_STS (0x07 << 4)
#define RK817_ID_MSB 0xed
#define RK817_ID_LSB 0xee
#define RK817_SYS_STS 0xf0
#define RK817_PLUG_IN_STS (0x1 << 6)
#define RK817_SYS_CFG(i) (0xf1 + (i))
#define RK817_ON_SOURCE_REG 0xf5