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