blob: 146b1243fde003c6cfd9ab1713878b62c50a02ad [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001/*********************************************************************
2 * LEGAL DISCLAIMER
3 *
4 * (Header of MediaTek Software/Firmware Release or Documentation)
5 *
6 * BY OPENING OR USING THIS FILE, BUYER HEREBY UNEQUIVOCALLY
7 * ACKNOWLEDGES AND AGREES THAT THE SOFTWARE/FIRMWARE AND ITS
8 * DOCUMENTATIONS ("MEDIATEK SOFTWARE") RECEIVED FROM MEDIATEK AND/OR
9 * ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY.
10 * MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR
11 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
12 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
13 * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY
14 * WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH
15 * MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK
16 * SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY
17 * WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE
18 * RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
19 * SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
20 *
21 * BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
22 * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED
23 * HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
24 * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR
25 * SERVICE CHARGE PAID BY BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE
26 * AT ISSUE.
27 *
28 * THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN
29 * ACCORDANCE WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING
30 * ITS CONFLICT OF LAWS PRINCIPLES.
31 **********************************************************************
32 */
33
34
35/*******************************************************************************
36
37 * Include files
38
39******************************************************************************/
40
41#include "drv_iomux.h"
42#include "kal_public_api.h"
43/*******************************************************************************
44
45 * LOCAL CONST DEFINATION
46
47******************************************************************************/
48
49
50/*******************************************************************************
51
52 * LOCAL TYPE DEFINATION
53
54******************************************************************************/
55
56
57/*******************************************************************************
58
59 * EXTERN DECLARATION
60
61******************************************************************************/
62
63
64/*******************************************************************************
65
66 * GLOBAL VARIABLE DEFINATIONS
67
68*******************************************************************************/
69kal_uint32 IOMUX_funcValid_check(kal_uint32 function_num, mod_sel_t mod_num, kal_uint32 sip_flag){
70 return 0;
71
72}
73
74 /*
75 * @brief set IOPAD group to special funciton mode
76 * @param
77 * funciton_num: function mode selection valid value 0~5;
78 * mod_num: IOPAD group selection, valied value please see enum module_sel;
79 * sip_flag: choose the chip is SIP or Non-SIP.
80 * 0: non-sip ; 1: sip
81 * @return
82 */
83
84void IOMUX_set_module_func(mod_sel_t mod_num, kal_uint32 function_num){
85
86 kal_uint32 group_offset = 0;
87 kal_uint32 mod_offset = 0;
88 kal_uint32 gpio_val;
89 if(function_num>5){
90 ASSERT(0);
91 }
92 if(mod_num< SEL_PMIC_BSI_0){
93 group_offset = IOMUX0_MODE_SEL_1;
94 mod_offset = mod_num;
95 }else if(mod_num<SEL_C2K_UT0){
96 group_offset = IOMUX0_MODE_SEL_2;
97 mod_offset = mod_num-SEL_PMIC_BSI_0;
98 }else if(mod_num< SEL_MISC_BSI_0){
99 group_offset = IOMUX0_MODE_SEL_3;
100 mod_offset = mod_num-SEL_C2K_UT0;
101 }else if(mod_num< SEL_GPIO_0){
102 group_offset = IOMUX1_MODE_SEL_0;
103 mod_offset = mod_num-SEL_MISC_BSI_0;
104 }else if(mod_num< SEL_BPI_0){
105 group_offset = IOMUX1_MODE_SEL_1;
106 mod_offset = mod_num-SEL_GPIO_0;
107 }else if(mod_num< SEL_BPI_10){
108 group_offset = IOMUX2_MODE_SEL_0;
109 mod_offset = mod_num-SEL_BPI_0;
110 }else if(mod_num< SEL_NFI_0){
111 group_offset = IOMUX2_MODE_SEL_1;
112 mod_offset = mod_num-SEL_BPI_10;
113 }else if(mod_num< SEL_NFI_10){
114 group_offset = IOMUX2_MODE_SEL_2;
115 mod_offset = mod_num-SEL_NFI_0;
116 }else if(mod_num< SEL_NFI_20){
117 group_offset = IOMUX2_MODE_SEL_3;
118 mod_offset = mod_num-SEL_NFI_10;
119 }else if(mod_num< SEL_USIM_1){
120 group_offset = IOMUX2_MODE_SEL_4;
121 mod_offset = mod_num-SEL_NFI_20;
122 }else if(mod_num<= SEL_SPI_1){
123 group_offset = IOMUX2_MODE_SEL_5;
124 mod_offset = mod_num-SEL_USIM_1;
125 }else{
126 ASSERT(0);
127 }
128 gpio_val = DRV_Reg32(group_offset);
129 gpio_val &= ~(0x7<<mod_offset*3);
130 gpio_val |= (function_num<<mod_offset*3);
131 DRV_WriteReg32(group_offset, gpio_val);
132}
133
134 /*
135 * @brief Get the special funciton mode of the IOPAD group.
136 * @param
137 * mod_num: IOPAD group selection, valied value please see enum module_sel;
138 * @return
139 return the function mode, valid value 0~5;
140 */
141kal_uint32 IOMUX_get_module_func(mod_sel_t mod_num){
142
143 kal_uint32 group_offset = 0;
144 kal_uint32 mod_offset = 0;
145 kal_uint32 gpio_val;
146
147 if(mod_num< SEL_PMIC_BSI_0){
148 group_offset = IOMUX0_MODE_SEL_1;
149 mod_offset = mod_num;
150 }else if(mod_num<SEL_C2K_UT0){
151 group_offset = IOMUX0_MODE_SEL_2;
152 mod_offset = mod_num-SEL_PMIC_BSI_0;
153 }else if(mod_num< SEL_MISC_BSI_0){
154 group_offset = IOMUX0_MODE_SEL_3;
155 mod_offset = mod_num-SEL_C2K_UT0;
156 }else if(mod_num< SEL_GPIO_0){
157 group_offset = IOMUX1_MODE_SEL_0;
158 mod_offset = mod_num-SEL_MISC_BSI_0;
159 }else if(mod_num< SEL_BPI_0){
160 group_offset = IOMUX1_MODE_SEL_1;
161 mod_offset = mod_num-SEL_GPIO_0;
162 }else if(mod_num< SEL_BPI_10){
163 group_offset = IOMUX2_MODE_SEL_0;
164 mod_offset = mod_num-SEL_BPI_0;
165 }else if(mod_num< SEL_NFI_0){
166 group_offset = IOMUX2_MODE_SEL_1;
167 mod_offset = mod_num-SEL_BPI_10;
168 }else if(mod_num< SEL_NFI_10){
169 group_offset = IOMUX2_MODE_SEL_2;
170 mod_offset = mod_num-SEL_NFI_0;
171 }else if(mod_num< SEL_NFI_20){
172 group_offset = IOMUX2_MODE_SEL_3;
173 mod_offset = mod_num-SEL_NFI_10;
174 }else if(mod_num< SEL_USIM_1){
175 group_offset = IOMUX2_MODE_SEL_4;
176 mod_offset = mod_num-SEL_NFI_20;
177 }else if(mod_num<= SEL_SPI_1){
178 group_offset = IOMUX2_MODE_SEL_5;
179 mod_offset = mod_num-SEL_USIM_1;
180 }else{
181 ASSERT(0);
182 }
183 gpio_val = DRV_Reg32(group_offset);
184 gpio_val &= (0x7<<mod_offset*3);
185 gpio_val = gpio_val>>mod_offset;
186
187 return gpio_val;
188
189}
190
191/*
192SDIO IOPAD drving table:
193DRIVE Driving Current (mA)
194000 3
195001 6
196010 9
197011 12
198100 15
199101 18
200110 21
201111 24
202
203Other IOPAD Driving table:
204DRIVE Driving Current (mA)
205 (3.3V mode) (1.8V mode)
20600 4 3
20701 8 6
20810 12 9
20911 16 12
210
211*/
212
213void IOMUX_set_module_driving(config_sel_t cfg_sel, kal_uint32 drv_sel){
214 kal_uint32 gpio_val;
215 kal_uint32 group_offset;
216 switch(cfg_sel){
217 case CFG_GLOBAL: group_offset = IOMUX_CFG_GLOBAL; break;
218 case CFG_MDUART: group_offset = IOMUX_CFG_MDUART; break;
219 case CFG_APUART: group_offset = IOMUX_CFG_APUART ; break;
220 case CFG_SUART0: group_offset = IOMUX_CFG_SUART0; break;
221 case CFG_SUART1 : group_offset = IOMUX_CFG_SUART1; break;
222 case CFG_SDIO: group_offset = IOMUX_CFG_SDIO ; break;
223 case CFG_MSDC0P_0: group_offset = IOMUX_CFG_MSDC0P_0; break;
224 case CFG_MSDC0P_1: group_offset = IOMUX_CFG_MSDC0P_1; break;
225 case CFG_MSDC0P_2: group_offset = IOMUX_CFG_MSDC0P_2; break;
226 case CFG_MSDC1P: group_offset = IOMUX_CFG_MSDC1P; break;
227 case CFG_PMIC_BSI_0: group_offset = IOMUX_CFG_PMIC_BSI_0; break;
228 case CFG_PMIC_BSI_1: group_offset = IOMUX_CFG_PMIC_BSI_1; break;
229 case CFG_PMIC_BSI_2: group_offset = IOMUX_CFG_PMIC_BSI_2; break;
230 case CFG_RFIC2_BSI_0: group_offset = IOMUX_CFG_RFIC2_BSI_0; break;
231 case CFG_RFIC2_BSI_1: group_offset = IOMUX_CFG_RFIC2_BSI_1; break;
232 case CFG_CV : group_offset = IOMUX_CFG_CV ; break;
233 case CFG_SB : group_offset = IOMUX_CFG_SB; break;
234 case CFG_I2C: group_offset = IOMUX_CFG_I2C; break;
235 case CFG_SDIO_INT: group_offset = CFG_SDIO_INT; break;
236 case CFG_MSDC1P_CLK: group_offset = IOMUX_CFG_MSDC1P_CLK; break;
237 case CFG_MSDC1P_CMD: group_offset = IOMUX_CFG_MSDC1P_CMD; break;
238 case CFG_MSDC1P_DATA0: group_offset = IOMUX_CFG_MSDC1P_DATA0; break;
239 case CFG_MSDC1P_DATA1: group_offset = IOMUX_CFG_MSDC1P_DATA1; break;
240 case CFG_MSDC1P_DATA2: group_offset = IOMUX_CFG_MSDC1P_DATA2; break;
241 case CFG_MSDC1P_DATA3: group_offset = IOMUX_CFG_MSDC1P_DATA3; break;
242 case CFG_MSDC1P_RCLK: group_offset = IOMUX_CFG_MSDC1P_RCLK; break;
243 case CFG_BIAS_TUNE_0: group_offset = IOMUX0_CFG_BIAS_TUNE; break;
244 case CFG_RFIC1_BSI: group_offset = IOMUX_CFG_RFIC1_BSI; break;
245 case CFG_MISC_BSI_0: group_offset = IOMUX_CFG_MISC_BSI_0; break;
246 case CFG_MISC_BSI_1: group_offset = IOMUX_CFG_MISC_BSI_1; break;
247 case CFG_GPIO_0: group_offset = IOMUX_CFG_GPIO_0; break;
248 case CFG_GPIO_1: group_offset = IOMUX_CFG_GPIO_1; break;
249 case CFG_GPIO_2: group_offset = IOMUX_CFG_GPIO_2; break;
250 case CFG_GPIO_3: group_offset = IOMUX_CFG_GPIO_3; break;
251 case CFG_BIAS_TUNE_1: group_offset = IOMUX1_CFG_BIAS_TUNE; break;
252 case CFG_JTAG: group_offset = IOMUX_CFG_JTAG ; break;
253 case CFG_SPI_0: group_offset = IOMUX_CFG_SPI_0; break;
254 case CFG_SPI_1: group_offset = IOMUX_CFG_SPI_1; break;
255 case CFG_NFI_0: group_offset = IOMUX_CFG_NFI_0; break;
256 case CFG_NFI_1: group_offset = IOMUX_CFG_NFI_1; break;
257 case CFG_NFI_2: group_offset = IOMUX_CFG_NFI_2; break;
258 case CFG_NFI_3: group_offset = IOMUX_CFG_NFI_3; break;
259 case CFG_NFI_4: group_offset = IOMUX_CFG_NFI_4; break;
260 case CFG_BPI_0: group_offset = IOMUX_CFG_BPI_0; break;
261 case CFG_BPI_1: group_offset = IOMUX_CFG_BPI_1; break;
262 case CFG_BPI_2: group_offset = IOMUX_CFG_BPI_2; break;
263 case CFG_BPI_3: group_offset = IOMUX_CFG_BPI_3; break;
264 case CFG_BPI_4: group_offset = IOMUX_CFG_BPI_4; break;
265 case CFG_BPI_5: group_offset = IOMUX_CFG_BPI_5; break;
266 case CFG_BPI_6: group_offset = IOMUX_CFG_BPI_6; break;
267 case CFG_BPI_7: group_offset = IOMUX_CFG_BPI_7; break;
268 case CFG_BPI_8: group_offset = IOMUX_CFG_BPI_8; break;
269 case CFG_BPI_9: group_offset = IOMUX_CFG_BPI_9; break;
270 case CFG_BPI_10: group_offset = IOMUX_CFG_BPI_10; break;
271 case CFG_BPI_11: group_offset = IOMUX_CFG_BPI_11; break;
272 case CFG_USIM1: group_offset = IOMUX_CFG_USIM1; break;
273 case CFG_USIM2: group_offset = IOMUX_CFG_USIM2; break;
274 case CFG_BIAS_TUNE_2: group_offset = IOMUX2_CFG_BIAS_TUNE; break;
275 default:
276 ASSERT(0);
277 break;
278 }
279 gpio_val = DRV_Reg32(group_offset);
280 if(cfg_sel ==CFG_SDIO){
281 gpio_val &= ~(0x7<<10);
282 if(drv_sel>0x7){
283 ASSERT(0);
284 }
285
286 }else{
287 gpio_val &= ~(0x3<<10);
288 if(drv_sel>0x7){
289 ASSERT(0);
290 }
291 }
292 gpio_val |= (drv_sel<<10);
293 DRV_WriteReg32(group_offset, gpio_val);
294
295}
296
297kal_uint32 IOMUX_get_module_driving(config_sel_t cfg_sel ){
298 kal_uint32 drv_sel;
299 kal_uint32 gpio_val;
300 kal_uint32 group_offset;
301
302 switch(cfg_sel){
303 case CFG_GLOBAL: group_offset = IOMUX_CFG_GLOBAL; break;
304 case CFG_MDUART: group_offset = IOMUX_CFG_MDUART; break;
305 case CFG_APUART: group_offset = IOMUX_CFG_APUART ; break;
306 case CFG_SUART0: group_offset = IOMUX_CFG_SUART0; break;
307 case CFG_SUART1 : group_offset = IOMUX_CFG_SUART1; break;
308 case CFG_SDIO: group_offset = IOMUX_CFG_SDIO ; break;
309 case CFG_MSDC0P_0: group_offset = IOMUX_CFG_MSDC0P_0; break;
310 case CFG_MSDC0P_1: group_offset = IOMUX_CFG_MSDC0P_1; break;
311 case CFG_MSDC0P_2: group_offset = IOMUX_CFG_MSDC0P_2; break;
312 case CFG_MSDC1P: group_offset = IOMUX_CFG_MSDC1P; break;
313 case CFG_PMIC_BSI_0: group_offset = IOMUX_CFG_PMIC_BSI_0; break;
314 case CFG_PMIC_BSI_1: group_offset = IOMUX_CFG_PMIC_BSI_1; break;
315 case CFG_PMIC_BSI_2: group_offset = IOMUX_CFG_PMIC_BSI_2; break;
316 case CFG_RFIC2_BSI_0: group_offset = IOMUX_CFG_RFIC2_BSI_0; break;
317 case CFG_RFIC2_BSI_1: group_offset = IOMUX_CFG_RFIC2_BSI_1; break;
318 case CFG_CV : group_offset = IOMUX_CFG_CV ; break;
319 case CFG_SB : group_offset = IOMUX_CFG_SB; break;
320 case CFG_I2C: group_offset = IOMUX_CFG_I2C; break;
321 case CFG_SDIO_INT: group_offset = CFG_SDIO_INT; break;
322 case CFG_MSDC1P_CLK: group_offset = IOMUX_CFG_MSDC1P_CLK; break;
323 case CFG_MSDC1P_CMD: group_offset = IOMUX_CFG_MSDC1P_CMD; break;
324 case CFG_MSDC1P_DATA0: group_offset = IOMUX_CFG_MSDC1P_DATA0; break;
325 case CFG_MSDC1P_DATA1: group_offset = IOMUX_CFG_MSDC1P_DATA1; break;
326 case CFG_MSDC1P_DATA2: group_offset = IOMUX_CFG_MSDC1P_DATA2; break;
327 case CFG_MSDC1P_DATA3: group_offset = IOMUX_CFG_MSDC1P_DATA3; break;
328 case CFG_MSDC1P_RCLK: group_offset = IOMUX_CFG_MSDC1P_RCLK; break;
329 case CFG_BIAS_TUNE_0: group_offset = IOMUX0_CFG_BIAS_TUNE; break;
330 case CFG_RFIC1_BSI: group_offset = IOMUX_CFG_RFIC1_BSI; break;
331 case CFG_MISC_BSI_0: group_offset = IOMUX_CFG_MISC_BSI_0; break;
332 case CFG_MISC_BSI_1: group_offset = IOMUX_CFG_MISC_BSI_1; break;
333 case CFG_GPIO_0: group_offset = IOMUX_CFG_GPIO_0; break;
334 case CFG_GPIO_1: group_offset = IOMUX_CFG_GPIO_1; break;
335 case CFG_GPIO_2: group_offset = IOMUX_CFG_GPIO_2; break;
336 case CFG_GPIO_3: group_offset = IOMUX_CFG_GPIO_3; break;
337 case CFG_BIAS_TUNE_1: group_offset = IOMUX1_CFG_BIAS_TUNE; break;
338 case CFG_JTAG: group_offset = IOMUX_CFG_JTAG ; break;
339 case CFG_SPI_0: group_offset = IOMUX_CFG_SPI_0; break;
340 case CFG_SPI_1: group_offset = IOMUX_CFG_SPI_1; break;
341 case CFG_NFI_0: group_offset = IOMUX_CFG_NFI_0; break;
342 case CFG_NFI_1: group_offset = IOMUX_CFG_NFI_1; break;
343 case CFG_NFI_2: group_offset = IOMUX_CFG_NFI_2; break;
344 case CFG_NFI_3: group_offset = IOMUX_CFG_NFI_3; break;
345 case CFG_NFI_4: group_offset = IOMUX_CFG_NFI_4; break;
346 case CFG_BPI_0: group_offset = IOMUX_CFG_BPI_0; break;
347 case CFG_BPI_1: group_offset = IOMUX_CFG_BPI_1; break;
348 case CFG_BPI_2: group_offset = IOMUX_CFG_BPI_2; break;
349 case CFG_BPI_3: group_offset = IOMUX_CFG_BPI_3; break;
350 case CFG_BPI_4: group_offset = IOMUX_CFG_BPI_4; break;
351 case CFG_BPI_5: group_offset = IOMUX_CFG_BPI_5; break;
352 case CFG_BPI_6: group_offset = IOMUX_CFG_BPI_6; break;
353 case CFG_BPI_7: group_offset = IOMUX_CFG_BPI_7; break;
354 case CFG_BPI_8: group_offset = IOMUX_CFG_BPI_8; break;
355 case CFG_BPI_9: group_offset = IOMUX_CFG_BPI_9; break;
356 case CFG_BPI_10: group_offset = IOMUX_CFG_BPI_10; break;
357 case CFG_BPI_11: group_offset = IOMUX_CFG_BPI_11 ; break;
358 case CFG_USIM1: group_offset = IOMUX_CFG_USIM1; break;
359 case CFG_USIM2: group_offset = IOMUX_CFG_USIM2; break;
360 case CFG_BIAS_TUNE_2: group_offset = IOMUX2_CFG_BIAS_TUNE; break;
361 default:
362 ASSERT(0);
363 break;
364 }
365 gpio_val = DRV_Reg32(group_offset);
366 if(cfg_sel ==CFG_SDIO){
367 gpio_val &= (0x7<<10);
368 drv_sel = (gpio_val>>10);
369
370 }else{
371 gpio_val &= (0x3<<10);
372 drv_sel = (gpio_val>>10);
373 }
374
375 return drv_sel;
376}
377
378void IOMUX_set_moduleconfig(module_conf_t* iomux_cfg){}
379module_conf_t* IOMUX_get_moduleconfig(config_sel_t cfg_sel, module_type_t type){
380 return 0;
381}
382
383void IOMUX_init(){
384 //kal_uint32 func_num = 0;
385 //IOMUX_PRINT("IOMUX init");
386 #error "The chip type is non-supported"
387
388
389
390}
391
392
393