1 #ifndef __LINUX_SM5701_H
\r
2 #define __LINUX_SM5701_H
\r
4 #include <linux/ioctl.h>
\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
12 typedef unsigned char BYTE;
\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
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
40 #define BATREG_MASK 0x00
\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
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
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
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
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
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
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
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
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
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
118 #define SM5701_VBUSCNTL_VBUSLIMIT 0x07
\r
119 #define SM5701_VBUSCNTL_AICLTH 0x38
\r
120 #define SM5701_VBUSCNTL_AICLEN 0x40
\r
123 #define SM5701_CHGCNTL1_TOPOFF 0x0F
\r
124 #define SM5701_CHGCNTL1_AUTOSTOP 0x10
\r
125 #define SM5701_CHGCNTL1_HSSLPCTRL 0x60
\r
128 #define SM5701_CHGCNTL2_FASTCHG 0x3F
\r
131 #define SM5701_CHGCNTL3_BATREG 0x1F
\r
134 #define SM5701_CHGCNTL4_TOPOFFTIMER 0x03
\r
135 #define SM5701_CHGCNTL4_FASTTIMER 0x0B
\r
139 #define SM5701_FLEDCNTL1_FLEDEN 0x03
\r
140 #define SM5701_FLEDCNTL1_ABSTMR 0x0B
\r
141 #define SM5701_FLEDCNTL1_ENABSTMR 0x10
\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
148 #define SM5701_FLEDCNTL3_IFLED 0x1F
\r
150 #define SM5701_FLEDCNTL4_IMLED 0x1F
\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
157 #define SM5701_FLEDCNTL6_BSTOUT 0x0F
\r
158 #define SM5701_BSTOUT_4P5 0x05
\r
159 #define SM5701_BSTOUT_5P0 0x0A
\r
161 #define SM5701_STATUS1_NOBAT_SHIFT 7
\r
163 /* Enable charger Operation Mode */
\r
164 #define OP_MODE_CHG_ON 0x02
\r
165 #define OP_MODE_CHG_ON_REV3 0x04
\r
167 /* Disable charger Operation Mode */
\r
168 #define OP_MODE_CHG_OFF 0x01
\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
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
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
202 SM5701_MONITOR_NONE,
\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
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
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
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
232 const struct sprd_ext_ic_operations *sprd_get_ext_ic_ops(void);
\r