1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* |
3 | * Maxim8925 Interface |
4 | * |
5 | * Copyright (C) 2009 Marvell International Ltd. |
6 | * Haojian Zhuang <haojian.zhuang@marvell.com> |
7 | */ |
8 | |
9 | #ifndef __LINUX_MFD_MAX8925_H |
10 | #define __LINUX_MFD_MAX8925_H |
11 | |
12 | #include <linux/mutex.h> |
13 | #include <linux/interrupt.h> |
14 | |
15 | /* Unified sub device IDs for MAX8925 */ |
16 | enum { |
17 | MAX8925_ID_SD1, |
18 | MAX8925_ID_SD2, |
19 | MAX8925_ID_SD3, |
20 | MAX8925_ID_LDO1, |
21 | MAX8925_ID_LDO2, |
22 | MAX8925_ID_LDO3, |
23 | MAX8925_ID_LDO4, |
24 | MAX8925_ID_LDO5, |
25 | MAX8925_ID_LDO6, |
26 | MAX8925_ID_LDO7, |
27 | MAX8925_ID_LDO8, |
28 | MAX8925_ID_LDO9, |
29 | MAX8925_ID_LDO10, |
30 | MAX8925_ID_LDO11, |
31 | MAX8925_ID_LDO12, |
32 | MAX8925_ID_LDO13, |
33 | MAX8925_ID_LDO14, |
34 | MAX8925_ID_LDO15, |
35 | MAX8925_ID_LDO16, |
36 | MAX8925_ID_LDO17, |
37 | MAX8925_ID_LDO18, |
38 | MAX8925_ID_LDO19, |
39 | MAX8925_ID_LDO20, |
40 | MAX8925_ID_MAX, |
41 | }; |
42 | |
43 | enum { |
44 | /* |
45 | * Charging current threshold trigger going from fast charge |
46 | * to TOPOFF charge. From 5% to 20% of fasting charging current. |
47 | */ |
48 | MAX8925_TOPOFF_THR_5PER, |
49 | MAX8925_TOPOFF_THR_10PER, |
50 | MAX8925_TOPOFF_THR_15PER, |
51 | MAX8925_TOPOFF_THR_20PER, |
52 | }; |
53 | |
54 | enum { |
55 | /* Fast charging current */ |
56 | MAX8925_FCHG_85MA, |
57 | MAX8925_FCHG_300MA, |
58 | MAX8925_FCHG_460MA, |
59 | MAX8925_FCHG_600MA, |
60 | MAX8925_FCHG_700MA, |
61 | MAX8925_FCHG_800MA, |
62 | MAX8925_FCHG_900MA, |
63 | MAX8925_FCHG_1000MA, |
64 | }; |
65 | |
66 | /* Charger registers */ |
67 | #define MAX8925_CHG_IRQ1 (0x7e) |
68 | #define MAX8925_CHG_IRQ2 (0x7f) |
69 | #define MAX8925_CHG_IRQ1_MASK (0x80) |
70 | #define MAX8925_CHG_IRQ2_MASK (0x81) |
71 | #define MAX8925_CHG_STATUS (0x82) |
72 | |
73 | /* GPM registers */ |
74 | #define MAX8925_SYSENSEL (0x00) |
75 | #define MAX8925_ON_OFF_IRQ1 (0x01) |
76 | #define MAX8925_ON_OFF_IRQ1_MASK (0x02) |
77 | #define MAX8925_ON_OFF_STATUS (0x03) |
78 | #define MAX8925_ON_OFF_IRQ2 (0x0d) |
79 | #define MAX8925_ON_OFF_IRQ2_MASK (0x0e) |
80 | #define MAX8925_RESET_CNFG (0x0f) |
81 | |
82 | /* Touch registers */ |
83 | #define MAX8925_TSC_IRQ (0x00) |
84 | #define MAX8925_TSC_IRQ_MASK (0x01) |
85 | #define MAX8925_TSC_CNFG1 (0x02) |
86 | #define MAX8925_ADC_SCHED (0x10) |
87 | #define MAX8925_ADC_RES_END (0x6f) |
88 | |
89 | #define MAX8925_NREF_OK (1 << 4) |
90 | |
91 | /* RTC registers */ |
92 | #define MAX8925_ALARM0_CNTL (0x18) |
93 | #define MAX8925_ALARM1_CNTL (0x19) |
94 | #define MAX8925_RTC_IRQ (0x1c) |
95 | #define MAX8925_RTC_IRQ_MASK (0x1d) |
96 | #define MAX8925_MPL_CNTL (0x1e) |
97 | |
98 | /* WLED registers */ |
99 | #define MAX8925_WLED_MODE_CNTL (0x84) |
100 | #define MAX8925_WLED_CNTL (0x85) |
101 | |
102 | /* MAX8925 Registers */ |
103 | #define MAX8925_SDCTL1 (0x04) |
104 | #define MAX8925_SDCTL2 (0x07) |
105 | #define MAX8925_SDCTL3 (0x0A) |
106 | #define MAX8925_SDV1 (0x06) |
107 | #define MAX8925_SDV2 (0x09) |
108 | #define MAX8925_SDV3 (0x0C) |
109 | #define MAX8925_LDOCTL1 (0x18) |
110 | #define MAX8925_LDOCTL2 (0x1C) |
111 | #define MAX8925_LDOCTL3 (0x20) |
112 | #define MAX8925_LDOCTL4 (0x24) |
113 | #define MAX8925_LDOCTL5 (0x28) |
114 | #define MAX8925_LDOCTL6 (0x2C) |
115 | #define MAX8925_LDOCTL7 (0x30) |
116 | #define MAX8925_LDOCTL8 (0x34) |
117 | #define MAX8925_LDOCTL9 (0x38) |
118 | #define MAX8925_LDOCTL10 (0x3C) |
119 | #define MAX8925_LDOCTL11 (0x40) |
120 | #define MAX8925_LDOCTL12 (0x44) |
121 | #define MAX8925_LDOCTL13 (0x48) |
122 | #define MAX8925_LDOCTL14 (0x4C) |
123 | #define MAX8925_LDOCTL15 (0x50) |
124 | #define MAX8925_LDOCTL16 (0x10) |
125 | #define MAX8925_LDOCTL17 (0x14) |
126 | #define MAX8925_LDOCTL18 (0x72) |
127 | #define MAX8925_LDOCTL19 (0x5C) |
128 | #define MAX8925_LDOCTL20 (0x9C) |
129 | #define MAX8925_LDOVOUT1 (0x1A) |
130 | #define MAX8925_LDOVOUT2 (0x1E) |
131 | #define MAX8925_LDOVOUT3 (0x22) |
132 | #define MAX8925_LDOVOUT4 (0x26) |
133 | #define MAX8925_LDOVOUT5 (0x2A) |
134 | #define MAX8925_LDOVOUT6 (0x2E) |
135 | #define MAX8925_LDOVOUT7 (0x32) |
136 | #define MAX8925_LDOVOUT8 (0x36) |
137 | #define MAX8925_LDOVOUT9 (0x3A) |
138 | #define MAX8925_LDOVOUT10 (0x3E) |
139 | #define MAX8925_LDOVOUT11 (0x42) |
140 | #define MAX8925_LDOVOUT12 (0x46) |
141 | #define MAX8925_LDOVOUT13 (0x4A) |
142 | #define MAX8925_LDOVOUT14 (0x4E) |
143 | #define MAX8925_LDOVOUT15 (0x52) |
144 | #define MAX8925_LDOVOUT16 (0x12) |
145 | #define MAX8925_LDOVOUT17 (0x16) |
146 | #define MAX8925_LDOVOUT18 (0x74) |
147 | #define MAX8925_LDOVOUT19 (0x5E) |
148 | #define MAX8925_LDOVOUT20 (0x9E) |
149 | |
150 | /* bit definitions */ |
151 | #define CHG_IRQ1_MASK (0x07) |
152 | #define CHG_IRQ2_MASK (0xff) |
153 | #define ON_OFF_IRQ1_MASK (0xff) |
154 | #define ON_OFF_IRQ2_MASK (0x03) |
155 | #define TSC_IRQ_MASK (0x03) |
156 | #define RTC_IRQ_MASK (0x0c) |
157 | |
158 | #define MAX8925_NAME_SIZE (32) |
159 | |
160 | /* IRQ definitions */ |
161 | enum { |
162 | MAX8925_IRQ_VCHG_DC_OVP, |
163 | MAX8925_IRQ_VCHG_DC_F, |
164 | MAX8925_IRQ_VCHG_DC_R, |
165 | MAX8925_IRQ_VCHG_THM_OK_R, |
166 | MAX8925_IRQ_VCHG_THM_OK_F, |
167 | MAX8925_IRQ_VCHG_SYSLOW_F, |
168 | MAX8925_IRQ_VCHG_SYSLOW_R, |
169 | MAX8925_IRQ_VCHG_RST, |
170 | MAX8925_IRQ_VCHG_DONE, |
171 | MAX8925_IRQ_VCHG_TOPOFF, |
172 | MAX8925_IRQ_VCHG_TMR_FAULT, |
173 | MAX8925_IRQ_GPM_RSTIN, |
174 | MAX8925_IRQ_GPM_MPL, |
175 | MAX8925_IRQ_GPM_SW_3SEC, |
176 | MAX8925_IRQ_GPM_EXTON_F, |
177 | MAX8925_IRQ_GPM_EXTON_R, |
178 | MAX8925_IRQ_GPM_SW_1SEC, |
179 | MAX8925_IRQ_GPM_SW_F, |
180 | MAX8925_IRQ_GPM_SW_R, |
181 | MAX8925_IRQ_GPM_SYSCKEN_F, |
182 | MAX8925_IRQ_GPM_SYSCKEN_R, |
183 | MAX8925_IRQ_RTC_ALARM1, |
184 | MAX8925_IRQ_RTC_ALARM0, |
185 | MAX8925_IRQ_TSC_STICK, |
186 | MAX8925_IRQ_TSC_NSTICK, |
187 | MAX8925_NR_IRQS, |
188 | }; |
189 | |
190 | |
191 | |
192 | struct max8925_chip { |
193 | struct device *dev; |
194 | struct i2c_client *i2c; |
195 | struct i2c_client *adc; |
196 | struct i2c_client *rtc; |
197 | struct mutex io_lock; |
198 | struct mutex irq_lock; |
199 | |
200 | int irq_base; |
201 | int core_irq; |
202 | int tsc_irq; |
203 | unsigned int wakeup_flag; |
204 | }; |
205 | |
206 | struct max8925_backlight_pdata { |
207 | int lxw_scl; /* 0/1 -- 0.8Ohm/0.4Ohm */ |
208 | int lxw_freq; /* 700KHz ~ 1400KHz */ |
209 | int dual_string; /* 0/1 -- single/dual string */ |
210 | }; |
211 | |
212 | struct max8925_touch_pdata { |
213 | unsigned int flags; |
214 | }; |
215 | |
216 | struct max8925_power_pdata { |
217 | int (*set_charger)(int); |
218 | unsigned batt_detect:1; |
219 | unsigned topoff_threshold:2; |
220 | unsigned fast_charge:3; /* charge current */ |
221 | unsigned no_temp_support:1; /* set if no temperature detect */ |
222 | unsigned no_insert_detect:1; /* set if no ac insert detect */ |
223 | char **supplied_to; |
224 | int num_supplicants; |
225 | }; |
226 | |
227 | /* |
228 | * irq_base: stores IRQ base number of MAX8925 in platform |
229 | * tsc_irq: stores IRQ number of MAX8925 TSC |
230 | */ |
231 | struct max8925_platform_data { |
232 | struct max8925_backlight_pdata *backlight; |
233 | struct max8925_touch_pdata *touch; |
234 | struct max8925_power_pdata *power; |
235 | struct regulator_init_data *sd1; |
236 | struct regulator_init_data *sd2; |
237 | struct regulator_init_data *sd3; |
238 | struct regulator_init_data *ldo1; |
239 | struct regulator_init_data *ldo2; |
240 | struct regulator_init_data *ldo3; |
241 | struct regulator_init_data *ldo4; |
242 | struct regulator_init_data *ldo5; |
243 | struct regulator_init_data *ldo6; |
244 | struct regulator_init_data *ldo7; |
245 | struct regulator_init_data *ldo8; |
246 | struct regulator_init_data *ldo9; |
247 | struct regulator_init_data *ldo10; |
248 | struct regulator_init_data *ldo11; |
249 | struct regulator_init_data *ldo12; |
250 | struct regulator_init_data *ldo13; |
251 | struct regulator_init_data *ldo14; |
252 | struct regulator_init_data *ldo15; |
253 | struct regulator_init_data *ldo16; |
254 | struct regulator_init_data *ldo17; |
255 | struct regulator_init_data *ldo18; |
256 | struct regulator_init_data *ldo19; |
257 | struct regulator_init_data *ldo20; |
258 | |
259 | int irq_base; |
260 | int tsc_irq; |
261 | }; |
262 | |
263 | extern int max8925_reg_read(struct i2c_client *, int); |
264 | extern int max8925_reg_write(struct i2c_client *, int, unsigned char); |
265 | extern int max8925_bulk_read(struct i2c_client *, int, int, unsigned char *); |
266 | extern int max8925_bulk_write(struct i2c_client *, int, int, unsigned char *); |
267 | extern int max8925_set_bits(struct i2c_client *, int, unsigned char, |
268 | unsigned char); |
269 | |
270 | extern int max8925_device_init(struct max8925_chip *, |
271 | struct max8925_platform_data *); |
272 | extern void max8925_device_exit(struct max8925_chip *); |
273 | #endif /* __LINUX_MFD_MAX8925_H */ |
274 | |
275 | |