1 // Copyright (C) 2022 Beken Corporation
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 #include "sys_hal.h"
16 #include "sys_driver.h"
17 #include "sys_driver_common.h"
18
19 /*clock power control start*/
sys_drv_dev_clk_pwr_up(dev_clk_pwr_id_t dev,dev_clk_pwr_ctrl_t power_up)20 void sys_drv_dev_clk_pwr_up(dev_clk_pwr_id_t dev, dev_clk_pwr_ctrl_t power_up)
21 {
22 uint32_t int_level = rtos_disable_int();
23
24 sys_hal_clk_pwr_ctrl(dev, power_up);
25
26 rtos_enable_int(int_level);
27 }
28
sys_drv_set_clk_select(dev_clk_select_id_t dev,dev_clk_select_t clk_sel)29 void sys_drv_set_clk_select(dev_clk_select_id_t dev, dev_clk_select_t clk_sel)
30 {
31 uint32_t int_level = rtos_disable_int();
32
33 sys_hal_set_clk_select(dev, clk_sel);
34
35 rtos_enable_int(int_level);
36 }
37
sys_drv_get_clk_select(dev_clk_select_id_t dev)38 dev_clk_select_t sys_drv_get_clk_select(dev_clk_select_id_t dev)
39 {
40 dev_clk_select_t clk_sel;
41
42 uint32_t int_level = rtos_disable_int();
43
44 clk_sel = sys_hal_get_clk_select(dev);
45
46 rtos_enable_int(int_level);
47
48 return clk_sel;
49 }
50
51 //DCO divider is valid for all of the peri-devices.
sys_drv_set_dco_div(dev_clk_dco_div_t div)52 void sys_drv_set_dco_div(dev_clk_dco_div_t div)
53 {
54 uint32_t int_level = rtos_disable_int();
55
56 sys_hal_set_dco_div(div);
57
58 rtos_enable_int(int_level);
59 }
60
61 //DCO divider is valid for all of the peri-devices.
sys_drv_get_dco_div(void)62 dev_clk_dco_div_t sys_drv_get_dco_div(void)
63 {
64 dev_clk_dco_div_t dco_div;
65
66 uint32_t int_level = rtos_disable_int();
67
68 dco_div = sys_hal_get_dco_div();
69
70 rtos_enable_int(int_level);
71
72 return dco_div;
73 }
74
75 /*clock power control end*/
76
sys_drv_sadc_pwr_up(void)77 void sys_drv_sadc_pwr_up(void)
78 {
79 uint32_t int_level = rtos_disable_int();
80
81 sys_hal_sadc_pwr_up();
82 rtos_enable_int(int_level);
83 }
84
sys_drv_sadc_pwr_down(void)85 void sys_drv_sadc_pwr_down(void)
86 {
87 uint32_t int_level = rtos_disable_int();
88
89 sys_hal_sadc_pwr_down();
90 rtos_enable_int(int_level);
91 }
92
93 #if CONFIG_SDIO_V2P0
sys_driver_set_sdio_clk_en(uint32_t value)94 void sys_driver_set_sdio_clk_en(uint32_t value)
95 {
96 uint32_t int_level = rtos_disable_int();
97 uint32_t ret = SYS_DRV_FAILURE;
98 ret = sys_amp_res_acquire();
99
100 sys_hal_set_sdio_clk_en(value);
101
102 if(!ret)
103 ret = sys_amp_res_release();
104
105 rtos_enable_int(int_level);
106 }
107
sys_driver_set_sdio_clk_div(uint32_t value)108 void sys_driver_set_sdio_clk_div(uint32_t value)
109 {
110 uint32_t int_level = rtos_disable_int();
111
112 sys_hal_set_sdio_clk_div(value);
113
114 rtos_enable_int(int_level);
115 }
116
sys_driver_get_sdio_clk_div()117 uint32_t sys_driver_get_sdio_clk_div()
118 {
119 uint32_t reg_v;
120 uint32_t int_level = rtos_disable_int();
121
122 reg_v = sys_hal_get_sdio_clk_div();
123 rtos_enable_int(int_level);
124
125 return reg_v;
126 }
127
sys_driver_set_sdio_clk_sel(uint32_t value)128 void sys_driver_set_sdio_clk_sel(uint32_t value)
129 {
130 uint32_t int_level = rtos_disable_int();
131
132 sys_hal_set_sdio_clk_sel(value);
133
134 rtos_enable_int(int_level);
135 }
136
sys_driver_get_sdio_clk_sel()137 uint32_t sys_driver_get_sdio_clk_sel()
138 {
139 uint32_t reg_v;
140 uint32_t int_level = rtos_disable_int();
141
142 reg_v = sys_hal_get_sdio_clk_sel();
143 rtos_enable_int(int_level);
144
145 return reg_v;
146 }
147 #endif
148
149 /* Platform UART Start **/
sys_drv_uart_select_clock(uart_id_t id,uart_src_clk_t mode)150 void sys_drv_uart_select_clock(uart_id_t id, uart_src_clk_t mode)
151 {
152 uint32_t int_level = rtos_disable_int();
153 uint32_t ret = SYS_DRV_FAILURE;
154 ret = sys_amp_res_acquire();
155
156 sys_hal_uart_select_clock(id, mode);
157
158 if(!ret)
159 ret = sys_amp_res_release();
160
161 rtos_enable_int(int_level);
162 }
163 /* Platform UART End **/
164
165 /* Platform PWM Start **/
sys_drv_pwm_set_clock(uint32_t mode,uint32_t param)166 void sys_drv_pwm_set_clock(uint32_t mode, uint32_t param)
167 {
168 uint32_t int_level = rtos_disable_int();
169 uint32_t ret = SYS_DRV_FAILURE;
170 ret = sys_amp_res_acquire();
171
172 sys_hal_pwm_set_clock(mode, param);
173
174 if(!ret)
175 ret = sys_amp_res_release();
176
177 rtos_enable_int(int_level);
178 }
179
sys_drv_pwm_select_clock(sys_sel_pwm_t num,pwm_src_clk_t mode)180 void sys_drv_pwm_select_clock(sys_sel_pwm_t num, pwm_src_clk_t mode)
181 {
182 uint32_t int_level = rtos_disable_int();
183 uint32_t ret = SYS_DRV_FAILURE;
184 ret = sys_amp_res_acquire();
185
186 sys_hal_pwm_select_clock(num, mode);
187
188 if(!ret)
189 ret = sys_amp_res_release();
190
191 rtos_enable_int(int_level);
192 }
193 /* Platform PWM End **/
194
sys_drv_timer_select_clock(sys_sel_timer_t num,timer_src_clk_t mode)195 void sys_drv_timer_select_clock(sys_sel_timer_t num, timer_src_clk_t mode)
196 {
197 uint32_t int_level = rtos_disable_int();
198 uint32_t ret = SYS_DRV_FAILURE;
199 ret = sys_amp_res_acquire();
200
201 sys_hal_timer_select_clock(num, mode);
202
203 if(!ret)
204 ret = sys_amp_res_release();
205
206 rtos_enable_int(int_level);
207 }
208
sys_drv_usb_clock_ctrl(bool ctrl,void * arg)209 void sys_drv_usb_clock_ctrl(bool ctrl, void *arg)
210 {
211 uint32_t int_level = rtos_disable_int();
212 uint32_t ret = SYS_DRV_FAILURE;
213 ret = sys_amp_res_acquire();
214
215 sys_hal_usb_enable_clk(ctrl);
216
217 if(!ret)
218 ret = sys_amp_res_release();
219
220 rtos_enable_int(int_level);
221 }
222
223 //sys_ctrl CMD: CMD_SCTRL_SET_FLASH_DCO
sys_drv_flash_set_dco(void)224 void sys_drv_flash_set_dco(void)
225 {
226 uint32_t int_level = rtos_disable_int();
227
228 sys_hal_flash_set_dco();
229
230 rtos_enable_int(int_level);
231 }
232
233 //sys_ctrl CMD: CMD_SCTRL_SET_FLASH_DPLL
sys_drv_flash_set_dpll(void)234 void sys_drv_flash_set_dpll(void)
235 {
236 uint32_t int_level = rtos_disable_int();
237
238 sys_hal_flash_set_dpll();
239
240 rtos_enable_int(int_level);
241 }
242
sys_drv_flash_cksel(uint32_t value)243 void sys_drv_flash_cksel(uint32_t value)
244 {
245 uint32_t int_level = rtos_disable_int();
246
247 sys_hal_flash_set_clk(value);
248
249 rtos_enable_int(int_level);
250 }
251
sys_drv_flash_set_clk_div(uint32_t value)252 void sys_drv_flash_set_clk_div(uint32_t value)
253 {
254 uint32_t int_level = rtos_disable_int();
255
256 sys_hal_flash_set_clk_div(value);
257
258 rtos_enable_int(int_level);
259 }
260
sys_drv_flash_get_clk_sel(void)261 uint32_t sys_drv_flash_get_clk_sel(void)
262 {
263 return sys_hal_flash_get_clk_sel();
264 }
265
sys_drv_flash_get_clk_div(void)266 uint32_t sys_drv_flash_get_clk_div(void)
267 {
268 return sys_hal_flash_get_clk_div();
269 }
270
271 //sys_ctrl CMD: CMD_QSPI_CLK_SEL
sys_drv_qspi_clk_sel(uint32_t param)272 void sys_drv_qspi_clk_sel(uint32_t param)
273 {
274 uint32_t int_level = rtos_disable_int();
275
276 sys_hal_qspi_clk_sel(param);
277
278 rtos_enable_int(int_level);
279 }
280
sys_drv_qspi_set_src_clk_div(uint32_t value)281 void sys_drv_qspi_set_src_clk_div(uint32_t value)
282 {
283 uint32_t int_level = rtos_disable_int();
284
285 sys_hal_qspi_set_src_clk_div(value);
286
287 rtos_enable_int(int_level);
288 }
289
sys_drv_psram_clk_sel(uint32_t value)290 uint32_t sys_drv_psram_clk_sel(uint32_t value)
291 {
292 uint32_t int_level = rtos_disable_int();
293
294 sys_hal_psram_clk_sel(value);
295 rtos_enable_int(int_level);
296 return SYS_DRV_SUCCESS;
297 }
298
sys_drv_psram_set_clkdiv(uint32_t value)299 uint32_t sys_drv_psram_set_clkdiv(uint32_t value)
300 {
301 uint32_t int_level = rtos_disable_int();
302
303 sys_hal_psram_set_clkdiv(value);
304 rtos_enable_int(int_level);
305 return SYS_DRV_SUCCESS;
306 }
307
sys_drv_i2s_select_clock(uint32_t value)308 uint32_t sys_drv_i2s_select_clock(uint32_t value)
309 {
310 uint32_t int_level = rtos_disable_int();
311 uint32_t ret = SYS_DRV_FAILURE;
312 ret = sys_amp_res_acquire();
313
314 sys_hal_i2s_select_clock(value);
315
316 if(!ret)
317 ret = sys_amp_res_release();
318
319 rtos_enable_int(int_level);
320 return ret;
321 }
322
sys_drv_i2s_clock_en(uint32_t value)323 uint32_t sys_drv_i2s_clock_en(uint32_t value)
324 {
325 uint32_t int_level = rtos_disable_int();
326
327 sys_hal_aud_clock_en(value);
328 rtos_enable_int(int_level);
329 return SYS_DRV_SUCCESS;
330 }
331
sys_drv_fft_disckg_set(uint32_t value)332 uint32_t sys_drv_fft_disckg_set(uint32_t value)
333 {
334 uint32_t int_level = rtos_disable_int();
335
336 sys_hal_fft_disckg_set(value);
337 rtos_enable_int(int_level);
338 return SYS_DRV_SUCCESS;
339 }
340
sys_drv_i2s_disckg_set(uint32_t value)341 uint32_t sys_drv_i2s_disckg_set(uint32_t value)
342 {
343 uint32_t int_level = rtos_disable_int();
344
345 sys_hal_i2s_disckg_set(value);
346 rtos_enable_int(int_level);
347 return SYS_DRV_SUCCESS;
348 }
349
sys_drv_nmi_wdt_set_clk_div(uint32_t value)350 void sys_drv_nmi_wdt_set_clk_div(uint32_t value)
351 {
352 uint32_t int_level = rtos_disable_int();
353
354 sys_hal_nmi_wdt_set_clk_div(value);
355
356 rtos_enable_int(int_level);
357 }
358
sys_drv_nmi_wdt_get_clk_div(void)359 uint32_t sys_drv_nmi_wdt_get_clk_div(void)
360 {
361 return sys_hal_nmi_wdt_get_clk_div();
362 }
363
sys_drv_trng_disckg_set(uint32_t value)364 void sys_drv_trng_disckg_set(uint32_t value)
365 {
366 uint32_t int_level = rtos_disable_int();
367
368 sys_hal_trng_disckg_set(value);
369 rtos_enable_int(int_level);
370 }
371