Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
CTCaer
GitHub Repository: CTCaer/hekate
Path: blob/master/bdk/power/max77620.h
1476 views
1
/*
2
* Defining registers address and its bit definitions of MAX77620 and MAX20024
3
*
4
* Copyright (c) 2019-2020 CTCaer
5
*
6
* This program is free software; you can redistribute it and/or modify it
7
* under the terms and conditions of the GNU General Public License,
8
* version 2, as published by the Free Software Foundation.
9
*/
10
11
#ifndef _MFD_MAX77620_H_
12
#define _MFD_MAX77620_H_
13
14
#define MAX77620_I2C_ADDR 0x3C
15
16
/* GLOBAL, PMIC, GPIO, FPS, ONOFFC, CID Registers */
17
#define MAX77620_REG_CNFGGLBL1 0x00
18
#define MAX77620_CNFGGLBL1_LBRSTEN BIT(0)
19
#define MAX77620_CNFGGLBL1_LBDAC_MASK 0x0E
20
#define MAX77620_CNFGGLBL1_LBDAC_2700 (0 << 1)
21
#define MAX77620_CNFGGLBL1_LBDAC_2800 (1 << 1)
22
#define MAX77620_CNFGGLBL1_LBDAC_2900 (2 << 1)
23
#define MAX77620_CNFGGLBL1_LBDAC_3000 (3 << 1)
24
#define MAX77620_CNFGGLBL1_LBDAC_3100 (4 << 1)
25
#define MAX77620_CNFGGLBL1_LBDAC_3200 (5 << 1)
26
#define MAX77620_CNFGGLBL1_LBDAC_3300 (6 << 1)
27
#define MAX77620_CNFGGLBL1_LBDAC_3400 (7 << 1)
28
#define MAX77620_CNFGGLBL1_LBHYST_100 (0 << 4)
29
#define MAX77620_CNFGGLBL1_LBHYST_200 (1 << 4)
30
#define MAX77620_CNFGGLBL1_LBHYST_300 (2 << 4)
31
#define MAX77620_CNFGGLBL1_LBHYST_400 (3 << 4)
32
#define MAX77620_CNFGGLBL1_MPPLD BIT(6)
33
#define MAX77620_CNFGGLBL1_LBDAC_EN BIT(7)
34
35
#define MAX77620_REG_CNFGGLBL2 0x01
36
#define MAX77620_TWD_MASK 0x3
37
#define MAX77620_TWD_2s 0x0
38
#define MAX77620_TWD_16s 0x1
39
#define MAX77620_TWD_64s 0x2
40
#define MAX77620_TWD_128s 0x3
41
#define MAX77620_WDTEN BIT(2)
42
#define MAX77620_WDTSLPC BIT(3)
43
#define MAX77620_WDTOFFC BIT(4)
44
#define MAX77620_GLBL_LPM BIT(5)
45
#define MAX77620_I2CTWD_MASK 0xC0
46
#define MAX77620_I2CTWD_DISABLED 0x00
47
#define MAX77620_I2CTWD_1_33ms 0x40
48
#define MAX77620_I2CTWD_35_7ms 0x80
49
#define MAX77620_I2CTWD_41_7ms 0xC0
50
51
#define MAX77620_REG_CNFGGLBL3 0x02
52
#define MAX77620_WDTC_MASK 0x3
53
54
#define MAX77620_REG_CNFG1_32K 0x03
55
#define MAX77620_CNFG1_PWR_MD_32K_MASK 0x3
56
#define MAX77620_CNFG1_32K_OUT0_EN BIT(2)
57
#define MAX77620_CNFG1_32KLOAD_MASK 0x30
58
#define MAX77620_CNFG1_32K_OK BIT(7)
59
60
#define MAX77620_REG_CNFGBBC 0x04
61
#define MAX77620_CNFGBBC_ENABLE BIT(0)
62
#define MAX77620_CNFGBBC_CURRENT_MASK 0x06
63
#define MAX77620_CNFGBBC_CURRENT_SHIFT 1
64
#define MAX77620_CNFGBBC_VOLTAGE_MASK 0x18
65
#define MAX77620_CNFGBBC_VOLTAGE_SHIFT 3
66
#define MAX77620_CNFGBBC_LOW_CURRENT_DISABLE BIT(5)
67
#define MAX77620_CNFGBBC_RESISTOR_MASK 0xC0
68
#define MAX77620_CNFGBBC_RESISTOR_SHIFT 6
69
#define MAX77620_CNFGBBC_RESISTOR_100 (0 << MAX77620_CNFGBBC_RESISTOR_SHIFT)
70
#define MAX77620_CNFGBBC_RESISTOR_1K (1 << MAX77620_CNFGBBC_RESISTOR_SHIFT)
71
#define MAX77620_CNFGBBC_RESISTOR_3K (2 << MAX77620_CNFGBBC_RESISTOR_SHIFT)
72
#define MAX77620_CNFGBBC_RESISTOR_6K (3 << MAX77620_CNFGBBC_RESISTOR_SHIFT)
73
74
#define MAX77620_REG_IRQTOP 0x05
75
#define MAX77620_REG_IRQTOPM 0x0D
76
#define MAX77620_IRQ_TOP_ONOFF_MASK BIT(1)
77
#define MAX77620_IRQ_TOP_32K_MASK BIT(2)
78
#define MAX77620_IRQ_TOP_RTC_MASK BIT(3)
79
#define MAX77620_IRQ_TOP_GPIO_MASK BIT(4)
80
#define MAX77620_IRQ_TOP_LDO_MASK BIT(5)
81
#define MAX77620_IRQ_TOP_SD_MASK BIT(6)
82
#define MAX77620_IRQ_TOP_GLBL_MASK BIT(7)
83
84
#define MAX77620_REG_INTLBT 0x06
85
#define MAX77620_REG_INTENLBT 0x0E
86
#define MAX77620_IRQ_GLBLM_MASK BIT(0)
87
#define MAX77620_IRQ_TJALRM2_MASK BIT(1)
88
#define MAX77620_IRQ_TJALRM1_MASK BIT(2)
89
#define MAX77620_IRQ_LBM_MASK BIT(3)
90
91
#define MAX77620_REG_IRQSD 0x07
92
#define MAX77620_REG_IRQMASKSD 0x0F
93
#define MAX77620_IRQSD_PFI_SD3 BIT(4)
94
#define MAX77620_IRQSD_PFI_SD2 BIT(5)
95
#define MAX77620_IRQSD_PFI_SD1 BIT(6)
96
#define MAX77620_IRQSD_PFI_SD0 BIT(7)
97
98
#define MAX77620_REG_IRQ_LVL2_L0_7 0x08 // LDO number that irq occurred.
99
#define MAX77620_REG_IRQ_MSK_L0_7 0x10
100
#define MAX77620_REG_IRQ_LVL2_L8 0x09 // LDO number that irq occurred. Only bit0: LDO8 is valid.
101
#define MAX77620_REG_IRQ_MSK_L8 0x11
102
#define MAX77620_REG_IRQ_LVL2_GPIO 0x0A // Edge detection interrupt.
103
104
#define MAX77620_REG_ONOFFIRQ 0x0B
105
#define MAX77620_REG_ONOFFIRQM 0x12
106
#define MAX77620_ONOFFIRQ_MRWRN BIT(0)
107
#define MAX77620_ONOFFIRQ_EN0_1SEC BIT(1)
108
#define MAX77620_ONOFFIRQ_EN0_F BIT(2)
109
#define MAX77620_ONOFFIRQ_EN0_R BIT(3)
110
#define MAX77620_ONOFFIRQ_LID_F BIT(4)
111
#define MAX77620_ONOFFIRQ_LID_R BIT(5)
112
#define MAX77620_ONOFFIRQ_ACOK_F BIT(6)
113
#define MAX77620_ONOFFIRQ_ACOK_R BIT(7)
114
115
#define MAX77620_REG_NVERC 0x0C // Shutdown reason (non-volatile).
116
#define MAX77620_NVERC_SHDN BIT(0)
117
#define MAX77620_NVERC_WTCHDG BIT(1)
118
#define MAX77620_NVERC_HDRST BIT(2)
119
#define MAX77620_NVERC_TOVLD BIT(3)
120
#define MAX77620_NVERC_MBLSD BIT(4)
121
#define MAX77620_NVERC_MBO BIT(5)
122
#define MAX77620_NVERC_MBU BIT(6)
123
#define MAX77620_NVERC_RSTIN BIT(7)
124
125
#define MAX77620_REG_STATLBT 0x13
126
#define MAX77620_REG_STATSD 0x14
127
128
#define MAX77620_REG_ONOFFSTAT 0x15
129
#define MAX77620_ONOFFSTAT_LID BIT(0)
130
#define MAX77620_ONOFFSTAT_ACOK BIT(1)
131
#define MAX77620_ONOFFSTAT_EN0 BIT(2)
132
133
/* SD and LDO Registers */
134
#define MAX77620_REG_SD0 0x16
135
#define MAX77620_REG_SD1 0x17
136
#define MAX77620_REG_SD2 0x18
137
#define MAX77620_REG_SD3 0x19
138
#define MAX77620_REG_SD4 0x1A
139
#define MAX77620_REG_DVSSD0 0x1B
140
#define MAX77620_REG_DVSSD1 0x1C
141
#define MAX77620_SDX_VOLT_MASK 0xFF
142
#define MAX77620_SD0_VOLT_MASK 0x7F // Max is 0x40.
143
#define MAX77620_SD1_VOLT_MASK 0x7F // Max is 0x4C.
144
#define MAX77620_LDO_VOLT_MASK 0x3F
145
146
#define MAX77620_REG_SD0_CFG 0x1D
147
#define MAX77620_REG_SD1_CFG 0x1E
148
#define MAX77620_REG_SD2_CFG 0x1F
149
#define MAX77620_REG_SD3_CFG 0x20
150
#define MAX77620_REG_SD4_CFG 0x21
151
#define MAX77620_SD_SR_MASK 0xC0
152
#define MAX77620_SD_SR_SHIFT 6
153
#define MAX77620_SD_POWER_MODE_MASK 0x30
154
#define MAX77620_SD_POWER_MODE_SHIFT 4
155
#define MAX77620_SD_CFG1_ADE_MASK BIT(3)
156
#define MAX77620_SD_CFG1_ADE_DISABLE 0
157
#define MAX77620_SD_CFG1_ADE_ENABLE BIT(3)
158
#define MAX77620_SD_FPWM_MASK 0x04
159
#define MAX77620_SD_FPWM_SHIFT 2
160
#define MAX77620_SD_FSRADE_MASK 0x01
161
#define MAX77620_SD_FSRADE_SHIFT 0
162
#define MAX77620_SD_CFG1_FPWM_SD_MASK BIT(2)
163
#define MAX77620_SD_CFG1_FPWM_SD_SKIP 0
164
#define MAX77620_SD_CFG1_FPWM_SD_FPWM BIT(2)
165
#define MAX77620_SD_CFG1_MPOK_MASK BIT(1)
166
#define MAX77620_SD_CFG1_FSRADE_SD_MASK BIT(0)
167
#define MAX77620_SD_CFG1_FSRADE_SD_DISABLE 0
168
#define MAX77620_SD_CFG1_FSRADE_SD_ENABLE BIT(0)
169
170
#define MAX77620_REG_SD_CFG2 0x22
171
#define MAX77620_SD_CNF2_RSVD BIT(0)
172
#define MAX77620_SD_CNF2_ROVS_EN_SD1 BIT(1)
173
#define MAX77620_SD_CNF2_ROVS_EN_SD0 BIT(2)
174
175
#define MAX77620_REG_LDO0_CFG 0x23
176
#define MAX77620_REG_LDO0_CFG2 0x24
177
#define MAX77620_REG_LDO1_CFG 0x25
178
#define MAX77620_REG_LDO1_CFG2 0x26
179
#define MAX77620_REG_LDO2_CFG 0x27
180
#define MAX77620_REG_LDO2_CFG2 0x28
181
#define MAX77620_REG_LDO3_CFG 0x29
182
#define MAX77620_REG_LDO3_CFG2 0x2A
183
#define MAX77620_REG_LDO4_CFG 0x2B
184
#define MAX77620_REG_LDO4_CFG2 0x2C
185
#define MAX77620_REG_LDO5_CFG 0x2D
186
#define MAX77620_REG_LDO5_CFG2 0x2E
187
#define MAX77620_REG_LDO6_CFG 0x2F
188
#define MAX77620_REG_LDO6_CFG2 0x30
189
#define MAX77620_REG_LDO7_CFG 0x31
190
#define MAX77620_REG_LDO7_CFG2 0x32
191
#define MAX77620_REG_LDO8_CFG 0x33
192
#define MAX77620_REG_LDO8_CFG2 0x34
193
/*! LDO CFG */
194
#define MAX77620_LDO_POWER_MODE_SHIFT 6
195
#define MAX77620_LDO_POWER_MODE_MASK (3 << MAX77620_LDO_POWER_MODE_SHIFT)
196
#define MAX77620_POWER_MODE_NORMAL 3
197
#define MAX77620_POWER_MODE_LPM 2
198
#define MAX77620_POWER_MODE_GLPM 1
199
#define MAX77620_POWER_MODE_DISABLE 0
200
/*! LDO CFG2 */
201
#define MAX77620_LDO_CFG2_SS_MASK (1 << 0)
202
#define MAX77620_LDO_CFG2_SS_FAST (0 << 0)
203
#define MAX77620_LDO_CFG2_SS_SLOW (1 << 0)
204
#define MAX77620_LDO_CFG2_ADE_MASK (1 << 1)
205
#define MAX77620_LDO_CFG2_ADE_DISABLE (0 << 1)
206
#define MAX77620_LDO_CFG2_ADE_ENABLE (1 << 1)
207
#define MAX77620_LDO_CFG2_MPOK_MASK BIT(2)
208
#define MAX77620_LDO_CFG2_POK_MASK BIT(3)
209
#define MAX77620_LDO_CFG2_COMP_SHIFT 4
210
#define MAX77620_LDO_CFG2_COMP_MASK (3 << MAX77620_LDO_COMP_SHIFT)
211
#define MAX77620_LDO_CFG2_COMP_SLOW 3
212
#define MAX77620_LDO_CFG2_COMP_MID_SLOW 2
213
#define MAX77620_LDO_CFG2_COMP_MID_FAST 1
214
#define MAX77620_LDO_CFG2_COMP_FAST 0
215
#define MAX77620_LDO_CFG2_ALPM_EN_MASK BIT(6)
216
#define MAX77620_LDO_CFG2_OVCLMP_MASK BIT(7)
217
218
#define MAX77620_REG_LDO_CFG3 0x35
219
#define MAX77620_LDO_BIAS_EN BIT(0)
220
#define MAX77620_TRACK4_SHIFT 5
221
#define MAX77620_TRACK4_MASK (1 << MAX77620_TRACK4_SHIFT)
222
223
#define MAX77620_REG_GPIO0 0x36
224
#define MAX77620_REG_GPIO1 0x37
225
#define MAX77620_REG_GPIO2 0x38
226
#define MAX77620_REG_GPIO3 0x39
227
#define MAX77620_REG_GPIO4 0x3A
228
#define MAX77620_REG_GPIO5 0x3B
229
#define MAX77620_REG_GPIO6 0x3C
230
#define MAX77620_REG_GPIO7 0x3D
231
#define MAX77620_CNFG_GPIO_DRV_MASK (1 << 0)
232
#define MAX77620_CNFG_GPIO_DRV_PUSHPULL (1 << 0)
233
#define MAX77620_CNFG_GPIO_DRV_OPENDRAIN (0 << 0)
234
#define MAX77620_CNFG_GPIO_DIR_MASK (1 << 1)
235
#define MAX77620_CNFG_GPIO_DIR_INPUT (1 << 1)
236
#define MAX77620_CNFG_GPIO_DIR_OUTPUT (0 << 1)
237
#define MAX77620_CNFG_GPIO_INPUT_VAL_MASK (1 << 2)
238
#define MAX77620_CNFG_GPIO_OUTPUT_VAL_MASK (1 << 3)
239
#define MAX77620_CNFG_GPIO_OUTPUT_VAL_HIGH (1 << 3)
240
#define MAX77620_CNFG_GPIO_OUTPUT_VAL_LOW (0 << 3)
241
#define MAX77620_CNFG_GPIO_INT_MASK (0x3 << 4)
242
#define MAX77620_CNFG_GPIO_INT_FALLING (1 << 4)
243
#define MAX77620_CNFG_GPIO_INT_RISING (1 << 5)
244
#define MAX77620_CNFG_GPIO_DBNC_MASK (0x3 << 6)
245
#define MAX77620_CNFG_GPIO_DBNC_None (0x0 << 6)
246
#define MAX77620_CNFG_GPIO_DBNC_8ms (0x1 << 6)
247
#define MAX77620_CNFG_GPIO_DBNC_16ms (0x2 << 6)
248
#define MAX77620_CNFG_GPIO_DBNC_32ms (0x3 << 6)
249
#define MAX77620_GPIO_OUTPUT_DISABLE 0
250
#define MAX77620_GPIO_OUTPUT_ENABLE 1
251
252
#define MAX77620_REG_PUE_GPIO 0x3E // Gpio Pullup resistor enable.
253
#define MAX77620_REG_PDE_GPIO 0x3F // Gpio Pulldown resistor enable.
254
255
#define MAX77620_REG_AME_GPIO 0x40 // Gpio pinmuxing. Clear bits are Standard GPIO.
256
257
#define MAX77620_REG_ONOFFCNFG1 0x41
258
#define MAX20024_ONOFFCNFG1_CLRSE 0x18
259
#define MAX77620_ONOFFCNFG1_PWR_OFF BIT(1)
260
#define MAX77620_ONOFFCNFG1_SLPEN BIT(2)
261
#define MAX77620_ONOFFCNFG1_MRT_SHIFT 0x3
262
#define MAX77620_ONOFFCNFG1_MRT_MASK 0x38
263
#define MAX77620_ONOFFCNFG1_RSVD BIT(6)
264
#define MAX77620_ONOFFCNFG1_SFT_RST BIT(7)
265
266
#define MAX77620_REG_ONOFFCNFG2 0x42
267
#define MAX77620_ONOFFCNFG2_WK_EN0 BIT(0)
268
#define MAX77620_ONOFFCNFG2_WK_ALARM2 BIT(1)
269
#define MAX77620_ONOFFCNFG2_WK_ALARM1 BIT(2)
270
#define MAX77620_ONOFFCNFG2_WK_MBATT BIT(3) // MBATT event generates a wakeup signal. use it in android/l4t?
271
#define MAX77620_ONOFFCNFG2_WK_ACOK BIT(4)
272
#define MAX77620_ONOFFCNFG2_SLP_LPM_MSK BIT(5)
273
#define MAX77620_ONOFFCNFG2_WD_RST_WK BIT(6)
274
#define MAX77620_ONOFFCNFG2_SFT_RST_WK BIT(7)
275
276
/* FPS Registers */
277
#define MAX77620_REG_FPS_CFG0 0x43 // FPS0.
278
#define MAX77620_REG_FPS_CFG1 0x44 // FPS1.
279
#define MAX77620_REG_FPS_CFG2 0x45 // FPS2.
280
#define MAX77620_FPS_ENFPS_SW_MASK 0x01
281
#define MAX77620_FPS_ENFPS_SW 0x01
282
#define MAX77620_FPS_EN_SRC_SHIFT 1
283
#define MAX77620_FPS_EN_SRC_MASK 0x06
284
#define MAX77620_FPS_TIME_PERIOD_SHIFT 3
285
#define MAX77620_FPS_TIME_PERIOD_MASK 0x38
286
287
#define MAX77620_REG_FPS_LDO0 0x46
288
#define MAX77620_REG_FPS_LDO1 0x47
289
#define MAX77620_REG_FPS_LDO2 0x48
290
#define MAX77620_REG_FPS_LDO3 0x49
291
#define MAX77620_REG_FPS_LDO4 0x4A
292
#define MAX77620_REG_FPS_LDO5 0x4B
293
#define MAX77620_REG_FPS_LDO6 0x4C
294
#define MAX77620_REG_FPS_LDO7 0x4D
295
#define MAX77620_REG_FPS_LDO8 0x4E
296
#define MAX77620_REG_FPS_SD0 0x4F
297
#define MAX77620_REG_FPS_SD1 0x50
298
#define MAX77620_REG_FPS_SD2 0x51
299
#define MAX77620_REG_FPS_SD3 0x52
300
#define MAX77620_REG_FPS_SD4 0x53
301
#define MAX77620_REG_FPS_GPIO1 0x54
302
#define MAX77620_REG_FPS_GPIO2 0x55
303
#define MAX77620_REG_FPS_GPIO3 0x56
304
#define MAX77620_REG_FPS_RSO 0x57
305
#define MAX77620_FPS_PD_PERIOD_SHIFT 0
306
#define MAX77620_FPS_PD_PERIOD_MASK 0x07
307
#define MAX77620_FPS_PU_PERIOD_SHIFT 3
308
#define MAX77620_FPS_PU_PERIOD_MASK 0x38
309
#define MAX77620_FPS_SRC_SHIFT 6
310
#define MAX77620_FPS_SRC_MASK 0xC0
311
312
#define MAX77620_FPS_COUNT 3
313
#define MAX77620_FPS_PERIOD_MIN_US 40
314
#define MAX77620_FPS_PERIOD_MAX_US 2560
315
316
#define MAX77620_REG_CID0 0x58
317
#define MAX77620_REG_CID1 0x59
318
#define MAX77620_REG_CID2 0x5A
319
#define MAX77620_REG_CID3 0x5B
320
#define MAX77620_REG_CID4 0x5C // OTP version.
321
#define MAX77620_REG_CID5 0x5D // ES version.
322
#define MAX77620_CID_DIDO_MASK 0xF
323
#define MAX77620_CID_DIDO_SHIFT 0
324
#define MAX77620_CID_DIDM_MASK 0xF0
325
#define MAX77620_CID_DIDM_SHIFT 4
326
327
/* Device Identification Metal */
328
#define MAX77620_CID5_DIDM(n) (((n) >> 4) & 0xF)
329
/* Device Indentification OTP */
330
#define MAX77620_CID5_DIDO(n) ((n) & 0xF)
331
332
#define MAX77620_REG_DVSSD4 0x5E
333
#define MAX20024_REG_MAX_ADD 0x70
334
335
#define MAX77620_IRQ_LVL2_GPIO_EDGE0 BIT(0)
336
#define MAX77620_IRQ_LVL2_GPIO_EDGE1 BIT(1)
337
#define MAX77620_IRQ_LVL2_GPIO_EDGE2 BIT(2)
338
#define MAX77620_IRQ_LVL2_GPIO_EDGE3 BIT(3)
339
#define MAX77620_IRQ_LVL2_GPIO_EDGE4 BIT(4)
340
#define MAX77620_IRQ_LVL2_GPIO_EDGE5 BIT(5)
341
#define MAX77620_IRQ_LVL2_GPIO_EDGE6 BIT(6)
342
#define MAX77620_IRQ_LVL2_GPIO_EDGE7 BIT(7)
343
344
/* Interrupts */
345
enum {
346
MAX77620_IRQ_TOP_GLBL, /* Low-Battery */
347
MAX77620_IRQ_TOP_SD, /* SD power fail */
348
MAX77620_IRQ_TOP_LDO, /* LDO power fail */
349
MAX77620_IRQ_TOP_GPIO, /* TOP GPIO internal int to MAX77620 */
350
MAX77620_IRQ_TOP_RTC, /* RTC */
351
MAX77620_IRQ_TOP_32K, /* 32kHz oscillator */
352
MAX77620_IRQ_TOP_ONOFF, /* ON/OFF oscillator */
353
MAX77620_IRQ_LBT_MBATLOW, /* Thermal alarm status, > 120C */
354
MAX77620_IRQ_LBT_TJALRM1, /* Thermal alarm status, > 120C */
355
MAX77620_IRQ_LBT_TJALRM2, /* Thermal alarm status, > 140C */
356
};
357
358
/* GPIOs */
359
enum {
360
MAX77620_GPIO0,
361
MAX77620_GPIO1,
362
MAX77620_GPIO2,
363
MAX77620_GPIO3,
364
MAX77620_GPIO4,
365
MAX77620_GPIO5,
366
MAX77620_GPIO6,
367
MAX77620_GPIO7,
368
MAX77620_GPIO_NR,
369
};
370
371
/* FPS Source */
372
enum max77620_fps_src {
373
MAX77620_FPS_SRC_0,
374
MAX77620_FPS_SRC_1,
375
MAX77620_FPS_SRC_2,
376
MAX77620_FPS_SRC_NONE,
377
MAX77620_FPS_SRC_DEF,
378
};
379
380
#endif /* _MFD_MAX77620_H_ */
381
382