tizen 2.4 release
[kernel/u-boot-tm1.git] / arch / arm / include / asm / arch-sc8810 / 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_CAMA    ,
110     LDO_LDO_CAMD0   ,
111     LDO_LDO_CAMD1   ,
112     LDO_LDO_VDD18   ,
113     LDO_LDO_VDD25   ,
114     LDO_LDO_VDD28   ,
115     LDO_LDO_RF0     ,
116     LDO_LDO_RF1     ,
117     LDO_LDO_USBD    ,
118     ////end SC8800G
119     //sc8810 
120     LDO_DCDCARM,
121     LDO_DCDC,
122     LDO_LDO_BG,
123     LDO_LDO_SDIO0,
124     LDO_LDO_SIM3,
125     LDO_LDO_SIM2,
126     LDO_LDO_WIF1,
127     LDO_LDO_WIF0,
128     LDO_LDO_SDIO1,
129     LDO_LDO_SDIO3,
130     LDO_LDO_VDD30,
131     //end sc8810
132     //sc7710g2
133     LDO_LDO_AP_AMP,
134     //end
135     LDO_LDO_MAX     //id for calculate LDO number only!
136 }LDO_ID_E;
137
138 #define LDO_LDO_LCM             LDO_LDO_AUX1
139 #define LDO_LDO_CMR     LDO_LDO_AUX2
140
141 typedef enum 
142 {
143     //SC8810 
144     SLP_LDO_SDIO1,
145     SLP_LDO_VDD25,
146     SLP_LDO_VDD18,
147     SLP_LDO_VDD28,
148     SLP_LDO_AVDDBB,
149     SLP_LDO_SDIO0,
150     SLP_LDO_VB,
151     SLP_LDO_CAMA,
152     SLP_LDO_CAMD1,
153     SLP_LDO_CAMD0,
154     SLP_LDO_USBH,
155     SLP_LDO_SIM1,
156     SLP_LDO_SIM0,
157     SLP_LDO_RF1,
158     SLP_LDO_RF0,
159    //end sc8810
160     //sc7710g2
161     SLP_LDO_AP_AMP,
162     SLP_LDO_SIM2,
163     //end
164     SLP_LDO_MAX
165 }SLP_LDO_E;
166
167 typedef enum
168 {
169         LDO_VOLT_LEVEL0 = 0,
170         LDO_VOLT_LEVEL1,
171         LDO_VOLT_LEVEL2,
172         LDO_VOLT_LEVEL3,
173         LDO_VOLT_LEVEL_FAULT_MAX
174 }LDO_VOLT_LEVEL_E;
175
176 //LDO error flag definition
177 typedef enum
178 {
179     LDO_ERR_OK,
180     LDO_ERR_INVALID_HANDLE,
181     LDO_ERR_INVALID_OPERATION,
182     LDO_ERR_ERR
183 }LDO_ERR_E;
184
185 /**---------------------------------------------------------------------------*
186  **                         Constant Variables                                *
187  **---------------------------------------------------------------------------*/
188
189
190 /**---------------------------------------------------------------------------*
191  **                         Function Prototypes                               *
192  **---------------------------------------------------------------------------*/
193
194
195 /*****************************************************************************/
196 //  Description:  Turn on the LDO specified by input parameter ldo_id  
197 //      Global resource dependence: NONE
198 //  Author:  jiexia.yu
199 //      Note:    return value = LDO_ERR_OK if operation is executed successfully           
200 /*****************************************************************************/
201  LDO_ERR_E LDO_TurnOnLDO(LDO_ID_E ldo_id);
202
203 /*****************************************************************************/
204 //  Description:  Turo off the LDO specified by parameter ldo_id
205 //      Global resource dependence: NONE
206 //  Author: jiexia.yu
207 //      Note:           
208 /*****************************************************************************/
209  LDO_ERR_E LDO_TurnOffLDO(LDO_ID_E ldo_id);
210
211 /*****************************************************************************/
212 //  Description: Find the LDO status -- ON or OFF
213 //      Global resource dependence: 
214 //  Author: jiexia.yu         
215 //      Note: return SCI_TRUE means LDO is ON, SCI_FALSE is OFF        
216 /*****************************************************************************/
217  int LDO_IsLDOOn(LDO_ID_E ldo_id);
218
219 /*****************************************************************************/
220 //  Description: Get LDO voltage level
221 //      Global resource dependence: 
222 //  Author: jiexia.yu
223 //      Note:           
224 /*****************************************************************************/
225  LDO_VOLT_LEVEL_E LDO_GetVoltLevel(LDO_ID_E ldo_id);
226
227 /*****************************************************************************/
228 //  Description:  This function could be invoked by customer for LDO voltage
229 //                level & referece voltage level initiation.
230 //      Global resource dependence: 
231 //  Author: jiexia.yu         
232 //      Note:           
233 /*****************************************************************************/
234  LDO_ERR_E LDO_SetVoltLevel(LDO_ID_E ldo_id, LDO_VOLT_LEVEL_E level);
235
236 /*****************************************************************************/
237 //  Description:  Control The VCAM Domain PAD to avoid VCAM Domain PAD input not floating
238 //      Global resource dependence: NONE
239 //  Author:  Tao.Feng && Yi.Qiu
240 //      Note:    return value = LDO_ERR_OK if operation is executed successfully           
241 /*****************************************************************************/
242  LDO_ERR_E LDO_ControVCAMPad(int pad_on);
243
244 /*****************************************************************************/
245 //  Description:  Shut down any LDO that do not used when system enters deepsleep
246 //      Global resource dependence: s_ldo_reopen[]
247 //  Author: jiexia.yu     
248 //      Note:           
249 /*****************************************************************************/
250  void LDO_DeepSleepInit(void);
251  void LDO_TurnOffAllLDO(void);
252
253 /**---------------------------------------------------------------------------*
254  **                         Compiler Flag                                     *
255  **---------------------------------------------------------------------------*/
256
257 #endif // _LDO_MANAGER_H_
258
259