Skip to content

Commit 2e1a57d

Browse files
macromorganlag-linaro
authored andcommitted
mfd: axp20x: Add ADC, BAT, and USB cells for AXP717
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 <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Lee Jones <[email protected]>
1 parent 8400291 commit 2e1a57d

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

drivers/mfd/axp20x.c

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,13 +209,23 @@ static const struct regmap_access_table axp313a_volatile_table = {
209209
};
210210

211211
static const struct regmap_range axp717_writeable_ranges[] = {
212+
regmap_reg_range(AXP717_PMU_FAULT, AXP717_MODULE_EN_CONTROL_1),
213+
regmap_reg_range(AXP717_MIN_SYS_V_CONTROL, AXP717_BOOST_CONTROL),
214+
regmap_reg_range(AXP717_VSYS_V_POWEROFF, AXP717_VSYS_V_POWEROFF),
212215
regmap_reg_range(AXP717_IRQ0_EN, AXP717_IRQ4_EN),
213216
regmap_reg_range(AXP717_IRQ0_STATE, AXP717_IRQ4_STATE),
217+
regmap_reg_range(AXP717_ICC_CHG_SET, AXP717_CV_CHG_SET),
214218
regmap_reg_range(AXP717_DCDC_OUTPUT_CONTROL, AXP717_CPUSLDO_CONTROL),
219+
regmap_reg_range(AXP717_ADC_CH_EN_CONTROL, AXP717_ADC_CH_EN_CONTROL),
220+
regmap_reg_range(AXP717_ADC_DATA_SEL, AXP717_ADC_DATA_SEL),
215221
};
216222

217223
static const struct regmap_range axp717_volatile_ranges[] = {
224+
regmap_reg_range(AXP717_ON_INDICATE, AXP717_PMU_FAULT),
218225
regmap_reg_range(AXP717_IRQ0_STATE, AXP717_IRQ4_STATE),
226+
regmap_reg_range(AXP717_BATT_PERCENT_DATA, AXP717_BATT_PERCENT_DATA),
227+
regmap_reg_range(AXP717_BATT_V_H, AXP717_BATT_CHRG_I_L),
228+
regmap_reg_range(AXP717_ADC_DATA_H, AXP717_ADC_DATA_L),
219229
};
220230

