hc
2024-08-09 d3d58fa5ee2428cd2dde78fd8eeeeabe916b3835
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
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Functions to access MAX8907 power management chip.
 *
 * Copyright (C) 2010 Gyungoh Yoo <jack.yoo@maxim-ic.com>
 * Copyright (C) 2012, NVIDIA CORPORATION. All rights reserved.
 */
 
#ifndef __LINUX_MFD_MAX8907_H
#define __LINUX_MFD_MAX8907_H
 
#include <linux/mutex.h>
#include <linux/pm.h>
 
#define MAX8907_GEN_I2C_ADDR        (0x78 >> 1)
#define MAX8907_ADC_I2C_ADDR        (0x8e >> 1)
#define MAX8907_RTC_I2C_ADDR        (0xd0 >> 1)
 
/* MAX8907 register map */
#define MAX8907_REG_SYSENSEL        0x00
#define MAX8907_REG_ON_OFF_IRQ1        0x01
#define MAX8907_REG_ON_OFF_IRQ1_MASK    0x02
#define MAX8907_REG_ON_OFF_STAT        0x03
#define MAX8907_REG_SDCTL1        0x04
#define MAX8907_REG_SDSEQCNT1        0x05
#define MAX8907_REG_SDV1        0x06
#define MAX8907_REG_SDCTL2        0x07
#define MAX8907_REG_SDSEQCNT2        0x08
#define MAX8907_REG_SDV2        0x09
#define MAX8907_REG_SDCTL3        0x0A
#define MAX8907_REG_SDSEQCNT3        0x0B
#define MAX8907_REG_SDV3        0x0C
#define MAX8907_REG_ON_OFF_IRQ2        0x0D
#define MAX8907_REG_ON_OFF_IRQ2_MASK    0x0E
#define MAX8907_REG_RESET_CNFG        0x0F
#define MAX8907_REG_LDOCTL16        0x10
#define MAX8907_REG_LDOSEQCNT16        0x11
#define MAX8907_REG_LDO16VOUT        0x12
#define MAX8907_REG_SDBYSEQCNT        0x13
#define MAX8907_REG_LDOCTL17        0x14
#define MAX8907_REG_LDOSEQCNT17        0x15
#define MAX8907_REG_LDO17VOUT        0x16
#define MAX8907_REG_LDOCTL1        0x18
#define MAX8907_REG_LDOSEQCNT1        0x19
#define MAX8907_REG_LDO1VOUT        0x1A
#define MAX8907_REG_LDOCTL2        0x1C
#define MAX8907_REG_LDOSEQCNT2        0x1D
#define MAX8907_REG_LDO2VOUT        0x1E
#define MAX8907_REG_LDOCTL3        0x20
#define MAX8907_REG_LDOSEQCNT3        0x21
#define MAX8907_REG_LDO3VOUT        0x22
#define MAX8907_REG_LDOCTL4        0x24
#define MAX8907_REG_LDOSEQCNT4        0x25
#define MAX8907_REG_LDO4VOUT        0x26
#define MAX8907_REG_LDOCTL5        0x28
#define MAX8907_REG_LDOSEQCNT5        0x29
#define MAX8907_REG_LDO5VOUT        0x2A
#define MAX8907_REG_LDOCTL6        0x2C
#define MAX8907_REG_LDOSEQCNT6        0x2D
#define MAX8907_REG_LDO6VOUT        0x2E
#define MAX8907_REG_LDOCTL7        0x30
#define MAX8907_REG_LDOSEQCNT7        0x31
#define MAX8907_REG_LDO7VOUT        0x32
#define MAX8907_REG_LDOCTL8        0x34
#define MAX8907_REG_LDOSEQCNT8        0x35
#define MAX8907_REG_LDO8VOUT        0x36
#define MAX8907_REG_LDOCTL9        0x38
#define MAX8907_REG_LDOSEQCNT9        0x39
#define MAX8907_REG_LDO9VOUT        0x3A
#define MAX8907_REG_LDOCTL10        0x3C
#define MAX8907_REG_LDOSEQCNT10        0x3D
#define MAX8907_REG_LDO10VOUT        0x3E
#define MAX8907_REG_LDOCTL11        0x40
#define MAX8907_REG_LDOSEQCNT11        0x41
#define MAX8907_REG_LDO11VOUT        0x42
#define MAX8907_REG_LDOCTL12        0x44
#define MAX8907_REG_LDOSEQCNT12        0x45
#define MAX8907_REG_LDO12VOUT        0x46
#define MAX8907_REG_LDOCTL13        0x48
#define MAX8907_REG_LDOSEQCNT13        0x49
#define MAX8907_REG_LDO13VOUT        0x4A
#define MAX8907_REG_LDOCTL14        0x4C
#define MAX8907_REG_LDOSEQCNT14        0x4D
#define MAX8907_REG_LDO14VOUT        0x4E
#define MAX8907_REG_LDOCTL15        0x50
#define MAX8907_REG_LDOSEQCNT15        0x51
#define MAX8907_REG_LDO15VOUT        0x52
#define MAX8907_REG_OUT5VEN        0x54
#define MAX8907_REG_OUT5VSEQ        0x55
#define MAX8907_REG_OUT33VEN        0x58
#define MAX8907_REG_OUT33VSEQ        0x59
#define MAX8907_REG_LDOCTL19        0x5C
#define MAX8907_REG_LDOSEQCNT19        0x5D
#define MAX8907_REG_LDO19VOUT        0x5E
#define MAX8907_REG_LBCNFG        0x60
#define MAX8907_REG_SEQ1CNFG        0x64
#define MAX8907_REG_SEQ2CNFG        0x65
#define MAX8907_REG_SEQ3CNFG        0x66
#define MAX8907_REG_SEQ4CNFG        0x67
#define MAX8907_REG_SEQ5CNFG        0x68
#define MAX8907_REG_SEQ6CNFG        0x69
#define MAX8907_REG_SEQ7CNFG        0x6A
#define MAX8907_REG_LDOCTL18        0x72
#define MAX8907_REG_LDOSEQCNT18        0x73
#define MAX8907_REG_LDO18VOUT        0x74
#define MAX8907_REG_BBAT_CNFG        0x78
#define MAX8907_REG_CHG_CNTL1        0x7C
#define MAX8907_REG_CHG_CNTL2        0x7D
#define MAX8907_REG_CHG_IRQ1        0x7E
#define MAX8907_REG_CHG_IRQ2        0x7F
#define MAX8907_REG_CHG_IRQ1_MASK    0x80
#define MAX8907_REG_CHG_IRQ2_MASK    0x81
#define MAX8907_REG_CHG_STAT        0x82
#define MAX8907_REG_WLED_MODE_CNTL    0x84
#define MAX8907_REG_ILED_CNTL        0x84
#define MAX8907_REG_II1RR        0x8E
#define MAX8907_REG_II2RR        0x8F
#define MAX8907_REG_LDOCTL20        0x9C
#define MAX8907_REG_LDOSEQCNT20        0x9D
#define MAX8907_REG_LDO20VOUT        0x9E
 
