]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mfd: axp20x: Add ADC, BAT, and USB cells for AXP717
authorChris Morgan <macromorgan@hotmail.com>
Wed, 21 Aug 2024 21:54:52 +0000 (16:54 -0500)
committerLee Jones <lee@kernel.org>
Thu, 29 Aug 2024 12:16:24 +0000 (13:16 +0100)
Add support for the AXP717 PMIC to utilize the ADC (for reading
voltage, current, and temperature information from the PMIC) as well
as the USB charger and battery.

Signed-off-by: Chris Morgan <macromorgan@hotmail.com>
Link: https://lore.kernel.org/r/20240821215456.962564-12-macroalpha82@gmail.com
Signed-off-by: Lee Jones <lee@kernel.org>
drivers/mfd/axp20x.c
include/linux/mfd/axp20x.h

index dacd3c96c9f57ca7956bb5d96c1729836985b929..4051551757f2dca0f72525e0e12758c5ec01c093 100644 (file)
@@ -209,13 +209,23 @@ static const struct regmap_access_table axp313a_volatile_table = {
 };
 
 static const struct regmap_range axp717_writeable_ranges[] = {
+       regmap_reg_range(AXP717_PMU_FAULT, AXP717_MODULE_EN_CONTROL_1),
+       regmap_reg_range(AXP717_MIN_SYS_V_CONTROL, AXP717_BOOST_CONTROL),
+       regmap_reg_range(AXP717_VSYS_V_POWEROFF, AXP717_VSYS_V_POWEROFF),
        regmap_reg_range(AXP717_IRQ0_EN, AXP717_IRQ4_EN),
        regmap_reg_range(AXP717_IRQ0_STATE, AXP717_IRQ4_STATE),
+       regmap_reg_range(AXP717_ICC_CHG_SET, AXP717_CV_CHG_SET),
        regmap_reg_range(AXP717_DCDC_OUTPUT_CONTROL, AXP717_CPUSLDO_CONTROL),
+       regmap_reg_range(AXP717_ADC_CH_EN_CONTROL, AXP717_ADC_CH_EN_CONTROL),
+       regmap_reg_range(AXP717_ADC_DATA_SEL, AXP717_ADC_DATA_SEL),
 };
 
 static const struct regmap_range axp717_volatile_ranges[] = {
+       regmap_reg_range(AXP717_ON_INDICATE, AXP717_PMU_FAULT),
        regmap_reg_range(AXP717_IRQ0_STATE, AXP717_IRQ4_STATE),
+       regmap_reg_range(AXP717_BATT_PERCENT_DATA, AXP717_BATT_PERCENT_DATA),
+       regmap_reg_range(AXP717_BATT_V_H, AXP717_BATT_CHRG_I_L),
+       regmap_reg_range(AXP717_ADC_DATA_H, AXP717_ADC_DATA_L),
 };
 
 static const struct regmap_access_table axp717_writeable_table = {
@@ -308,6 +318,12 @@ static const struct resource axp22x_usb_power_supply_resources[] = {
        DEFINE_RES_IRQ_NAMED(AXP22X_IRQ_VBUS_REMOVAL, "VBUS_REMOVAL"),
 };
 
+static const struct resource axp717_usb_power_supply_resources[] = {
+       DEFINE_RES_IRQ_NAMED(AXP717_IRQ_VBUS_OVER_V, "VBUS_OVER_V"),
+       DEFINE_RES_IRQ_NAMED(AXP717_IRQ_VBUS_PLUGIN, "VBUS_PLUGIN"),
+       DEFINE_RES_IRQ_NAMED(AXP717_IRQ_VBUS_REMOVAL, "VBUS_REMOVAL"),
+};
+
 /* AXP803 and AXP813/AXP818 share the same interrupts */
 static const struct resource axp803_usb_power_supply_resources[] = {
        DEFINE_RES_IRQ_NAMED(AXP803_IRQ_VBUS_PLUGIN, "VBUS_PLUGIN"),
@@ -422,7 +438,7 @@ static const struct regmap_config axp717_regmap_config = {
        .val_bits = 8,
        .wr_table = &axp717_writeable_table,
        .volatile_table = &axp717_volatile_table,
-       .max_register = AXP717_CPUSLDO_CONTROL,
+       .max_register = AXP717_ADC_DATA_L,
        .cache_type = REGCACHE_MAPLE,
 };
 
@@ -1024,6 +1040,13 @@ static struct mfd_cell axp313a_cells[] = {
 static struct mfd_cell axp717_cells[] = {
        MFD_CELL_NAME("axp20x-regulator"),
        MFD_CELL_RES("axp20x-pek", axp717_pek_resources),
+       MFD_CELL_OF("axp717-adc",
+                   NULL, NULL, 0, 0, "x-powers,axp717-adc"),
+       MFD_CELL_OF("axp20x-usb-power-supply",
+                   axp717_usb_power_supply_resources, NULL, 0, 0,
+                   "x-powers,axp717-usb-power-supply"),
+       MFD_CELL_OF("axp20x-battery-power-supply",
+                   NULL, NULL, 0, 0, "x-powers,axp717-battery-power-supply"),
 };
 
 static const struct resource axp288_adc_resources[] = {
index 8c0a33a2e9ce2221865622d482d52a809159f232..9b7ef473adcbae23207e18ebeaf7fe5f4d4a4fd5 100644 (file)
@@ -115,6 +115,16 @@ enum axp20x_variants {
 #define AXP313A_IRQ_STATE              0x21
 
 #define AXP717_ON_INDICATE             0x00
+#define AXP717_PMU_STATUS_2            0x01
+#define AXP717_BC_DETECT               0x05
+#define AXP717_PMU_FAULT               0x08
+#define AXP717_MODULE_EN_CONTROL_1     0x0b
+#define AXP717_MIN_SYS_V_CONTROL       0x15
+#define AXP717_INPUT_VOL_LIMIT_CTRL    0x16
+#define AXP717_INPUT_CUR_LIMIT_CTRL    0x17
+#define AXP717_MODULE_EN_CONTROL_2     0x19
+#define AXP717_BOOST_CONTROL           0x1e
+#define AXP717_VSYS_V_POWEROFF         0x24
 #define AXP717_IRQ0_EN                 0x40
 #define AXP717_IRQ1_EN                 0x41
 #define AXP717_IRQ2_EN                 0x42
@@ -125,6 +135,9 @@ enum axp20x_variants {
 #define AXP717_IRQ2_STATE              0x4a
 #define AXP717_IRQ3_STATE              0x4b
 #define AXP717_IRQ4_STATE              0x4c
+#define AXP717_ICC_CHG_SET             0x62
+#define AXP717_ITERM_CHG_SET           0x63
+#define AXP717_CV_CHG_SET              0x64
 #define AXP717_DCDC_OUTPUT_CONTROL     0x80
 #define AXP717_DCDC1_CONTROL           0x83
 #define AXP717_DCDC2_CONTROL           0x84
@@ -145,6 +158,19 @@ enum axp20x_variants {
 #define AXP717_CLDO3_CONTROL           0x9d
 #define AXP717_CLDO4_CONTROL           0x9e
 #define AXP717_CPUSLDO_CONTROL         0x9f
+#define AXP717_BATT_PERCENT_DATA       0xa4
+#define AXP717_ADC_CH_EN_CONTROL       0xc0
+#define AXP717_BATT_V_H                        0xc4
+#define AXP717_BATT_V_L                        0xc5
+#define AXP717_VBUS_V_H                        0xc6
+#define AXP717_VBUS_V_L                        0xc7
+#define AXP717_VSYS_V_H                        0xc8
+#define AXP717_VSYS_V_L                        0xc9
+#define AXP717_BATT_CHRG_I_H           0xca
+#define AXP717_BATT_CHRG_I_L           0xcb
+#define AXP717_ADC_DATA_SEL            0xcd
+#define AXP717_ADC_DATA_H              0xce
+#define AXP717_ADC_DATA_L              0xcf
 
 #define AXP806_STARTUP_SRC             0x00
 #define AXP806_CHIP_ID                 0x03