huangcm
2025-07-16 ef9638196126781a6ba6d6a8d47504b4f326f916
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
#ifndef _AXP803_H_
#define _AXP803_H_
 
#include "linux/types.h"
 
/* reg AXP803_STATUS */
#define AXP803_STATUS_AC_PRESENT    BIT(7)
#define AXP803_STATUS_AC_USED        BIT(6)
#define AXP803_STATUS_VBUS_PRESENT    BIT(5)
#define AXP803_STATUS_VBUS_USED        BIT(4)
#define AXP803_STATUS_BAT_CUR_DIRCT    BIT(2)
 
/* reg AXP803_MODE_CHGSTATUS */
#define AXP803_CHGSTATUS_BAT_CHARGING    BIT(6)
#define AXP803_CHGSTATUS_BAT_PRESENT    BIT(5)
#define AXP803_CHGSTATUS_BAT_PST_VALID    BIT(4)
 
/* reg AXP803_MODE_CHGSTATUS */
#define AXP803_FAULT_LOG_COLD        BIT(0)
#define AXP803_FAULT_LOG_CHA_CUR_LOW    BIT(2)
#define AXP803_FAULT_LOG_BATINACT    BIT(3)
#define AXP803_FAULT_LOG_OVER_TEMP    BIT(7)
 
/* AXP803_ADC_EN */
#define AXP803_ADC_BATVOL_ENABLE    BIT(7)
#define AXP803_ADC_BATCUR_ENABLE    BIT(6)
#define AXP803_ADC_TSVOL_ENABLE        BIT(0)
 
#define AXP803_CHRG_CTRL1_TGT_VOLT    GENMASK(6, 5)
#define AXP803_CHRG_CTRL1_TGT_4_1V    (0 << 5)
#define AXP803_CHRG_CTRL1_TGT_4_15V    (1 << 5)
#define AXP803_CHRG_CTRL1_TGT_4_2V    (2 << 5)
#define AXP803_CHRG_CTRL1_TGT_4_35V    (3 << 5)
 
#define AXP803_V_OFF_MASK        GENMASK(2, 0)
 
struct axp_config_info {
   u32 pmu_used;
   u32 pmu_id;
   u32 pmu_battery_rdc;
   u32 pmu_battery_cap;
   u32 pmu_batdeten;
   u32 pmu_chg_ic_temp;
   u32 pmu_runtime_chgcur;
   u32 pmu_suspend_chgcur;
   u32 pmu_shutdown_chgcur;
    u32 pmu_vol_min;
   u32 pmu_init_chgvol;
   u32 pmu_init_chgend_rate;
   u32 pmu_init_chg_enabled;
   u32 pmu_init_bc_en;
   u32 pmu_init_adc_freq;
   u32 pmu_init_adcts_freq;
   u32 pmu_init_chg_pretime;
   u32 pmu_init_chg_csttime;
   u32 pmu_batt_cap_correct;
   u32 pmu_chg_end_on_en;
   u32 ocv_coulumb_100;
 
   u32 pmu_bat_para1;
   u32 pmu_bat_para2;
   u32 pmu_bat_para3;
   u32 pmu_bat_para4;
   u32 pmu_bat_para5;
   u32 pmu_bat_para6;
   u32 pmu_bat_para7;
   u32 pmu_bat_para8;
   u32 pmu_bat_para9;
   u32 pmu_bat_para10;
   u32 pmu_bat_para11;
   u32 pmu_bat_para12;
   u32 pmu_bat_para13;
   u32 pmu_bat_para14;
   u32 pmu_bat_para15;
   u32 pmu_bat_para16;
   u32 pmu_bat_para17;
   u32 pmu_bat_para18;
   u32 pmu_bat_para19;
   u32 pmu_bat_para20;
   u32 pmu_bat_para21;
   u32 pmu_bat_para22;
   u32 pmu_bat_para23;
   u32 pmu_bat_para24;
   u32 pmu_bat_para25;
   u32 pmu_bat_para26;
   u32 pmu_bat_para27;
   u32 pmu_bat_para28;
   u32 pmu_bat_para29;
   u32 pmu_bat_para30;
   u32 pmu_bat_para31;
   u32 pmu_bat_para32;
 
   u32 pmu_ac_vol;
   u32 pmu_ac_cur;
   u32 pmu_usbpc_vol;
   u32 pmu_usbpc_cur;
   u32 pmu_usbad_vol;
   u32 pmu_usbad_cur;
   u32 pmu_pwroff_vol;
   u32 pmu_pwron_vol;
   u32 pmu_powkey_off_time;
   u32 pmu_powkey_off_en;
   u32 pmu_powkey_off_delay_time;
   u32 pmu_powkey_off_func;
   u32 pmu_powkey_long_time;
   u32 pmu_powkey_on_time;
   u32 pmu_powkey_wakeup_irq;
   u32 pmu_pwrok_time;
   u32 pmu_pwrnoe_time;
   u32 pmu_reset_shutdown_en;
   u32 pmu_battery_warning_level1;
   u32 pmu_battery_warning_level2;
   u32 pmu_restvol_adjust_time;
   u32 pmu_ocv_cou_adjust_time;
   u32 pmu_chgled_func;
   u32 pmu_chgled_type;
   u32 pmu_vbusen_func;
   u32 pmu_reset;
   u32 pmu_irq_wakeup;
   u32 pmu_hot_shutdown;
   u32 pmu_inshort;
   u32 power_start;
   u32 pmu_as_slave;
   u32 pmu_bat_unused;
   u32 pmu_ocv_en;
   u32 pmu_cou_en;
   u32 pmu_update_min_time;
 
