hc
2024-08-19 a51341d8c7882adfad4f167bc7c3ca616908b53d
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
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Defining registers address and its bit definitions of MAX77620 and MAX20024
 *
 * Copyright (C) 2016 NVIDIA CORPORATION. All rights reserved.
 */
 
#ifndef _MFD_MAX77620_H_
#define _MFD_MAX77620_H_
 
#include <linux/types.h>
 
/* GLOBAL, PMIC, GPIO, FPS, ONOFFC, CID Registers */
#define MAX77620_REG_CNFGGLBL1            0x00
#define MAX77620_REG_CNFGGLBL2            0x01
#define MAX77620_REG_CNFGGLBL3            0x02
#define MAX77620_REG_CNFG1_32K            0x03
#define MAX77620_REG_CNFGBBC            0x04
#define MAX77620_REG_IRQTOP            0x05
#define MAX77620_REG_INTLBT            0x06
#define MAX77620_REG_IRQSD            0x07
#define MAX77620_REG_IRQ_LVL2_L0_7        0x08
#define MAX77620_REG_IRQ_LVL2_L8        0x09
#define MAX77620_REG_IRQ_LVL2_GPIO        0x0A
#define MAX77620_REG_ONOFFIRQ            0x0B
#define MAX77620_REG_NVERC            0x0C
#define MAX77620_REG_IRQTOPM            0x0D
#define MAX77620_REG_INTENLBT            0x0E
#define MAX77620_REG_IRQMASKSD            0x0F
#define MAX77620_REG_IRQ_MSK_L0_7        0x10
#define MAX77620_REG_IRQ_MSK_L8            0x11
#define MAX77620_REG_ONOFFIRQM            0x12
#define MAX77620_REG_STATLBT            0x13
#define MAX77620_REG_STATSD            0x14
#define MAX77620_REG_ONOFFSTAT            0x15
 
/* SD and LDO Registers */
#define MAX77620_REG_SD0            0x16
#define MAX77620_REG_SD1            0x17
#define MAX77620_REG_SD2            0x18
#define MAX77620_REG_SD3            0x19
#define MAX77620_REG_SD4            0x1A
#define MAX77620_REG_DVSSD0            0x1B
#define MAX77620_REG_DVSSD1            0x1C
#define MAX77620_REG_SD0_CFG            0x1D
#define MAX77620_REG_SD1_CFG            0x1E
#define MAX77620_REG_SD2_CFG            0x1F
#define MAX77620_REG_SD3_CFG            0x20
#define MAX77620_REG_SD4_CFG            0x21
#define MAX77620_REG_SD_CFG2            0x22
#define MAX77620_REG_LDO0_CFG            0x23
#define MAX77620_REG_LDO0_CFG2            0x24
#define MAX77620_REG_LDO1_CFG            0x25
#define MAX77620_REG_LDO1_CFG2            0x26
#define MAX77620_REG_LDO2_CFG            0x27
#define MAX77620_REG_LDO2_CFG2            0x28
#define MAX77620_REG_LDO3_CFG            0x29
#define MAX77620_REG_LDO3_CFG2            0x2A
#define MAX77620_REG_LDO4_CFG            0x2B
#define MAX77620_REG_LDO4_CFG2            0x2C
#define MAX77620_REG_LDO5_CFG            0x2D
#define MAX77620_REG_LDO5_CFG2            0x2E
#define MAX77620_REG_LDO6_CFG            0x2F
#define MAX77620_REG_LDO6_CFG2            0x30
#define MAX77620_REG_LDO7_CFG            0x31
#define MAX77620_REG_LDO7_CFG2            0x32
#define MAX77620_REG_LDO8_CFG            0x33
#define MAX77620_REG_LDO8_CFG2            0x34
#define MAX77620_REG_LDO_CFG3            0x35
 
#define MAX77620_LDO_SLEW_RATE_MASK        0x1
 
/* LDO Configuration 3 */
#define MAX77620_TRACK4_MASK            BIT(5)
#define MAX77620_TRACK4_SHIFT            5
 
/* Voltage */
#define MAX77620_SDX_VOLT_MASK            0xFF
#define MAX77620_SD0_VOLT_MASK            0x3F
#define MAX77620_SD1_VOLT_MASK            0x7F
#define MAX77620_LDO_VOLT_MASK            0x3F
 
#define MAX77620_REG_GPIO0            0x36
#define MAX77620_REG_GPIO1            0x37
#define MAX77620_REG_GPIO2            0x38
#define MAX77620_REG_GPIO3            0x39
#define MAX77620_REG_GPIO4            0x3A
#define MAX77620_REG_GPIO5            0x3B
#define MAX77620_REG_GPIO6            0x3C
#define MAX77620_REG_GPIO7            0x3D
#define MAX77620_REG_PUE_GPIO            0x3E
#define MAX77620_REG_PDE_GPIO            0x3F
#define MAX77620_REG_AME_GPIO            0x40
#define MAX77620_REG_ONOFFCNFG1            0x41
#define MAX77620_REG_ONOFFCNFG2            0x42
 
