tizen 2.4 release
[profile/mobile/platform/kernel/linux-3.10-sc7730.git] / include / linux / power / sm5701.h
1 #ifndef __LINUX_SM5701_H\r
2 #define __LINUX_SM5701_H\r
3 \r
4 #include <linux/ioctl.h>\r
5 \r
6 #define CHARGE_STAT_READY       0\r
7 #define CHARGE_STAT_INPROGRESS  1\r
8 #define CHARGE_STAT_DONE        2\r
9 #define CHARGE_STAT_FAULT       3\r
10 \r
11 \r
12 typedef unsigned char BYTE;\r
13 \r
14 \r
15 /* SM5701 Registers. */\r
16 #define SM5701_INT1             0x00\r
17 #define SM5701_INT2             0x01\r
18 #define SM5701_INT3             0x02\r
19 #define SM5701_INTMASK1         0x03\r
20 #define SM5701_INTMASK2         0x04\r
21 #define SM5701_INTMASK3         0x05\r
22 #define SM5701_STATUS1          0x06\r
23 #define SM5701_STATUS2          0x07\r
24 #define SM5701_STATUS3          0x08\r
25 #define SM5701_CNTL             0x09\r
26 #define SM5701_VBUSCNTL         0x0A\r
27 #define SM5701_CHGCNTL1         0x0B\r
28 #define SM5701_CHGCNTL2         0x0C\r
29 #define SM5701_CHGCNTL3         0x0D\r
30 #define SM5701_CHGCNTL4         0x0E\r
31 \r
32 #define SM5701_FLEDCNTL1        0x0F\r
33 #define SM5701_FLEDCNTL2        0x10\r
34 #define SM5701_FLEDCNTL3        0x11\r
35 #define SM5701_FLEDCNTL4        0x12\r
36 #define SM5701_FLEDCNTL5        0x13\r
37 #define SM5701_FLEDCNTL6        0x14\r
38 #define SM5701_DEVICE_ID        0x15\r
39 \r
40 #define BATREG_MASK                     0x00\r
41 \r
42 //INT1\r
43 #define SM5701_INT1_AICL                0x01\r
44 #define SM5701_INT1_BATOVP              0x02\r
45 #define SM5701_INT1_VBUSOK              0x04\r
46 #define SM5701_INT1_VBUSUVLO            0x08\r
47 #define SM5701_INT1_VBUSOVP             0x10\r
48 #define SM5701_INT1_VBUSLIMIT           0x20\r
49 #define SM5701_INT1_CHGRSTF             0x40\r
50 #define SM5701_INT1_NOBAT               0x80\r
51 //INT2\r
52 #define SM5701_INT2_TOPOFF              0x01\r
53 #define SM5701_INT2_DONE                0x02\r
54 #define SM5701_INT2_FASTTMROFF          0x04\r
55 #define SM5701_INT2_CHGON               0x08\r
56 //INT3\r
57 #define SM5701_INT3_THEMSHDN            0x01\r
58 #define SM5701_INT3_THEMREG             0x02\r
59 #define SM5701_INT3_FLEDSHORT           0x04\r
60 #define SM5701_INT3_FLEDOPEN            0x08\r
61 #define SM5701_INT3_BOOSTPOK_NG         0x10\r
62 #define SM5701_INT3_BOOSTPOK            0x20\r
63 #define SM5701_INT3_AMSTMROFF           0x40\r
64 #define SM5701_INT3_LOWBATT             0x80\r
65 //INTMSK1\r
66 #define SM5701_INTMSK1_AICLM            0x01\r
67 #define SM5701_INTMSK1_BATOVPM          0x02\r
68 #define SM5701_INTMSK1_VBUSOKM          0x04\r
69 #define SM5701_INTMSK1_VBUSUVLOM        0x08\r
70 #define SM5701_INTMSK1_VBUSOVPM         0x10\r
71 #define SM5701_INTMSK1_VBUSLIMITM       0x20\r
72 #define SM5701_INTMSK1_CHGRSTFM         0x40\r
73 #define SM5701_INTMSK1_NOBATM           0x80\r
74 //INTMSK2\r
75 #define SM5701_INTMSK2_TOPOFFM          0x01\r
76 #define SM5701_INTMSK2_DONEM            0x02\r
77 #define SM5701_INTMSK2_FASTTMROFFM      0x04\r
78 #define SM5701_INTMSK2_CHGONM           0x08\r
79 //INTMSK3\r
80 #define SM5701_INTMSK3_THEMSHDNM        0x01\r
81 #define SM5701_INTMSK3_THEMREGM         0x02\r
82 #define SM5701_INTMSK3_FLEDSHORTM       0x04\r
83 #define SM5701_INTMSK3_FLEDOPENM        0x08\r
84 #define SM5701_INTMSK3_BOOSTPOK_NGM     0x10\r
85 #define SM5701_INTMSK3_BOOSTPOKM        0x20\r
86 #define SM5701_INTMSK3_AMSTMROFFM       0x40\r
87 #define SM5701_INTMSK3_LOWBATTM         0x80\r
88 //STATUS1\r
89 #define SM5701_STATUS1_AICL                     0x01\r
90 #define SM5701_STATUS1_BATOVP                   0x02\r
91 #define SM5701_STATUS1_VBUSOK                   0x04\r
92 #define SM5701_STATUS1_VBUSUVLO                 0x08\r
93 #define SM5701_STATUS1_VBUSOVP                  0x10\r
94 #define SM5701_STATUS1_VBUSLIMIT                0x20\r
95 #define SM5701_STATUS1_CHGRSTF                  0x40\r
96 #define SM5701_STATUS1_NOBAT                    0x80\r
97 //STATUS2\r
98 #define SM5701_STATUS2_TOPOFF                   0x01\r
99 #define SM5701_STATUS2_DONE                     0x02\r
100 #define SM5701_STATUS2_FASTTMROFF               0x04\r
101 #define SM5701_STATUS2_CHGON                    0x08\r
102 //STATUS3\r
103 #define SM5701_STATUS3_THEMSHDN                 0x01\r
104 #define SM5701_STATUS3_THEMREG                  0x02\r
105 #define SM5701_STATUS3_FLEDSHORT                0x04\r
106 #define SM5701_STATUS3_FLEDOPEN                 0x08\r
107 #define SM5701_STATUS3_BOOSTPOK_NG              0x10\r
108 #define SM5701_STATUS3_BOOSTPOK                 0x20\r
109 #define SM5701_STATUS3_ABSTMROFF                0x40\r
110 #define SM5701_STATUS3_LOWBATT                  0x80\r
111 //CNTL\r
112 #define SM5701_CNTL_OPERATIONMODE               0x07\r
113 #define SM5701_CNTL_RESET                       0x08\r
114 #define SM5701_CNTL_OVPSEL                      0x30\r
115 #define SM5701_CNTL_FREQSEL                     0xc0\r
116 #define SM5701_RESET                            0x1\r
117 //VBUSCNTL\r
118 #define SM5701_VBUSCNTL_VBUSLIMIT               0x07\r
119 #define SM5701_VBUSCNTL_AICLTH                  0x38\r
120 #define SM5701_VBUSCNTL_AICLEN                  0x40\r
121 \r
122 //CHGCNTL1\r
123 #define SM5701_CHGCNTL1_TOPOFF                  0x0F\r
124 #define SM5701_CHGCNTL1_AUTOSTOP                0x10\r
125 #define SM5701_CHGCNTL1_HSSLPCTRL               0x60\r
126 \r
127 //CHGCNTL2\r
128 #define SM5701_CHGCNTL2_FASTCHG                 0x3F\r
129 \r
130 //CHGCNTL3\r
131 #define SM5701_CHGCNTL3_BATREG                  0x1F\r
132 \r
133 //CHGCNTL4\r
134 #define SM5701_CHGCNTL4_TOPOFFTIMER             0x03\r
135 #define SM5701_CHGCNTL4_FASTTIMER               0x0B\r
136 \r
137 \r
138 //FLEDCNTL1\r
139 #define SM5701_FLEDCNTL1_FLEDEN                 0x03\r
140 #define SM5701_FLEDCNTL1_ABSTMR                 0x0B\r
141 #define SM5701_FLEDCNTL1_ENABSTMR               0x10\r
142 //FLEDCNTL2\r
143 #define SM5701_FLEDCNTL2_ONETIMER               0x0F\r
144 #define SM5701_FLEDCNTL2_nONESHOT               0x10\r
145 #define SM5701_FLEDCNTL2_SAFET                  0x60\r
146 #define SM5701_FLEDCNTL2_nENSAFET               0x80\r
147 //FLEDCNTL3\r
148 #define SM5701_FLEDCNTL3_IFLED                  0x1F\r
149 //FLEDCNTL4\r
150 #define SM5701_FLEDCNTL4_IMLED                  0x1F\r
151 //FLEDCNTL5\r
152 #define SM5701_FLEDCNTL5_LBDHYS                 0x03\r
153 #define SM5701_FLEDCNTL5_LOWBATT                0x1B\r
154 #define SM5701_FLEDCNTL5_LBRSTIMER              0x60\r
155 #define SM5701_FLEDCNTL5_ENLOWBATT              0x80\r
156 //FLEDCNTL6\r
157 #define SM5701_FLEDCNTL6_BSTOUT                 0x0F\r
158 #define SM5701_BSTOUT_4P5               0x05\r
159 #define SM5701_BSTOUT_5P0               0x0A\r
160 \r
161 #define SM5701_STATUS1_NOBAT_SHIFT 7\r
162 \r
163 /* Enable charger Operation Mode */\r
164 #define OP_MODE_CHG_ON 0x02\r
165 #define OP_MODE_CHG_ON_REV3 0x04\r
166 \r
167 /* Disable charger Operation Mode */\r
168 #define OP_MODE_CHG_OFF 0x01\r
169 \r
170 \r
171 //CNTL\r
172 #define SM5701_OPERATIONMODE_SUSPEND                0x0 // 000 : Suspend (charger-OFF) MODE\r
173 #define SM5701_OPERATIONMODE_FLASH_ON               0x1 // 001 : Flash LED Driver=ON Ready in Charger & OTG OFF Mode\r
174 #define SM5701_OPERATIONMODE_OTG_ON                 0x2 // 010 : OTG=ON in Charger & Flash OFF Mode\r
175 #define SM5701_OPERATIONMODE_OTG_ON_FLASH_ON        0x3 // 011 : OTG=ON & Flash LED Driver=ON Ready in charger OFF Mode\r
176 #define SM5701_OPERATIONMODE_CHARGER_ON             0x4 // 100 : Charger=ON in OTG & Flash OFF Mode. Same as 0x6(110)\r
177 #define SM5701_OPERATIONMODE_CHARGER_ON_FLASH_ON    0x5 // 101 : Charger=ON & Flash LED Driver=ON Ready in OTG OFF Mode. Same as 0x7(111)\r
178 \r
179 \r
180 #define FREQ_15                         (0x00 << 6)\r
181 #define FREQ_12                         (0x01 << 6)\r
182 #define FREQ_18                         (0x02 << 6)\r
183 #define FREQ_24                         (0x03 << 6)\r
184 \r
185 enum {\r
186         CHARGER_READY = 0,\r
187         CHARGER_DOING,\r
188         CHARGER_DONE,\r
189         CHARGER_FAULT,\r
190 };\r
191 \r
192 enum {\r
193         POWER_SUPPLY_VBUS_UNKNOWN = 0,\r
194         POWER_SUPPLY_VBUS_UVLO,\r
195         POWER_SUPPLY_VBUS_WEAK,\r
196         POWER_SUPPLY_VBUS_OVLO,\r
197         POWER_SUPPLY_VBUS_GOOD,\r
198 };\r
199 \r
200 \r
201 typedef enum{\r
202         SM5701_MONITOR_NONE,\r
203         SM5701_MONITOR_CV,\r
204         SM5701_MONITOR_VBUS_VALID,\r
205         SM5701_MONITOR_IBUS,\r
206         SM5701_MONITOR_ICHG,\r
207         SM5701_MONITOR_T_120,\r
208         SM5701_MONITOR_LINCHG,\r
209         SM5701_MONITOR_VBAT_CMP,\r
210         SM5701_MONITOR_ITERM_CMP\r
211 }sm5701_monitor_status;\r
212 \r
213 \r
214 struct sprd_ext_ic_operations {\r
215         void (*ic_init)(void);\r
216         void (*charge_start_ext)(int);\r
217         void (*charge_stop_ext)(void);\r
218         int  (*get_charging_status)(void);\r
219         void (*timer_callback_ext)(void);\r
220         void (*otg_charge_ext)(int enable);\r
221 };\r
222 \r
223 extern void sm5701_TA_StartCharging(void);\r
224 extern void sm5701_USB_StartCharging(void);\r
225 extern void sm5701_StopCharging(void);\r
226 extern sm5701_monitor_status sm5701_Monitor(void);\r
227 extern int sm5701_GetCharge_Stat(void);\r
228 \r
229 extern int SM5701_reg_read(struct i2c_client *i2c, u8 reg, u8 *dest);\r
230 extern int SM5701_reg_write(struct i2c_client *i2c, u8 reg, u8 value);\r
231 \r
232 const struct sprd_ext_ic_operations *sprd_get_ext_ic_ops(void);\r
233 \r
234 #endif\r