tizen 2.4 release
[profile/mobile/platform/kernel/u-boot-tm1.git] / arch / arm / include / asm / arch-sc8830 / ldo.h
1 /******************************************************************************
2  ** File Name:      ldo_manager_sc6600l.h                                             *
3  ** Author:         jiexia.yu                                                 *
4  ** DATE:           07/09/2007                                                *
5  ** Copyright:      2007 Spreatrum, Incoporated. All Rights Reserved.         *
6  ** Description:    This file defines the basic function for ldo management.  *
7  ******************************************************************************/
8
9 /******************************************************************************
10  **                        Edit History                                       *
11  ** ------------------------------------------------------------------------- *
12  ** DATE           NAME             DESCRIPTION                               *
13  ** 07/09/2007     jiexia.yu        Create.                                   *
14  ******************************************************************************/
15 #ifndef _LDO_DRV_H_
16 #define _LDO_DRV_H_
17
18 #include <asm/arch/adi_hal_internal.h>
19
20 /* set or clear the bit of register in reg_addr address */
21 #define REG_SETCLRBIT(_reg_addr, _set_bit, _clr_bit)    \
22         do {                                            \
23                 unsigned int reg_val = 0;                       \
24         reg_val = ANA_REG_GET(_reg_addr);   \
25                 reg_val |= (_set_bit);  \
26                 reg_val &= ~(_clr_bit); \
27         ANA_REG_SET(_reg_addr,reg_val);   \
28         }while(0);
29                 
30 /* set the value of register bits corresponding with bit_mask */
31 #define REG_SETBIT(_reg_addr, _bit_mask, _bit_set) ANA_REG_MSK_OR(_reg_addr, _bit_set, _bit_mask);
32
33 /* macro used to get voltage level(one bit level) */
34 #define GET_LEVELBIT(_reg_addr, _bit_mask, _bit_set, _level_var)   \
35         do {                                                    \
36                 (_level_var) |= \
37                         ((ANA_REG_GET(_reg_addr)&(_bit_mask))?(_bit_set):0);    \
38         } while (0)
39
40 /* macro used to get voltage level */
41 #define GET_LEVEL(_reg_addr, _bit0_mask, _bit1_mask, _level_var)    \
42         do {                                                    \
43                 (_level_var) |= \
44                         (((ANA_REG_GET(_reg_addr)&(_bit0_mask))?(BIT_0):0)|    \
45                          ((ANA_REG_GET(_reg_addr)&(_bit1_mask))?(BIT_1):0)); \
46         } while (0)
47
48 /* macro used to set voltage level according to bit field */
49 #define SET_LEVELBIT(_reg_addr, _bit_mask, _set_bit, _rst_bit)  \
50         {       \
51                 REG_SETBIT(     \
52                         _reg_addr,      \
53                         (_set_bit) | (_rst_bit),        \
54                         ((_set_bit)&(_bit_mask)) | ((_rst_bit)&(~_bit_mask))    \
55                         )       \
56         }
57
58 /* macro used to set voltage level according to two bits */
59 #define SET_LEVEL(_reg_addr, _bit0_mask, _bit1_mask, _set_bit0,         \
60                 _rst_bit0, _set_bit1, _rst_bit1)    \
61         {       \
62                 REG_SETBIT(     \
63                         (_reg_addr),    \
64                         ((_set_bit0)|(_rst_bit0) | (_set_bit1)|(_rst_bit1)),  \
65                         (((_set_bit0)&(_bit0_mask)) | ((_rst_bit0)&(~_bit0_mask))|      \
66                         ((_set_bit1)&(_bit1_mask)) | ((_rst_bit1)&(~_bit1_mask)))       \
67                         )       \
68         }
69
70 #define LDO_REG_OR ANA_REG_OR
71 #define LDO_REG_AND ANA_REG_AND
72 #define LDO_REG_GET  ANA_REG_GET
73
74 /**---------------------------------------------------------------------------*
75  **                         Defines                                           *
76  **---------------------------------------------------------------------------*/
77
78 typedef enum 
79 {
80     LDO_LDO_NULL  = 0,   //id for NULL
81     LDO_LDO_IO     ,       //VDDIO
82     LDO_LDO_IO18     ,       //VDDIO18
83     LDO_LDO_IO28     ,       //VDDIO28
84     LDO_LDO_NF      ,      //LDONF
85     LDO_LDO_MEM    ,       //VDDMEM
86     LDO_LDO_CORE    ,      //VDDCORE
87     LDO_LDO_CORE_SLP,      //VDDCORE Sleep
88     LDO_LDO_AUX1    ,      //Sensor core voltage used by sc6600l
89     LDO_LDO_AUX2    ,      //Sensor analog  voltage used by sc6600l
90     LDO_LDO_SIM0    ,     //VDD SIM0
91     LDO_LDO_SIM1    ,     //VDD SIM1
92     LDO_LDO_USB     ,     //VDDUSB
93     LDO_LDO_RF      ,      //LDORF (LDO1)
94     LDO_LDO_LCD    ,      //LDOLCD
95     LDO_LDO_VIDEO,
96     LDO_LDO_RTC     ,      //VDDRTC
97     LDO_LDO_ABB     ,  //AVDDBB
98     LDO_LDO_PLL     ,  //VDDPLL
99     LDO_LDO_AVB     ,  //LDOVB
100     LDO_LDO_AVBO    ,  //LDOVBO
101     LDO_LDO_BP18,
102     LDO_LDO_D3V,
103     LDO_LDO_DVD18,
104     LDO_LDO_VREFRF  ,  //VREFRF
105     LDO_LDO_VREF    ,  //VREF
106     LDO_LDO_VREF27  ,  //VREF27
107     LDO_LDO_SDIO  ,  //SDIO
108     ///SC8800G
109     LDO_LDO_VBAT_RES,
110     LDO_LDO_VBAT_V,
111     LDO_LDO_CLSG,
112     LDO_LDO_CAMMOT,
113     LDO_LDO_CAMA    ,
114     LDO_LDO_CAMD    ,
115     LDO_LDO_CAMD0   = LDO_LDO_CAMD,
116     LDO_LDO_CAMIO   ,
117     LDO_LDO_CAMD1   = LDO_LDO_CAMIO,
118     LDO_LDO_CAMM    ,
119     LDO_LDO_AVDD18  ,
120     LDO_LDO_VDD18   ,
121     LDO_LDO_VDD25   ,
122     LDO_LDO_VDD28   ,
123     LDO_LDO_RF0     ,
124     LDO_LDO_RF1     ,
125     LDO_LDO_RF2     ,
126     LDO_LDO_USBD    ,
127     ////end SC8800G
128     //sc8810 
129     LDO_DCDCARM,
130     LDO_DCDC,
131     LDO_LDO_BG,
132     LDO_LDO_SDIO0,
133     LDO_LDO_SIM3,
134     LDO_LDO_SIM2,
135     LDO_LDO_WIF1,
136     LDO_LDO_WIF0,
137     LDO_LDO_SDIO1,
138     LDO_LDO_SDIO3,
139     LDO_LDO_VDD30,
140     LDO_LDO_EMMCCORE,
141     LDO_LDO_EMMCIO,
142     LDO_LDO_WIFIPA,
143     //end sc8810
144
145     LDO_LDO_MAX     //id for calculate LDO number only!
146 }LDO_ID_E;
147
148 #define LDO_LDO_LCM             LDO_LDO_AUX1
149 #define LDO_LDO_CMR     LDO_LDO_AUX2
150
151 typedef enum 
152 {
153     //SPRD
154     SLP_LDO_SDIO1,
155     SLP_LDO_VDD25,
156     SLP_LDO_VDD18,
157     SLP_LDO_VDD28,
158     SLP_LDO_AVDDBB,
159     SLP_LDO_SDIO0,
160     SLP_LDO_VB,
161     SLP_LDO_CAMA,
162     SLP_LDO_CAMD1,
163     SLP_LDO_CAMD0,
164     SLP_LDO_USBH,
165     SLP_LDO_SIM1,
166     SLP_LDO_SIM0,
167     SLP_LDO_RF1,
168     SLP_LDO_RF0,
169    //end sprd
170     SLP_LDO_MAX
171 }SLP_LDO_E;
172
173 typedef enum
174 {
175         LDO_VOLT_LEVEL0 = 0,
176         LDO_VOLT_LEVEL1,
177         LDO_VOLT_LEVEL2,
178         LDO_VOLT_LEVEL3,
179         LDO_VOLT_LEVEL_FAULT_MAX
180 }LDO_VOLT_LEVEL_E;
181
182 //LDO error flag definition
183 typedef enum
184 {
185     LDO_ERR_OK,
186     LDO_ERR_INVALID_HANDLE,
187     LDO_ERR_INVALID_OPERATION,
188     LDO_ERR_ERR
189 }LDO_ERR_E;
190
191 /**---------------------------------------------------------------------------*
192  **                         Constant Variables                                *
193  **---------------------------------------------------------------------------*/
194
195
196 /**---------------------------------------------------------------------------*
197  **                         Function Prototypes                               *
198  **---------------------------------------------------------------------------*/
199
200
201 /*****************************************************************************/
202 //  Description:  Turn on the LDO specified by input parameter ldo_id  
203 //      Global resource dependence: NONE
204 //  Author:  jiexia.yu
205 //      Note:    return value = LDO_ERR_OK if operation is executed successfully           
206 /*****************************************************************************/
207  LDO_ERR_E LDO_TurnOnLDO(LDO_ID_E ldo_id);
208
209 /*****************************************************************************/
210 //  Description:  Turo off the LDO specified by parameter ldo_id
211 //      Global resource dependence: NONE
212 //  Author: jiexia.yu
213 //      Note:           
214 /*****************************************************************************/
215  LDO_ERR_E LDO_TurnOffLDO(LDO_ID_E ldo_id);
216
217 /*****************************************************************************/
218 //  Description: Find the LDO status -- ON or OFF
219 //      Global resource dependence: 
220 //  Author: jiexia.yu         
221 //      Note: return SCI_TRUE means LDO is ON, SCI_FALSE is OFF        
222 /*****************************************************************************/
223  int LDO_IsLDOOn(LDO_ID_E ldo_id);
224
225 /*****************************************************************************/
226 //  Description: Get LDO voltage level
227 //      Global resource dependence: 
228 //  Author: jiexia.yu
229 //      Note:           
230 /*****************************************************************************/
231  LDO_VOLT_LEVEL_E LDO_GetVoltLevel(LDO_ID_E ldo_id);
232
233 /*****************************************************************************/
234 //  Description:  This function could be invoked by customer for LDO voltage
235 //                level & referece voltage level initiation.
236 //      Global resource dependence: 
237 //  Author: jiexia.yu         
238 //      Note:           
239 /*****************************************************************************/
240  LDO_ERR_E LDO_SetVoltLevel(LDO_ID_E ldo_id, LDO_VOLT_LEVEL_E level);
241
242 /*****************************************************************************/
243 //  Description:  Control The VCAM Domain PAD to avoid VCAM Domain PAD input not floating
244 //      Global resource dependence: NONE
245 //  Author:  Tao.Feng && Yi.Qiu
246 //      Note:    return value = LDO_ERR_OK if operation is executed successfully           
247 /*****************************************************************************/
248  LDO_ERR_E LDO_ControVCAMPad(int pad_on);
249
250 /*****************************************************************************/
251 //  Description:  Shut down any LDO that do not used when system enters deepsleep
252 //      Global resource dependence: s_ldo_reopen[]
253 //  Author: jiexia.yu     
254 //      Note:           
255 /*****************************************************************************/
256  void LDO_DeepSleepInit(void);
257  void LDO_TurnOffAllLDO(void);
258
259 /**---------------------------------------------------------------------------*
260  **                         Compiler Flag                                     *
261  **---------------------------------------------------------------------------*/
262
263 #endif // _LDO_MANAGER_H_
264
265