/* FPS Registers */
#define MAX77620_REG_FPS_CFG0            0x43
#define MAX77620_REG_FPS_CFG1            0x44
#define MAX77620_REG_FPS_CFG2            0x45
#define MAX77620_REG_FPS_LDO0            0x46
#define MAX77620_REG_FPS_LDO1            0x47
#define MAX77620_REG_FPS_LDO2            0x48
#define MAX77620_REG_FPS_LDO3            0x49
#define MAX77620_REG_FPS_LDO4            0x4A
#define MAX77620_REG_FPS_LDO5            0x4B
#define MAX77620_REG_FPS_LDO6            0x4C
#define MAX77620_REG_FPS_LDO7            0x4D
#define MAX77620_REG_FPS_LDO8            0x4E
#define MAX77620_REG_FPS_SD0            0x4F
#define MAX77620_REG_FPS_SD1            0x50
#define MAX77620_REG_FPS_SD2            0x51
#define MAX77620_REG_FPS_SD3            0x52
#define MAX77620_REG_FPS_SD4            0x53
#define MAX77620_REG_FPS_NONE            0
 
#define MAX77620_FPS_SRC_MASK            0xC0
#define MAX77620_FPS_SRC_SHIFT            6
#define MAX77620_FPS_PU_PERIOD_MASK        0x38
#define MAX77620_FPS_PU_PERIOD_SHIFT        3
#define MAX77620_FPS_PD_PERIOD_MASK        0x07
#define MAX77620_FPS_PD_PERIOD_SHIFT        0
#define MAX77620_FPS_TIME_PERIOD_MASK        0x38
#define MAX77620_FPS_TIME_PERIOD_SHIFT        3
#define MAX77620_FPS_EN_SRC_MASK        0x06
#define MAX77620_FPS_EN_SRC_SHIFT        1
#define MAX77620_FPS_ENFPS_SW_MASK        0x01
#define MAX77620_FPS_ENFPS_SW            0x01
 
/* Minimum and maximum FPS period time (in microseconds) are
 * different for MAX77620 and Max20024.
 */
#define MAX77620_FPS_PERIOD_MIN_US        40
#define MAX20024_FPS_PERIOD_MIN_US        20
 
#define MAX20024_FPS_PERIOD_MAX_US        2560
#define MAX77620_FPS_PERIOD_MAX_US        5120
 
#define MAX77620_REG_FPS_GPIO1            0x54
#define MAX77620_REG_FPS_GPIO2            0x55
#define MAX77620_REG_FPS_GPIO3            0x56
#define MAX77620_REG_FPS_RSO            0x57
#define MAX77620_REG_CID0            0x58
#define MAX77620_REG_CID1            0x59
#define MAX77620_REG_CID2            0x5A
#define MAX77620_REG_CID3            0x5B
#define MAX77620_REG_CID4            0x5C
#define MAX77620_REG_CID5            0x5D
 
#define MAX77620_REG_DVSSD4            0x5E
#define MAX20024_REG_MAX_ADD            0x70
 
#define MAX77620_CID_DIDM_MASK            0xF0
#define MAX77620_CID_DIDM_SHIFT            4
 
/* CNCG2SD */
#define MAX77620_SD_CNF2_ROVS_EN_SD1        BIT(1)
#define MAX77620_SD_CNF2_ROVS_EN_SD0        BIT(2)
 
/* Device Identification Metal */
#define MAX77620_CID5_DIDM(n)            (((n) >> 4) & 0xF)
/* Device Indentification OTP */
#define MAX77620_CID5_DIDO(n)            ((n) & 0xF)
 
/* SD CNFG1 */
#define MAX77620_SD_SR_MASK            0xC0
#define MAX77620_SD_SR_SHIFT            6
#define MAX77620_SD_POWER_MODE_MASK        0x30
#define MAX77620_SD_POWER_MODE_SHIFT        4
#define MAX77620_SD_CFG1_ADE_MASK        BIT(3)
#define MAX77620_SD_CFG1_ADE_DISABLE        0
#define MAX77620_SD_CFG1_ADE_ENABLE        BIT(3)
#define MAX77620_SD_FPWM_MASK            0x04
#define MAX77620_SD_FPWM_SHIFT            2
#define MAX77620_SD_FSRADE_MASK            0x01
#define MAX77620_SD_FSRADE_SHIFT        0
#define MAX77620_SD_CFG1_FPWM_SD_MASK        BIT(2)
#define MAX77620_SD_CFG1_FPWM_SD_SKIP        0
#define MAX77620_SD_CFG1_FPWM_SD_FPWM        BIT(2)
#define MAX20024_SD_CFG1_MPOK_MASK        BIT(1)
#define MAX77620_SD_CFG1_FSRADE_SD_MASK        BIT(0)
#define MAX77620_SD_CFG1_FSRADE_SD_DISABLE    0
#define MAX77620_SD_CFG1_FSRADE_SD_ENABLE    BIT(0)
 
