Commit 2d48bfca authored by Chris Morgan's avatar Chris Morgan Committed by Lee Jones
Browse files

mfd: rk808: Add Rockchip rk817 battery charger support



Add rk817 charger support cell to rk808 mfd driver.

Signed-off-by: default avatarChris Morgan <macromorgan@hotmail.com>
Signed-off-by: default avatarMaya Matuszczyk <maccraft123mc@gmail.com>
Signed-off-by: default avatarLee Jones <lee@kernel.org>
Link: https://lore.kernel.org/r/20220808173809.11320-3-macroalpha82@gmail.com
parent 03f271b0
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -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[] = {
+91 −0
Original line number Diff line number Diff line
@@ -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