diff options
Diffstat (limited to 'firmware/target/arm/imx233/clkctrl-imx233.c')
-rw-r--r-- | firmware/target/arm/imx233/clkctrl-imx233.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/firmware/target/arm/imx233/clkctrl-imx233.c b/firmware/target/arm/imx233/clkctrl-imx233.c index 0b46a0e8db..7701b84c41 100644 --- a/firmware/target/arm/imx233/clkctrl-imx233.c +++ b/firmware/target/arm/imx233/clkctrl-imx233.c | |||
@@ -37,6 +37,7 @@ void imx233_enable_clock(enum imx233_clock_t clk, bool enable) | |||
37 | switch(clk) | 37 | switch(clk) |
38 | { | 38 | { |
39 | case CLK_PIX: REG = &HW_CLKCTRL_PIX; break; | 39 | case CLK_PIX: REG = &HW_CLKCTRL_PIX; break; |
40 | case CLK_SSP: REG = &HW_CLKCTRL_SSP; break; | ||
40 | default: return; | 41 | default: return; |
41 | } | 42 | } |
42 | 43 | ||
@@ -63,8 +64,30 @@ void imx233_set_clock_divisor(enum imx233_clock_t clk, int div) | |||
63 | __REG_SET(HW_CLKCTRL_PIX) = div; | 64 | __REG_SET(HW_CLKCTRL_PIX) = div; |
64 | while(HW_CLKCTRL_PIX & __CLK_BUSY); | 65 | while(HW_CLKCTRL_PIX & __CLK_BUSY); |
65 | break; | 66 | break; |
67 | case CLK_SSP: | ||
68 | __REG_CLR(HW_CLKCTRL_SSP) = (1 << 9) - 1; | ||
69 | __REG_SET(HW_CLKCTRL_SSP) = div; | ||
70 | while(HW_CLKCTRL_SSP & __CLK_BUSY); | ||
71 | break; | ||
72 | default: return; | ||
73 | } | ||
74 | } | ||
75 | |||
76 | void imx233_set_fractional_divisor(enum imx233_clock_t clk, int fracdiv) | ||
77 | { | ||
78 | /* NOTE: HW_CLKCTRL_FRAC only support byte access ! */ | ||
79 | volatile uint8_t *REG; | ||
80 | switch(clk) | ||
81 | { | ||
82 | case CLK_PIX: REG = &HW_CLKCTRL_FRAC_PIX; break; | ||
83 | case CLK_IO: REG = &HW_CLKCTRL_FRAC_IO; break; | ||
66 | default: return; | 84 | default: return; |
67 | } | 85 | } |
86 | |||
87 | if(fracdiv != 0) | ||
88 | *REG = fracdiv; | ||
89 | else | ||
90 | *REG = HW_CLKCTRL_FRAC_XX__CLKGATEXX;; | ||
68 | } | 91 | } |
69 | 92 | ||
70 | void imx233_set_bypass_pll(enum imx233_clock_t clk, bool bypass) | 93 | void imx233_set_bypass_pll(enum imx233_clock_t clk, bool bypass) |
@@ -73,6 +96,7 @@ void imx233_set_bypass_pll(enum imx233_clock_t clk, bool bypass) | |||
73 | switch(clk) | 96 | switch(clk) |
74 | { | 97 | { |
75 | case CLK_PIX: msk = HW_CLKCTRL_CLKSEQ__BYPASS_PIX; break; | 98 | case CLK_PIX: msk = HW_CLKCTRL_CLKSEQ__BYPASS_PIX; break; |
99 | case CLK_SSP: msk = HW_CLKCTRL_CLKSEQ__BYPASS_SSP; break; | ||
76 | default: return; | 100 | default: return; |
77 | } | 101 | } |
78 | 102 | ||