/* RTC register map */
#define MAX8907_REG_RTC_SEC        0x00
#define MAX8907_REG_RTC_MIN        0x01
#define MAX8907_REG_RTC_HOURS        0x02
#define MAX8907_REG_RTC_WEEKDAY        0x03
#define MAX8907_REG_RTC_DATE        0x04
#define MAX8907_REG_RTC_MONTH        0x05
#define MAX8907_REG_RTC_YEAR1        0x06
#define MAX8907_REG_RTC_YEAR2        0x07
#define MAX8907_REG_ALARM0_SEC        0x08
#define MAX8907_REG_ALARM0_MIN        0x09
#define MAX8907_REG_ALARM0_HOURS    0x0A
#define MAX8907_REG_ALARM0_WEEKDAY    0x0B
#define MAX8907_REG_ALARM0_DATE        0x0C
#define MAX8907_REG_ALARM0_MONTH    0x0D
#define MAX8907_REG_ALARM0_YEAR1    0x0E
#define MAX8907_REG_ALARM0_YEAR2    0x0F
#define MAX8907_REG_ALARM1_SEC        0x10
#define MAX8907_REG_ALARM1_MIN        0x11
#define MAX8907_REG_ALARM1_HOURS    0x12
#define MAX8907_REG_ALARM1_WEEKDAY    0x13
#define MAX8907_REG_ALARM1_DATE        0x14
#define MAX8907_REG_ALARM1_MONTH    0x15
#define MAX8907_REG_ALARM1_YEAR1    0x16
#define MAX8907_REG_ALARM1_YEAR2    0x17
#define MAX8907_REG_ALARM0_CNTL        0x18
#define MAX8907_REG_ALARM1_CNTL        0x19
#define MAX8907_REG_RTC_STATUS        0x1A
#define MAX8907_REG_RTC_CNTL        0x1B
#define MAX8907_REG_RTC_IRQ        0x1C
#define MAX8907_REG_RTC_IRQ_MASK    0x1D
#define MAX8907_REG_MPL_CNTL        0x1E
 