/* LDO_CNFG2 */
#define MAX77620_LDO_POWER_MODE_MASK        0xC0
#define MAX77620_LDO_POWER_MODE_SHIFT        6
#define MAX20024_LDO_CFG2_MPOK_MASK        BIT(2)
#define MAX77620_LDO_CFG2_ADE_MASK        BIT(1)
#define MAX77620_LDO_CFG2_ADE_DISABLE        0
#define MAX77620_LDO_CFG2_ADE_ENABLE        BIT(1)
#define MAX77620_LDO_CFG2_SS_MASK        BIT(0)
#define MAX77620_LDO_CFG2_SS_FAST        BIT(0)
#define MAX77620_LDO_CFG2_SS_SLOW        0
 
#define MAX77620_IRQ_TOP_GLBL_MASK        BIT(7)
#define MAX77620_IRQ_TOP_SD_MASK        BIT(6)
#define MAX77620_IRQ_TOP_LDO_MASK        BIT(5)
#define MAX77620_IRQ_TOP_GPIO_MASK        BIT(4)
#define MAX77620_IRQ_TOP_RTC_MASK        BIT(3)
#define MAX77620_IRQ_TOP_32K_MASK        BIT(2)
#define MAX77620_IRQ_TOP_ONOFF_MASK        BIT(1)
 
#define MAX77620_IRQ_LBM_MASK            BIT(3)
#define MAX77620_IRQ_TJALRM1_MASK        BIT(2)
#define MAX77620_IRQ_TJALRM2_MASK        BIT(1)
 
#define MAX77620_PWR_I2C_ADDR            0x3c
#define MAX77620_RTC_I2C_ADDR            0x68
 
#define MAX77620_CNFG_GPIO_DRV_MASK        BIT(0)
#define MAX77620_CNFG_GPIO_DRV_PUSHPULL        BIT(0)
#define MAX77620_CNFG_GPIO_DRV_OPENDRAIN    0
#define MAX77620_CNFG_GPIO_DIR_MASK        BIT(1)
#define MAX77620_CNFG_GPIO_DIR_INPUT        BIT(1)
#define MAX77620_CNFG_GPIO_DIR_OUTPUT        0
#define MAX77620_CNFG_GPIO_INPUT_VAL_MASK    BIT(2)
#define MAX77620_CNFG_GPIO_OUTPUT_VAL_MASK    BIT(3)
#define MAX77620_CNFG_GPIO_OUTPUT_VAL_HIGH    BIT(3)
#define MAX77620_CNFG_GPIO_OUTPUT_VAL_LOW    0
#define MAX77620_CNFG_GPIO_INT_MASK        (0x3 << 4)
#define MAX77620_CNFG_GPIO_INT_FALLING        BIT(4)
#define MAX77620_CNFG_GPIO_INT_RISING        BIT(5)
#define MAX77620_CNFG_GPIO_DBNC_MASK        (0x3 << 6)
#define MAX77620_CNFG_GPIO_DBNC_None        (0x0 << 6)
#define MAX77620_CNFG_GPIO_DBNC_8ms        (0x1 << 6)
#define MAX77620_CNFG_GPIO_DBNC_16ms        (0x2 << 6)
#define MAX77620_CNFG_GPIO_DBNC_32ms        (0x3 << 6)
 
#define MAX77620_IRQ_LVL2_GPIO_EDGE0        BIT(0)
#define MAX77620_IRQ_LVL2_GPIO_EDGE1        BIT(1)
#define MAX77620_IRQ_LVL2_GPIO_EDGE2        BIT(2)
#define MAX77620_IRQ_LVL2_GPIO_EDGE3        BIT(3)
#define MAX77620_IRQ_LVL2_GPIO_EDGE4        BIT(4)
#define MAX77620_IRQ_LVL2_GPIO_EDGE5        BIT(5)
#define MAX77620_IRQ_LVL2_GPIO_EDGE6        BIT(6)
#define MAX77620_IRQ_LVL2_GPIO_EDGE7        BIT(7)
 
#define MAX77620_CNFG1_32K_OUT0_EN        BIT(2)
 
