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