diff options
Diffstat (limited to 'drivers/clk/samsung/clk-exynos7.c')
-rw-r--r-- | drivers/clk/samsung/clk-exynos7.c | 408 |
1 files changed, 406 insertions, 2 deletions
diff --git a/drivers/clk/samsung/clk-exynos7.c b/drivers/clk/samsung/clk-exynos7.c index ea4483b8d62e..03d36e847b78 100644 --- a/drivers/clk/samsung/clk-exynos7.c +++ b/drivers/clk/samsung/clk-exynos7.c | |||
@@ -34,6 +34,7 @@ | |||
34 | #define DIV_TOPC0 0x0600 | 34 | #define DIV_TOPC0 0x0600 |
35 | #define DIV_TOPC1 0x0604 | 35 | #define DIV_TOPC1 0x0604 |
36 | #define DIV_TOPC3 0x060C | 36 | #define DIV_TOPC3 0x060C |
37 | #define ENABLE_ACLK_TOPC1 0x0804 | ||
37 | 38 | ||
38 | static struct samsung_fixed_factor_clock topc_fixed_factor_clks[] __initdata = { | 39 | static struct samsung_fixed_factor_clock topc_fixed_factor_clks[] __initdata = { |
39 | FFACTOR(0, "ffac_topc_bus0_pll_div2", "mout_bus0_pll_ctrl", 1, 2, 0), | 40 | FFACTOR(0, "ffac_topc_bus0_pll_div2", "mout_bus0_pll_ctrl", 1, 2, 0), |
@@ -45,6 +46,7 @@ static struct samsung_fixed_factor_clock topc_fixed_factor_clks[] __initdata = { | |||
45 | }; | 46 | }; |
46 | 47 | ||
47 | /* List of parent clocks for Muxes in CMU_TOPC */ | 48 | /* List of parent clocks for Muxes in CMU_TOPC */ |
49 | PNAME(mout_aud_pll_ctrl_p) = { "fin_pll", "fout_aud_pll" }; | ||
48 | PNAME(mout_bus0_pll_ctrl_p) = { "fin_pll", "fout_bus0_pll" }; | 50 | PNAME(mout_bus0_pll_ctrl_p) = { "fin_pll", "fout_bus0_pll" }; |
49 | PNAME(mout_bus1_pll_ctrl_p) = { "fin_pll", "fout_bus1_pll" }; | 51 | PNAME(mout_bus1_pll_ctrl_p) = { "fin_pll", "fout_bus1_pll" }; |
50 | PNAME(mout_cc_pll_ctrl_p) = { "fin_pll", "fout_cc_pll" }; | 52 | PNAME(mout_cc_pll_ctrl_p) = { "fin_pll", "fout_cc_pll" }; |
@@ -104,9 +106,11 @@ static struct samsung_mux_clock topc_mux_clks[] __initdata = { | |||
104 | 106 | ||
105 | MUX(0, "mout_sclk_bus0_pll_out", mout_sclk_bus0_pll_out_p, | 107 | MUX(0, "mout_sclk_bus0_pll_out", mout_sclk_bus0_pll_out_p, |
106 | MUX_SEL_TOPC1, 16, 1), | 108 | MUX_SEL_TOPC1, 16, 1), |
109 | MUX(0, "mout_aud_pll_ctrl", mout_aud_pll_ctrl_p, MUX_SEL_TOPC1, 0, 1), | ||
107 | 110 | ||
108 | MUX(0, "mout_aclk_ccore_133", mout_topc_group2, MUX_SEL_TOPC2, 4, 2), | 111 | MUX(0, "mout_aclk_ccore_133", mout_topc_group2, MUX_SEL_TOPC2, 4, 2), |
109 | 112 | ||
113 | MUX(0, "mout_aclk_mscl_532", mout_topc_group2, MUX_SEL_TOPC3, 20, 2), | ||
110 | MUX(0, "mout_aclk_peris_66", mout_topc_group2, MUX_SEL_TOPC3, 24, 2), | 114 | MUX(0, "mout_aclk_peris_66", mout_topc_group2, MUX_SEL_TOPC3, 24, 2), |
111 | }; | 115 | }; |
112 | 116 | ||
@@ -114,6 +118,8 @@ static struct samsung_div_clock topc_div_clks[] __initdata = { | |||
114 | DIV(DOUT_ACLK_CCORE_133, "dout_aclk_ccore_133", "mout_aclk_ccore_133", | 118 | DIV(DOUT_ACLK_CCORE_133, "dout_aclk_ccore_133", "mout_aclk_ccore_133", |
115 | DIV_TOPC0, 4, 4), | 119 | DIV_TOPC0, 4, 4), |
116 | 120 | ||
121 | DIV(DOUT_ACLK_MSCL_532, "dout_aclk_mscl_532", "mout_aclk_mscl_532", | ||
122 | DIV_TOPC1, 20, 4), | ||
117 | DIV(DOUT_ACLK_PERIS, "dout_aclk_peris_66", "mout_aclk_peris_66", | 123 | DIV(DOUT_ACLK_PERIS, "dout_aclk_peris_66", "mout_aclk_peris_66", |
118 | DIV_TOPC1, 24, 4), | 124 | DIV_TOPC1, 24, 4), |
119 | 125 | ||
@@ -125,6 +131,18 @@ static struct samsung_div_clock topc_div_clks[] __initdata = { | |||
125 | DIV_TOPC3, 12, 3), | 131 | DIV_TOPC3, 12, 3), |
126 | DIV(DOUT_SCLK_MFC_PLL, "dout_sclk_mfc_pll", "mout_mfc_pll_ctrl", | 132 | DIV(DOUT_SCLK_MFC_PLL, "dout_sclk_mfc_pll", "mout_mfc_pll_ctrl", |
127 | DIV_TOPC3, 16, 3), | 133 | DIV_TOPC3, 16, 3), |
134 | DIV(DOUT_SCLK_AUD_PLL, "dout_sclk_aud_pll", "mout_aud_pll_ctrl", | ||
135 | DIV_TOPC3, 28, 3), | ||
136 | }; | ||
137 | |||
138 | static struct samsung_pll_rate_table pll1460x_24mhz_tbl[] __initdata = { | ||
139 | PLL_36XX_RATE(491520000, 20, 1, 0, 31457), | ||
140 | {}, | ||
141 | }; | ||
142 | |||
143 | static struct samsung_gate_clock topc_gate_clks[] __initdata = { | ||
144 | GATE(ACLK_MSCL_532, "aclk_mscl_532", "dout_aclk_mscl_532", | ||
145 | ENABLE_ACLK_TOPC1, 20, 0, 0), | ||
128 | }; | 146 | }; |
129 | 147 | ||
130 | static struct samsung_pll_clock topc_pll_clks[] __initdata = { | 148 | static struct samsung_pll_clock topc_pll_clks[] __initdata = { |
@@ -136,8 +154,8 @@ static struct samsung_pll_clock topc_pll_clks[] __initdata = { | |||
136 | BUS1_DPLL_CON0, NULL), | 154 | BUS1_DPLL_CON0, NULL), |
137 | PLL(pll_1452x, 0, "fout_mfc_pll", "fin_pll", MFC_PLL_LOCK, | 155 | PLL(pll_1452x, 0, "fout_mfc_pll", "fin_pll", MFC_PLL_LOCK, |
138 | MFC_PLL_CON0, NULL), | 156 | MFC_PLL_CON0, NULL), |
139 | PLL(pll_1460x, 0, "fout_aud_pll", "fin_pll", AUD_PLL_LOCK, | 157 | PLL(pll_1460x, FOUT_AUD_PLL, "fout_aud_pll", "fin_pll", AUD_PLL_LOCK, |
140 | AUD_PLL_CON0, NULL), | 158 | AUD_PLL_CON0, pll1460x_24mhz_tbl), |
141 | }; | 159 | }; |
142 | 160 | ||
143 | static struct samsung_cmu_info topc_cmu_info __initdata = { | 161 | static struct samsung_cmu_info topc_cmu_info __initdata = { |
@@ -147,6 +165,8 @@ static struct samsung_cmu_info topc_cmu_info __initdata = { | |||
147 | .nr_mux_clks = ARRAY_SIZE(topc_mux_clks), | 165 | .nr_mux_clks = ARRAY_SIZE(topc_mux_clks), |
148 | .div_clks = topc_div_clks, | 166 | .div_clks = topc_div_clks, |
149 | .nr_div_clks = ARRAY_SIZE(topc_div_clks), | 167 | .nr_div_clks = ARRAY_SIZE(topc_div_clks), |
168 | .gate_clks = topc_gate_clks, | ||
169 | .nr_gate_clks = ARRAY_SIZE(topc_gate_clks), | ||
150 | .fixed_factor_clks = topc_fixed_factor_clks, | 170 | .fixed_factor_clks = topc_fixed_factor_clks, |
151 | .nr_fixed_factor_clks = ARRAY_SIZE(topc_fixed_factor_clks), | 171 | .nr_fixed_factor_clks = ARRAY_SIZE(topc_fixed_factor_clks), |
152 | .nr_clk_ids = TOPC_NR_CLK, | 172 | .nr_clk_ids = TOPC_NR_CLK, |
@@ -166,9 +186,18 @@ CLK_OF_DECLARE(exynos7_clk_topc, "samsung,exynos7-clock-topc", | |||
166 | #define MUX_SEL_TOP00 0x0200 | 186 | #define MUX_SEL_TOP00 0x0200 |
167 | #define MUX_SEL_TOP01 0x0204 | 187 | #define MUX_SEL_TOP01 0x0204 |
168 | #define MUX_SEL_TOP03 0x020C | 188 | #define MUX_SEL_TOP03 0x020C |
189 | #define MUX_SEL_TOP0_PERIC0 0x0230 | ||
190 | #define MUX_SEL_TOP0_PERIC1 0x0234 | ||
191 | #define MUX_SEL_TOP0_PERIC2 0x0238 | ||
169 | #define MUX_SEL_TOP0_PERIC3 0x023C | 192 | #define MUX_SEL_TOP0_PERIC3 0x023C |
170 | #define DIV_TOP03 0x060C | 193 | #define DIV_TOP03 0x060C |
194 | #define DIV_TOP0_PERIC0 0x0630 | ||
195 | #define DIV_TOP0_PERIC1 0x0634 | ||
196 | #define DIV_TOP0_PERIC2 0x0638 | ||
171 | #define DIV_TOP0_PERIC3 0x063C | 197 | #define DIV_TOP0_PERIC3 0x063C |
198 | #define ENABLE_SCLK_TOP0_PERIC0 0x0A30 | ||
199 | #define ENABLE_SCLK_TOP0_PERIC1 0x0A34 | ||
200 | #define ENABLE_SCLK_TOP0_PERIC2 0x0A38 | ||
172 | #define ENABLE_SCLK_TOP0_PERIC3 0x0A3C | 201 | #define ENABLE_SCLK_TOP0_PERIC3 0x0A3C |
173 | 202 | ||
174 | /* List of parent clocks for Muxes in CMU_TOP0 */ | 203 | /* List of parent clocks for Muxes in CMU_TOP0 */ |
@@ -176,6 +205,7 @@ PNAME(mout_bus0_pll_p) = { "fin_pll", "dout_sclk_bus0_pll" }; | |||
176 | PNAME(mout_bus1_pll_p) = { "fin_pll", "dout_sclk_bus1_pll" }; | 205 | PNAME(mout_bus1_pll_p) = { "fin_pll", "dout_sclk_bus1_pll" }; |
177 | PNAME(mout_cc_pll_p) = { "fin_pll", "dout_sclk_cc_pll" }; | 206 | PNAME(mout_cc_pll_p) = { "fin_pll", "dout_sclk_cc_pll" }; |
178 | PNAME(mout_mfc_pll_p) = { "fin_pll", "dout_sclk_mfc_pll" }; | 207 | PNAME(mout_mfc_pll_p) = { "fin_pll", "dout_sclk_mfc_pll" }; |
208 | PNAME(mout_aud_pll_p) = { "fin_pll", "dout_sclk_aud_pll" }; | ||
179 | 209 | ||
180 | PNAME(mout_top0_half_bus0_pll_p) = {"mout_top0_bus0_pll", | 210 | PNAME(mout_top0_half_bus0_pll_p) = {"mout_top0_bus0_pll", |
181 | "ffac_top0_bus0_pll_div2"}; | 211 | "ffac_top0_bus0_pll_div2"}; |
@@ -189,18 +219,34 @@ PNAME(mout_top0_half_mfc_pll_p) = {"mout_top0_mfc_pll", | |||
189 | PNAME(mout_top0_group1) = {"mout_top0_half_bus0_pll", | 219 | PNAME(mout_top0_group1) = {"mout_top0_half_bus0_pll", |
190 | "mout_top0_half_bus1_pll", "mout_top0_half_cc_pll", | 220 | "mout_top0_half_bus1_pll", "mout_top0_half_cc_pll", |
191 | "mout_top0_half_mfc_pll"}; | 221 | "mout_top0_half_mfc_pll"}; |
222 | PNAME(mout_top0_group3) = {"ioclk_audiocdclk0", | ||
223 | "ioclk_audiocdclk1", "ioclk_spdif_extclk", | ||
224 | "mout_top0_aud_pll", "mout_top0_half_bus0_pll", | ||
225 | "mout_top0_half_bus1_pll"}; | ||
226 | PNAME(mout_top0_group4) = {"ioclk_audiocdclk1", "mout_top0_aud_pll", | ||
227 | "mout_top0_half_bus0_pll", "mout_top0_half_bus1_pll"}; | ||
192 | 228 | ||
193 | static unsigned long top0_clk_regs[] __initdata = { | 229 | static unsigned long top0_clk_regs[] __initdata = { |
194 | MUX_SEL_TOP00, | 230 | MUX_SEL_TOP00, |
195 | MUX_SEL_TOP01, | 231 | MUX_SEL_TOP01, |
196 | MUX_SEL_TOP03, | 232 | MUX_SEL_TOP03, |
233 | MUX_SEL_TOP0_PERIC0, | ||
234 | MUX_SEL_TOP0_PERIC1, | ||
235 | MUX_SEL_TOP0_PERIC2, | ||
197 | MUX_SEL_TOP0_PERIC3, | 236 | MUX_SEL_TOP0_PERIC3, |
198 | DIV_TOP03, | 237 | DIV_TOP03, |
238 | DIV_TOP0_PERIC0, | ||
239 | DIV_TOP0_PERIC1, | ||
240 | DIV_TOP0_PERIC2, | ||
199 | DIV_TOP0_PERIC3, | 241 | DIV_TOP0_PERIC3, |
242 | ENABLE_SCLK_TOP0_PERIC0, | ||
243 | ENABLE_SCLK_TOP0_PERIC1, | ||
244 | ENABLE_SCLK_TOP0_PERIC2, | ||
200 | ENABLE_SCLK_TOP0_PERIC3, | 245 | ENABLE_SCLK_TOP0_PERIC3, |
201 | }; | 246 | }; |
202 | 247 | ||
203 | static struct samsung_mux_clock top0_mux_clks[] __initdata = { | 248 | static struct samsung_mux_clock top0_mux_clks[] __initdata = { |
249 | MUX(0, "mout_top0_aud_pll", mout_aud_pll_p, MUX_SEL_TOP00, 0, 1), | ||
204 | MUX(0, "mout_top0_mfc_pll", mout_mfc_pll_p, MUX_SEL_TOP00, 4, 1), | 250 | MUX(0, "mout_top0_mfc_pll", mout_mfc_pll_p, MUX_SEL_TOP00, 4, 1), |
205 | MUX(0, "mout_top0_cc_pll", mout_cc_pll_p, MUX_SEL_TOP00, 8, 1), | 251 | MUX(0, "mout_top0_cc_pll", mout_cc_pll_p, MUX_SEL_TOP00, 8, 1), |
206 | MUX(0, "mout_top0_bus1_pll", mout_bus1_pll_p, MUX_SEL_TOP00, 12, 1), | 252 | MUX(0, "mout_top0_bus1_pll", mout_bus1_pll_p, MUX_SEL_TOP00, 12, 1), |
@@ -218,10 +264,20 @@ static struct samsung_mux_clock top0_mux_clks[] __initdata = { | |||
218 | MUX(0, "mout_aclk_peric1_66", mout_top0_group1, MUX_SEL_TOP03, 12, 2), | 264 | MUX(0, "mout_aclk_peric1_66", mout_top0_group1, MUX_SEL_TOP03, 12, 2), |
219 | MUX(0, "mout_aclk_peric0_66", mout_top0_group1, MUX_SEL_TOP03, 20, 2), | 265 | MUX(0, "mout_aclk_peric0_66", mout_top0_group1, MUX_SEL_TOP03, 20, 2), |
220 | 266 | ||
267 | MUX(0, "mout_sclk_spdif", mout_top0_group3, MUX_SEL_TOP0_PERIC0, 4, 3), | ||
268 | MUX(0, "mout_sclk_pcm1", mout_top0_group4, MUX_SEL_TOP0_PERIC0, 8, 2), | ||
269 | MUX(0, "mout_sclk_i2s1", mout_top0_group4, MUX_SEL_TOP0_PERIC0, 20, 2), | ||
270 | |||
271 | MUX(0, "mout_sclk_spi1", mout_top0_group1, MUX_SEL_TOP0_PERIC1, 8, 2), | ||
272 | MUX(0, "mout_sclk_spi0", mout_top0_group1, MUX_SEL_TOP0_PERIC1, 20, 2), | ||
273 | |||
274 | MUX(0, "mout_sclk_spi3", mout_top0_group1, MUX_SEL_TOP0_PERIC2, 8, 2), | ||
275 | MUX(0, "mout_sclk_spi2", mout_top0_group1, MUX_SEL_TOP0_PERIC2, 20, 2), | ||
221 | MUX(0, "mout_sclk_uart3", mout_top0_group1, MUX_SEL_TOP0_PERIC3, 4, 2), | 276 | MUX(0, "mout_sclk_uart3", mout_top0_group1, MUX_SEL_TOP0_PERIC3, 4, 2), |
222 | MUX(0, "mout_sclk_uart2", mout_top0_group1, MUX_SEL_TOP0_PERIC3, 8, 2), | 277 | MUX(0, "mout_sclk_uart2", mout_top0_group1, MUX_SEL_TOP0_PERIC3, 8, 2), |
223 | MUX(0, "mout_sclk_uart1", mout_top0_group1, MUX_SEL_TOP0_PERIC3, 12, 2), | 278 | MUX(0, "mout_sclk_uart1", mout_top0_group1, MUX_SEL_TOP0_PERIC3, 12, 2), |
224 | MUX(0, "mout_sclk_uart0", mout_top0_group1, MUX_SEL_TOP0_PERIC3, 16, 2), | 279 | MUX(0, "mout_sclk_uart0", mout_top0_group1, MUX_SEL_TOP0_PERIC3, 16, 2), |
280 | MUX(0, "mout_sclk_spi4", mout_top0_group1, MUX_SEL_TOP0_PERIC3, 20, 2), | ||
225 | }; | 281 | }; |
226 | 282 | ||
227 | static struct samsung_div_clock top0_div_clks[] __initdata = { | 283 | static struct samsung_div_clock top0_div_clks[] __initdata = { |
@@ -230,13 +286,40 @@ static struct samsung_div_clock top0_div_clks[] __initdata = { | |||
230 | DIV(DOUT_ACLK_PERIC0, "dout_aclk_peric0_66", "mout_aclk_peric0_66", | 286 | DIV(DOUT_ACLK_PERIC0, "dout_aclk_peric0_66", "mout_aclk_peric0_66", |
231 | DIV_TOP03, 20, 6), | 287 | DIV_TOP03, 20, 6), |
232 | 288 | ||
289 | DIV(0, "dout_sclk_spdif", "mout_sclk_spdif", DIV_TOP0_PERIC0, 4, 4), | ||
290 | DIV(0, "dout_sclk_pcm1", "mout_sclk_pcm1", DIV_TOP0_PERIC0, 8, 12), | ||
291 | DIV(0, "dout_sclk_i2s1", "mout_sclk_i2s1", DIV_TOP0_PERIC0, 20, 10), | ||
292 | |||
293 | DIV(0, "dout_sclk_spi1", "mout_sclk_spi1", DIV_TOP0_PERIC1, 8, 12), | ||
294 | DIV(0, "dout_sclk_spi0", "mout_sclk_spi0", DIV_TOP0_PERIC1, 20, 12), | ||
295 | |||
296 | DIV(0, "dout_sclk_spi3", "mout_sclk_spi3", DIV_TOP0_PERIC2, 8, 12), | ||
297 | DIV(0, "dout_sclk_spi2", "mout_sclk_spi2", DIV_TOP0_PERIC2, 20, 12), | ||
298 | |||
233 | DIV(0, "dout_sclk_uart3", "mout_sclk_uart3", DIV_TOP0_PERIC3, 4, 4), | 299 | DIV(0, "dout_sclk_uart3", "mout_sclk_uart3", DIV_TOP0_PERIC3, 4, 4), |
234 | DIV(0, "dout_sclk_uart2", "mout_sclk_uart2", DIV_TOP0_PERIC3, 8, 4), | 300 | DIV(0, "dout_sclk_uart2", "mout_sclk_uart2", DIV_TOP0_PERIC3, 8, 4), |
235 | DIV(0, "dout_sclk_uart1", "mout_sclk_uart1", DIV_TOP0_PERIC3, 12, 4), | 301 | DIV(0, "dout_sclk_uart1", "mout_sclk_uart1", DIV_TOP0_PERIC3, 12, 4), |
236 | DIV(0, "dout_sclk_uart0", "mout_sclk_uart0", DIV_TOP0_PERIC3, 16, 4), | 302 | DIV(0, "dout_sclk_uart0", "mout_sclk_uart0", DIV_TOP0_PERIC3, 16, 4), |
303 | DIV(0, "dout_sclk_spi4", "mout_sclk_spi4", DIV_TOP0_PERIC3, 20, 12), | ||
237 | }; | 304 | }; |
238 | 305 | ||
239 | static struct samsung_gate_clock top0_gate_clks[] __initdata = { | 306 | static struct samsung_gate_clock top0_gate_clks[] __initdata = { |
307 | GATE(CLK_SCLK_SPDIF, "sclk_spdif", "dout_sclk_spdif", | ||
308 | ENABLE_SCLK_TOP0_PERIC0, 4, CLK_SET_RATE_PARENT, 0), | ||
309 | GATE(CLK_SCLK_PCM1, "sclk_pcm1", "dout_sclk_pcm1", | ||
310 | ENABLE_SCLK_TOP0_PERIC0, 8, CLK_SET_RATE_PARENT, 0), | ||
311 | GATE(CLK_SCLK_I2S1, "sclk_i2s1", "dout_sclk_i2s1", | ||
312 | ENABLE_SCLK_TOP0_PERIC0, 20, CLK_SET_RATE_PARENT, 0), | ||
313 | |||
314 | GATE(CLK_SCLK_SPI1, "sclk_spi1", "dout_sclk_spi1", | ||
315 | ENABLE_SCLK_TOP0_PERIC1, 8, CLK_SET_RATE_PARENT, 0), | ||
316 | GATE(CLK_SCLK_SPI0, "sclk_spi0", "dout_sclk_spi0", | ||
317 | ENABLE_SCLK_TOP0_PERIC1, 20, CLK_SET_RATE_PARENT, 0), | ||
318 | |||
319 | GATE(CLK_SCLK_SPI3, "sclk_spi3", "dout_sclk_spi3", | ||
320 | ENABLE_SCLK_TOP0_PERIC2, 8, CLK_SET_RATE_PARENT, 0), | ||
321 | GATE(CLK_SCLK_SPI2, "sclk_spi2", "dout_sclk_spi2", | ||
322 | ENABLE_SCLK_TOP0_PERIC2, 20, CLK_SET_RATE_PARENT, 0), | ||
240 | GATE(CLK_SCLK_UART3, "sclk_uart3", "dout_sclk_uart3", | 323 | GATE(CLK_SCLK_UART3, "sclk_uart3", "dout_sclk_uart3", |
241 | ENABLE_SCLK_TOP0_PERIC3, 4, 0, 0), | 324 | ENABLE_SCLK_TOP0_PERIC3, 4, 0, 0), |
242 | GATE(CLK_SCLK_UART2, "sclk_uart2", "dout_sclk_uart2", | 325 | GATE(CLK_SCLK_UART2, "sclk_uart2", "dout_sclk_uart2", |
@@ -245,6 +328,8 @@ static struct samsung_gate_clock top0_gate_clks[] __initdata = { | |||
245 | ENABLE_SCLK_TOP0_PERIC3, 12, 0, 0), | 328 | ENABLE_SCLK_TOP0_PERIC3, 12, 0, 0), |
246 | GATE(CLK_SCLK_UART0, "sclk_uart0", "dout_sclk_uart0", | 329 | GATE(CLK_SCLK_UART0, "sclk_uart0", "dout_sclk_uart0", |
247 | ENABLE_SCLK_TOP0_PERIC3, 16, 0, 0), | 330 | ENABLE_SCLK_TOP0_PERIC3, 16, 0, 0), |
331 | GATE(CLK_SCLK_SPI4, "sclk_spi4", "dout_sclk_spi4", | ||
332 | ENABLE_SCLK_TOP0_PERIC3, 20, CLK_SET_RATE_PARENT, 0), | ||
248 | }; | 333 | }; |
249 | 334 | ||
250 | static struct samsung_fixed_factor_clock top0_fixed_factor_clks[] __initdata = { | 335 | static struct samsung_fixed_factor_clock top0_fixed_factor_clks[] __initdata = { |
@@ -343,6 +428,8 @@ static struct samsung_mux_clock top1_mux_clks[] __initdata = { | |||
343 | MUX(0, "mout_aclk_fsys0_200", mout_top1_group1, MUX_SEL_TOP13, 28, 2), | 428 | MUX(0, "mout_aclk_fsys0_200", mout_top1_group1, MUX_SEL_TOP13, 28, 2), |
344 | 429 | ||
345 | MUX(0, "mout_sclk_mmc2", mout_top1_group1, MUX_SEL_TOP1_FSYS0, 24, 2), | 430 | MUX(0, "mout_sclk_mmc2", mout_top1_group1, MUX_SEL_TOP1_FSYS0, 24, 2), |
431 | MUX(0, "mout_sclk_usbdrd300", mout_top1_group1, | ||
432 | MUX_SEL_TOP1_FSYS0, 28, 2), | ||
346 | 433 | ||
347 | MUX(0, "mout_sclk_mmc1", mout_top1_group1, MUX_SEL_TOP1_FSYS1, 24, 2), | 434 | MUX(0, "mout_sclk_mmc1", mout_top1_group1, MUX_SEL_TOP1_FSYS1, 24, 2), |
348 | MUX(0, "mout_sclk_mmc0", mout_top1_group1, MUX_SEL_TOP1_FSYS1, 28, 2), | 435 | MUX(0, "mout_sclk_mmc0", mout_top1_group1, MUX_SEL_TOP1_FSYS1, 28, 2), |
@@ -356,6 +443,8 @@ static struct samsung_div_clock top1_div_clks[] __initdata = { | |||
356 | 443 | ||
357 | DIV(DOUT_SCLK_MMC2, "dout_sclk_mmc2", "mout_sclk_mmc2", | 444 | DIV(DOUT_SCLK_MMC2, "dout_sclk_mmc2", "mout_sclk_mmc2", |
358 | DIV_TOP1_FSYS0, 24, 4), | 445 | DIV_TOP1_FSYS0, 24, 4), |
446 | DIV(0, "dout_sclk_usbdrd300", "mout_sclk_usbdrd300", | ||
447 | DIV_TOP1_FSYS0, 28, 4), | ||
359 | 448 | ||
360 | DIV(DOUT_SCLK_MMC1, "dout_sclk_mmc1", "mout_sclk_mmc1", | 449 | DIV(DOUT_SCLK_MMC1, "dout_sclk_mmc1", "mout_sclk_mmc1", |
361 | DIV_TOP1_FSYS1, 24, 4), | 450 | DIV_TOP1_FSYS1, 24, 4), |
@@ -366,6 +455,8 @@ static struct samsung_div_clock top1_div_clks[] __initdata = { | |||
366 | static struct samsung_gate_clock top1_gate_clks[] __initdata = { | 455 | static struct samsung_gate_clock top1_gate_clks[] __initdata = { |
367 | GATE(CLK_SCLK_MMC2, "sclk_mmc2", "dout_sclk_mmc2", | 456 | GATE(CLK_SCLK_MMC2, "sclk_mmc2", "dout_sclk_mmc2", |
368 | ENABLE_SCLK_TOP1_FSYS0, 24, CLK_SET_RATE_PARENT, 0), | 457 | ENABLE_SCLK_TOP1_FSYS0, 24, CLK_SET_RATE_PARENT, 0), |
458 | GATE(0, "sclk_usbdrd300", "dout_sclk_usbdrd300", | ||
459 | ENABLE_SCLK_TOP1_FSYS0, 28, 0, 0), | ||
369 | 460 | ||
370 | GATE(CLK_SCLK_MMC1, "sclk_mmc1", "dout_sclk_mmc1", | 461 | GATE(CLK_SCLK_MMC1, "sclk_mmc1", "dout_sclk_mmc1", |
371 | ENABLE_SCLK_TOP1_FSYS1, 24, CLK_SET_RATE_PARENT, 0), | 462 | ENABLE_SCLK_TOP1_FSYS1, 24, CLK_SET_RATE_PARENT, 0), |
@@ -514,6 +605,7 @@ static void __init exynos7_clk_peric0_init(struct device_node *np) | |||
514 | /* Register Offset definitions for CMU_PERIC1 (0x14C80000) */ | 605 | /* Register Offset definitions for CMU_PERIC1 (0x14C80000) */ |
515 | #define MUX_SEL_PERIC10 0x0200 | 606 | #define MUX_SEL_PERIC10 0x0200 |
516 | #define MUX_SEL_PERIC11 0x0204 | 607 | #define MUX_SEL_PERIC11 0x0204 |
608 | #define MUX_SEL_PERIC12 0x0208 | ||
517 | #define ENABLE_PCLK_PERIC1 0x0900 | 609 | #define ENABLE_PCLK_PERIC1 0x0900 |
518 | #define ENABLE_SCLK_PERIC10 0x0A00 | 610 | #define ENABLE_SCLK_PERIC10 0x0A00 |
519 | 611 | ||
@@ -525,10 +617,16 @@ PNAME(mout_aclk_peric1_66_p) = { "fin_pll", "dout_aclk_peric1_66" }; | |||
525 | PNAME(mout_sclk_uart1_p) = { "fin_pll", "sclk_uart1" }; | 617 | PNAME(mout_sclk_uart1_p) = { "fin_pll", "sclk_uart1" }; |
526 | PNAME(mout_sclk_uart2_p) = { "fin_pll", "sclk_uart2" }; | 618 | PNAME(mout_sclk_uart2_p) = { "fin_pll", "sclk_uart2" }; |
527 | PNAME(mout_sclk_uart3_p) = { "fin_pll", "sclk_uart3" }; | 619 | PNAME(mout_sclk_uart3_p) = { "fin_pll", "sclk_uart3" }; |
620 | PNAME(mout_sclk_spi0_p) = { "fin_pll", "sclk_spi0" }; | ||
621 | PNAME(mout_sclk_spi1_p) = { "fin_pll", "sclk_spi1" }; | ||
622 | PNAME(mout_sclk_spi2_p) = { "fin_pll", "sclk_spi2" }; | ||
623 | PNAME(mout_sclk_spi3_p) = { "fin_pll", "sclk_spi3" }; | ||
624 | PNAME(mout_sclk_spi4_p) = { "fin_pll", "sclk_spi4" }; | ||
528 | 625 | ||
529 | static unsigned long peric1_clk_regs[] __initdata = { | 626 | static unsigned long peric1_clk_regs[] __initdata = { |
530 | MUX_SEL_PERIC10, | 627 | MUX_SEL_PERIC10, |
531 | MUX_SEL_PERIC11, | 628 | MUX_SEL_PERIC11, |
629 | MUX_SEL_PERIC12, | ||
532 | ENABLE_PCLK_PERIC1, | 630 | ENABLE_PCLK_PERIC1, |
533 | ENABLE_SCLK_PERIC10, | 631 | ENABLE_SCLK_PERIC10, |
534 | }; | 632 | }; |
@@ -537,6 +635,16 @@ static struct samsung_mux_clock peric1_mux_clks[] __initdata = { | |||
537 | MUX(0, "mout_aclk_peric1_66_user", mout_aclk_peric1_66_p, | 635 | MUX(0, "mout_aclk_peric1_66_user", mout_aclk_peric1_66_p, |
538 | MUX_SEL_PERIC10, 0, 1), | 636 | MUX_SEL_PERIC10, 0, 1), |
539 | 637 | ||
638 | MUX_F(0, "mout_sclk_spi0_user", mout_sclk_spi0_p, | ||
639 | MUX_SEL_PERIC11, 0, 1, CLK_SET_RATE_PARENT, 0), | ||
640 | MUX_F(0, "mout_sclk_spi1_user", mout_sclk_spi1_p, | ||
641 | MUX_SEL_PERIC11, 4, 1, CLK_SET_RATE_PARENT, 0), | ||
642 | MUX_F(0, "mout_sclk_spi2_user", mout_sclk_spi2_p, | ||
643 | MUX_SEL_PERIC11, 8, 1, CLK_SET_RATE_PARENT, 0), | ||
644 | MUX_F(0, "mout_sclk_spi3_user", mout_sclk_spi3_p, | ||
645 | MUX_SEL_PERIC11, 12, 1, CLK_SET_RATE_PARENT, 0), | ||
646 | MUX_F(0, "mout_sclk_spi4_user", mout_sclk_spi4_p, | ||
647 | MUX_SEL_PERIC11, 16, 1, CLK_SET_RATE_PARENT, 0), | ||
540 | MUX(0, "mout_sclk_uart1_user", mout_sclk_uart1_p, | 648 | MUX(0, "mout_sclk_uart1_user", mout_sclk_uart1_p, |
541 | MUX_SEL_PERIC11, 20, 1), | 649 | MUX_SEL_PERIC11, 20, 1), |
542 | MUX(0, "mout_sclk_uart2_user", mout_sclk_uart2_p, | 650 | MUX(0, "mout_sclk_uart2_user", mout_sclk_uart2_p, |
@@ -562,6 +670,22 @@ static struct samsung_gate_clock peric1_gate_clks[] __initdata = { | |||
562 | ENABLE_PCLK_PERIC1, 10, 0, 0), | 670 | ENABLE_PCLK_PERIC1, 10, 0, 0), |
563 | GATE(PCLK_UART3, "pclk_uart3", "mout_aclk_peric1_66_user", | 671 | GATE(PCLK_UART3, "pclk_uart3", "mout_aclk_peric1_66_user", |
564 | ENABLE_PCLK_PERIC1, 11, 0, 0), | 672 | ENABLE_PCLK_PERIC1, 11, 0, 0), |
673 | GATE(PCLK_SPI0, "pclk_spi0", "mout_aclk_peric1_66_user", | ||
674 | ENABLE_PCLK_PERIC1, 12, 0, 0), | ||
675 | GATE(PCLK_SPI1, "pclk_spi1", "mout_aclk_peric1_66_user", | ||
676 | ENABLE_PCLK_PERIC1, 13, 0, 0), | ||
677 | GATE(PCLK_SPI2, "pclk_spi2", "mout_aclk_peric1_66_user", | ||
678 | ENABLE_PCLK_PERIC1, 14, 0, 0), | ||
679 | GATE(PCLK_SPI3, "pclk_spi3", "mout_aclk_peric1_66_user", | ||
680 | ENABLE_PCLK_PERIC1, 15, 0, 0), | ||
681 | GATE(PCLK_SPI4, "pclk_spi4", "mout_aclk_peric1_66_user", | ||
682 | ENABLE_PCLK_PERIC1, 16, 0, 0), | ||
683 | GATE(PCLK_I2S1, "pclk_i2s1", "mout_aclk_peric1_66_user", | ||
684 | ENABLE_PCLK_PERIC1, 17, CLK_SET_RATE_PARENT, 0), | ||
685 | GATE(PCLK_PCM1, "pclk_pcm1", "mout_aclk_peric1_66_user", | ||
686 | ENABLE_PCLK_PERIC1, 18, 0, 0), | ||
687 | GATE(PCLK_SPDIF, "pclk_spdif", "mout_aclk_peric1_66_user", | ||
688 | ENABLE_PCLK_PERIC1, 19, 0, 0), | ||
565 | 689 | ||
566 | GATE(SCLK_UART1, "sclk_uart1_user", "mout_sclk_uart1_user", | 690 | GATE(SCLK_UART1, "sclk_uart1_user", "mout_sclk_uart1_user", |
567 | ENABLE_SCLK_PERIC10, 9, 0, 0), | 691 | ENABLE_SCLK_PERIC10, 9, 0, 0), |
@@ -569,6 +693,22 @@ static struct samsung_gate_clock peric1_gate_clks[] __initdata = { | |||
569 | ENABLE_SCLK_PERIC10, 10, 0, 0), | 693 | ENABLE_SCLK_PERIC10, 10, 0, 0), |
570 | GATE(SCLK_UART3, "sclk_uart3_user", "mout_sclk_uart3_user", | 694 | GATE(SCLK_UART3, "sclk_uart3_user", "mout_sclk_uart3_user", |
571 | ENABLE_SCLK_PERIC10, 11, 0, 0), | 695 | ENABLE_SCLK_PERIC10, 11, 0, 0), |
696 | GATE(SCLK_SPI0, "sclk_spi0_user", "mout_sclk_spi0_user", | ||
697 | ENABLE_SCLK_PERIC10, 12, CLK_SET_RATE_PARENT, 0), | ||
698 | GATE(SCLK_SPI1, "sclk_spi1_user", "mout_sclk_spi1_user", | ||
699 | ENABLE_SCLK_PERIC10, 13, CLK_SET_RATE_PARENT, 0), | ||
700 | GATE(SCLK_SPI2, "sclk_spi2_user", "mout_sclk_spi2_user", | ||
701 | ENABLE_SCLK_PERIC10, 14, CLK_SET_RATE_PARENT, 0), | ||
702 | GATE(SCLK_SPI3, "sclk_spi3_user", "mout_sclk_spi3_user", | ||
703 | ENABLE_SCLK_PERIC10, 15, CLK_SET_RATE_PARENT, 0), | ||
704 | GATE(SCLK_SPI4, "sclk_spi4_user", "mout_sclk_spi4_user", | ||
705 | ENABLE_SCLK_PERIC10, 16, CLK_SET_RATE_PARENT, 0), | ||
706 | GATE(SCLK_I2S1, "sclk_i2s1_user", "sclk_i2s1", | ||
707 | ENABLE_SCLK_PERIC10, 17, CLK_SET_RATE_PARENT, 0), | ||
708 | GATE(SCLK_PCM1, "sclk_pcm1_user", "sclk_pcm1", | ||
709 | ENABLE_SCLK_PERIC10, 18, CLK_SET_RATE_PARENT, 0), | ||
710 | GATE(SCLK_SPDIF, "sclk_spdif_user", "sclk_spdif", | ||
711 | ENABLE_SCLK_PERIC10, 19, CLK_SET_RATE_PARENT, 0), | ||
572 | }; | 712 | }; |
573 | 713 | ||
574 | static struct samsung_cmu_info peric1_cmu_info __initdata = { | 714 | static struct samsung_cmu_info peric1_cmu_info __initdata = { |
@@ -647,7 +787,12 @@ CLK_OF_DECLARE(exynos7_clk_peris, "samsung,exynos7-clock-peris", | |||
647 | /* Register Offset definitions for CMU_FSYS0 (0x10E90000) */ | 787 | /* Register Offset definitions for CMU_FSYS0 (0x10E90000) */ |
648 | #define MUX_SEL_FSYS00 0x0200 | 788 | #define MUX_SEL_FSYS00 0x0200 |
649 | #define MUX_SEL_FSYS01 0x0204 | 789 | #define MUX_SEL_FSYS01 0x0204 |
790 | #define MUX_SEL_FSYS02 0x0208 | ||
791 | #define ENABLE_ACLK_FSYS00 0x0800 | ||
650 | #define ENABLE_ACLK_FSYS01 0x0804 | 792 | #define ENABLE_ACLK_FSYS01 0x0804 |
793 | #define ENABLE_SCLK_FSYS01 0x0A04 | ||
794 | #define ENABLE_SCLK_FSYS02 0x0A08 | ||
795 | #define ENABLE_SCLK_FSYS04 0x0A10 | ||
651 | 796 | ||
652 | /* | 797 | /* |
653 | * List of parent clocks for Muxes in CMU_FSYS0 | 798 | * List of parent clocks for Muxes in CMU_FSYS0 |
@@ -655,10 +800,29 @@ CLK_OF_DECLARE(exynos7_clk_peris, "samsung,exynos7-clock-peris", | |||
655 | PNAME(mout_aclk_fsys0_200_p) = { "fin_pll", "dout_aclk_fsys0_200" }; | 800 | PNAME(mout_aclk_fsys0_200_p) = { "fin_pll", "dout_aclk_fsys0_200" }; |
656 | PNAME(mout_sclk_mmc2_p) = { "fin_pll", "sclk_mmc2" }; | 801 | PNAME(mout_sclk_mmc2_p) = { "fin_pll", "sclk_mmc2" }; |
657 | 802 | ||
803 | PNAME(mout_sclk_usbdrd300_p) = { "fin_pll", "sclk_usbdrd300" }; | ||
804 | PNAME(mout_phyclk_usbdrd300_udrd30_phyclk_p) = { "fin_pll", | ||
805 | "phyclk_usbdrd300_udrd30_phyclock" }; | ||
806 | PNAME(mout_phyclk_usbdrd300_udrd30_pipe_pclk_p) = { "fin_pll", | ||
807 | "phyclk_usbdrd300_udrd30_pipe_pclk" }; | ||
808 | |||
809 | /* fixed rate clocks used in the FSYS0 block */ | ||
810 | struct samsung_fixed_rate_clock fixed_rate_clks_fsys0[] __initdata = { | ||
811 | FRATE(0, "phyclk_usbdrd300_udrd30_phyclock", NULL, | ||
812 | CLK_IS_ROOT, 60000000), | ||
813 | FRATE(0, "phyclk_usbdrd300_udrd30_pipe_pclk", NULL, | ||
814 | CLK_IS_ROOT, 125000000), | ||
815 | }; | ||
816 | |||
658 | static unsigned long fsys0_clk_regs[] __initdata = { | 817 | static unsigned long fsys0_clk_regs[] __initdata = { |
659 | MUX_SEL_FSYS00, | 818 | MUX_SEL_FSYS00, |
660 | MUX_SEL_FSYS01, | 819 | MUX_SEL_FSYS01, |
820 | MUX_SEL_FSYS02, | ||
821 | ENABLE_ACLK_FSYS00, | ||
661 | ENABLE_ACLK_FSYS01, | 822 | ENABLE_ACLK_FSYS01, |
823 | ENABLE_SCLK_FSYS01, | ||
824 | ENABLE_SCLK_FSYS02, | ||
825 | ENABLE_SCLK_FSYS04, | ||
662 | }; | 826 | }; |
663 | 827 | ||
664 | static struct samsung_mux_clock fsys0_mux_clks[] __initdata = { | 828 | static struct samsung_mux_clock fsys0_mux_clks[] __initdata = { |
@@ -666,11 +830,49 @@ static struct samsung_mux_clock fsys0_mux_clks[] __initdata = { | |||
666 | MUX_SEL_FSYS00, 24, 1), | 830 | MUX_SEL_FSYS00, 24, 1), |
667 | 831 | ||
668 | MUX(0, "mout_sclk_mmc2_user", mout_sclk_mmc2_p, MUX_SEL_FSYS01, 24, 1), | 832 | MUX(0, "mout_sclk_mmc2_user", mout_sclk_mmc2_p, MUX_SEL_FSYS01, 24, 1), |
833 | MUX(0, "mout_sclk_usbdrd300_user", mout_sclk_usbdrd300_p, | ||
834 | MUX_SEL_FSYS01, 28, 1), | ||
835 | |||
836 | MUX(0, "mout_phyclk_usbdrd300_udrd30_pipe_pclk_user", | ||
837 | mout_phyclk_usbdrd300_udrd30_pipe_pclk_p, | ||
838 | MUX_SEL_FSYS02, 24, 1), | ||
839 | MUX(0, "mout_phyclk_usbdrd300_udrd30_phyclk_user", | ||
840 | mout_phyclk_usbdrd300_udrd30_phyclk_p, | ||
841 | MUX_SEL_FSYS02, 28, 1), | ||
669 | }; | 842 | }; |
670 | 843 | ||
671 | static struct samsung_gate_clock fsys0_gate_clks[] __initdata = { | 844 | static struct samsung_gate_clock fsys0_gate_clks[] __initdata = { |
845 | GATE(ACLK_AXIUS_USBDRD30X_FSYS0X, "aclk_axius_usbdrd30x_fsys0x", | ||
846 | "mout_aclk_fsys0_200_user", | ||
847 | ENABLE_ACLK_FSYS00, 19, 0, 0), | ||
848 | GATE(ACLK_PDMA1, "aclk_pdma1", "mout_aclk_fsys0_200_user", | ||
849 | ENABLE_ACLK_FSYS00, 3, 0, 0), | ||
850 | GATE(ACLK_PDMA0, "aclk_pdma0", "mout_aclk_fsys0_200_user", | ||
851 | ENABLE_ACLK_FSYS00, 4, 0, 0), | ||
852 | |||
853 | GATE(ACLK_USBDRD300, "aclk_usbdrd300", "mout_aclk_fsys0_200_user", | ||
854 | ENABLE_ACLK_FSYS01, 29, 0, 0), | ||
672 | GATE(ACLK_MMC2, "aclk_mmc2", "mout_aclk_fsys0_200_user", | 855 | GATE(ACLK_MMC2, "aclk_mmc2", "mout_aclk_fsys0_200_user", |
673 | ENABLE_ACLK_FSYS01, 31, 0, 0), | 856 | ENABLE_ACLK_FSYS01, 31, 0, 0), |
857 | |||
858 | GATE(SCLK_USBDRD300_SUSPENDCLK, "sclk_usbdrd300_suspendclk", | ||
859 | "mout_sclk_usbdrd300_user", | ||
860 | ENABLE_SCLK_FSYS01, 4, 0, 0), | ||
861 | GATE(SCLK_USBDRD300_REFCLK, "sclk_usbdrd300_refclk", "fin_pll", | ||
862 | ENABLE_SCLK_FSYS01, 8, 0, 0), | ||
863 | |||
864 | GATE(PHYCLK_USBDRD300_UDRD30_PIPE_PCLK_USER, | ||
865 | "phyclk_usbdrd300_udrd30_pipe_pclk_user", | ||
866 | "mout_phyclk_usbdrd300_udrd30_pipe_pclk_user", | ||
867 | ENABLE_SCLK_FSYS02, 24, 0, 0), | ||
868 | GATE(PHYCLK_USBDRD300_UDRD30_PHYCLK_USER, | ||
869 | "phyclk_usbdrd300_udrd30_phyclk_user", | ||
870 | "mout_phyclk_usbdrd300_udrd30_phyclk_user", | ||
871 | ENABLE_SCLK_FSYS02, 28, 0, 0), | ||
872 | |||
873 | GATE(OSCCLK_PHY_CLKOUT_USB30_PHY, "oscclk_phy_clkout_usb30_phy", | ||
874 | "fin_pll", | ||
875 | ENABLE_SCLK_FSYS04, 28, 0, 0), | ||
674 | }; | 876 | }; |
675 | 877 | ||
676 | static struct samsung_cmu_info fsys0_cmu_info __initdata = { | 878 | static struct samsung_cmu_info fsys0_cmu_info __initdata = { |
@@ -741,3 +943,205 @@ static void __init exynos7_clk_fsys1_init(struct device_node *np) | |||
741 | 943 | ||
742 | CLK_OF_DECLARE(exynos7_clk_fsys1, "samsung,exynos7-clock-fsys1", | 944 | CLK_OF_DECLARE(exynos7_clk_fsys1, "samsung,exynos7-clock-fsys1", |
743 | exynos7_clk_fsys1_init); | 945 | exynos7_clk_fsys1_init); |
946 | |||
947 | #define MUX_SEL_MSCL 0x0200 | ||
948 | #define DIV_MSCL 0x0600 | ||
949 | #define ENABLE_ACLK_MSCL 0x0800 | ||
950 | #define ENABLE_PCLK_MSCL 0x0900 | ||
951 | |||
952 | /* List of parent clocks for Muxes in CMU_MSCL */ | ||
953 | PNAME(mout_aclk_mscl_532_user_p) = { "fin_pll", "aclk_mscl_532" }; | ||
954 | |||
955 | static unsigned long mscl_clk_regs[] __initdata = { | ||
956 | MUX_SEL_MSCL, | ||
957 | DIV_MSCL, | ||
958 | ENABLE_ACLK_MSCL, | ||
959 | ENABLE_PCLK_MSCL, | ||
960 | }; | ||
961 | |||
962 | static struct samsung_mux_clock mscl_mux_clks[] __initdata = { | ||
963 | MUX(USERMUX_ACLK_MSCL_532, "usermux_aclk_mscl_532", | ||
964 | mout_aclk_mscl_532_user_p, MUX_SEL_MSCL, 0, 1), | ||
965 | }; | ||
966 | static struct samsung_div_clock mscl_div_clks[] __initdata = { | ||
967 | DIV(DOUT_PCLK_MSCL, "dout_pclk_mscl", "usermux_aclk_mscl_532", | ||
968 | DIV_MSCL, 0, 3), | ||
969 | }; | ||
970 | static struct samsung_gate_clock mscl_gate_clks[] __initdata = { | ||
971 | |||
972 | GATE(ACLK_MSCL_0, "aclk_mscl_0", "usermux_aclk_mscl_532", | ||
973 | ENABLE_ACLK_MSCL, 31, 0, 0), | ||
974 | GATE(ACLK_MSCL_1, "aclk_mscl_1", "usermux_aclk_mscl_532", | ||
975 | ENABLE_ACLK_MSCL, 30, 0, 0), | ||
976 | GATE(ACLK_JPEG, "aclk_jpeg", "usermux_aclk_mscl_532", | ||
977 | ENABLE_ACLK_MSCL, 29, 0, 0), | ||
978 | GATE(ACLK_G2D, "aclk_g2d", "usermux_aclk_mscl_532", | ||
979 | ENABLE_ACLK_MSCL, 28, 0, 0), | ||
980 | GATE(ACLK_LH_ASYNC_SI_MSCL_0, "aclk_lh_async_si_mscl_0", | ||
981 | "usermux_aclk_mscl_532", | ||
982 | ENABLE_ACLK_MSCL, 27, 0, 0), | ||
983 | GATE(ACLK_LH_ASYNC_SI_MSCL_1, "aclk_lh_async_si_mscl_1", | ||
984 | "usermux_aclk_mscl_532", | ||
985 | ENABLE_ACLK_MSCL, 26, 0, 0), | ||
986 | GATE(ACLK_XIU_MSCLX_0, "aclk_xiu_msclx_0", "usermux_aclk_mscl_532", | ||
987 | ENABLE_ACLK_MSCL, 25, 0, 0), | ||
988 | GATE(ACLK_XIU_MSCLX_1, "aclk_xiu_msclx_1", "usermux_aclk_mscl_532", | ||
989 | ENABLE_ACLK_MSCL, 24, 0, 0), | ||
990 | GATE(ACLK_AXI2ACEL_BRIDGE, "aclk_axi2acel_bridge", | ||
991 | "usermux_aclk_mscl_532", | ||
992 | ENABLE_ACLK_MSCL, 23, 0, 0), | ||
993 | GATE(ACLK_QE_MSCL_0, "aclk_qe_mscl_0", "usermux_aclk_mscl_532", | ||
994 | ENABLE_ACLK_MSCL, 22, 0, 0), | ||
995 | GATE(ACLK_QE_MSCL_1, "aclk_qe_mscl_1", "usermux_aclk_mscl_532", | ||
996 | ENABLE_ACLK_MSCL, 21, 0, 0), | ||
997 | GATE(ACLK_QE_JPEG, "aclk_qe_jpeg", "usermux_aclk_mscl_532", | ||
998 | ENABLE_ACLK_MSCL, 20, 0, 0), | ||
999 | GATE(ACLK_QE_G2D, "aclk_qe_g2d", "usermux_aclk_mscl_532", | ||
1000 | ENABLE_ACLK_MSCL, 19, 0, 0), | ||
1001 | GATE(ACLK_PPMU_MSCL_0, "aclk_ppmu_mscl_0", "usermux_aclk_mscl_532", | ||
1002 | ENABLE_ACLK_MSCL, 18, 0, 0), | ||
1003 | GATE(ACLK_PPMU_MSCL_1, "aclk_ppmu_mscl_1", "usermux_aclk_mscl_532", | ||
1004 | ENABLE_ACLK_MSCL, 17, 0, 0), | ||
1005 | GATE(ACLK_MSCLNP_133, "aclk_msclnp_133", "usermux_aclk_mscl_532", | ||
1006 | ENABLE_ACLK_MSCL, 16, 0, 0), | ||
1007 | GATE(ACLK_AHB2APB_MSCL0P, "aclk_ahb2apb_mscl0p", | ||
1008 | "usermux_aclk_mscl_532", | ||
1009 | ENABLE_ACLK_MSCL, 15, 0, 0), | ||
1010 | GATE(ACLK_AHB2APB_MSCL1P, "aclk_ahb2apb_mscl1p", | ||
1011 | "usermux_aclk_mscl_532", | ||
1012 | ENABLE_ACLK_MSCL, 14, 0, 0), | ||
1013 | |||
1014 | GATE(PCLK_MSCL_0, "pclk_mscl_0", "dout_pclk_mscl", | ||
1015 | ENABLE_PCLK_MSCL, 31, 0, 0), | ||
1016 | GATE(PCLK_MSCL_1, "pclk_mscl_1", "dout_pclk_mscl", | ||
1017 | ENABLE_PCLK_MSCL, 30, 0, 0), | ||
1018 | GATE(PCLK_JPEG, "pclk_jpeg", "dout_pclk_mscl", | ||
1019 | ENABLE_PCLK_MSCL, 29, 0, 0), | ||
1020 | GATE(PCLK_G2D, "pclk_g2d", "dout_pclk_mscl", | ||
1021 | ENABLE_PCLK_MSCL, 28, 0, 0), | ||
1022 | GATE(PCLK_QE_MSCL_0, "pclk_qe_mscl_0", "dout_pclk_mscl", | ||
1023 | ENABLE_PCLK_MSCL, 27, 0, 0), | ||
1024 | GATE(PCLK_QE_MSCL_1, "pclk_qe_mscl_1", "dout_pclk_mscl", | ||
1025 | ENABLE_PCLK_MSCL, 26, 0, 0), | ||
1026 | GATE(PCLK_QE_JPEG, "pclk_qe_jpeg", "dout_pclk_mscl", | ||
1027 | ENABLE_PCLK_MSCL, 25, 0, 0), | ||
1028 | GATE(PCLK_QE_G2D, "pclk_qe_g2d", "dout_pclk_mscl", | ||
1029 | ENABLE_PCLK_MSCL, 24, 0, 0), | ||
1030 | GATE(PCLK_PPMU_MSCL_0, "pclk_ppmu_mscl_0", "dout_pclk_mscl", | ||
1031 | ENABLE_PCLK_MSCL, 23, 0, 0), | ||
1032 | GATE(PCLK_PPMU_MSCL_1, "pclk_ppmu_mscl_1", "dout_pclk_mscl", | ||
1033 | ENABLE_PCLK_MSCL, 22, 0, 0), | ||
1034 | GATE(PCLK_AXI2ACEL_BRIDGE, "pclk_axi2acel_bridge", "dout_pclk_mscl", | ||
1035 | ENABLE_PCLK_MSCL, 21, 0, 0), | ||
1036 | GATE(PCLK_PMU_MSCL, "pclk_pmu_mscl", "dout_pclk_mscl", | ||
1037 | ENABLE_PCLK_MSCL, 20, 0, 0), | ||
1038 | }; | ||
1039 | |||
1040 | static struct samsung_cmu_info mscl_cmu_info __initdata = { | ||
1041 | .mux_clks = mscl_mux_clks, | ||
1042 | .nr_mux_clks = ARRAY_SIZE(mscl_mux_clks), | ||
1043 | .div_clks = mscl_div_clks, | ||
1044 | .nr_div_clks = ARRAY_SIZE(mscl_div_clks), | ||
1045 | .gate_clks = mscl_gate_clks, | ||
1046 | .nr_gate_clks = ARRAY_SIZE(mscl_gate_clks), | ||
1047 | .nr_clk_ids = MSCL_NR_CLK, | ||
1048 | .clk_regs = mscl_clk_regs, | ||
1049 | .nr_clk_regs = ARRAY_SIZE(mscl_clk_regs), | ||
1050 | }; | ||
1051 | |||
1052 | static void __init exynos7_clk_mscl_init(struct device_node *np) | ||
1053 | { | ||
1054 | samsung_cmu_register_one(np, &mscl_cmu_info); | ||
1055 | } | ||
1056 | |||
1057 | CLK_OF_DECLARE(exynos7_clk_mscl, "samsung,exynos7-clock-mscl", | ||
1058 | exynos7_clk_mscl_init); | ||
1059 | |||
1060 | /* Register Offset definitions for CMU_AUD (0x114C0000) */ | ||
1061 | #define MUX_SEL_AUD 0x0200 | ||
1062 | #define DIV_AUD0 0x0600 | ||
1063 | #define DIV_AUD1 0x0604 | ||
1064 | #define ENABLE_ACLK_AUD 0x0800 | ||
1065 | #define ENABLE_PCLK_AUD 0x0900 | ||
1066 | #define ENABLE_SCLK_AUD 0x0A00 | ||
1067 | |||
1068 | /* | ||
1069 | * List of parent clocks for Muxes in CMU_AUD | ||
1070 | */ | ||
1071 | PNAME(mout_aud_pll_user_p) = { "fin_pll", "fout_aud_pll" }; | ||
1072 | PNAME(mout_aud_group_p) = { "dout_aud_cdclk", "ioclk_audiocdclk0" }; | ||
1073 | |||
1074 | static unsigned long aud_clk_regs[] __initdata = { | ||
1075 | MUX_SEL_AUD, | ||
1076 | DIV_AUD0, | ||
1077 | DIV_AUD1, | ||
1078 | ENABLE_ACLK_AUD, | ||
1079 | ENABLE_PCLK_AUD, | ||
1080 | ENABLE_SCLK_AUD, | ||
1081 | }; | ||
1082 | |||
1083 | static struct samsung_mux_clock aud_mux_clks[] __initdata = { | ||
1084 | MUX(0, "mout_sclk_i2s", mout_aud_group_p, MUX_SEL_AUD, 12, 1), | ||
1085 | MUX(0, "mout_sclk_pcm", mout_aud_group_p, MUX_SEL_AUD, 16, 1), | ||
1086 | MUX(0, "mout_aud_pll_user", mout_aud_pll_user_p, MUX_SEL_AUD, 20, 1), | ||
1087 | }; | ||
1088 | |||
1089 | static struct samsung_div_clock aud_div_clks[] __initdata = { | ||
1090 | DIV(0, "dout_aud_ca5", "mout_aud_pll_user", DIV_AUD0, 0, 4), | ||
1091 | DIV(0, "dout_aclk_aud", "dout_aud_ca5", DIV_AUD0, 4, 4), | ||
1092 | DIV(0, "dout_aud_pclk_dbg", "dout_aud_ca5", DIV_AUD0, 8, 4), | ||
1093 | |||
1094 | DIV(0, "dout_sclk_i2s", "mout_sclk_i2s", DIV_AUD1, 0, 4), | ||
1095 | DIV(0, "dout_sclk_pcm", "mout_sclk_pcm", DIV_AUD1, 4, 8), | ||
1096 | DIV(0, "dout_sclk_uart", "dout_aud_cdclk", DIV_AUD1, 12, 4), | ||
1097 | DIV(0, "dout_sclk_slimbus", "dout_aud_cdclk", DIV_AUD1, 16, 5), | ||
1098 | DIV(0, "dout_aud_cdclk", "mout_aud_pll_user", DIV_AUD1, 24, 4), | ||
1099 | }; | ||
1100 | |||
1101 | static struct samsung_gate_clock aud_gate_clks[] __initdata = { | ||
1102 | GATE(SCLK_PCM, "sclk_pcm", "dout_sclk_pcm", | ||
1103 | ENABLE_SCLK_AUD, 27, CLK_SET_RATE_PARENT, 0), | ||
1104 | GATE(SCLK_I2S, "sclk_i2s", "dout_sclk_i2s", | ||
1105 | ENABLE_SCLK_AUD, 28, CLK_SET_RATE_PARENT, 0), | ||
1106 | GATE(0, "sclk_uart", "dout_sclk_uart", ENABLE_SCLK_AUD, 29, 0, 0), | ||
1107 | GATE(0, "sclk_slimbus", "dout_sclk_slimbus", | ||
1108 | ENABLE_SCLK_AUD, 30, 0, 0), | ||
1109 | |||
1110 | GATE(0, "pclk_dbg_aud", "dout_aud_pclk_dbg", ENABLE_PCLK_AUD, 19, 0, 0), | ||
1111 | GATE(0, "pclk_gpio_aud", "dout_aclk_aud", ENABLE_PCLK_AUD, 20, 0, 0), | ||
1112 | GATE(0, "pclk_wdt1", "dout_aclk_aud", ENABLE_PCLK_AUD, 22, 0, 0), | ||
1113 | GATE(0, "pclk_wdt0", "dout_aclk_aud", ENABLE_PCLK_AUD, 23, 0, 0), | ||
1114 | GATE(0, "pclk_slimbus", "dout_aclk_aud", ENABLE_PCLK_AUD, 24, 0, 0), | ||
1115 | GATE(0, "pclk_uart", "dout_aclk_aud", ENABLE_PCLK_AUD, 25, 0, 0), | ||
1116 | GATE(PCLK_PCM, "pclk_pcm", "dout_aclk_aud", | ||
1117 | ENABLE_PCLK_AUD, 26, CLK_SET_RATE_PARENT, 0), | ||
1118 | GATE(PCLK_I2S, "pclk_i2s", "dout_aclk_aud", | ||
1119 | ENABLE_PCLK_AUD, 27, CLK_SET_RATE_PARENT, 0), | ||
1120 | GATE(0, "pclk_timer", "dout_aclk_aud", ENABLE_PCLK_AUD, 28, 0, 0), | ||
1121 | GATE(0, "pclk_smmu_aud", "dout_aclk_aud", ENABLE_PCLK_AUD, 31, 0, 0), | ||
1122 | |||
1123 | GATE(0, "aclk_smmu_aud", "dout_aclk_aud", ENABLE_ACLK_AUD, 27, 0, 0), | ||
1124 | GATE(0, "aclk_acel_lh_async_si_top", "dout_aclk_aud", | ||
1125 | ENABLE_ACLK_AUD, 28, 0, 0), | ||
1126 | GATE(ACLK_ADMA, "aclk_dmac", "dout_aclk_aud", ENABLE_ACLK_AUD, 31, 0, 0), | ||
1127 | }; | ||
1128 | |||
1129 | static struct samsung_cmu_info aud_cmu_info __initdata = { | ||
1130 | .mux_clks = aud_mux_clks, | ||
1131 | .nr_mux_clks = ARRAY_SIZE(aud_mux_clks), | ||
1132 | .div_clks = aud_div_clks, | ||
1133 | .nr_div_clks = ARRAY_SIZE(aud_div_clks), | ||
1134 | .gate_clks = aud_gate_clks, | ||
1135 | .nr_gate_clks = ARRAY_SIZE(aud_gate_clks), | ||
1136 | .nr_clk_ids = AUD_NR_CLK, | ||
1137 | .clk_regs = aud_clk_regs, | ||
1138 | .nr_clk_regs = ARRAY_SIZE(aud_clk_regs), | ||
1139 | }; | ||
1140 | |||
1141 | static void __init exynos7_clk_aud_init(struct device_node *np) | ||
1142 | { | ||
1143 | samsung_cmu_register_one(np, &aud_cmu_info); | ||
1144 | } | ||
1145 | |||
1146 | CLK_OF_DECLARE(exynos7_clk_aud, "samsung,exynos7-clock-aud", | ||
1147 | exynos7_clk_aud_init); | ||