upload tizen1.0 source
[kernel/linux-2.6.36.git] / include / linux / mfd / max8997-private.h
1 /*
2  * max8997.h - Voltage regulator driver for the Maxim 8997
3  *
4  *  Copyright (C) 2010 Samsung Electrnoics
5  *  MyungJoo Ham <myungjoo.ham@samsung.com>
6  *
7  * This program is not provided / owned by Maxim Integrated Products.
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
22  */
23
24 #ifndef __LINUX_MFD_MAX8997_PRIV_H
25 #define __LINUX_MFD_MAX8997_PRIV_H
26
27 #define MAX8997_REG_INVALID     (0xff)
28
29 /* slave addr = 0xcc */
30 enum max8997_pmic_reg {
31         MAX8997_REG_PMIC_ID0    = 0x00,
32         MAX8997_REG_PMIC_ID1    = 0x01,
33         MAX8997_REG_INTSRC      = 0x02,
34         MAX8997_REG_INT1        = 0x03,
35         MAX8997_REG_INT2        = 0x04,
36         MAX8997_REG_INT3        = 0x05,
37         MAX8997_REG_INT4        = 0x06,
38
39         MAX8997_REG_INT1MSK     = 0x08,
40         MAX8997_REG_INT2MSK     = 0x09,
41         MAX8997_REG_INT3MSK     = 0x0a,
42         MAX8997_REG_INT4MSK     = 0x0b,
43
44         MAX8997_REG_STATUS1     = 0x0d,
45         MAX8997_REG_STATUS2     = 0x0e,
46         MAX8997_REG_STATUS3     = 0x0f,
47         MAX8997_REG_STATUS4     = 0x10,
48
49         MAX8997_REG_MAINCON1    = 0x13,
50         MAX8997_REG_MAINCON2    = 0x14,
51         MAX8997_REG_BUCKRAMP    = 0x15,
52
53         MAX8997_REG_BUCK1CTRL   = 0x18,
54         MAX8997_REG_BUCK1DVS1   = 0x19,
55         MAX8997_REG_BUCK1DVS2   = 0x1a,
56         MAX8997_REG_BUCK1DVS3   = 0x1b,
57         MAX8997_REG_BUCK1DVS4   = 0x1c,
58         MAX8997_REG_BUCK1DVS5   = 0x1d,
59         MAX8997_REG_BUCK1DVS6   = 0x1e,
60         MAX8997_REG_BUCK1DVS7   = 0x1f,
61         MAX8997_REG_BUCK1DVS8   = 0x20,
62         MAX8997_REG_BUCK2CTRL   = 0x21,
63         MAX8997_REG_BUCK2DVS1   = 0x22,
64         MAX8997_REG_BUCK2DVS2   = 0x23,
65         MAX8997_REG_BUCK2DVS3   = 0x24,
66         MAX8997_REG_BUCK2DVS4   = 0x25,
67         MAX8997_REG_BUCK2DVS5   = 0x26,
68         MAX8997_REG_BUCK2DVS6   = 0x27,
69         MAX8997_REG_BUCK2DVS7   = 0x28,
70         MAX8997_REG_BUCK2DVS8   = 0x29,
71         MAX8997_REG_BUCK3CTRL   = 0x2a,
72         MAX8997_REG_BUCK3DVS    = 0x2b,
73         MAX8997_REG_BUCK4CTRL   = 0x2c,
74         MAX8997_REG_BUCK4DVS    = 0x2d,
75         MAX8997_REG_BUCK5CTRL   = 0x2e,
76         MAX8997_REG_BUCK5DVS1   = 0x2f,
77         MAX8997_REG_BUCK5DVS2   = 0x30,
78         MAX8997_REG_BUCK5DVS3   = 0x31,
79         MAX8997_REG_BUCK5DVS4   = 0x32,
80         MAX8997_REG_BUCK5DVS5   = 0x33,
81         MAX8997_REG_BUCK5DVS6   = 0x34,
82         MAX8997_REG_BUCK5DVS7   = 0x35,
83         MAX8997_REG_BUCK5DVS8   = 0x36,
84         MAX8997_REG_BUCK6CTRL   = 0x37,
85         MAX8997_REG_BUCK6BPSKIPCTRL     = 0x38,
86         MAX8997_REG_BUCK7CTRL   = 0x39,
87         MAX8997_REG_BUCK7DVS    = 0x3a,
88         MAX8997_REG_LDO1CTRL    = 0x3b,
89         MAX8997_REG_LDO2CTRL    = 0x3c,
90         MAX8997_REG_LDO3CTRL    = 0x3d,
91         MAX8997_REG_LDO4CTRL    = 0x3e,
92         MAX8997_REG_LDO5CTRL    = 0x3f,
93         MAX8997_REG_LDO6CTRL    = 0x40,
94         MAX8997_REG_LDO7CTRL    = 0x41,
95         MAX8997_REG_LDO8CTRL    = 0x42,
96         MAX8997_REG_LDO9CTRL    = 0x43,
97         MAX8997_REG_LDO10CTRL   = 0x44,
98         MAX8997_REG_LDO11CTRL   = 0x45,
99         MAX8997_REG_LDO12CTRL   = 0x46,
100         MAX8997_REG_LDO13CTRL   = 0x47,
101         MAX8997_REG_LDO14CTRL   = 0x48,
102         MAX8997_REG_LDO15CTRL   = 0x49,
103         MAX8997_REG_LDO16CTRL   = 0x4a,
104         MAX8997_REG_LDO17CTRL   = 0x4b,
105         MAX8997_REG_LDO18CTRL   = 0x4c,
106         MAX8997_REG_LDO21CTRL   = 0x4d,
107
108         MAX8997_REG_MBCCTRL1    = 0x50,
109         MAX8997_REG_MBCCTRL2    = 0x51,
110         MAX8997_REG_MBCCTRL3    = 0x52,
111         MAX8997_REG_MBCCTRL4    = 0x53,
112         MAX8997_REG_MBCCTRL5    = 0x54,
113         MAX8997_REG_MBCCTRL6    = 0x55,
114         MAX8997_REG_OTPCGHCVS   = 0x56,
115
116         MAX8997_REG_SAFEOUTCTRL = 0x5a,
117
118         MAX8997_REG_LBCNFG1     = 0x5e,
119         MAX8997_REG_LBCNFG2     = 0x5f,
120         MAX8997_REG_BBCCTRL     = 0x60,
121
122         MAX8997_REG_FLASH1_CUR  = 0x63, /* 0x63 ~ 0x6e for FLASH */
123         MAX8997_REG_FLASH2_CUR  = 0x64,
124         MAX8997_REG_MOVIE_CUR   = 0x65,
125         MAX8997_REG_GSMB_CUR    = 0x66,
126         MAX8997_REG_BOOST_CNTL  = 0x67,
127         MAX8997_REG_LED_CNTL    = 0x68,
128         MAX8997_REG_FLASH_CNTL  = 0x69,
129         MAX8997_REG_WDT_CNTL    = 0x6a,
130         MAX8997_REG_MAXFLASH1   = 0x6b,
131         MAX8997_REG_MAXFLASH2   = 0x6c,
132         MAX8997_REG_FLASHSTATUS = 0x6d,
133         MAX8997_REG_FLASHSTATUSMASK     = 0x6e,
134
135         MAX8997_REG_GPIOCNTL1   = 0x70,
136         MAX8997_REG_GPIOCNTL2   = 0x71,
137         MAX8997_REG_GPIOCNTL3   = 0x72,
138         MAX8997_REG_GPIOCNTL4   = 0x73,
139         MAX8997_REG_GPIOCNTL5   = 0x74,
140         MAX8997_REG_GPIOCNTL6   = 0x75,
141         MAX8997_REG_GPIOCNTL7   = 0x76,
142         MAX8997_REG_GPIOCNTL8   = 0x77,
143         MAX8997_REG_GPIOCNTL9   = 0x78,
144         MAX8997_REG_GPIOCNTL10  = 0x79,
145         MAX8997_REG_GPIOCNTL11  = 0x7a,
146         MAX8997_REG_GPIOCNTL12  = 0x7b,
147
148         MAX8997_REG_LDO1CONFIG  = 0x80,
149         MAX8997_REG_LDO2CONFIG  = 0x81,
150         MAX8997_REG_LDO3CONFIG  = 0x82,
151         MAX8997_REG_LDO4CONFIG  = 0x83,
152         MAX8997_REG_LDO5CONFIG  = 0x84,
153         MAX8997_REG_LDO6CONFIG  = 0x85,
154         MAX8997_REG_LDO7CONFIG  = 0x86,
155         MAX8997_REG_LDO8CONFIG  = 0x87,
156         MAX8997_REG_LDO9CONFIG  = 0x88,
157         MAX8997_REG_LDO10CONFIG = 0x89,
158         MAX8997_REG_LDO11CONFIG = 0x8a,
159         MAX8997_REG_LDO12CONFIG = 0x8b,
160         MAX8997_REG_LDO13CONFIG = 0x8c,
161         MAX8997_REG_LDO14CONFIG = 0x8d,
162         MAX8997_REG_LDO15CONFIG = 0x8e,
163         MAX8997_REG_LDO16CONFIG = 0x8f,
164         MAX8997_REG_LDO17CONFIG = 0x90,
165         MAX8997_REG_LDO18CONFIG = 0x91,
166         MAX8997_REG_LDO21CONFIG = 0x92,
167
168         MAX8997_REG_DVSOKTIMER1 = 0x97,
169         MAX8997_REG_DVSOKTIMER2 = 0x98,
170         MAX8997_REG_DVSOKTIMER4 = 0x99,
171         MAX8997_REG_DVSOKTIMER5 = 0x9a,
172
173         MAX8997_REG_PMIC_END    = 0x9b,
174 };
175
176 /* slave addr = 0x4a */
177 enum max8997_muic_reg {
178         MAX8997_MUIC_REG_ID             = 0x0,
179         MAX8997_MUIC_REG_INT1           = 0x1,
180         MAX8997_MUIC_REG_INT2           = 0x2,
181         MAX8997_MUIC_REG_INT3           = 0x3,
182         MAX8997_MUIC_REG_STATUS1        = 0x4,
183         MAX8997_MUIC_REG_STATUS2        = 0x5,
184         MAX8997_MUIC_REG_STATUS3        = 0x6,
185         MAX8997_MUIC_REG_INTMASK1       = 0x7,
186         MAX8997_MUIC_REG_INTMASK2       = 0x8,
187         MAX8997_MUIC_REG_INTMASK3       = 0x9,
188         MAX8997_MUIC_REG_CDETCTRL       = 0xa,
189
190         MAX8997_MUIC_REG_CONTROL1       = 0xc,
191         MAX8997_MUIC_REG_CONTROL2       = 0xd,
192         MAX8997_MUIC_REG_CONTROL3       = 0xe,
193
194         MAX8997_MUIC_REG_END            = 0xf,
195 };
196
197 /*
198  * slave addr = 0x6c / address are the same with MAX17042
199  * Note that fuel gauge has 16-bit wide memory, not 8-bit wide
200  * max8997_fuel_gauge / battery uses max17042 driver
201  */
202
203 /* slave addr = 0x90 */
204 enum max8997_haptic_reg {
205         MAX8997_HAPTIC_REG_GENERAL      = 0x00,
206         MAX8997_HAPTIC_REG_CONF1        = 0x01,
207         MAX8997_HAPTIC_REG_CONF2        = 0x02,
208         MAX8997_HAPTIC_REG_DRVCONF      = 0x03,
209         MAX8997_HAPTIC_REG_CYCLECONF1   = 0x04,
210         MAX8997_HAPTIC_REG_CYCLECONF2   = 0x05,
211         MAX8997_HAPTIC_REG_SIGCONF1     = 0x06,
212         MAX8997_HAPTIC_REG_SIGCONF2     = 0x07,
213         MAX8997_HAPTIC_REG_SIGCONF3     = 0x08,
214         MAX8997_HAPTIC_REG_SIGCONF4     = 0x09,
215         MAX8997_HAPTIC_REG_SIGDC1       = 0x0a,
216         MAX8997_HAPTIC_REG_SIGDC2       = 0x0b,
217         MAX8997_HAPTIC_REG_SIGPWMDC1    = 0x0c,
218         MAX8997_HAPTIC_REG_SIGPWMDC2    = 0x0d,
219         MAX8997_HAPTIC_REG_SIGPWMDC3    = 0x0e,
220         MAX8997_HAPTIC_REG_SIGPWMDC4    = 0x0f,
221         MAX8997_HAPTIC_REG_MTR_REV      = 0x10,
222
223         MAX8997_HAPTIC_REG_END          = 0x11,
224 };
225
226 /* slave addr = 0x0c: using "2nd part" of rev4 datasheet */
227 enum max8997_rtc_reg {
228         MAX8997_RTC_CTRLMASK            = 0x02,
229         MAX8997_RTC_CTRL                = 0x03,
230         MAX8997_RTC_UPDATE1             = 0x04,
231         MAX8997_RTC_UPDATE2             = 0x05,
232         MAX8997_RTC_WTSR_SMPL           = 0x06,
233
234         MAX8997_RTC_SEC                 = 0x10,
235         MAX8997_RTC_MIN                 = 0x11,
236         MAX8997_RTC_HOUR                = 0x12,
237         MAX8997_RTC_DAY_OF_WEEK         = 0x13,
238         MAX8997_RTC_MONTH               = 0x14,
239         MAX8997_RTC_YEAR                = 0x15,
240         MAX8997_RTC_DAY_OF_MONTH        = 0x16,
241         MAX8997_RTC_ALARM1_SEC          = 0x17,
242         MAX8997_RTC_ALARM1_MIN          = 0x18,
243         MAX8997_RTC_ALARM1_HOUR         = 0x19,
244         MAX8997_RTC_ALARM1_DAY_OF_WEEK  = 0x1a,
245         MAX8997_RTC_ALARM1_MONTH        = 0x1b,
246         MAX8997_RTC_ALARM1_YEAR         = 0x1c,
247         MAX8997_RTC_ALARM1_DAY_OF_MONTH = 0x1d,
248         MAX8997_RTC_ALARM2_SEC          = 0x1e,
249         MAX8997_RTC_ALARM2_MIN          = 0x1f,
250         MAX8997_RTC_ALARM2_HOUR         = 0x20,
251         MAX8997_RTC_ALARM2_DAY_OF_WEEK  = 0x21,
252         MAX8997_RTC_ALARM2_MONTH        = 0x22,
253         MAX8997_RTC_ALARM2_YEAR         = 0x23,
254         MAX8997_RTC_ALARM2_DAY_OF_MONTH = 0x24,
255         /*
256          * TODO: fill the register list.
257          * The datasheet we have is not consistent.
258          */
259 };
260
261 /* Flash LED register mask */
262 #define MAX8997_BOOST_EN_MASK           (1 << 6)
263 #define MAX8997_BOOST_EN_SHIFT          6
264 #define MAX8997_FLASH_EN_MASK           (7 << 0)
265 #define MAX8997_FLASH_EN_SHIFT          0
266 #define MAX8997_MOVIE_EN_MASK           (7 << 3)
267 #define MAX8997_MOVIE_EN_SHIFT          3
268 #define MAX8997_TORCH_EN_MASK           (3 << 3)
269 #define MAX8997_TORCH_EN_SHIFT          3
270
271 enum max8997_irq_source {
272         PMIC_INT1 = 0,
273         PMIC_INT2,
274         PMIC_INT3,
275         PMIC_INT4,
276
277         FUEL_GAUGE, /* Ignored (MAX17042 driver handles) */
278
279         MUIC_INT1,
280         MUIC_INT2,
281         MUIC_INT3,
282
283         GPIO_LOW, /* Not implemented */
284         GPIO_HI, /* Not implemented */
285
286         FLASH_STATUS, /* Not implemented */
287
288         MAX8997_IRQ_GROUP_NR,
289 };
290
291 #define MAX8997_REG_BUCK1DVS(x) (MAX8997_REG_BUCK1DVS1 + (x) - 1)
292 #define MAX8997_REG_BUCK2DVS(x) (MAX8997_REG_BUCK2DVS1 + (x) - 1)
293 #define MAX8997_REG_BUCK5DVS(x) (MAX8997_REG_BUCK5DVS1 + (x) - 1)
294
295 struct max8997_dev {
296         struct device *dev;
297         struct i2c_client *i2c;
298         struct i2c_client *rtc;
299         struct i2c_client *haptic;
300         struct i2c_client *muic;
301         struct mutex iolock;
302
303         int type;
304         struct platform_device *battery; /* battery control (not fuel gauge) */
305
306         int irq;
307         int ono;
308         int irq_base;
309         int wakeup;
310         struct mutex irqlock;
311         int irq_masks_cur[MAX8997_IRQ_GROUP_NR];
312         int irq_masks_cache[MAX8997_IRQ_GROUP_NR];
313
314         /* For hibernation */
315         u8 reg_dump[MAX8997_REG_PMIC_END + MAX8997_MUIC_REG_END];
316 };
317
318 enum max8997_types {
319         TYPE_MAX8997,
320         TYPE_MAX8966,
321 };
322
323 extern int max8997_irq_init(struct max8997_dev *max8997);
324 extern void max8997_irq_exit(struct max8997_dev *max8997);
325 extern int max8997_irq_resume(struct max8997_dev *max8997);
326
327 extern int max8997_read_reg(struct i2c_client *i2c, u8 reg, u8 *dest);
328 extern int max8997_bulk_read(struct i2c_client *i2c, u8 reg, int count, u8 *buf);
329 extern int max8997_write_reg(struct i2c_client *i2c, u8 reg, u8 value);
330 extern int max8997_bulk_write(struct i2c_client *i2c, u8 reg, int count, u8 *buf);
331 extern int max8997_update_reg(struct i2c_client *i2c, u8 reg, u8 val, u8 mask);
332
333 void max8997_muic_set_switch(const char *buf);
334 ssize_t max8997_muic_get_switch(char *buf);
335
336 #endif /*  __LINUX_MFD_MAX8997_PRIV_H */