/* ADC and Touch Screen Controller register map */
#define MAX8907_CTL            0
#define MAX8907_SEQCNT            1
#define MAX8907_VOUT            2
 
/* mask bit fields */
#define MAX8907_MASK_LDO_SEQ        0x1C
#define MAX8907_MASK_LDO_EN        0x01
#define MAX8907_MASK_VBBATTCV        0x03
#define MAX8907_MASK_OUT5V_VINEN    0x10
#define MAX8907_MASK_OUT5V_ENSRC    0x0E
#define MAX8907_MASK_OUT5V_EN        0x01
#define MAX8907_MASK_POWER_OFF        0x40
 
/* Regulator IDs */
#define MAX8907_MBATT    0
#define MAX8907_SD1    1
#define MAX8907_SD2    2
#define MAX8907_SD3    3
#define MAX8907_LDO1    4
#define MAX8907_LDO2    5
#define MAX8907_LDO3    6
#define MAX8907_LDO4    7
#define MAX8907_LDO5    8
#define MAX8907_LDO6    9
#define MAX8907_LDO7    10
#define MAX8907_LDO8    11
#define MAX8907_LDO9    12
#define MAX8907_LDO10    13
#define MAX8907_LDO11    14
#define MAX8907_LDO12    15
#define MAX8907_LDO13    16
#define MAX8907_LDO14    17
#define MAX8907_LDO15    18
#define MAX8907_LDO16    19
#define MAX8907_LDO17    20
#define MAX8907_LDO18    21
#define MAX8907_LDO19    22
#define MAX8907_LDO20    23
#define MAX8907_OUT5V    24
#define MAX8907_OUT33V    25
#define MAX8907_BBAT    26
#define MAX8907_SDBY    27
#define MAX8907_VRTC    28
#define MAX8907_NUM_REGULATORS (MAX8907_VRTC + 1)
 
/* IRQ definitions */
enum {
   MAX8907_IRQ_VCHG_DC_OVP = 0,
   MAX8907_IRQ_VCHG_DC_F,
   MAX8907_IRQ_VCHG_DC_R,
   MAX8907_IRQ_VCHG_THM_OK_R,
   MAX8907_IRQ_VCHG_THM_OK_F,
   MAX8907_IRQ_VCHG_MBATTLOW_F,
   MAX8907_IRQ_VCHG_MBATTLOW_R,
   MAX8907_IRQ_VCHG_RST,
   MAX8907_IRQ_VCHG_DONE,
   MAX8907_IRQ_VCHG_TOPOFF,
   MAX8907_IRQ_VCHG_TMR_FAULT,
 
   MAX8907_IRQ_GPM_RSTIN = 0,
   MAX8907_IRQ_GPM_MPL,
   MAX8907_IRQ_GPM_SW_3SEC,
   MAX8907_IRQ_GPM_EXTON_F,
   MAX8907_IRQ_GPM_EXTON_R,
   MAX8907_IRQ_GPM_SW_1SEC,
   MAX8907_IRQ_GPM_SW_F,
   MAX8907_IRQ_GPM_SW_R,
   MAX8907_IRQ_GPM_SYSCKEN_F,
   MAX8907_IRQ_GPM_SYSCKEN_R,
 
   MAX8907_IRQ_RTC_ALARM1 = 0,
   MAX8907_IRQ_RTC_ALARM0,
};
 
struct max8907_platform_data {
   struct regulator_init_data *init_data[MAX8907_NUM_REGULATORS];
   bool pm_off;
};
 
struct regmap_irq_chips_data;
 
struct max8907 {
   struct device            *dev;
   struct mutex            irq_lock;
   struct i2c_client        *i2c_gen;
   struct i2c_client        *i2c_rtc;
   struct regmap            *regmap_gen;
   struct regmap            *regmap_rtc;
   struct regmap_irq_chip_data    *irqc_chg;
   struct regmap_irq_chip_data    *irqc_on_off;
   struct regmap_irq_chip_data    *irqc_rtc;
};
 
#endif