summaryrefslogtreecommitdiff
path: root/firmware/target/arm/imx233
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/imx233')
-rw-r--r--firmware/target/arm/imx233/audioout-imx233.c4
-rw-r--r--firmware/target/arm/imx233/clkctrl-imx233.c109
-rw-r--r--firmware/target/arm/imx233/clkctrl-imx233.h41
-rw-r--r--firmware/target/arm/imx233/debug-imx233.c18
-rw-r--r--firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c8
-rw-r--r--firmware/target/arm/imx233/ssp-imx233.c14
-rw-r--r--firmware/target/arm/imx233/timrot-imx233.c2
-rw-r--r--firmware/target/arm/imx233/usb-imx233.c4
8 files changed, 101 insertions, 99 deletions
diff --git a/firmware/target/arm/imx233/audioout-imx233.c b/firmware/target/arm/imx233/audioout-imx233.c
index e03de5c861..4e1ff27ad2 100644
--- a/firmware/target/arm/imx233/audioout-imx233.c
+++ b/firmware/target/arm/imx233/audioout-imx233.c
@@ -30,7 +30,7 @@ void imx233_audioout_preinit(void)
30 /* Enable AUDIOOUT block */ 30 /* Enable AUDIOOUT block */
31 imx233_reset_block(&HW_AUDIOOUT_CTRL); 31 imx233_reset_block(&HW_AUDIOOUT_CTRL);
32 /* Enable digital filter clock */ 32 /* Enable digital filter clock */
33 imx233_enable_xtal_clock(XTAL_FILT, true); 33 imx233_clkctrl_enable_xtal(XTAL_FILT, true);
34 /* Enable DAC */ 34 /* Enable DAC */
35 __REG_CLR(HW_AUDIOOUT_ANACLKCTRL) = HW_AUDIOOUT_ANACLKCTRL__CLKGATE; 35 __REG_CLR(HW_AUDIOOUT_ANACLKCTRL) = HW_AUDIOOUT_ANACLKCTRL__CLKGATE;
36 /* Set capless mode */ 36 /* Set capless mode */
@@ -76,7 +76,7 @@ void imx233_audioout_close(void)
76 /* Gate off DAC */ 76 /* Gate off DAC */
77 __REG_SET(HW_AUDIOOUT_ANACLKCTRL) = HW_AUDIOOUT_ANACLKCTRL__CLKGATE; 77 __REG_SET(HW_AUDIOOUT_ANACLKCTRL) = HW_AUDIOOUT_ANACLKCTRL__CLKGATE;
78 /* Disable digital filter clock */ 78 /* Disable digital filter clock */
79 imx233_enable_xtal_clock(XTAL_FILT, false); 79 imx233_clkctrl_enable_xtal(XTAL_FILT, false);
80 /* will also gate off the module */ 80 /* will also gate off the module */
81 __REG_CLR(HW_AUDIOOUT_CTRL) = HW_AUDIOOUT_CTRL__RUN; 81 __REG_CLR(HW_AUDIOOUT_CTRL) = HW_AUDIOOUT_CTRL__RUN;
82} 82}
diff --git a/firmware/target/arm/imx233/clkctrl-imx233.c b/firmware/target/arm/imx233/clkctrl-imx233.c
index bfa707e3be..064ee8013b 100644
--- a/firmware/target/arm/imx233/clkctrl-imx233.c
+++ b/firmware/target/arm/imx233/clkctrl-imx233.c
@@ -23,7 +23,7 @@
23#define __CLK_CLKGATE (1 << 31) 23#define __CLK_CLKGATE (1 << 31)
24#define __CLK_BUSY (1 << 29) 24#define __CLK_BUSY (1 << 29)
25 25
26void imx233_enable_xtal_clock(enum imx233_xtal_clk_t xtal_clk, bool enable) 26void imx233_clkctrl_enable_xtal(enum imx233_xtal_clk_t xtal_clk, bool enable)
27{ 27{
28 if(enable) 28 if(enable)
29 __REG_CLR(HW_CLKCTRL_XTAL) = xtal_clk; 29 __REG_CLR(HW_CLKCTRL_XTAL) = xtal_clk;
@@ -31,12 +31,12 @@ void imx233_enable_xtal_clock(enum imx233_xtal_clk_t xtal_clk, bool enable)
31 __REG_SET(HW_CLKCTRL_XTAL) = xtal_clk; 31 __REG_SET(HW_CLKCTRL_XTAL) = xtal_clk;
32} 32}
33 33
34bool imx233_is_xtal_clock_enable(enum imx233_xtal_clk_t clk) 34bool imx233_clkctrl_is_xtal_enable(enum imx233_xtal_clk_t clk)
35{ 35{
36 return HW_CLKCTRL_XTAL & clk; 36 return HW_CLKCTRL_XTAL & clk;
37} 37}
38 38
39void imx233_enable_clock(enum imx233_clock_t clk, bool enable) 39void imx233_clkctrl_enable_clock(enum imx233_clock_t clk, bool enable)
40{ 40{
41 volatile uint32_t *REG; 41 volatile uint32_t *REG;
42 switch(clk) 42 switch(clk)
@@ -60,7 +60,7 @@ void imx233_enable_clock(enum imx233_clock_t clk, bool enable)
60 } 60 }
61} 61}
62 62
63bool imx233_is_clock_enable(enum imx233_clock_t clk) 63bool imx233_clkctrl_is_clock_enabled(enum imx233_clock_t clk)
64{ 64{
65 volatile uint32_t *REG; 65 volatile uint32_t *REG;
66 switch(clk) 66 switch(clk)
@@ -74,7 +74,7 @@ bool imx233_is_clock_enable(enum imx233_clock_t clk)
74 return !((*REG) & __CLK_CLKGATE); 74 return !((*REG) & __CLK_CLKGATE);
75} 75}
76 76
77void imx233_set_clock_divisor(enum imx233_clock_t clk, int div) 77void imx233_clkctrl_set_clock_divisor(enum imx233_clock_t clk, int div)
78{ 78{
79 /* warning: some registers like HW_CLKCTRL_PIX don't have a CLR/SET variant ! */ 79 /* warning: some registers like HW_CLKCTRL_PIX don't have a CLR/SET variant ! */
80 switch(clk) 80 switch(clk)
@@ -101,7 +101,7 @@ void imx233_set_clock_divisor(enum imx233_clock_t clk, int div)
101 } 101 }
102} 102}
103 103
104int imx233_get_clock_divisor(enum imx233_clock_t clk) 104int imx233_clkctrl_get_clock_divisor(enum imx233_clock_t clk)
105{ 105{
106 switch(clk) 106 switch(clk)
107 { 107 {
@@ -119,7 +119,7 @@ int imx233_get_clock_divisor(enum imx233_clock_t clk)
119 } 119 }
120} 120}
121 121
122void imx233_set_fractional_divisor(enum imx233_clock_t clk, int fracdiv) 122void imx233_clkctrl_set_fractional_divisor(enum imx233_clock_t clk, int fracdiv)
123{ 123{
124 /* NOTE: HW_CLKCTRL_FRAC only support byte access ! */ 124 /* NOTE: HW_CLKCTRL_FRAC only support byte access ! */
125 volatile uint8_t *REG; 125 volatile uint8_t *REG;
@@ -142,7 +142,7 @@ void imx233_set_fractional_divisor(enum imx233_clock_t clk, int fracdiv)
142 *REG = HW_CLKCTRL_FRAC_XX__CLKGATEXX;; 142 *REG = HW_CLKCTRL_FRAC_XX__CLKGATEXX;;
143} 143}
144 144
145int imx233_get_fractional_divisor(enum imx233_clock_t clk) 145int imx233_clkctrl_get_fractional_divisor(enum imx233_clock_t clk)
146{ 146{
147 /* NOTE: HW_CLKCTRL_FRAC only support byte access ! */ 147 /* NOTE: HW_CLKCTRL_FRAC only support byte access ! */
148 volatile uint8_t *REG; 148 volatile uint8_t *REG;
@@ -166,7 +166,7 @@ int imx233_get_fractional_divisor(enum imx233_clock_t clk)
166 return *REG & ~HW_CLKCTRL_FRAC_XX__XX_STABLE; 166 return *REG & ~HW_CLKCTRL_FRAC_XX__XX_STABLE;
167} 167}
168 168
169void imx233_set_bypass_pll(enum imx233_clock_t clk, bool bypass) 169void imx233_clkctrl_set_bypass_pll(enum imx233_clock_t clk, bool bypass)
170{ 170{
171 uint32_t msk; 171 uint32_t msk;
172 switch(clk) 172 switch(clk)
@@ -184,7 +184,7 @@ void imx233_set_bypass_pll(enum imx233_clock_t clk, bool bypass)
184 __REG_CLR(HW_CLKCTRL_CLKSEQ) = msk; 184 __REG_CLR(HW_CLKCTRL_CLKSEQ) = msk;
185} 185}
186 186
187bool imx233_get_bypass_pll(enum imx233_clock_t clk) 187bool imx233_clkctrl_get_bypass_pll(enum imx233_clock_t clk)
188{ 188{
189 uint32_t msk; 189 uint32_t msk;
190 switch(clk) 190 switch(clk)
@@ -199,7 +199,7 @@ bool imx233_get_bypass_pll(enum imx233_clock_t clk)
199 return HW_CLKCTRL_CLKSEQ & msk; 199 return HW_CLKCTRL_CLKSEQ & msk;
200} 200}
201 201
202void imx233_enable_usb_pll(bool enable) 202void imx233_clkctrl_enable_usb_pll(bool enable)
203{ 203{
204 if(enable) 204 if(enable)
205 __REG_SET(HW_CLKCTRL_PLLCTRL0) = HW_CLKCTRL_PLLCTRL0__EN_USB_CLKS; 205 __REG_SET(HW_CLKCTRL_PLLCTRL0) = HW_CLKCTRL_PLLCTRL0__EN_USB_CLKS;
@@ -207,23 +207,23 @@ void imx233_enable_usb_pll(bool enable)
207 __REG_CLR(HW_CLKCTRL_PLLCTRL0) = HW_CLKCTRL_PLLCTRL0__EN_USB_CLKS; 207 __REG_CLR(HW_CLKCTRL_PLLCTRL0) = HW_CLKCTRL_PLLCTRL0__EN_USB_CLKS;
208} 208}
209 209
210bool imx233_is_usb_pll_enable(void) 210bool imx233_clkctrl_is_usb_pll_enabled(void)
211{ 211{
212 return HW_CLKCTRL_PLLCTRL0 & HW_CLKCTRL_PLLCTRL0__EN_USB_CLKS; 212 return HW_CLKCTRL_PLLCTRL0 & HW_CLKCTRL_PLLCTRL0__EN_USB_CLKS;
213} 213}
214 214
215void imx233_set_auto_slow_divisor(enum imx233_as_div_t div) 215void imx233_clkctrl_set_auto_slow_divisor(enum imx233_as_div_t div)
216{ 216{
217 __REG_CLR(HW_CLKCTRL_HBUS) = HW_CLKCTRL_HBUS__SLOW_DIV_BM; 217 __REG_CLR(HW_CLKCTRL_HBUS) = HW_CLKCTRL_HBUS__SLOW_DIV_BM;
218 __REG_SET(HW_CLKCTRL_HBUS) = div; 218 __REG_SET(HW_CLKCTRL_HBUS) = div;
219} 219}
220 220
221enum imx233_as_div_t imx233_get_auto_slow_divisor(void) 221enum imx233_as_div_t imx233_clkctrl_get_auto_slow_divisor(void)
222{ 222{
223 return __XTRACT(HW_CLKCTRL_HBUS, SLOW_DIV); 223 return __XTRACT(HW_CLKCTRL_HBUS, SLOW_DIV);
224} 224}
225 225
226void imx233_enable_auto_slow(bool enable) 226void imx233_clkctrl_enable_auto_slow(bool enable)
227{ 227{
228 if(enable) 228 if(enable)
229 __REG_CLR(HW_CLKCTRL_HBUS) = HW_CLKCTRL_HBUS__AUTO_SLOW_MODE; 229 __REG_CLR(HW_CLKCTRL_HBUS) = HW_CLKCTRL_HBUS__AUTO_SLOW_MODE;
@@ -231,12 +231,12 @@ void imx233_enable_auto_slow(bool enable)
231 __REG_SET(HW_CLKCTRL_HBUS) = HW_CLKCTRL_HBUS__AUTO_SLOW_MODE; 231 __REG_SET(HW_CLKCTRL_HBUS) = HW_CLKCTRL_HBUS__AUTO_SLOW_MODE;
232} 232}
233 233
234bool imx233_is_auto_slow_enable(void) 234bool imx233_clkctrl_is_auto_slow_enabled(void)
235{ 235{
236 return HW_CLKCTRL_HBUS & HW_CLKCTRL_HBUS__AUTO_SLOW_MODE; 236 return HW_CLKCTRL_HBUS & HW_CLKCTRL_HBUS__AUTO_SLOW_MODE;
237} 237}
238 238
239void imx233_enable_auto_slow_monitor(enum imx233_as_monitor_t monitor, bool enable) 239void imx233_clkctrl_enable_auto_slow_monitor(enum imx233_as_monitor_t monitor, bool enable)
240{ 240{
241 if(enable) 241 if(enable)
242 __REG_SET(HW_CLKCTRL_HBUS) = monitor; 242 __REG_SET(HW_CLKCTRL_HBUS) = monitor;
@@ -244,17 +244,17 @@ void imx233_enable_auto_slow_monitor(enum imx233_as_monitor_t monitor, bool enab
244 __REG_CLR(HW_CLKCTRL_HBUS) = monitor; 244 __REG_CLR(HW_CLKCTRL_HBUS) = monitor;
245} 245}
246 246
247bool imx233_is_auto_slow_monitor_enable(enum imx233_as_monitor_t monitor) 247bool imx233_clkctrl_is_auto_slow_monitor_enabled(enum imx233_as_monitor_t monitor)
248{ 248{
249 return HW_CLKCTRL_HBUS & monitor; 249 return HW_CLKCTRL_HBUS & monitor;
250} 250}
251 251
252unsigned imx233_get_clock_freq(enum imx233_clock_t clk) 252unsigned imx233_clkctrl_get_clock_freq(enum imx233_clock_t clk)
253{ 253{
254 switch(clk) 254 switch(clk)
255 { 255 {
256 case CLK_PLL: /* PLL: 480MHz when enable */ 256 case CLK_PLL: /* PLL: 480MHz when enable */
257 return imx233_is_clock_enable(CLK_PLL) ? 480000 : 0; 257 return imx233_clkctrl_is_clock_enabled(CLK_PLL) ? 480000 : 0;
258 case CLK_XTAL: /* crystal: 24MHz */ 258 case CLK_XTAL: /* crystal: 24MHz */
259 return 24000; 259 return 24000;
260 case CLK_CPU: 260 case CLK_CPU:
@@ -263,78 +263,78 @@ unsigned imx233_get_clock_freq(enum imx233_clock_t clk)
263 /* In bypass mode: clk_p derived from clk_xtal via int/binfrac divider 263 /* In bypass mode: clk_p derived from clk_xtal via int/binfrac divider
264 * otherwise, clk_p derived from clk_cpu via int div and clk_cpu 264 * otherwise, clk_p derived from clk_cpu via int div and clk_cpu
265 * derived from clk_pll fracdiv */ 265 * derived from clk_pll fracdiv */
266 if(imx233_get_bypass_pll(CLK_CPU)) 266 if(imx233_clkctrl_get_bypass_pll(CLK_CPU))
267 { 267 {
268 ref = imx233_get_clock_freq(CLK_XTAL); 268 ref = imx233_clkctrl_get_clock_freq(CLK_XTAL);
269 /* Integer divide mode vs fractional divide mode */ 269 /* Integer divide mode vs fractional divide mode */
270 if(HW_CLKCTRL_CPU & HW_CLKCTRL_CPU__DIV_XTAL_FRAC_EN) 270 if(HW_CLKCTRL_CPU & HW_CLKCTRL_CPU__DIV_XTAL_FRAC_EN)
271 271
272 return (ref * __XTRACT(HW_CLKCTRL_CPU, DIV_XTAL)) / 32; 272 return (ref * __XTRACT(HW_CLKCTRL_CPU, DIV_XTAL)) / 32;
273 else 273 else
274 return ref / imx233_get_clock_divisor(CLK_CPU); 274 return ref / imx233_clkctrl_get_clock_divisor(CLK_CPU);
275 } 275 }
276 else 276 else
277 { 277 {
278 ref = imx233_get_clock_freq(CLK_PLL); 278 ref = imx233_clkctrl_get_clock_freq(CLK_PLL);
279 /* fractional divider enable ? */ 279 /* fractional divider enable ? */
280 if(imx233_get_fractional_divisor(CLK_CPU) != 0) 280 if(imx233_clkctrl_get_fractional_divisor(CLK_CPU) != 0)
281 ref = (ref * 18) / imx233_get_fractional_divisor(CLK_CPU); 281 ref = (ref * 18) / imx233_clkctrl_get_fractional_divisor(CLK_CPU);
282 return ref / imx233_get_clock_divisor(CLK_CPU); 282 return ref / imx233_clkctrl_get_clock_divisor(CLK_CPU);
283 } 283 }
284 } 284 }
285 case CLK_HBUS: 285 case CLK_HBUS:
286 { 286 {
287 /* Derived from clk_p via integer/fractional div */ 287 /* Derived from clk_p via integer/fractional div */
288 unsigned ref = imx233_get_clock_freq(CLK_CPU); 288 unsigned ref = imx233_clkctrl_get_clock_freq(CLK_CPU);
289 if(imx233_get_fractional_divisor(CLK_HBUS) != 0) 289 if(imx233_clkctrl_get_fractional_divisor(CLK_HBUS) != 0)
290 ref = (ref * imx233_get_fractional_divisor(CLK_HBUS)) / 32; 290 ref = (ref * imx233_clkctrl_get_fractional_divisor(CLK_HBUS)) / 32;
291 if(imx233_get_clock_divisor(CLK_HBUS) != 0) 291 if(imx233_clkctrl_get_clock_divisor(CLK_HBUS) != 0)
292 ref /= imx233_get_clock_divisor(CLK_HBUS); 292 ref /= imx233_clkctrl_get_clock_divisor(CLK_HBUS);
293 return ref; 293 return ref;
294 } 294 }
295 case CLK_IO: 295 case CLK_IO:
296 { 296 {
297 /* Derived from clk_pll via fracdiv */ 297 /* Derived from clk_pll via fracdiv */
298 unsigned ref = imx233_get_clock_freq(CLK_PLL); 298 unsigned ref = imx233_clkctrl_get_clock_freq(CLK_PLL);
299 if(imx233_get_fractional_divisor(CLK_IO) != 0) 299 if(imx233_clkctrl_get_fractional_divisor(CLK_IO) != 0)
300 ref = (ref * 18) / imx233_get_fractional_divisor(CLK_IO); 300 ref = (ref * 18) / imx233_clkctrl_get_fractional_divisor(CLK_IO);
301 return ref; 301 return ref;
302 } 302 }
303 case CLK_PIX: 303 case CLK_PIX:
304 { 304 {
305 unsigned ref; 305 unsigned ref;
306 /* Derived from clk_pll or clk_xtal */ 306 /* Derived from clk_pll or clk_xtal */
307 if(!imx233_is_clock_enable(CLK_PIX)) 307 if(!imx233_clkctrl_is_clock_enabled(CLK_PIX))
308 ref = 0; 308 ref = 0;
309 else if(imx233_get_bypass_pll(CLK_PIX)) 309 else if(imx233_clkctrl_get_bypass_pll(CLK_PIX))
310 ref = imx233_get_clock_freq(CLK_XTAL); 310 ref = imx233_clkctrl_get_clock_freq(CLK_XTAL);
311 else 311 else
312 { 312 {
313 ref = imx233_get_clock_freq(CLK_PLL); 313 ref = imx233_clkctrl_get_clock_freq(CLK_PLL);
314 if(imx233_get_fractional_divisor(CLK_PIX) != 0) 314 if(imx233_clkctrl_get_fractional_divisor(CLK_PIX) != 0)
315 ref = (ref * 18) / imx233_get_fractional_divisor(CLK_PIX); 315 ref = (ref * 18) / imx233_clkctrl_get_fractional_divisor(CLK_PIX);
316 } 316 }
317 return ref / imx233_get_clock_divisor(CLK_PIX); 317 return ref / imx233_clkctrl_get_clock_divisor(CLK_PIX);
318 } 318 }
319 case CLK_SSP: 319 case CLK_SSP:
320 { 320 {
321 unsigned ref; 321 unsigned ref;
322 /* Derived from clk_pll or clk_xtal */ 322 /* Derived from clk_pll or clk_xtal */
323 if(!imx233_is_clock_enable(CLK_SSP)) 323 if(!imx233_clkctrl_is_clock_enabled(CLK_SSP))
324 ref = 0; 324 ref = 0;
325 else if(imx233_get_bypass_pll(CLK_SSP)) 325 else if(imx233_clkctrl_get_bypass_pll(CLK_SSP))
326 ref = imx233_get_clock_freq(CLK_XTAL); 326 ref = imx233_clkctrl_get_clock_freq(CLK_XTAL);
327 else 327 else
328 ref = imx233_get_clock_freq(CLK_IO); 328 ref = imx233_clkctrl_get_clock_freq(CLK_IO);
329 return ref / imx233_get_clock_divisor(CLK_SSP); 329 return ref / imx233_clkctrl_get_clock_divisor(CLK_SSP);
330 } 330 }
331 case CLK_EMI: 331 case CLK_EMI:
332 { 332 {
333 unsigned ref; 333 unsigned ref;
334 /* Derived from clk_pll or clk_xtal */ 334 /* Derived from clk_pll or clk_xtal */
335 if(imx233_get_bypass_pll(CLK_EMI)) 335 if(imx233_clkctrl_get_bypass_pll(CLK_EMI))
336 { 336 {
337 ref = imx233_get_clock_freq(CLK_XTAL); 337 ref = imx233_clkctrl_get_clock_freq(CLK_XTAL);
338 if(HW_CLKCTRL_EMI & HW_CLKCTRL_EMI__CLKGATE) 338 if(HW_CLKCTRL_EMI & HW_CLKCTRL_EMI__CLKGATE)
339 return 0; 339 return 0;
340 else 340 else
@@ -342,14 +342,15 @@ unsigned imx233_get_clock_freq(enum imx233_clock_t clk)
342 } 342 }
343 else 343 else
344 { 344 {
345 ref = imx233_get_clock_freq(CLK_PLL); 345 ref = imx233_clkctrl_get_clock_freq(CLK_PLL);
346 if(imx233_get_fractional_divisor(CLK_EMI) != 0) 346 if(imx233_clkctrl_get_fractional_divisor(CLK_EMI) != 0)
347 ref = (ref * 18) / imx233_get_fractional_divisor(CLK_EMI); 347 ref = (ref * 18) / imx233_clkctrl_get_fractional_divisor(CLK_EMI);
348 return ref / imx233_get_clock_divisor(CLK_EMI); 348 return ref / imx233_clkctrl_get_clock_divisor(CLK_EMI);
349 } 349 }
350 } 350 }
351 case CLK_XBUS: 351 case CLK_XBUS:
352 return imx233_get_clock_freq(CLK_XTAL) / imx233_get_clock_divisor(CLK_XBUS); 352 return imx233_clkctrl_get_clock_freq(CLK_XTAL) /
353 imx233_clkctrl_get_clock_divisor(CLK_XBUS);
353 default: 354 default:
354 return 0; 355 return 0;
355 } 356 }
diff --git a/firmware/target/arm/imx233/clkctrl-imx233.h b/firmware/target/arm/imx233/clkctrl-imx233.h
index ae2e0465a0..d49e8b2802 100644
--- a/firmware/target/arm/imx233/clkctrl-imx233.h
+++ b/firmware/target/arm/imx233/clkctrl-imx233.h
@@ -132,6 +132,7 @@ enum imx233_xtal_clk_t
132 XTAL_FILT = 1 << 30, 132 XTAL_FILT = 1 << 30,
133 XTAL_DRI = 1 << 28, 133 XTAL_DRI = 1 << 28,
134 XTAL_TIMROT = 1 << 26, 134 XTAL_TIMROT = 1 << 26,
135 XTAM_PWM = 1 << 29,
135}; 136};
136 137
137/* Auto-Slow monitoring */ 138/* Auto-Slow monitoring */
@@ -158,28 +159,28 @@ enum imx233_as_div_t
158}; 159};
159 160
160/* can use a mask of clocks */ 161/* can use a mask of clocks */
161void imx233_enable_xtal_clock(enum imx233_xtal_clk_t xtal_clk, bool enable); 162void imx233_clkctrl_enable_xtal(enum imx233_xtal_clk_t xtal_clk, bool enable);
162bool imx233_is_xtal_clock_enable(enum imx233_xtal_clk_t clk); 163void imx233_clkctrl_is_xtal_enabled(enum imx233_xtal_clk_t xtal_clk, bool enable);
163/* only use it for non-fractional clocks (ie not for IO) */ 164/* only use it for non-fractional clocks (ie not for IO) */
164void imx233_enable_clock(enum imx233_clock_t clk, bool enable); 165void imx233_clkctrl_enable_clock(enum imx233_clock_t clk, bool enable);
165bool imx233_is_clock_enable(enum imx233_clock_t cl); 166bool imx233_clkctrl_is_clock_enabled(enum imx233_clock_t cl);
166void imx233_set_clock_divisor(enum imx233_clock_t clk, int div); 167void imx233_clkctrl_set_clock_divisor(enum imx233_clock_t clk, int div);
167int imx233_get_clock_divisor(enum imx233_clock_t clk); 168int imx233_clkctrl_get_clock_divisor(enum imx233_clock_t clk);
168/* call with fracdiv=0 to disable it */ 169/* call with fracdiv=0 to disable it */
169void imx233_set_fractional_divisor(enum imx233_clock_t clk, int fracdiv); 170void imx233_clkctrl_set_fractional_divisor(enum imx233_clock_t clk, int fracdiv);
170/* 0 means fractional dividor disable */ 171/* 0 means fractional dividor disable */
171int imx233_get_fractional_divisor(enum imx233_clock_t clk); 172int imx233_clkctrl_get_fractional_divisor(enum imx233_clock_t clk);
172void imx233_set_bypass_pll(enum imx233_clock_t clk, bool bypass); 173void imx233_clkctrl_set_bypass_pll(enum imx233_clock_t clk, bool bypass);
173bool imx233_get_bypass_pll(enum imx233_clock_t clk); 174bool imx233_clkctrl_get_bypass_pll(enum imx233_clock_t clk);
174void imx233_enable_usb_pll(bool enable); 175void imx233_clkctrl_enable_usb_pll(bool enable);
175bool imx233_is_usb_pll_enable(void); 176bool imx233_clkctrl_is_usb_pll_enabled(void);
176unsigned imx233_get_clock_freq(enum imx233_clock_t clk); 177unsigned imx233_clkctrl_get_clock_freq(enum imx233_clock_t clk);
177 178
178void imx233_set_auto_slow_divisor(enum imx233_as_div_t div); 179void imx233_clkctrl_set_auto_slow_divisor(enum imx233_as_div_t div);
179enum imx233_as_div_t imx233_get_auto_slow_divisor(void); 180enum imx233_as_div_t imx233_clkctrl_get_auto_slow_divisor(void);
180void imx233_enable_auto_slow(bool enable); 181void imx233_clkctrl_enable_auto_slow(bool enable);
181bool imx233_is_auto_slow_enable(void); 182bool imx233_clkctrl_is_auto_slow_enabled(void);
182void imx233_enable_auto_slow_monitor(enum imx233_as_monitor_t monitor, bool enable); 183void imx233_clkctrl_enable_auto_slow_monitor(enum imx233_as_monitor_t monitor, bool enable);
183bool imx233_is_auto_slow_monitor_enable(enum imx233_as_monitor_t monitor); 184bool imx233_clkctrl_is_auto_slow_monitor_enabled(enum imx233_as_monitor_t monitor);
184 185
185#endif /* CLKCTRL_IMX233_H */ 186#endif /* CLKCTRL_IMX233_H */
diff --git a/firmware/target/arm/imx233/debug-imx233.c b/firmware/target/arm/imx233/debug-imx233.c
index 59792c17a8..0702fcbebc 100644
--- a/firmware/target/arm/imx233/debug-imx233.c
+++ b/firmware/target/arm/imx233/debug-imx233.c
@@ -235,19 +235,19 @@ bool dbg_hw_info_clkctrl(void)
235 #define c dbg_clk[i] 235 #define c dbg_clk[i]
236 lcd_putsf(0, i + 1, "%4s", c.name); 236 lcd_putsf(0, i + 1, "%4s", c.name);
237 if(c.has_enable) 237 if(c.has_enable)
238 lcd_putsf(5, i + 1, "%2d", imx233_is_clock_enable(c.clk)); 238 lcd_putsf(5, i + 1, "%2d", imx233_clkctrl_is_clock_enabled(c.clk));
239 if(c.has_bypass) 239 if(c.has_bypass)
240 lcd_putsf(8, i + 1, "%2d", imx233_get_bypass_pll(c.clk)); 240 lcd_putsf(8, i + 1, "%2d", imx233_clkctrl_get_bypass_pll(c.clk));
241 if(c.has_idiv && imx233_get_clock_divisor(c.clk) != 0) 241 if(c.has_idiv && imx233_clkctrl_get_clock_divisor(c.clk) != 0)
242 lcd_putsf(10, i + 1, "%4d", imx233_get_clock_divisor(c.clk)); 242 lcd_putsf(10, i + 1, "%4d", imx233_clkctrl_get_clock_divisor(c.clk));
243 if(c.has_fdiv && imx233_get_fractional_divisor(c.clk) != 0) 243 if(c.has_fdiv && imx233_clkctrl_get_fractional_divisor(c.clk) != 0)
244 lcd_putsf(16, i + 1, "%4d", imx233_get_fractional_divisor(c.clk)); 244 lcd_putsf(16, i + 1, "%4d", imx233_clkctrl_get_fractional_divisor(c.clk));
245 if(c.has_freq) 245 if(c.has_freq)
246 lcd_putsf(21, i + 1, "%9d", imx233_get_clock_freq(c.clk)); 246 lcd_putsf(21, i + 1, "%9d", imx233_clkctrl_get_clock_freq(c.clk));
247 #undef c 247 #undef c
248 } 248 }
249 int line = ARRAYLEN(dbg_clk) + 1; 249 int line = ARRAYLEN(dbg_clk) + 1;
250 lcd_putsf(0, line, "auto slow: %d", imx233_is_auto_slow_enable()); 250 lcd_putsf(0, line, "auto slow: %d", imx233_clkctrl_is_auto_slow_enabled());
251 line++; 251 line++;
252 lcd_putsf(0, line, "as monitor: "); 252 lcd_putsf(0, line, "as monitor: ");
253 int x_off = 12; 253 int x_off = 12;
@@ -255,7 +255,7 @@ bool dbg_hw_info_clkctrl(void)
255 unsigned line_w = lcd_getwidth() / font_get_width(font_get(lcd_getfont()), ' '); 255 unsigned line_w = lcd_getwidth() / font_get_width(font_get(lcd_getfont()), ' ');
256 for(unsigned i = 0; i < ARRAYLEN(dbg_as_monitor); i++) 256 for(unsigned i = 0; i < ARRAYLEN(dbg_as_monitor); i++)
257 { 257 {
258 if(!imx233_is_auto_slow_monitor_enable(dbg_as_monitor[i].monitor)) 258 if(!imx233_clkctrl_is_auto_slow_monitor_enabled(dbg_as_monitor[i].monitor))
259 continue; 259 continue;
260 if(!first) 260 if(!first)
261 { 261 {
diff --git a/firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c b/firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c
index 3913bf6906..39469028a0 100644
--- a/firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c
+++ b/firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c
@@ -157,10 +157,10 @@ static inline uint32_t decode_18_to_16(uint32_t a)
157static void setup_lcdif_clock(void) 157static void setup_lcdif_clock(void)
158{ 158{
159 /* the LCD seems to work at 24Mhz, so use the xtal clock with no divider */ 159 /* the LCD seems to work at 24Mhz, so use the xtal clock with no divider */
160 imx233_enable_clock(CLK_PIX, false); 160 imx233_clkctrl_enable_clock(CLK_PIX, false);
161 imx233_set_clock_divisor(CLK_PIX, 1); 161 imx233_clkctrl_set_clock_divisor(CLK_PIX, 1);
162 imx233_set_bypass_pll(CLK_PIX, true); /* use XTAL */ 162 imx233_clkctrl_set_bypass_pll(CLK_PIX, true); /* use XTAL */
163 imx233_enable_clock(CLK_PIX, true); 163 imx233_clkctrl_enable_clock(CLK_PIX, true);
164} 164}
165 165
166static uint32_t i80_read_register(uint32_t data_out) 166static uint32_t i80_read_register(uint32_t data_out)
diff --git a/firmware/target/arm/imx233/ssp-imx233.c b/firmware/target/arm/imx233/ssp-imx233.c
index cbf537dd07..bdbde9ec93 100644
--- a/firmware/target/arm/imx233/ssp-imx233.c
+++ b/firmware/target/arm/imx233/ssp-imx233.c
@@ -106,11 +106,11 @@ void imx233_ssp_start(int ssp)
106 /** 2.3.1: the clk_ssp maximum frequency is 102.858 MHz */ 106 /** 2.3.1: the clk_ssp maximum frequency is 102.858 MHz */
107 /* fracdiv = 18 => clk_io = pll = 480Mhz 107 /* fracdiv = 18 => clk_io = pll = 480Mhz
108 * intdiv = 5 => clk_ssp = 96Mhz */ 108 * intdiv = 5 => clk_ssp = 96Mhz */
109 imx233_set_fractional_divisor(CLK_IO, 18); 109 imx233_clkctrl_set_fractional_divisor(CLK_IO, 18);
110 imx233_enable_clock(CLK_SSP, false); 110 imx233_clkctrl_enable_clock(CLK_SSP, false);
111 imx233_set_clock_divisor(CLK_SSP, 5); 111 imx233_clkctrl_set_clock_divisor(CLK_SSP, 5);
112 imx233_set_bypass_pll(CLK_SSP, false); /* use IO */ 112 imx233_clkctrl_set_bypass_pll(CLK_SSP, false); /* use IO */
113 imx233_enable_clock(CLK_SSP, true); 113 imx233_clkctrl_enable_clock(CLK_SSP, true);
114 } 114 }
115 ssp_nr_in_use++; 115 ssp_nr_in_use++;
116} 116}
@@ -128,8 +128,8 @@ void imx233_ssp_stop(int ssp)
128 ssp_nr_in_use--; 128 ssp_nr_in_use--;
129 if(ssp_nr_in_use == 0) 129 if(ssp_nr_in_use == 0)
130 { 130 {
131 imx233_enable_clock(CLK_SSP, false); 131 imx233_clkctrl_enable_clock(CLK_SSP, false);
132 imx233_set_fractional_divisor(CLK_IO, 0); 132 imx233_clkctrl_set_fractional_divisor(CLK_IO, 0);
133 } 133 }
134} 134}
135 135
diff --git a/firmware/target/arm/imx233/timrot-imx233.c b/firmware/target/arm/imx233/timrot-imx233.c
index b7cf588cf3..24ed0096ab 100644
--- a/firmware/target/arm/imx233/timrot-imx233.c
+++ b/firmware/target/arm/imx233/timrot-imx233.c
@@ -75,5 +75,5 @@ void imx233_timrot_init(void)
75{ 75{
76 imx233_reset_block(&HW_TIMROT_ROTCTRL); 76 imx233_reset_block(&HW_TIMROT_ROTCTRL);
77 /* enable xtal path to timrot */ 77 /* enable xtal path to timrot */
78 imx233_enable_xtal_clock(XTAL_TIMROT, true); 78 imx233_clkctrl_enable_xtal(XTAL_TIMROT, true);
79} 79}
diff --git a/firmware/target/arm/imx233/usb-imx233.c b/firmware/target/arm/imx233/usb-imx233.c
index 904f84b948..304018b09b 100644
--- a/firmware/target/arm/imx233/usb-imx233.c
+++ b/firmware/target/arm/imx233/usb-imx233.c
@@ -69,7 +69,7 @@ void usb_enable(bool on)
69{ 69{
70 if(on) 70 if(on)
71 { 71 {
72 imx233_enable_usb_pll(true); 72 imx233_clkctrl_enable_usb_pll(true);
73 imx233_enable_usb_phy(true); 73 imx233_enable_usb_phy(true);
74 imx233_enable_usb_controller(true); 74 imx233_enable_usb_controller(true);
75 usb_core_init(); 75 usb_core_init();
@@ -79,6 +79,6 @@ void usb_enable(bool on)
79 usb_core_exit(); 79 usb_core_exit();
80 imx233_enable_usb_controller(false); 80 imx233_enable_usb_controller(false);
81 imx233_enable_usb_phy(false); 81 imx233_enable_usb_phy(false);
82 imx233_enable_usb_pll(false); 82 imx233_clkctrl_enable_usb_pll(false);
83 } 83 }
84} 84}