Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * Functions and registers to access AXP20X power management chip.
0004  *
0005  * Copyright (C) 2013, Carlo Caione <carlo@caione.org>
0006  */
0007 
0008 #ifndef __LINUX_MFD_AXP20X_H
0009 #define __LINUX_MFD_AXP20X_H
0010 
0011 #include <linux/regmap.h>
0012 
0013 enum axp20x_variants {
0014     AXP152_ID = 0,
0015     AXP202_ID,
0016     AXP209_ID,
0017     AXP221_ID,
0018     AXP223_ID,
0019     AXP288_ID,
0020     AXP803_ID,
0021     AXP806_ID,
0022     AXP809_ID,
0023     AXP813_ID,
0024     NR_AXP20X_VARIANTS,
0025 };
0026 
0027 #define AXP20X_DATACACHE(m)     (0x04 + (m))
0028 
0029 /* Power supply */
0030 #define AXP152_PWR_OP_MODE      0x01
0031 #define AXP152_LDO3456_DC1234_CTRL  0x12
0032 #define AXP152_ALDO_OP_MODE     0x13
0033 #define AXP152_LDO0_CTRL        0x15
0034 #define AXP152_DCDC2_V_OUT      0x23
0035 #define AXP152_DCDC2_V_RAMP     0x25
0036 #define AXP152_DCDC1_V_OUT      0x26
0037 #define AXP152_DCDC3_V_OUT      0x27
0038 #define AXP152_ALDO12_V_OUT     0x28
0039 #define AXP152_DLDO1_V_OUT      0x29
0040 #define AXP152_DLDO2_V_OUT      0x2a
0041 #define AXP152_DCDC4_V_OUT      0x2b
0042 #define AXP152_V_OFF            0x31
0043 #define AXP152_OFF_CTRL         0x32
0044 #define AXP152_PEK_KEY          0x36
0045 #define AXP152_DCDC_FREQ        0x37
0046 #define AXP152_DCDC_MODE        0x80
0047 
0048 #define AXP20X_PWR_INPUT_STATUS     0x00
0049 #define AXP20X_PWR_OP_MODE      0x01
0050 #define AXP20X_USB_OTG_STATUS       0x02
0051 #define AXP20X_PWR_OUT_CTRL     0x12
0052 #define AXP20X_DCDC2_V_OUT      0x23
0053 #define AXP20X_DCDC2_LDO3_V_RAMP    0x25
0054 #define AXP20X_DCDC3_V_OUT      0x27
0055 #define AXP20X_LDO24_V_OUT      0x28
0056 #define AXP20X_LDO3_V_OUT       0x29
0057 #define AXP20X_VBUS_IPSOUT_MGMT     0x30
0058 #define AXP20X_V_OFF            0x31
0059 #define AXP20X_OFF_CTRL         0x32
0060 #define AXP20X_CHRG_CTRL1       0x33
0061 #define AXP20X_CHRG_CTRL2       0x34
0062 #define AXP20X_CHRG_BAK_CTRL        0x35
0063 #define AXP20X_PEK_KEY          0x36
0064 #define AXP20X_DCDC_FREQ        0x37
0065 #define AXP20X_V_LTF_CHRG       0x38
0066 #define AXP20X_V_HTF_CHRG       0x39
0067 #define AXP20X_APS_WARN_L1      0x3a
0068 #define AXP20X_APS_WARN_L2      0x3b
0069 #define AXP20X_V_LTF_DISCHRG        0x3c
0070 #define AXP20X_V_HTF_DISCHRG        0x3d
0071 
0072 #define AXP22X_PWR_OUT_CTRL1        0x10
0073 #define AXP22X_PWR_OUT_CTRL2        0x12
0074 #define AXP22X_PWR_OUT_CTRL3        0x13
0075 #define AXP22X_DLDO1_V_OUT      0x15
0076 #define AXP22X_DLDO2_V_OUT      0x16
0077 #define AXP22X_DLDO3_V_OUT      0x17
0078 #define AXP22X_DLDO4_V_OUT      0x18
0079 #define AXP22X_ELDO1_V_OUT      0x19
0080 #define AXP22X_ELDO2_V_OUT      0x1a
0081 #define AXP22X_ELDO3_V_OUT      0x1b
0082 #define AXP22X_DC5LDO_V_OUT     0x1c
0083 #define AXP22X_DCDC1_V_OUT      0x21
0084 #define AXP22X_DCDC2_V_OUT      0x22
0085 #define AXP22X_DCDC3_V_OUT      0x23
0086 #define AXP22X_DCDC4_V_OUT      0x24
0087 #define AXP22X_DCDC5_V_OUT      0x25
0088 #define AXP22X_DCDC23_V_RAMP_CTRL   0x27
0089 #define AXP22X_ALDO1_V_OUT      0x28
0090 #define AXP22X_ALDO2_V_OUT      0x29
0091 #define AXP22X_ALDO3_V_OUT      0x2a
0092 #define AXP22X_CHRG_CTRL3       0x35
0093 
0094 #define AXP806_STARTUP_SRC      0x00
0095 #define AXP806_CHIP_ID          0x03
0096 #define AXP806_PWR_OUT_CTRL1        0x10
0097 #define AXP806_PWR_OUT_CTRL2        0x11
0098 #define AXP806_DCDCA_V_CTRL     0x12
0099 #define AXP806_DCDCB_V_CTRL     0x13
0100 #define AXP806_DCDCC_V_CTRL     0x14
0101 #define AXP806_DCDCD_V_CTRL     0x15
0102 #define AXP806_DCDCE_V_CTRL     0x16
0103 #define AXP806_ALDO1_V_CTRL     0x17
0104 #define AXP806_ALDO2_V_CTRL     0x18
0105 #define AXP806_ALDO3_V_CTRL     0x19
0106 #define AXP806_DCDC_MODE_CTRL1      0x1a
0107 #define AXP806_DCDC_MODE_CTRL2      0x1b
0108 #define AXP806_DCDC_FREQ_CTRL       0x1c
0109 #define AXP806_BLDO1_V_CTRL     0x20
0110 #define AXP806_BLDO2_V_CTRL     0x21
0111 #define AXP806_BLDO3_V_CTRL     0x22
0112 #define AXP806_BLDO4_V_CTRL     0x23
0113 #define AXP806_CLDO1_V_CTRL     0x24
0114 #define AXP806_CLDO2_V_CTRL     0x25
0115 #define AXP806_CLDO3_V_CTRL     0x26
0116 #define AXP806_VREF_TEMP_WARN_L     0xf3
0117 #define AXP806_BUS_ADDR_EXT     0xfe
0118 #define AXP806_REG_ADDR_EXT     0xff
0119 
0120 #define AXP803_POLYPHASE_CTRL       0x14
0121 #define AXP803_FLDO1_V_OUT      0x1c
0122 #define AXP803_FLDO2_V_OUT      0x1d
0123 #define AXP803_DCDC1_V_OUT      0x20
0124 #define AXP803_DCDC2_V_OUT      0x21
0125 #define AXP803_DCDC3_V_OUT      0x22
0126 #define AXP803_DCDC4_V_OUT      0x23
0127 #define AXP803_DCDC5_V_OUT      0x24
0128 #define AXP803_DCDC6_V_OUT      0x25
0129 #define AXP803_DCDC_FREQ_CTRL       0x3b
0130 
0131 /* Other DCDC regulator control registers are the same as AXP803 */
0132 #define AXP813_DCDC7_V_OUT      0x26
0133 
0134 /* Interrupt */
0135 #define AXP152_IRQ1_EN          0x40
0136 #define AXP152_IRQ2_EN          0x41
0137 #define AXP152_IRQ3_EN          0x42
0138 #define AXP152_IRQ1_STATE       0x48
0139 #define AXP152_IRQ2_STATE       0x49
0140 #define AXP152_IRQ3_STATE       0x4a
0141 
0142 #define AXP20X_IRQ1_EN          0x40
0143 #define AXP20X_IRQ2_EN          0x41
0144 #define AXP20X_IRQ3_EN          0x42
0145 #define AXP20X_IRQ4_EN          0x43
0146 #define AXP20X_IRQ5_EN          0x44
0147 #define AXP20X_IRQ6_EN          0x45
0148 #define AXP20X_IRQ1_STATE       0x48
0149 #define AXP20X_IRQ2_STATE       0x49
0150 #define AXP20X_IRQ3_STATE       0x4a
0151 #define AXP20X_IRQ4_STATE       0x4b
0152 #define AXP20X_IRQ5_STATE       0x4c
0153 #define AXP20X_IRQ6_STATE       0x4d
0154 
0155 /* ADC */
0156 #define AXP20X_ACIN_V_ADC_H     0x56
0157 #define AXP20X_ACIN_V_ADC_L     0x57
0158 #define AXP20X_ACIN_I_ADC_H     0x58
0159 #define AXP20X_ACIN_I_ADC_L     0x59
0160 #define AXP20X_VBUS_V_ADC_H     0x5a
0161 #define AXP20X_VBUS_V_ADC_L     0x5b
0162 #define AXP20X_VBUS_I_ADC_H     0x5c
0163 #define AXP20X_VBUS_I_ADC_L     0x5d
0164 #define AXP20X_TEMP_ADC_H       0x5e
0165 #define AXP20X_TEMP_ADC_L       0x5f
0166 #define AXP20X_TS_IN_H          0x62
0167 #define AXP20X_TS_IN_L          0x63
0168 #define AXP20X_GPIO0_V_ADC_H        0x64
0169 #define AXP20X_GPIO0_V_ADC_L        0x65
0170 #define AXP20X_GPIO1_V_ADC_H        0x66
0171 #define AXP20X_GPIO1_V_ADC_L        0x67
0172 #define AXP20X_PWR_BATT_H       0x70
0173 #define AXP20X_PWR_BATT_M       0x71
0174 #define AXP20X_PWR_BATT_L       0x72
0175 #define AXP20X_BATT_V_H         0x78
0176 #define AXP20X_BATT_V_L         0x79
0177 #define AXP20X_BATT_CHRG_I_H        0x7a
0178 #define AXP20X_BATT_CHRG_I_L        0x7b
0179 #define AXP20X_BATT_DISCHRG_I_H     0x7c
0180 #define AXP20X_BATT_DISCHRG_I_L     0x7d
0181 #define AXP20X_IPSOUT_V_HIGH_H      0x7e
0182 #define AXP20X_IPSOUT_V_HIGH_L      0x7f
0183 
0184 /* Power supply */
0185 #define AXP20X_DCDC_MODE        0x80
0186 #define AXP20X_ADC_EN1          0x82
0187 #define AXP20X_ADC_EN2          0x83
0188 #define AXP20X_ADC_RATE         0x84
0189 #define AXP20X_GPIO10_IN_RANGE      0x85
0190 #define AXP20X_GPIO1_ADC_IRQ_RIS    0x86
0191 #define AXP20X_GPIO1_ADC_IRQ_FAL    0x87
0192 #define AXP20X_TIMER_CTRL       0x8a
0193 #define AXP20X_VBUS_MON         0x8b
0194 #define AXP20X_OVER_TMP         0x8f
0195 
0196 #define AXP22X_PWREN_CTRL1      0x8c
0197 #define AXP22X_PWREN_CTRL2      0x8d
0198 
0199 /* GPIO */
0200 #define AXP152_GPIO0_CTRL       0x90
0201 #define AXP152_GPIO1_CTRL       0x91
0202 #define AXP152_GPIO2_CTRL       0x92
0203 #define AXP152_GPIO3_CTRL       0x93
0204 #define AXP152_LDOGPIO2_V_OUT       0x96
0205 #define AXP152_GPIO_INPUT       0x97
0206 #define AXP152_PWM0_FREQ_X      0x98
0207 #define AXP152_PWM0_FREQ_Y      0x99
0208 #define AXP152_PWM0_DUTY_CYCLE      0x9a
0209 #define AXP152_PWM1_FREQ_X      0x9b
0210 #define AXP152_PWM1_FREQ_Y      0x9c
0211 #define AXP152_PWM1_DUTY_CYCLE      0x9d
0212 
0213 #define AXP20X_GPIO0_CTRL       0x90
0214 #define AXP20X_LDO5_V_OUT       0x91
0215 #define AXP20X_GPIO1_CTRL       0x92
0216 #define AXP20X_GPIO2_CTRL       0x93
0217 #define AXP20X_GPIO20_SS        0x94
0218 #define AXP20X_GPIO3_CTRL       0x95
0219 
0220 #define AXP22X_LDO_IO0_V_OUT        0x91
0221 #define AXP22X_LDO_IO1_V_OUT        0x93
0222 #define AXP22X_GPIO_STATE       0x94
0223 #define AXP22X_GPIO_PULL_DOWN       0x95
0224 
0225 /* Battery */
0226 #define AXP20X_CHRG_CC_31_24        0xb0
0227 #define AXP20X_CHRG_CC_23_16        0xb1
0228 #define AXP20X_CHRG_CC_15_8     0xb2
0229 #define AXP20X_CHRG_CC_7_0      0xb3
0230 #define AXP20X_DISCHRG_CC_31_24     0xb4
0231 #define AXP20X_DISCHRG_CC_23_16     0xb5
0232 #define AXP20X_DISCHRG_CC_15_8      0xb6
0233 #define AXP20X_DISCHRG_CC_7_0       0xb7
0234 #define AXP20X_CC_CTRL          0xb8
0235 #define AXP20X_FG_RES           0xb9
0236 
0237 /* OCV */
0238 #define AXP20X_RDC_H            0xba
0239 #define AXP20X_RDC_L            0xbb
0240 #define AXP20X_OCV(m)           (0xc0 + (m))
0241 #define AXP20X_OCV_MAX          0xf
0242 
0243 /* AXP22X specific registers */
0244 #define AXP22X_PMIC_TEMP_H      0x56
0245 #define AXP22X_PMIC_TEMP_L      0x57
0246 #define AXP22X_TS_ADC_H         0x58
0247 #define AXP22X_TS_ADC_L         0x59
0248 #define AXP22X_BATLOW_THRES1        0xe6
0249 
0250 /* AXP288/AXP803 specific registers */
0251 #define AXP288_POWER_REASON     0x02
0252 #define AXP288_BC_GLOBAL        0x2c
0253 #define AXP288_BC_VBUS_CNTL     0x2d
0254 #define AXP288_BC_USB_STAT      0x2e
0255 #define AXP288_BC_DET_STAT      0x2f
0256 #define AXP288_PMIC_ADC_H               0x56
0257 #define AXP288_PMIC_ADC_L               0x57
0258 #define AXP288_TS_ADC_H         0x58
0259 #define AXP288_TS_ADC_L         0x59
0260 #define AXP288_GP_ADC_H         0x5a
0261 #define AXP288_GP_ADC_L         0x5b
0262 #define AXP288_ADC_TS_PIN_CTRL          0x84
0263 #define AXP288_RT_BATT_V_H      0xa0
0264 #define AXP288_RT_BATT_V_L      0xa1
0265 
0266 #define AXP813_ACIN_PATH_CTRL       0x3a
0267 #define AXP813_ADC_RATE         0x85
0268 
0269 /* Fuel Gauge */
0270 #define AXP288_FG_RDC1_REG          0xba
0271 #define AXP288_FG_RDC0_REG          0xbb
0272 #define AXP288_FG_OCVH_REG          0xbc
0273 #define AXP288_FG_OCVL_REG          0xbd
0274 #define AXP288_FG_OCV_CURVE_REG     0xc0
0275 #define AXP288_FG_DES_CAP1_REG      0xe0
0276 #define AXP288_FG_DES_CAP0_REG      0xe1
0277 #define AXP288_FG_CC_MTR1_REG       0xe2
0278 #define AXP288_FG_CC_MTR0_REG       0xe3
0279 #define AXP288_FG_OCV_CAP_REG       0xe4
0280 #define AXP288_FG_CC_CAP_REG        0xe5
0281 #define AXP288_FG_LOW_CAP_REG       0xe6
0282 #define AXP288_FG_TUNE0             0xe8
0283 #define AXP288_FG_TUNE1             0xe9
0284 #define AXP288_FG_TUNE2             0xea
0285 #define AXP288_FG_TUNE3             0xeb
0286 #define AXP288_FG_TUNE4             0xec
0287 #define AXP288_FG_TUNE5             0xed
0288 
0289 /* Regulators IDs */
0290 enum {
0291     AXP20X_LDO1 = 0,
0292     AXP20X_LDO2,
0293     AXP20X_LDO3,
0294     AXP20X_LDO4,
0295     AXP20X_LDO5,
0296     AXP20X_DCDC2,
0297     AXP20X_DCDC3,
0298     AXP20X_REG_ID_MAX,
0299 };
0300 
0301 enum {
0302     AXP22X_DCDC1 = 0,
0303     AXP22X_DCDC2,
0304     AXP22X_DCDC3,
0305     AXP22X_DCDC4,
0306     AXP22X_DCDC5,
0307     AXP22X_DC1SW,
0308     AXP22X_DC5LDO,
0309     AXP22X_ALDO1,
0310     AXP22X_ALDO2,
0311     AXP22X_ALDO3,
0312     AXP22X_ELDO1,
0313     AXP22X_ELDO2,
0314     AXP22X_ELDO3,
0315     AXP22X_DLDO1,
0316     AXP22X_DLDO2,
0317     AXP22X_DLDO3,
0318     AXP22X_DLDO4,
0319     AXP22X_RTC_LDO,
0320     AXP22X_LDO_IO0,
0321     AXP22X_LDO_IO1,
0322     AXP22X_REG_ID_MAX,
0323 };
0324 
0325 enum {
0326     AXP806_DCDCA = 0,
0327     AXP806_DCDCB,
0328     AXP806_DCDCC,
0329     AXP806_DCDCD,
0330     AXP806_DCDCE,
0331     AXP806_ALDO1,
0332     AXP806_ALDO2,
0333     AXP806_ALDO3,
0334     AXP806_BLDO1,
0335     AXP806_BLDO2,
0336     AXP806_BLDO3,
0337     AXP806_BLDO4,
0338     AXP806_CLDO1,
0339     AXP806_CLDO2,
0340     AXP806_CLDO3,
0341     AXP806_SW,
0342     AXP806_REG_ID_MAX,
0343 };
0344 
0345 enum {
0346     AXP809_DCDC1 = 0,
0347     AXP809_DCDC2,
0348     AXP809_DCDC3,
0349     AXP809_DCDC4,
0350     AXP809_DCDC5,
0351     AXP809_DC1SW,
0352     AXP809_DC5LDO,
0353     AXP809_ALDO1,
0354     AXP809_ALDO2,
0355     AXP809_ALDO3,
0356     AXP809_ELDO1,
0357     AXP809_ELDO2,
0358     AXP809_ELDO3,
0359     AXP809_DLDO1,
0360     AXP809_DLDO2,
0361     AXP809_RTC_LDO,
0362     AXP809_LDO_IO0,
0363     AXP809_LDO_IO1,
0364     AXP809_SW,
0365     AXP809_REG_ID_MAX,
0366 };
0367 
0368 enum {
0369     AXP803_DCDC1 = 0,
0370     AXP803_DCDC2,
0371     AXP803_DCDC3,
0372     AXP803_DCDC4,
0373     AXP803_DCDC5,
0374     AXP803_DCDC6,
0375     AXP803_DC1SW,
0376     AXP803_ALDO1,
0377     AXP803_ALDO2,
0378     AXP803_ALDO3,
0379     AXP803_DLDO1,
0380     AXP803_DLDO2,
0381     AXP803_DLDO3,
0382     AXP803_DLDO4,
0383     AXP803_ELDO1,
0384     AXP803_ELDO2,
0385     AXP803_ELDO3,
0386     AXP803_FLDO1,
0387     AXP803_FLDO2,
0388     AXP803_RTC_LDO,
0389     AXP803_LDO_IO0,
0390     AXP803_LDO_IO1,
0391     AXP803_REG_ID_MAX,
0392 };
0393 
0394 enum {
0395     AXP813_DCDC1 = 0,
0396     AXP813_DCDC2,
0397     AXP813_DCDC3,
0398     AXP813_DCDC4,
0399     AXP813_DCDC5,
0400     AXP813_DCDC6,
0401     AXP813_DCDC7,
0402     AXP813_ALDO1,
0403     AXP813_ALDO2,
0404     AXP813_ALDO3,
0405     AXP813_DLDO1,
0406     AXP813_DLDO2,
0407     AXP813_DLDO3,
0408     AXP813_DLDO4,
0409     AXP813_ELDO1,
0410     AXP813_ELDO2,
0411     AXP813_ELDO3,
0412     AXP813_FLDO1,
0413     AXP813_FLDO2,
0414     AXP813_FLDO3,
0415     AXP813_RTC_LDO,
0416     AXP813_LDO_IO0,
0417     AXP813_LDO_IO1,
0418     AXP813_SW,
0419     AXP813_REG_ID_MAX,
0420 };
0421 
0422 /* IRQs */
0423 enum {
0424     AXP152_IRQ_LDO0IN_CONNECT = 1,
0425     AXP152_IRQ_LDO0IN_REMOVAL,
0426     AXP152_IRQ_ALDO0IN_CONNECT,
0427     AXP152_IRQ_ALDO0IN_REMOVAL,
0428     AXP152_IRQ_DCDC1_V_LOW,
0429     AXP152_IRQ_DCDC2_V_LOW,
0430     AXP152_IRQ_DCDC3_V_LOW,
0431     AXP152_IRQ_DCDC4_V_LOW,
0432     AXP152_IRQ_PEK_SHORT,
0433     AXP152_IRQ_PEK_LONG,
0434     AXP152_IRQ_TIMER,
0435     AXP152_IRQ_PEK_RIS_EDGE,
0436     AXP152_IRQ_PEK_FAL_EDGE,
0437     AXP152_IRQ_GPIO3_INPUT,
0438     AXP152_IRQ_GPIO2_INPUT,
0439     AXP152_IRQ_GPIO1_INPUT,
0440     AXP152_IRQ_GPIO0_INPUT,
0441 };
0442 
0443 enum {
0444     AXP20X_IRQ_ACIN_OVER_V = 1,
0445     AXP20X_IRQ_ACIN_PLUGIN,
0446     AXP20X_IRQ_ACIN_REMOVAL,
0447     AXP20X_IRQ_VBUS_OVER_V,
0448     AXP20X_IRQ_VBUS_PLUGIN,
0449     AXP20X_IRQ_VBUS_REMOVAL,
0450     AXP20X_IRQ_VBUS_V_LOW,
0451     AXP20X_IRQ_BATT_PLUGIN,
0452     AXP20X_IRQ_BATT_REMOVAL,
0453     AXP20X_IRQ_BATT_ENT_ACT_MODE,
0454     AXP20X_IRQ_BATT_EXIT_ACT_MODE,
0455     AXP20X_IRQ_CHARG,
0456     AXP20X_IRQ_CHARG_DONE,
0457     AXP20X_IRQ_BATT_TEMP_HIGH,
0458     AXP20X_IRQ_BATT_TEMP_LOW,
0459     AXP20X_IRQ_DIE_TEMP_HIGH,
0460     AXP20X_IRQ_CHARG_I_LOW,
0461     AXP20X_IRQ_DCDC1_V_LONG,
0462     AXP20X_IRQ_DCDC2_V_LONG,
0463     AXP20X_IRQ_DCDC3_V_LONG,
0464     AXP20X_IRQ_PEK_SHORT = 22,
0465     AXP20X_IRQ_PEK_LONG,
0466     AXP20X_IRQ_N_OE_PWR_ON,
0467     AXP20X_IRQ_N_OE_PWR_OFF,
0468     AXP20X_IRQ_VBUS_VALID,
0469     AXP20X_IRQ_VBUS_NOT_VALID,
0470     AXP20X_IRQ_VBUS_SESS_VALID,
0471     AXP20X_IRQ_VBUS_SESS_END,
0472     AXP20X_IRQ_LOW_PWR_LVL1,
0473     AXP20X_IRQ_LOW_PWR_LVL2,
0474     AXP20X_IRQ_TIMER,
0475     AXP20X_IRQ_PEK_RIS_EDGE,
0476     AXP20X_IRQ_PEK_FAL_EDGE,
0477     AXP20X_IRQ_GPIO3_INPUT,
0478     AXP20X_IRQ_GPIO2_INPUT,
0479     AXP20X_IRQ_GPIO1_INPUT,
0480     AXP20X_IRQ_GPIO0_INPUT,
0481 };
0482 
0483 enum axp22x_irqs {
0484     AXP22X_IRQ_ACIN_OVER_V = 1,
0485     AXP22X_IRQ_ACIN_PLUGIN,
0486     AXP22X_IRQ_ACIN_REMOVAL,
0487     AXP22X_IRQ_VBUS_OVER_V,
0488     AXP22X_IRQ_VBUS_PLUGIN,
0489     AXP22X_IRQ_VBUS_REMOVAL,
0490     AXP22X_IRQ_VBUS_V_LOW,
0491     AXP22X_IRQ_BATT_PLUGIN,
0492     AXP22X_IRQ_BATT_REMOVAL,
0493     AXP22X_IRQ_BATT_ENT_ACT_MODE,
0494     AXP22X_IRQ_BATT_EXIT_ACT_MODE,
0495     AXP22X_IRQ_CHARG,
0496     AXP22X_IRQ_CHARG_DONE,
0497     AXP22X_IRQ_BATT_TEMP_HIGH,
0498     AXP22X_IRQ_BATT_TEMP_LOW,
0499     AXP22X_IRQ_DIE_TEMP_HIGH,
0500     AXP22X_IRQ_PEK_SHORT,
0501     AXP22X_IRQ_PEK_LONG,
0502     AXP22X_IRQ_LOW_PWR_LVL1,
0503     AXP22X_IRQ_LOW_PWR_LVL2,
0504     AXP22X_IRQ_TIMER,
0505     AXP22X_IRQ_PEK_RIS_EDGE,
0506     AXP22X_IRQ_PEK_FAL_EDGE,
0507     AXP22X_IRQ_GPIO1_INPUT,
0508     AXP22X_IRQ_GPIO0_INPUT,
0509 };
0510 
0511 enum axp288_irqs {
0512     AXP288_IRQ_VBUS_FALL     = 2,
0513     AXP288_IRQ_VBUS_RISE,
0514     AXP288_IRQ_OV,
0515     AXP288_IRQ_FALLING_ALT,
0516     AXP288_IRQ_RISING_ALT,
0517     AXP288_IRQ_OV_ALT,
0518     AXP288_IRQ_DONE          = 10,
0519     AXP288_IRQ_CHARGING,
0520     AXP288_IRQ_SAFE_QUIT,
0521     AXP288_IRQ_SAFE_ENTER,
0522     AXP288_IRQ_ABSENT,
0523     AXP288_IRQ_APPEND,
0524     AXP288_IRQ_QWBTU,
0525     AXP288_IRQ_WBTU,
0526     AXP288_IRQ_QWBTO,
0527     AXP288_IRQ_WBTO,
0528     AXP288_IRQ_QCBTU,
0529     AXP288_IRQ_CBTU,
0530     AXP288_IRQ_QCBTO,
0531     AXP288_IRQ_CBTO,
0532     AXP288_IRQ_WL2,
0533     AXP288_IRQ_WL1,
0534     AXP288_IRQ_GPADC,
0535     AXP288_IRQ_OT            = 31,
0536     AXP288_IRQ_GPIO0,
0537     AXP288_IRQ_GPIO1,
0538     AXP288_IRQ_POKO,
0539     AXP288_IRQ_POKL,
0540     AXP288_IRQ_POKS,
0541     AXP288_IRQ_POKN,
0542     AXP288_IRQ_POKP,
0543     AXP288_IRQ_TIMER,
0544     AXP288_IRQ_MV_CHNG,
0545     AXP288_IRQ_BC_USB_CHNG,
0546 };
0547 
0548 enum axp803_irqs {
0549     AXP803_IRQ_ACIN_OVER_V = 1,
0550     AXP803_IRQ_ACIN_PLUGIN,
0551     AXP803_IRQ_ACIN_REMOVAL,
0552     AXP803_IRQ_VBUS_OVER_V,
0553     AXP803_IRQ_VBUS_PLUGIN,
0554     AXP803_IRQ_VBUS_REMOVAL,
0555     AXP803_IRQ_BATT_PLUGIN,
0556     AXP803_IRQ_BATT_REMOVAL,
0557     AXP803_IRQ_BATT_ENT_ACT_MODE,
0558     AXP803_IRQ_BATT_EXIT_ACT_MODE,
0559     AXP803_IRQ_CHARG,
0560     AXP803_IRQ_CHARG_DONE,
0561     AXP803_IRQ_BATT_CHG_TEMP_HIGH,
0562     AXP803_IRQ_BATT_CHG_TEMP_HIGH_END,
0563     AXP803_IRQ_BATT_CHG_TEMP_LOW,
0564     AXP803_IRQ_BATT_CHG_TEMP_LOW_END,
0565     AXP803_IRQ_BATT_ACT_TEMP_HIGH,
0566     AXP803_IRQ_BATT_ACT_TEMP_HIGH_END,
0567     AXP803_IRQ_BATT_ACT_TEMP_LOW,
0568     AXP803_IRQ_BATT_ACT_TEMP_LOW_END,
0569     AXP803_IRQ_DIE_TEMP_HIGH,
0570     AXP803_IRQ_GPADC,
0571     AXP803_IRQ_LOW_PWR_LVL1,
0572     AXP803_IRQ_LOW_PWR_LVL2,
0573     AXP803_IRQ_TIMER,
0574     AXP803_IRQ_PEK_RIS_EDGE,
0575     AXP803_IRQ_PEK_FAL_EDGE,
0576     AXP803_IRQ_PEK_SHORT,
0577     AXP803_IRQ_PEK_LONG,
0578     AXP803_IRQ_PEK_OVER_OFF,
0579     AXP803_IRQ_GPIO1_INPUT,
0580     AXP803_IRQ_GPIO0_INPUT,
0581     AXP803_IRQ_BC_USB_CHNG,
0582     AXP803_IRQ_MV_CHNG,
0583 };
0584 
0585 enum axp806_irqs {
0586     AXP806_IRQ_DIE_TEMP_HIGH_LV1,
0587     AXP806_IRQ_DIE_TEMP_HIGH_LV2,
0588     AXP806_IRQ_DCDCA_V_LOW,
0589     AXP806_IRQ_DCDCB_V_LOW,
0590     AXP806_IRQ_DCDCC_V_LOW,
0591     AXP806_IRQ_DCDCD_V_LOW,
0592     AXP806_IRQ_DCDCE_V_LOW,
0593     AXP806_IRQ_POK_LONG,
0594     AXP806_IRQ_POK_SHORT,
0595     AXP806_IRQ_WAKEUP,
0596     AXP806_IRQ_POK_FALL,
0597     AXP806_IRQ_POK_RISE,
0598 };
0599 
0600 enum axp809_irqs {
0601     AXP809_IRQ_ACIN_OVER_V = 1,
0602     AXP809_IRQ_ACIN_PLUGIN,
0603     AXP809_IRQ_ACIN_REMOVAL,
0604     AXP809_IRQ_VBUS_OVER_V,
0605     AXP809_IRQ_VBUS_PLUGIN,
0606     AXP809_IRQ_VBUS_REMOVAL,
0607     AXP809_IRQ_VBUS_V_LOW,
0608     AXP809_IRQ_BATT_PLUGIN,
0609     AXP809_IRQ_BATT_REMOVAL,
0610     AXP809_IRQ_BATT_ENT_ACT_MODE,
0611     AXP809_IRQ_BATT_EXIT_ACT_MODE,
0612     AXP809_IRQ_CHARG,
0613     AXP809_IRQ_CHARG_DONE,
0614     AXP809_IRQ_BATT_CHG_TEMP_HIGH,
0615     AXP809_IRQ_BATT_CHG_TEMP_HIGH_END,
0616     AXP809_IRQ_BATT_CHG_TEMP_LOW,
0617     AXP809_IRQ_BATT_CHG_TEMP_LOW_END,
0618     AXP809_IRQ_BATT_ACT_TEMP_HIGH,
0619     AXP809_IRQ_BATT_ACT_TEMP_HIGH_END,
0620     AXP809_IRQ_BATT_ACT_TEMP_LOW,
0621     AXP809_IRQ_BATT_ACT_TEMP_LOW_END,
0622     AXP809_IRQ_DIE_TEMP_HIGH,
0623     AXP809_IRQ_LOW_PWR_LVL1,
0624     AXP809_IRQ_LOW_PWR_LVL2,
0625     AXP809_IRQ_TIMER,
0626     AXP809_IRQ_PEK_RIS_EDGE,
0627     AXP809_IRQ_PEK_FAL_EDGE,
0628     AXP809_IRQ_PEK_SHORT,
0629     AXP809_IRQ_PEK_LONG,
0630     AXP809_IRQ_PEK_OVER_OFF,
0631     AXP809_IRQ_GPIO1_INPUT,
0632     AXP809_IRQ_GPIO0_INPUT,
0633 };
0634 
0635 struct axp20x_dev {
0636     struct device           *dev;
0637     int             irq;
0638     unsigned long           irq_flags;
0639     struct regmap           *regmap;
0640     struct regmap_irq_chip_data *regmap_irqc;
0641     long                variant;
0642     int                             nr_cells;
0643     const struct mfd_cell           *cells;
0644     const struct regmap_config  *regmap_cfg;
0645     const struct regmap_irq_chip    *regmap_irq_chip;
0646 };
0647 
0648 /* generic helper function for reading 9-16 bit wide regs */
0649 static inline int axp20x_read_variable_width(struct regmap *regmap,
0650     unsigned int reg, unsigned int width)
0651 {
0652     unsigned int reg_val, result;
0653     int err;
0654 
0655     err = regmap_read(regmap, reg, &reg_val);
0656     if (err)
0657         return err;
0658 
0659     result = reg_val << (width - 8);
0660 
0661     err = regmap_read(regmap, reg + 1, &reg_val);
0662     if (err)
0663         return err;
0664 
0665     result |= reg_val;
0666 
0667     return result;
0668 }
0669 
0670 /**
0671  * axp20x_match_device(): Setup axp20x variant related fields
0672  *
0673  * @axp20x: axp20x device to setup (.dev field must be set)
0674  * @dev: device associated with this axp20x device
0675  *
0676  * This lets the axp20x core configure the mfd cells and register maps
0677  * for later use.
0678  */
0679 int axp20x_match_device(struct axp20x_dev *axp20x);
0680 
0681 /**
0682  * axp20x_device_probe(): Probe a configured axp20x device
0683  *
0684  * @axp20x: axp20x device to probe (must be configured)
0685  *
0686  * This function lets the axp20x core register the axp20x mfd devices
0687  * and irqchip. The axp20x device passed in must be fully configured
0688  * with axp20x_match_device, its irq set, and regmap created.
0689  */
0690 int axp20x_device_probe(struct axp20x_dev *axp20x);
0691 
0692 /**
0693  * axp20x_device_remove(): Remove a axp20x device
0694  *
0695  * @axp20x: axp20x device to remove
0696  *
0697  * This tells the axp20x core to remove the associated mfd devices
0698  */
0699 void axp20x_device_remove(struct axp20x_dev *axp20x);
0700 
0701 #endif /* __LINUX_MFD_AXP20X_H */