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