22 #include <linux/kernel.h>
23 #include <linux/module.h>
24 #include <linux/list.h>
37 #define DEFINE_CLK_TEGRA(_name, _rate, _ops, _flags, \
38 _parent_names, _parents, _parent) \
39 static struct clk tegra_##_name = { \
40 .hw = &tegra_##_name##_hw.hw, \
45 .parent_names = _parent_names, \
46 .parents = _parents, \
47 .num_parents = ARRAY_SIZE(_parent_names), \
51 static struct clk tegra_clk_32k;
52 static struct clk_tegra tegra_clk_32k_hw = {
54 .clk = &tegra_clk_32k,
58 static struct clk tegra_clk_32k = {
60 .hw = &tegra_clk_32k_hw.
hw,
65 static struct clk tegra_clk_m;
66 static struct clk_tegra tegra_clk_m_hw = {
75 static struct clk tegra_clk_m = {
77 .hw = &tegra_clk_m_hw.
hw,
79 .flags = CLK_IS_ROOT | CLK_IGNORE_UNUSED,
82 static const char *clk_m_div_parent_names[] = {
86 static struct clk *clk_m_div_parents[] = {
90 static struct clk tegra_clk_m_div2;
91 static struct clk_tegra tegra_clk_m_div2_hw = {
93 .clk = &tegra_clk_m_div2,
100 clk_m_div_parent_names, clk_m_div_parents, &tegra_clk_m);
102 static struct clk tegra_clk_m_div4;
103 static struct clk_tegra tegra_clk_m_div4_hw = {
105 .clk = &tegra_clk_m_div4,
109 .max_rate = 12000000,
112 clk_m_div_parent_names, clk_m_div_parents, &tegra_clk_m);
114 static struct clk tegra_pll_ref;
115 static struct clk_tegra tegra_pll_ref_hw = {
117 .clk = &tegra_pll_ref,
120 .max_rate = 26000000,
123 clk_m_div_parents, &tegra_clk_m);
125 #define DEFINE_PLL(_name, _flags, _reg, _max_rate, _input_min, \
126 _input_max, _cf_min, _cf_max, _vco_min, \
127 _vco_max, _freq_table, _lock_delay, _ops, \
128 _fixed_rate, _clk_cfg_ex, _parent) \
129 static struct clk tegra_##_name; \
130 static const char *_name##_parent_names[] = { \
133 static struct clk *_name##_parents[] = { \
136 static struct clk_tegra tegra_##_name##_hw = { \
138 .clk = &tegra_##_name, \
142 .max_rate = _max_rate, \
144 .input_min = _input_min, \
145 .input_max = _input_max, \
148 .vco_min = _vco_min, \
149 .vco_max = _vco_max, \
150 .freq_table = _freq_table, \
151 .lock_delay = _lock_delay, \
152 .fixed_rate = _fixed_rate, \
154 .clk_cfg_ex = _clk_cfg_ex, \
156 DEFINE_CLK_TEGRA(_name, 0, &_ops, CLK_IGNORE_UNUSED, \
157 _name##_parent_names, _name##_parents, \
160 #define DEFINE_PLL_OUT(_name, _flags, _reg, _reg_shift, \
161 _max_rate, _ops, _parent, _clk_flags) \
162 static const char *_name##_parent_names[] = { \
165 static struct clk *_name##_parents[] = { \
168 static struct clk tegra_##_name; \
169 static struct clk_tegra tegra_##_name##_hw = { \
171 .clk = &tegra_##_name, \
175 .max_rate = _max_rate, \
176 .reg_shift = _reg_shift, \
178 DEFINE_CLK_TEGRA(_name, 0, &tegra30_pll_div_ops, \
179 _clk_flags, _name##_parent_names, \
180 _name##_parents, &tegra_##_parent);
183 { 12000000, 1040000000, 520, 6, 1, 8},
184 { 13000000, 1040000000, 480, 6, 1, 8},
185 { 16800000, 1040000000, 495, 8, 1, 8},
186 { 19200000, 1040000000, 325, 6, 1, 6},
187 { 26000000, 1040000000, 520, 13, 1, 8},
189 { 12000000, 832000000, 416, 6, 1, 8},
190 { 13000000, 832000000, 832, 13, 1, 8},
191 { 16800000, 832000000, 396, 8, 1, 8},
192 { 19200000, 832000000, 260, 6, 1, 8},
193 { 26000000, 832000000, 416, 13, 1, 8},
195 { 12000000, 624000000, 624, 12, 1, 8},
196 { 13000000, 624000000, 624, 13, 1, 8},
197 { 16800000, 600000000, 520, 14, 1, 8},
198 { 19200000, 624000000, 520, 16, 1, 8},
199 { 26000000, 624000000, 624, 26, 1, 8},
201 { 12000000, 600000000, 600, 12, 1, 8},
202 { 13000000, 600000000, 600, 13, 1, 8},
203 { 16800000, 600000000, 500, 14, 1, 8},
204 { 19200000, 600000000, 375, 12, 1, 6},
205 { 26000000, 600000000, 600, 26, 1, 8},
207 { 12000000, 520000000, 520, 12, 1, 8},
208 { 13000000, 520000000, 520, 13, 1, 8},
209 { 16800000, 520000000, 495, 16, 1, 8},
210 { 19200000, 520000000, 325, 12, 1, 6},
211 { 26000000, 520000000, 520, 26, 1, 8},
213 { 12000000, 416000000, 416, 12, 1, 8},
214 { 13000000, 416000000, 416, 13, 1, 8},
215 { 16800000, 416000000, 396, 16, 1, 8},
216 { 19200000, 416000000, 260, 12, 1, 6},
217 { 26000000, 416000000, 416, 26, 1, 8},
218 { 0, 0, 0, 0, 0, 0 },
222 6000000, 20000000, 1400000000, tegra_pll_c_freq_table, 300,
229 { 12000000, 666000000, 666, 12, 1, 8},
230 { 13000000, 666000000, 666, 13, 1, 8},
231 { 16800000, 666000000, 555, 14, 1, 8},
232 { 19200000, 666000000, 555, 16, 1, 8},
233 { 26000000, 666000000, 666, 26, 1, 8},
234 { 12000000, 600000000, 600, 12, 1, 8},
235 { 13000000, 600000000, 600, 13, 1, 8},
236 { 16800000, 600000000, 500, 14, 1, 8},
237 { 19200000, 600000000, 375, 12, 1, 6},
238 { 26000000, 600000000, 600, 26, 1, 8},
239 { 0, 0, 0, 0, 0, 0 },
243 1000000, 6000000, 20000000, 1200000000, tegra_pll_m_freq_table,
250 { 12000000, 216000000, 432, 12, 2, 8},
251 { 13000000, 216000000, 432, 13, 2, 8},
252 { 16800000, 216000000, 360, 14, 2, 8},
253 { 19200000, 216000000, 360, 16, 2, 8},
254 { 26000000, 216000000, 432, 26, 2, 8},
255 { 0, 0, 0, 0, 0, 0 },
259 2000000, 31000000, 1000000, 6000000, 20000000, 1400000000,
273 { 9600000, 564480000, 294, 5, 1, 4},
274 { 9600000, 552960000, 288, 5, 1, 4},
275 { 9600000, 24000000, 5, 2, 1, 1},
277 { 28800000, 56448000, 49, 25, 1, 1},
278 { 28800000, 73728000, 64, 25, 1, 1},
279 { 28800000, 24000000, 5, 6, 1, 1},
280 { 0, 0, 0, 0, 0, 0 },
284 6000000, 20000000, 1400000000, tegra_pll_a_freq_table,
288 pll_a, CLK_IGNORE_UNUSED);
291 { 12000000, 216000000, 216, 12, 1, 4},
292 { 13000000, 216000000, 216, 13, 1, 4},
293 { 16800000, 216000000, 180, 14, 1, 4},
294 { 19200000, 216000000, 180, 16, 1, 4},
295 { 26000000, 216000000, 216, 26, 1, 4},
297 { 12000000, 594000000, 594, 12, 1, 8},
298 { 13000000, 594000000, 594, 13, 1, 8},
299 { 16800000, 594000000, 495, 14, 1, 8},
300 { 19200000, 594000000, 495, 16, 1, 8},
301 { 26000000, 594000000, 594, 26, 1, 8},
303 { 12000000, 1000000000, 1000, 12, 1, 12},
304 { 13000000, 1000000000, 1000, 13, 1, 12},
305 { 19200000, 1000000000, 625, 12, 1, 8},
306 { 26000000, 1000000000, 1000, 26, 1, 12},
308 { 0, 0, 0, 0, 0, 0 },
312 1000000, 6000000, 40000000, 1000000000, tegra_pll_d_freq_table,
316 pll_d, CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED);
319 2000000, 40000000, 1000000, 6000000, 40000000, 1000000000,
324 pll_d2, CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED);
327 { 12000000, 480000000, 960, 12, 2, 12},
328 { 13000000, 480000000, 960, 13, 2, 12},
329 { 16800000, 480000000, 400, 7, 2, 5},
330 { 19200000, 480000000, 200, 4, 2, 3},
331 { 26000000, 480000000, 960, 26, 2, 12},
332 { 0, 0, 0, 0, 0, 0 },
336 1000000, 6000000, 48000000, 960000000, tegra_pll_u_freq_table,
341 { 12000000, 1700000000, 850, 6, 1, 8},
342 { 13000000, 1700000000, 915, 7, 1, 8},
343 { 16800000, 1700000000, 708, 7, 1, 8},
344 { 19200000, 1700000000, 885, 10, 1, 8},
345 { 26000000, 1700000000, 850, 13, 1, 8},
348 { 12000000, 1600000000, 800, 6, 1, 8},
349 { 13000000, 1600000000, 738, 6, 1, 8},
350 { 16800000, 1600000000, 857, 9, 1, 8},
351 { 19200000, 1600000000, 500, 6, 1, 8},
352 { 26000000, 1600000000, 800, 13, 1, 8},
355 { 12000000, 1500000000, 750, 6, 1, 8},
356 { 13000000, 1500000000, 923, 8, 1, 8},
357 { 16800000, 1500000000, 625, 7, 1, 8},
358 { 19200000, 1500000000, 625, 8, 1, 8},
359 { 26000000, 1500000000, 750, 13, 1, 8},
362 { 12000000, 1400000000, 700, 6, 1, 8},
363 { 13000000, 1400000000, 969, 9, 1, 8},
364 { 16800000, 1400000000, 1000, 12, 1, 8},
365 { 19200000, 1400000000, 875, 12, 1, 8},
366 { 26000000, 1400000000, 700, 13, 1, 8},
369 { 12000000, 1300000000, 975, 9, 1, 8},
370 { 13000000, 1300000000, 1000, 10, 1, 8},
371 { 16800000, 1300000000, 928, 12, 1, 8},
372 { 19200000, 1300000000, 812, 12, 1, 8},
373 { 26000000, 1300000000, 650, 13, 1, 8},
376 { 12000000, 1200000000, 1000, 10, 1, 8},
377 { 13000000, 1200000000, 923, 10, 1, 8},
378 { 16800000, 1200000000, 1000, 14, 1, 8},
379 { 19200000, 1200000000, 1000, 16, 1, 8},
380 { 26000000, 1200000000, 600, 13, 1, 8},
383 { 12000000, 1100000000, 825, 9, 1, 8},
384 { 13000000, 1100000000, 846, 10, 1, 8},
385 { 16800000, 1100000000, 982, 15, 1, 8},
386 { 19200000, 1100000000, 859, 15, 1, 8},
387 { 26000000, 1100000000, 550, 13, 1, 8},
390 { 12000000, 1000000000, 1000, 12, 1, 8},
391 { 13000000, 1000000000, 1000, 13, 1, 8},
392 { 16800000, 1000000000, 833, 14, 1, 8},
393 { 19200000, 1000000000, 625, 12, 1, 8},
394 { 26000000, 1000000000, 1000, 26, 1, 8},
396 { 0, 0, 0, 0, 0, 0 },
400 2000000, 31000000, 1000000, 6000000, 20000000, 1700000000,
404 pll_x, CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED);
408 { 12000000, 100000000, 150, 1, 18, 11},
409 { 216000000, 100000000, 200, 18, 24, 13},
410 { 0, 0, 0, 0, 0, 0 },
414 12000000, 12000000, 1200000000, 2400000000
U,
418 static const char *mux_plle[] = {
422 static struct clk *mux_plle_p[] = {
426 static struct clk tegra_cml0;
427 static struct clk_tegra tegra_cml0_hw = {
432 .fixed_rate = 100000000,
438 mux_plle_p, &tegra_pll_e);
440 static struct clk tegra_cml1;
441 static struct clk_tegra tegra_cml1_hw = {
446 .fixed_rate = 100000000,
452 mux_plle_p, &tegra_pll_e);
454 static struct clk tegra_pciex;
455 static struct clk_tegra tegra_pciex_hw = {
460 .fixed_rate = 100000000,
467 mux_plle_p, &tegra_pll_e);
469 #define SYNC_SOURCE(_name) \
470 static struct clk tegra_##_name##_sync; \
471 static struct clk_tegra tegra_##_name##_sync_hw = { \
473 .clk = &tegra_##_name##_sync, \
475 .max_rate = 24000000, \
476 .fixed_rate = 24000000, \
478 static struct clk tegra_##_name##_sync = { \
479 .name = #_name "_sync", \
480 .hw = &tegra_##_name##_sync_hw.hw, \
481 .ops = &tegra_sync_source_ops, \
482 .flags = CLK_IS_ROOT, \
493 static struct clk *tegra_sync_source_list[] = {
494 &tegra_spdif_in_sync,
503 static const char *mux_audio_sync_clk[] = {
513 #define AUDIO_SYNC_CLK(_name, _index) \
514 static struct clk tegra_##_name; \
515 static struct clk_tegra tegra_##_name##_hw = { \
517 .clk = &tegra_##_name, \
519 .max_rate = 24000000, \
520 .reg = 0x4A0 + (_index) * 4, \
522 static struct clk tegra_##_name = { \
524 .ops = &tegra30_audio_sync_clk_ops, \
525 .hw = &tegra_##_name##_hw.hw, \
526 .parent_names = mux_audio_sync_clk, \
527 .parents = tegra_sync_source_list, \
528 .num_parents = ARRAY_SIZE(mux_audio_sync_clk), \
538 static struct clk *tegra_clk_audio_list[] = {
547 #define AUDIO_SYNC_2X_CLK(_name, _index) \
548 static const char *_name##_parent_names[] = { \
551 static struct clk *_name##_parents[] = { \
554 static struct clk tegra_##_name##_2x; \
555 static struct clk_tegra tegra_##_name##_2x_hw = { \
557 .clk = &tegra_##_name##_2x, \
559 .flags = PERIPH_NO_RESET, \
560 .max_rate = 48000000, \
562 .reg_shift = 24 + (_index), \
564 .clk_num = 113 + (_index), \
567 static struct clk tegra_##_name##_2x = { \
568 .name = #_name "_2x", \
569 .ops = &tegra30_clk_double_ops, \
570 .hw = &tegra_##_name##_2x_hw.hw, \
571 .parent_names = _name##_parent_names, \
572 .parents = _name##_parents, \
573 .parent = &tegra_##_name, \
584 static struct clk *tegra_clk_audio_2x_list[] = {
593 #define MUX_I2S_SPDIF(_id) \
594 static const char *mux_pllaout0_##_id##_2x_pllp_clkm[] = { \
600 static struct clk *mux_pllaout0_##_id##_2x_pllp_clkm_p[] = { \
614 static struct clk tegra_extern1;
615 static struct clk tegra_extern2;
616 static struct clk tegra_extern3;
619 #define MUX_EXTERN_OUT(_id) \
620 static const char *mux_clkm_clkm2_clkm4_extern##_id[] = { \
626 static struct clk *mux_clkm_clkm2_clkm4_extern##_id##_p[] = { \
630 &tegra_extern##_id, \
637 #define CLK_OUT_CLK(_name, _index) \
638 static struct clk tegra_##_name; \
639 static struct clk_tegra tegra_##_name##_hw = { \
641 .clk = &tegra_##_name, \
645 .con_id = "extern" #_index, \
647 .flags = MUX_CLK_OUT, \
648 .fixed_rate = 216000000, \
651 .clk_num = (_index - 1) * 8 + 2, \
654 static struct clk tegra_##_name = { \
656 .ops = &tegra_clk_out_ops, \
657 .hw = &tegra_##_name##_hw.hw, \
658 .parent_names = mux_clkm_clkm2_clkm4_extern##_index, \
659 .parents = mux_clkm_clkm2_clkm4_extern##_index##_p, \
660 .num_parents = ARRAY_SIZE(mux_clkm_clkm2_clkm4_extern##_index),\
667 static struct clk *tegra_clk_out_list[] = {
673 static const char *mux_sclk[] = {
684 static struct clk *mux_sclk_p[] = {
695 static struct clk tegra_clk_sclk;
696 static struct clk_tegra tegra_clk_sclk_hw = {
698 .clk = &tegra_clk_sclk,
701 .max_rate = 334000000,
702 .min_rate = 40000000,
705 static struct clk tegra_clk_sclk = {
708 .hw = &tegra_clk_sclk_hw.
hw,
709 .parent_names = mux_sclk,
710 .parents = mux_sclk_p,
714 static const char *mux_blink[] = {
718 static struct clk *mux_blink_p[] = {
722 static struct clk tegra_clk_blink;
723 static struct clk_tegra tegra_clk_blink_hw = {
725 .clk = &tegra_clk_blink,
730 static struct clk tegra_clk_blink = {
733 .hw = &tegra_clk_blink_hw.
hw,
734 .parent = &tegra_clk_32k,
735 .parent_names = mux_blink,
736 .parents = mux_blink_p,
740 static const char *mux_pllm_pllc_pllp_plla[] = {
747 static const char *mux_pllp_pllc_pllm_clkm[] = {
754 static const char *mux_pllp_clkm[] = {
761 static const char *mux_pllp_plld_pllc_clkm[] = {
768 static const char *mux_pllp_pllm_plld_plla_pllc_plld2_clkm[] = {
778 static const char *mux_plla_pllc_pllp_clkm[] = {
785 static const char *mux_pllp_pllc_clk32_clkm[] = {
792 static const char *mux_pllp_pllc_clkm_clk32[] = {
799 static const char *mux_pllp_pllc_pllm[] = {
805 static const char *mux_clk_m[] = {
809 static const char *mux_pllp_out3[] = {
813 static const char *mux_plld_out0[] = {
817 static const char *mux_plld_out0_plld2_out0[] = {
822 static const char *mux_clk_32k[] = {
826 static const char *mux_plla_clk32_pllp_clkm_plle[] = {
834 static const char *mux_cclk_g[] = {
846 static struct clk *mux_pllm_pllc_pllp_plla_p[] = {
853 static struct clk *mux_pllp_pllc_pllm_clkm_p[] = {
860 static struct clk *mux_pllp_clkm_p[] = {
867 static struct clk *mux_pllp_plld_pllc_clkm_p[] = {
874 static struct clk *mux_pllp_pllm_plld_plla_pllc_plld2_clkm_p[] = {
884 static struct clk *mux_plla_pllc_pllp_clkm_p[] = {
891 static struct clk *mux_pllp_pllc_clk32_clkm_p[] = {
898 static struct clk *mux_pllp_pllc_clkm_clk32_p[] = {
905 static struct clk *mux_pllp_pllc_pllm_p[] = {
911 static struct clk *mux_clk_m_p[] = {
915 static struct clk *mux_pllp_out3_p[] = {
919 static struct clk *mux_plld_out0_p[] = {
923 static struct clk *mux_plld_out0_plld2_out0_p[] = {
928 static struct clk *mux_clk_32k_p[] = {
932 static struct clk *mux_plla_clk32_pllp_clkm_plle_p[] = {
940 static struct clk *mux_cclk_g_p[] = {
952 static struct clk tegra_clk_cclk_g;
953 static struct clk_tegra tegra_clk_cclk_g_hw = {
955 .clk = &tegra_clk_cclk_g,
959 .max_rate = 1700000000,
961 static struct clk tegra_clk_cclk_g = {
964 .hw = &tegra_clk_cclk_g_hw.
hw,
965 .parent_names = mux_cclk_g,
966 .parents = mux_cclk_g_p,
970 static const char *mux_twd[] = {
974 static struct clk *mux_twd_p[] = {
978 static struct clk tegra30_clk_twd;
979 static struct clk_tegra tegra30_clk_twd_hw = {
981 .clk = &tegra30_clk_twd,
983 .max_rate = 1400000000,
988 static struct clk tegra30_clk_twd = {
991 .hw = &tegra30_clk_twd_hw.
hw,
992 .parent = &tegra_clk_cclk_g,
993 .parent_names = mux_twd,
994 .parents = mux_twd_p,
998 #define PERIPH_CLK(_name, _dev, _con, _clk_num, _reg, \
999 _max, _inputs, _flags) \
1000 static struct clk tegra_##_name; \
1001 static struct clk_tegra tegra_##_name##_hw = { \
1003 .clk = &tegra_##_name, \
1013 .clk_num = _clk_num, \
1015 .reset = &tegra30_periph_clk_reset, \
1017 static struct clk tegra_##_name = { \
1019 .ops = &tegra30_periph_clk_ops, \
1020 .hw = &tegra_##_name##_hw.hw, \
1021 .parent_names = _inputs, \
1022 .parents = _inputs##_p, \
1023 .num_parents = ARRAY_SIZE(_inputs), \
1026 PERIPH_CLK(apbdma,
"tegra-apbdma",
NULL, 34, 0, 26000000, mux_clk_m, 0);
1030 PERIPH_CLK(kfuse,
"kfuse-tegra",
NULL, 40, 0, 26000000, mux_clk_m, 0);
1033 PERIPH_CLK(apbif,
"tegra30-ahub",
"apbif", 107, 0, 26000000, mux_clk_m, 0);
1042 PERIPH_CLK(d_audio,
"tegra30-ahub",
"d_audio", 106, 0x3d0, 48000000, mux_plla_pllc_pllp_clkm,
MUX |
DIV_U71);
1046 PERIPH_CLK(hda,
"tegra30-hda",
"hda", 125, 0x428, 108000000, mux_pllp_pllc_pllm_clkm,
MUX |
DIV_U71);
1047 PERIPH_CLK(hda2codec_2x,
"tegra30-hda",
"hda2codec", 111, 0x3e4, 48000000, mux_pllp_pllc_pllm_clkm,
MUX |
DIV_U71);
1048 PERIPH_CLK(hda2hdmi,
"tegra30-hda",
"hda2hdmi", 128, 0, 48000000, mux_clk_m, 0);
1057 PERIPH_CLK(sata_cold,
"tegra_sata_cold",
NULL, 129, 0, 48000000, mux_clk_m, 0);
1065 PERIPH_CLK(vcp,
"tegra-avp",
"vcp", 29, 0, 250000000, mux_clk_m, 0);
1066 PERIPH_CLK(bsea,
"tegra-avp",
"bsea", 62, 0, 250000000, mux_clk_m, 0);
1067 PERIPH_CLK(bsev,
"tegra-aes",
"bsev", 63, 0, 250000000, mux_clk_m, 0);
1094 PERIPH_CLK(dtv,
"dtv",
NULL, 79, 0x1dc, 250000000, mux_clk_m, 0);
1097 PERIPH_CLK(disp1,
"tegradc.0",
NULL, 27, 0x138, 600000000, mux_pllp_pllm_plld_plla_pllc_plld2_clkm,
MUX |
MUX8);
1098 PERIPH_CLK(disp2,
"tegradc.1",
NULL, 26, 0x13c, 600000000, mux_pllp_pllm_plld_plla_pllc_plld2_clkm,
MUX |
MUX8);
1099 PERIPH_CLK(usbd,
"fsl-tegra-udc",
NULL, 22, 0, 480000000, mux_clk_m, 0);
1100 PERIPH_CLK(usb2,
"tegra-ehci.1",
NULL, 58, 0, 480000000, mux_clk_m, 0);
1101 PERIPH_CLK(usb3,
"tegra-ehci.2",
NULL, 59, 0, 480000000, mux_clk_m, 0);
1102 PERIPH_CLK(dsia,
"tegradc.0",
"dsia", 48, 0, 500000000, mux_plld_out0, 0);
1103 PERIPH_CLK(
csi,
"tegra_camera",
"csi", 52, 0, 102000000, mux_pllp_out3, 0);
1104 PERIPH_CLK(isp,
"tegra_camera",
"isp", 23, 0, 150000000, mux_clk_m, 0);
1112 PERIPH_CLK(pcie,
"tegra-pcie",
"pcie", 70, 0, 250000000, mux_clk_m, 0);
1113 PERIPH_CLK(afi,
"tegra-pcie",
"afi", 72, 0, 250000000, mux_clk_m, 0);
1116 static struct clk tegra_dsib;
1117 static struct clk_tegra tegra_dsib_hw = {
1122 .dev_id =
"tegradc.1",
1127 .max_rate = 500000000,
1133 static struct clk tegra_dsib = {
1136 .hw = &tegra_dsib_hw.
hw,
1137 .parent_names = mux_plld_out0_plld2_out0,
1138 .parents = mux_plld_out0_plld2_out0_p,
1139 .num_parents =
ARRAY_SIZE(mux_plld_out0_plld2_out0),
1164 &tegra_hda2codec_2x,
1235 #define CLK_DUPLICATE(_name, _dev, _con) \
1332 static void tegra30_init_one_clock(
struct clk *
c)
1349 for (i = 0; i <
ARRAY_SIZE(tegra_ptr_clks); i++)
1350 tegra30_init_one_clock(tegra_ptr_clks[i]);
1352 for (i = 0; i <
ARRAY_SIZE(tegra_list_clks); i++)
1353 tegra30_init_one_clock(tegra_list_clks[i]);
1355 for (i = 0; i <
ARRAY_SIZE(tegra_clk_duplicates); i++) {
1358 pr_err(
"%s: Unknown duplicate clock %s\n", __func__,
1359 tegra_clk_duplicates[i].name);
1363 tegra_clk_duplicates[
i].
lookup.clk =
c;
1367 for (i = 0; i <
ARRAY_SIZE(tegra_sync_source_list); i++)
1368 tegra30_init_one_clock(tegra_sync_source_list[i]);
1369 for (i = 0; i <
ARRAY_SIZE(tegra_clk_audio_list); i++)
1370 tegra30_init_one_clock(tegra_clk_audio_list[i]);
1371 for (i = 0; i <
ARRAY_SIZE(tegra_clk_audio_2x_list); i++)
1372 tegra30_init_one_clock(tegra_clk_audio_2x_list[i]);
1374 for (i = 0; i <
ARRAY_SIZE(tegra_clk_out_list); i++)
1375 tegra30_init_one_clock(tegra_clk_out_list[i]);