mfd: rk808: Add Rockchip rk817 battery charger support
authorChris Morgan <macromorgan@hotmail.com>
Mon, 8 Aug 2022 17:38:07 +0000 (12:38 -0500)
committerLee Jones <lee@kernel.org>
Wed, 28 Sep 2022 15:09:49 +0000 (16:09 +0100)
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
drivers/mfd/rk808.c
include/linux/mfd/rk808.h

index 4142b638e5fa8491107e639c444b7342aa0d27ef..283a65b64d2cd7033ed887cab2bc3154422ebb63 100644 (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[] = {
index 58602032e642f96879a1ee4e4314bd71469ddf2b..9af1f3105f80782634651e30949c0898db24ec89 100644 (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