#define MAX77620_ONOFFCNFG1_SFT_RST        BIT(7)
#define MAX77620_ONOFFCNFG1_MRT_MASK        0x38
#define MAX77620_ONOFFCNFG1_MRT_SHIFT        0x3
#define MAX77620_ONOFFCNFG1_SLPEN        BIT(2)
#define MAX77620_ONOFFCNFG1_PWR_OFF        BIT(1)
#define MAX20024_ONOFFCNFG1_CLRSE        0x18
 
#define MAX77620_ONOFFCNFG2_SFT_RST_WK        BIT(7)
#define MAX77620_ONOFFCNFG2_WD_RST_WK        BIT(6)
#define MAX77620_ONOFFCNFG2_SLP_LPM_MSK        BIT(5)
#define MAX77620_ONOFFCNFG2_WK_ALARM1        BIT(2)
#define MAX77620_ONOFFCNFG2_WK_EN0        BIT(0)
 
#define MAX77620_GLBLM_MASK            BIT(0)
 
#define MAX77620_WDTC_MASK            0x3
#define MAX77620_WDTOFFC            BIT(4)
#define MAX77620_WDTSLPC            BIT(3)
#define MAX77620_WDTEN                BIT(2)
 
#define MAX77620_TWD_MASK            0x3
#define MAX77620_TWD_2s                0x0
#define MAX77620_TWD_16s            0x1
#define MAX77620_TWD_64s            0x2
#define MAX77620_TWD_128s            0x3
 
#define MAX77620_CNFGGLBL1_LBDAC_EN        BIT(7)
#define MAX77620_CNFGGLBL1_MPPLD        BIT(6)
#define MAX77620_CNFGGLBL1_LBHYST        (BIT(5) | BIT(4))
#define MAX77620_CNFGGLBL1_LBDAC        0x0E
#define MAX77620_CNFGGLBL1_LBRSTEN        BIT(0)
 
/* CNFG BBC registers */
#define MAX77620_CNFGBBC_ENABLE            BIT(0)
#define MAX77620_CNFGBBC_CURRENT_MASK        0x06
#define MAX77620_CNFGBBC_CURRENT_SHIFT        1
#define MAX77620_CNFGBBC_VOLTAGE_MASK        0x18
#define MAX77620_CNFGBBC_VOLTAGE_SHIFT        3
#define MAX77620_CNFGBBC_LOW_CURRENT_DISABLE    BIT(5)
#define MAX77620_CNFGBBC_RESISTOR_MASK        0xC0
#define MAX77620_CNFGBBC_RESISTOR_SHIFT        6
 
#define MAX77620_FPS_COUNT            3
 
/* Interrupts */
enum {
   MAX77620_IRQ_TOP_GLBL,        /* Low-Battery */
   MAX77620_IRQ_TOP_SD,        /* SD power fail */
   MAX77620_IRQ_TOP_LDO,        /* LDO power fail */
   MAX77620_IRQ_TOP_GPIO,        /* TOP GPIO internal int to MAX77620 */
   MAX77620_IRQ_TOP_RTC,        /* RTC */
   MAX77620_IRQ_TOP_32K,        /* 32kHz oscillator */
   MAX77620_IRQ_TOP_ONOFF,        /* ON/OFF oscillator */
   MAX77620_IRQ_LBT_MBATLOW,    /* Thermal alarm status, > 120C */
   MAX77620_IRQ_LBT_TJALRM1,    /* Thermal alarm status, > 120C */
   MAX77620_IRQ_LBT_TJALRM2,    /* Thermal alarm status, > 140C */
};
 
/* GPIOs */
enum {
   MAX77620_GPIO0,
   MAX77620_GPIO1,
   MAX77620_GPIO2,
   MAX77620_GPIO3,
   MAX77620_GPIO4,
   MAX77620_GPIO5,
   MAX77620_GPIO6,
   MAX77620_GPIO7,
   MAX77620_GPIO_NR,
};
 
/* FPS Source */
enum max77620_fps_src {
   MAX77620_FPS_SRC_0,
   MAX77620_FPS_SRC_1,
   MAX77620_FPS_SRC_2,
   MAX77620_FPS_SRC_NONE,
   MAX77620_FPS_SRC_DEF,
};
 
enum max77620_chip_id {
   MAX77620,
   MAX20024,
   MAX77663,
};
 
struct max77620_chip {
   struct device *dev;
   struct regmap *rmap;
 
   int chip_irq;
 
   /* chip id */
   enum max77620_chip_id chip_id;
 
   bool sleep_enable;
   bool enable_global_lpm;
   int shutdown_fps_period[MAX77620_FPS_COUNT];
   int suspend_fps_period[MAX77620_FPS_COUNT];
 
   struct regmap_irq_chip_data *top_irq_data;
   struct regmap_irq_chip_data *gpio_irq_data;
};
 
#endif /* _MFD_MAX77620_H_ */