   u32 pmu_bat_temp_enable;
   u32 pmu_bat_ts_current;
   u32 pmu_bat_charge_ltf;
   u32 pmu_bat_charge_htf;
   u32 pmu_bat_shutdown_ltf;
   u32 pmu_bat_shutdown_htf;
   u32 pmu_bat_temp_para1;
   u32 pmu_bat_temp_para2;
   u32 pmu_bat_temp_para3;
   u32 pmu_bat_temp_para4;
   u32 pmu_bat_temp_para5;
   u32 pmu_bat_temp_para6;
   u32 pmu_bat_temp_para7;
   u32 pmu_bat_temp_para8;
   u32 pmu_bat_temp_para9;
   u32 pmu_bat_temp_para10;
   u32 pmu_bat_temp_para11;
   u32 pmu_bat_temp_para12;
   u32 pmu_bat_temp_para13;
   u32 pmu_bat_temp_para14;
   u32 pmu_bat_temp_para15;
   u32 pmu_bat_temp_para16;
 
   u32 wakeup_usb_in;
   u32 wakeup_usb_out;
   u32 wakeup_ac_in;
   u32 wakeup_ac_out;
   u32 wakeup_bat_in;
   u32 wakeup_bat_out;
   u32 wakeup_bat_charging;
   u32 wakeup_bat_charge_over;
   u32 wakeup_low_warning1;
   u32 wakeup_low_warning2;
   u32 wakeup_bat_untemp_work;
   u32 wakeup_bat_ovtemp_work;
   u32 wakeup_untemp_chg;
   u32 wakeup_ovtemp_chg;
};
 
struct axp803_charger_ps {
   char                      *name;
   struct device             *dev;
   struct axp_config_info     dts_info;
   struct regmap             *regmap;
   struct power_supply       *bat;
   struct power_supply       *usb;
   struct power_supply       *ac;
   struct delayed_work        charger_mon;
};
 
#define BATRDC          100
#define INTCHGCUR       300000      /* set initial charging current limite */
#define SUSCHGCUR       1000000     /* set suspend charging current limite */
#define RESCHGCUR       INTCHGCUR   /* set resume charging current limite */
#define CLSCHGCUR       SUSCHGCUR   /* set shutdown charging current limite */
#define INTCHGVOL       4200000     /* set initial charing target voltage */
#define INTCHGENDRATE   10          /* set initial charing end current rate */
#define INTCHGENABLED   1           /* set initial charing enabled */
#define INTADCFREQ      25          /* set initial adc frequency */
#define INTADCFREQC     100         /* set initial coulomb adc coufrequency */
#define INTCHGPRETIME   50          /* set initial pre-charging time */
#define INTCHGCSTTIME   480         /* set initial pre-charging time */
#define BATMAXVOL       4200000     /* set battery max design volatge */
#define BATMINVOL       3500000     /* set battery min design volatge */
#define UPDATEMINTIME   30          /* set bat percent update min time */
 
#define OCVREG0         0x00        /* 2.99V */
#define OCVREG1         0x00        /* 3.13V */
#define OCVREG2         0x00        /* 3.27V */
#define OCVREG3         0x00        /* 3.34V */
#define OCVREG4         0x00        /* 3.41V */
#define OCVREG5         0x00        /* 3.48V */
#define OCVREG6         0x00        /* 3.52V */
#define OCVREG7         0x00        /* 3.55V */
#define OCVREG8         0x04        /* 3.57V */
#define OCVREG9         0x05        /* 3.59V */
#define OCVREGA         0x06        /* 3.61V */
#define OCVREGB         0x07        /* 3.63V */
#define OCVREGC         0x0a        /* 3.64V */
#define OCVREGD         0x0d        /* 3.66V */
#define OCVREGE         0x1a        /* 3.70V */
#define OCVREGF         0x24        /* 3.73V */
#define OCVREG10        0x29        /* 3.77V */
#define OCVREG11        0x2e        /* 3.78V */
#define OCVREG12        0x32        /* 3.80V */
#define OCVREG13        0x35        /* 3.84V */
#define OCVREG14        0x39        /* 3.85V */
#define OCVREG15        0x3d        /* 3.87V */
#define OCVREG16        0x43        /* 3.91V */
#define OCVREG17        0x49        /* 3.94V */
#define OCVREG18        0x4f        /* 3.98V */
#define OCVREG19        0x54        /* 4.01V */
#define OCVREG1A        0x58        /* 4.05V */
#define OCVREG1B        0x5c        /* 4.08V */
#define OCVREG1C        0x5e        /* 4.10V */
#define OCVREG1D        0x60        /* 4.12V */
#define OCVREG1E        0x62        /* 4.14V */
#define OCVREG1F        0x64        /* 4.15V */
 
#define AXP_OF_PROP_READ(name, def_value)\
do {\
   if (of_property_read_u32(node, #name, &axp_config->name))\
       axp_config->name = def_value;\
} while (0)
 
struct axp_interrupts {
   char *name;
   irq_handler_t isr;
   int irq;
};
 
#endif