221231
static const struct regmap_access_table axp717_writeable_table = {
@@ -308,6 +318,12 @@ static const struct resource axp22x_usb_power_supply_resources[] = {
308318
DEFINE_RES_IRQ_NAMED(AXP22X_IRQ_VBUS_REMOVAL, "VBUS_REMOVAL"),
309319
};
310320

321+
static const struct resource axp717_usb_power_supply_resources[] = {
322+
DEFINE_RES_IRQ_NAMED(AXP717_IRQ_VBUS_OVER_V, "VBUS_OVER_V"),
323+
DEFINE_RES_IRQ_NAMED(AXP717_IRQ_VBUS_PLUGIN, "VBUS_PLUGIN"),
324+
DEFINE_RES_IRQ_NAMED(AXP717_IRQ_VBUS_REMOVAL, "VBUS_REMOVAL"),
325+
};
326+
311327
/* AXP803 and AXP813/AXP818 share the same interrupts */
312328
static const struct resource axp803_usb_power_supply_resources[] = {
313329
DEFINE_RES_IRQ_NAMED(AXP803_IRQ_VBUS_PLUGIN, "VBUS_PLUGIN"),
@@ -422,7 +438,7 @@ static const struct regmap_config axp717_regmap_config = {
422438
.val_bits = 8,
423439
.wr_table = &axp717_writeable_table,
424440
.volatile_table = &axp717_volatile_table,
425-
.max_register = AXP717_CPUSLDO_CONTROL,
441+
.max_register = AXP717_ADC_DATA_L,
426442
.cache_type = REGCACHE_MAPLE,
427443
};
428444

@@ -1024,6 +1040,13 @@ static struct mfd_cell axp313a_cells[] = {
10241040
static struct mfd_cell axp717_cells[] = {
10251041
MFD_CELL_NAME("axp20x-regulator"),
10261042
MFD_CELL_RES("axp20x-pek", axp717_pek_resources),
1043+
MFD_CELL_OF("axp717-adc",
1044+
NULL, NULL, 0, 0, "x-powers,axp717-adc"),
1045+
MFD_CELL_OF("axp20x-usb-power-supply",
1046+
axp717_usb_power_supply_resources, NULL, 0, 0,
1047+
"x-powers,axp717-usb-power-supply"),
1048+
MFD_CELL_OF("axp20x-battery-power-supply",
1049+
NULL, NULL, 0, 0, "x-powers,axp717-battery-power-supply"),
10271050
};
10281051

10291052
static const struct resource axp288_adc_resources[] = {

include/linux/mfd/axp20x.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,16 @@ enum axp20x_variants {
115115
#define AXP313A_IRQ_STATE 0x21
116116

117117
#define AXP717_ON_INDICATE 0x00
118+
#define AXP717_PMU_STATUS_2 0x01
119+
#define AXP717_BC_DETECT 0x05
120+
#define AXP717_PMU_FAULT 0x08
121+
#define AXP717_MODULE_EN_CONTROL_1 0x0b
122+
#define AXP717_MIN_SYS_V_CONTROL 0x15
123+
#define AXP717_INPUT_VOL_LIMIT_CTRL 0x16
124+
#define AXP717_INPUT_CUR_LIMIT_CTRL 0x17
125+
#define AXP717_MODULE_EN_CONTROL_2 0x19
126+
#define AXP717_BOOST_CONTROL 0x1e
127+
#define AXP717_VSYS_V_POWEROFF 0x24
118128
#define AXP717_IRQ0_EN 0x40
119129
#define AXP717_IRQ1_EN 0x41
120130
#define AXP717_IRQ2_EN 0x42
@@ -125,6 +135,9 @@ enum axp20x_variants {
125135
#define AXP717_IRQ2_STATE 0x4a
126136
#define AXP717_IRQ3_STATE 0x4b
127137
#define AXP717_IRQ4_STATE 0x4c
138+
#define AXP717_ICC_CHG_SET 0x62
139+
#define AXP717_ITERM_CHG_SET 0x63
140+
#define AXP717_CV_CHG_SET 0x64
128141
#define AXP717_DCDC_OUTPUT_CONTROL 0x80
129142
#define AXP717_DCDC1_CONTROL 0x83
130143
#define AXP717_DCDC2_CONTROL 0x84
@@ -145,6 +158,19 @@ enum axp20x_variants {
145158
#define AXP717_CLDO3_CONTROL 0x9d
146159
#define AXP717_CLDO4_CONTROL 0x9e
147160
#define AXP717_CPUSLDO_CONTROL 0x9f
161+
#define AXP717_BATT_PERCENT_DATA 0xa4
162+
#define AXP717_ADC_CH_EN_CONTROL 0xc0
163+
#define AXP717_BATT_V_H 0xc4
164+
#define AXP717_BATT_V_L 0xc5
165+
#define AXP717_VBUS_V_H 0xc6
166+
#define AXP717_VBUS_V_L 0xc7
167+
#define AXP717_VSYS_V_H 0xc8
168+
#define AXP717_VSYS_V_L 0xc9
169+
#define AXP717_BATT_CHRG_I_H 0xca
170+
#define AXP717_BATT_CHRG_I_L 0xcb
171+
#define AXP717_ADC_DATA_SEL 0xcd
172+
#define AXP717_ADC_DATA_H 0xce
173+
#define AXP717_ADC_DATA_L 0xcf
148174

149175
#define AXP806_STARTUP_SRC 0x00
150176
#define AXP806_CHIP_ID 0x03

0 commit comments

Comments
 (0)