diff options
author | Tomasz Figa <t.figa@samsung.com> | 2014-06-24 12:08:25 -0400 |
---|---|---|
committer | Tomasz Figa <t.figa@samsung.com> | 2014-07-25 20:47:10 -0400 |
commit | 01f7ec260ab35291f23bf42b1a43367649392646 (patch) | |
tree | 523c83e4337f544baa0d7371fd0b2e35c9377b9e | |
parent | 800c9797ad5b20edf3b9258b83624efdb2b06e02 (diff) |
clk: samsung: exynos4: Add CLKOUT clock hierarchy
This patch adds definitions of clocks that are used to drive clock
output signals of particular CMU sub-blocks that are then fed to PMU and
handled by Exynos CLKOUT driver added in further patch.
Signed-off-by: Tomasz Figa <t.figa@samsung.com>
-rw-r--r-- | drivers/clk/samsung/clk-exynos4.c | 112 | ||||
-rw-r--r-- | include/dt-bindings/clock/exynos4.h | 5 |
2 files changed, 117 insertions, 0 deletions
diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c index 70bca8d81de6..3effe7abb2e2 100644 --- a/drivers/clk/samsung/clk-exynos4.c +++ b/drivers/clk/samsung/clk-exynos4.c | |||
@@ -25,10 +25,12 @@ | |||
25 | #define DIV_LEFTBUS 0x4500 | 25 | #define DIV_LEFTBUS 0x4500 |
26 | #define GATE_IP_LEFTBUS 0x4800 | 26 | #define GATE_IP_LEFTBUS 0x4800 |
27 | #define E4X12_GATE_IP_IMAGE 0x4930 | 27 | #define E4X12_GATE_IP_IMAGE 0x4930 |
28 | #define CLKOUT_CMU_LEFTBUS 0x4a00 | ||
28 | #define SRC_RIGHTBUS 0x8200 | 29 | #define SRC_RIGHTBUS 0x8200 |
29 | #define DIV_RIGHTBUS 0x8500 | 30 | #define DIV_RIGHTBUS 0x8500 |
30 | #define GATE_IP_RIGHTBUS 0x8800 | 31 | #define GATE_IP_RIGHTBUS 0x8800 |
31 | #define E4X12_GATE_IP_PERIR 0x8960 | 32 | #define E4X12_GATE_IP_PERIR 0x8960 |
33 | #define CLKOUT_CMU_RIGHTBUS 0x8a00 | ||
32 | #define EPLL_LOCK 0xc010 | 34 | #define EPLL_LOCK 0xc010 |
33 | #define VPLL_LOCK 0xc020 | 35 | #define VPLL_LOCK 0xc020 |
34 | #define EPLL_CON0 0xc110 | 36 | #define EPLL_CON0 0xc110 |
@@ -98,6 +100,7 @@ | |||
98 | #define GATE_IP_PERIL 0xc950 | 100 | #define GATE_IP_PERIL 0xc950 |
99 | #define E4210_GATE_IP_PERIR 0xc960 | 101 | #define E4210_GATE_IP_PERIR 0xc960 |
100 | #define GATE_BLOCK 0xc970 | 102 | #define GATE_BLOCK 0xc970 |
103 | #define CLKOUT_CMU_TOP 0xca00 | ||
101 | #define E4X12_MPLL_LOCK 0x10008 | 104 | #define E4X12_MPLL_LOCK 0x10008 |
102 | #define E4X12_MPLL_CON0 0x10108 | 105 | #define E4X12_MPLL_CON0 0x10108 |
103 | #define SRC_DMC 0x10200 | 106 | #define SRC_DMC 0x10200 |
@@ -105,6 +108,7 @@ | |||
105 | #define DIV_DMC0 0x10500 | 108 | #define DIV_DMC0 0x10500 |
106 | #define DIV_DMC1 0x10504 | 109 | #define DIV_DMC1 0x10504 |
107 | #define GATE_IP_DMC 0x10900 | 110 | #define GATE_IP_DMC 0x10900 |
111 | #define CLKOUT_CMU_DMC 0x10a00 | ||
108 | #define APLL_LOCK 0x14000 | 112 | #define APLL_LOCK 0x14000 |
109 | #define E4210_MPLL_LOCK 0x14008 | 113 | #define E4210_MPLL_LOCK 0x14008 |
110 | #define APLL_CON0 0x14100 | 114 | #define APLL_CON0 0x14100 |
@@ -114,6 +118,7 @@ | |||
114 | #define DIV_CPU1 0x14504 | 118 | #define DIV_CPU1 0x14504 |
115 | #define GATE_SCLK_CPU 0x14800 | 119 | #define GATE_SCLK_CPU 0x14800 |
116 | #define GATE_IP_CPU 0x14900 | 120 | #define GATE_IP_CPU 0x14900 |
121 | #define CLKOUT_CMU_CPU 0x14a00 | ||
117 | #define E4X12_DIV_ISP0 0x18300 | 122 | #define E4X12_DIV_ISP0 0x18300 |
118 | #define E4X12_DIV_ISP1 0x18304 | 123 | #define E4X12_DIV_ISP1 0x18304 |
119 | #define E4X12_GATE_ISP0 0x18800 | 124 | #define E4X12_GATE_ISP0 0x18800 |
@@ -242,6 +247,11 @@ static unsigned long exynos4_clk_regs[] __initdata = { | |||
242 | DIV_CPU1, | 247 | DIV_CPU1, |
243 | GATE_SCLK_CPU, | 248 | GATE_SCLK_CPU, |
244 | GATE_IP_CPU, | 249 | GATE_IP_CPU, |
250 | CLKOUT_CMU_LEFTBUS, | ||
251 | CLKOUT_CMU_RIGHTBUS, | ||
252 | CLKOUT_CMU_TOP, | ||
253 | CLKOUT_CMU_DMC, | ||
254 | CLKOUT_CMU_CPU, | ||
245 | }; | 255 | }; |
246 | 256 | ||
247 | static const struct samsung_clk_reg_dump src_mask_suspend[] = { | 257 | static const struct samsung_clk_reg_dump src_mask_suspend[] = { |
@@ -400,6 +410,23 @@ PNAME(mout_dac_p4210) = { "sclk_vpll", "sclk_hdmiphy", }; | |||
400 | PNAME(mout_pwi_p4210) = { "xxti", "xusbxti", "sclk_hdmi24m", "sclk_usbphy0", | 410 | PNAME(mout_pwi_p4210) = { "xxti", "xusbxti", "sclk_hdmi24m", "sclk_usbphy0", |
401 | "sclk_usbphy1", "sclk_hdmiphy", "none", | 411 | "sclk_usbphy1", "sclk_hdmiphy", "none", |
402 | "sclk_epll", "sclk_vpll" }; | 412 | "sclk_epll", "sclk_vpll" }; |
413 | PNAME(clkout_left_p4210) = { "sclk_mpll_div_2", "sclk_apll_div_2", | ||
414 | "div_gdl", "div_gpl" }; | ||
415 | PNAME(clkout_right_p4210) = { "sclk_mpll_div_2", "sclk_apll_div_2", | ||
416 | "div_gdr", "div_gpr" }; | ||
417 | PNAME(clkout_top_p4210) = { "fout_epll", "fout_vpll", "sclk_hdmi24m", | ||
418 | "sclk_usbphy0", "sclk_usbphy1", "sclk_hdmiphy", | ||
419 | "cdclk0", "cdclk1", "cdclk2", "spdif_extclk", | ||
420 | "aclk160", "aclk133", "aclk200", "aclk100", | ||
421 | "sclk_mfc", "sclk_g3d", "sclk_g2d", | ||
422 | "cam_a_pclk", "cam_b_pclk", "s_rxbyteclkhs0_2l", | ||
423 | "s_rxbyteclkhs0_4l" }; | ||
424 | PNAME(clkout_dmc_p4210) = { "div_dmcd", "div_dmcp", "div_acp_pclk", "div_dmc", | ||
425 | "div_dphy", "none", "div_pwi" }; | ||
426 | PNAME(clkout_cpu_p4210) = { "fout_apll_div_2", "none", "fout_mpll_div_2", | ||
427 | "none", "arm_clk_div_2", "div_corem0", | ||
428 | "div_corem1", "div_corem0", "div_atb", | ||
429 | "div_periph", "div_pclk_dbg", "div_hpm" }; | ||
403 | 430 | ||
404 | /* Exynos 4x12-specific parent groups */ | 431 | /* Exynos 4x12-specific parent groups */ |
405 | PNAME(mout_mpll_user_p4x12) = { "fin_pll", "sclk_mpll", }; | 432 | PNAME(mout_mpll_user_p4x12) = { "fin_pll", "sclk_mpll", }; |
@@ -426,6 +453,29 @@ PNAME(mout_user_aclk266_gps_p4x12) = {"fin_pll", "div_aclk266_gps", }; | |||
426 | PNAME(mout_pwi_p4x12) = { "xxti", "xusbxti", "sclk_hdmi24m", "sclk_usbphy0", | 453 | PNAME(mout_pwi_p4x12) = { "xxti", "xusbxti", "sclk_hdmi24m", "sclk_usbphy0", |
427 | "none", "sclk_hdmiphy", "sclk_mpll", | 454 | "none", "sclk_hdmiphy", "sclk_mpll", |
428 | "sclk_epll", "sclk_vpll" }; | 455 | "sclk_epll", "sclk_vpll" }; |
456 | PNAME(clkout_left_p4x12) = { "sclk_mpll_user_l_div_2", "sclk_apll_div_2", | ||
457 | "div_gdl", "div_gpl" }; | ||
458 | PNAME(clkout_right_p4x12) = { "sclk_mpll_user_r_div_2", "sclk_apll_div_2", | ||
459 | "div_gdr", "div_gpr" }; | ||
460 | PNAME(clkout_top_p4x12) = { "fout_epll", "fout_vpll", "sclk_hdmi24m", | ||
461 | "sclk_usbphy0", "none", "sclk_hdmiphy", | ||
462 | "cdclk0", "cdclk1", "cdclk2", "spdif_extclk", | ||
463 | "aclk160", "aclk133", "aclk200", "aclk100", | ||
464 | "sclk_mfc", "sclk_g3d", "aclk400_mcuisp", | ||
465 | "cam_a_pclk", "cam_b_pclk", "s_rxbyteclkhs0_2l", | ||
466 | "s_rxbyteclkhs0_4l", "rx_half_byte_clk_csis0", | ||
467 | "rx_half_byte_clk_csis1", "div_jpeg", | ||
468 | "sclk_pwm_isp", "sclk_spi0_isp", | ||
469 | "sclk_spi1_isp", "sclk_uart_isp", | ||
470 | "sclk_mipihsi", "sclk_hdmi", "sclk_fimd0", | ||
471 | "sclk_pcm0" }; | ||
472 | PNAME(clkout_dmc_p4x12) = { "div_dmcd", "div_dmcp", "aclk_acp", "div_acp_pclk", | ||
473 | "div_dmc", "div_dphy", "fout_mpll_div_2", | ||
474 | "div_pwi", "none", "div_c2c", "div_c2c_aclk" }; | ||
475 | PNAME(clkout_cpu_p4x12) = { "fout_apll_div_2", "none", "none", "none", | ||
476 | "arm_clk_div_2", "div_corem0", "div_corem1", | ||
477 | "div_cores", "div_atb", "div_periph", | ||
478 | "div_pclk_dbg", "div_hpm" }; | ||
429 | 479 | ||
430 | /* fixed rate clocks generated outside the soc */ | 480 | /* fixed rate clocks generated outside the soc */ |
431 | static struct samsung_fixed_rate_clock exynos4_fixed_rate_ext_clks[] __initdata = { | 481 | static struct samsung_fixed_rate_clock exynos4_fixed_rate_ext_clks[] __initdata = { |
@@ -444,6 +494,24 @@ static struct samsung_fixed_rate_clock exynos4210_fixed_rate_clks[] __initdata = | |||
444 | FRATE(0, "sclk_usbphy1", NULL, CLK_IS_ROOT, 48000000), | 494 | FRATE(0, "sclk_usbphy1", NULL, CLK_IS_ROOT, 48000000), |
445 | }; | 495 | }; |
446 | 496 | ||
497 | static struct samsung_fixed_factor_clock exynos4_fixed_factor_clks[] __initdata = { | ||
498 | FFACTOR(0, "sclk_apll_div_2", "sclk_apll", 1, 2, 0), | ||
499 | FFACTOR(0, "fout_mpll_div_2", "fout_mpll", 1, 2, 0), | ||
500 | FFACTOR(0, "fout_apll_div_2", "fout_apll", 1, 2, 0), | ||
501 | FFACTOR(0, "arm_clk_div_2", "arm_clk", 1, 2, 0), | ||
502 | }; | ||
503 | |||
504 | static struct samsung_fixed_factor_clock exynos4210_fixed_factor_clks[] __initdata = { | ||
505 | FFACTOR(0, "sclk_mpll_div_2", "sclk_mpll", 1, 2, 0), | ||
506 | }; | ||
507 | |||
508 | static struct samsung_fixed_factor_clock exynos4x12_fixed_factor_clks[] __initdata = { | ||
509 | FFACTOR(0, "sclk_mpll_user_l_div_2", "mout_mpll_user_l", 1, 2, 0), | ||
510 | FFACTOR(0, "sclk_mpll_user_r_div_2", "mout_mpll_user_r", 1, 2, 0), | ||
511 | FFACTOR(0, "sclk_mpll_user_t_div_2", "mout_mpll_user_t", 1, 2, 0), | ||
512 | FFACTOR(0, "sclk_mpll_user_c_div_2", "mout_mpll_user_c", 1, 2, 0), | ||
513 | }; | ||
514 | |||
447 | /* list of mux clocks supported in all exynos4 soc's */ | 515 | /* list of mux clocks supported in all exynos4 soc's */ |
448 | static struct samsung_mux_clock exynos4_mux_clks[] __initdata = { | 516 | static struct samsung_mux_clock exynos4_mux_clks[] __initdata = { |
449 | MUX_FA(CLK_MOUT_APLL, "mout_apll", mout_apll_p, SRC_CPU, 0, 1, | 517 | MUX_FA(CLK_MOUT_APLL, "mout_apll", mout_apll_p, SRC_CPU, 0, 1, |
@@ -471,8 +539,12 @@ static struct samsung_mux_clock exynos4210_mux_early[] __initdata = { | |||
471 | 539 | ||
472 | static struct samsung_mux_clock exynos4210_mux_clks[] __initdata = { | 540 | static struct samsung_mux_clock exynos4210_mux_clks[] __initdata = { |
473 | MUX(0, "mout_gdl", sclk_ampll_p4210, SRC_LEFTBUS, 0, 1), | 541 | MUX(0, "mout_gdl", sclk_ampll_p4210, SRC_LEFTBUS, 0, 1), |
542 | MUX(0, "mout_clkout_leftbus", clkout_left_p4210, | ||
543 | CLKOUT_CMU_LEFTBUS, 0, 5), | ||
474 | 544 | ||
475 | MUX(0, "mout_gdr", sclk_ampll_p4210, SRC_RIGHTBUS, 0, 1), | 545 | MUX(0, "mout_gdr", sclk_ampll_p4210, SRC_RIGHTBUS, 0, 1), |
546 | MUX(0, "mout_clkout_rightbus", clkout_right_p4210, | ||
547 | CLKOUT_CMU_RIGHTBUS, 0, 5), | ||
476 | 548 | ||
477 | MUX(0, "mout_aclk200", sclk_ampll_p4210, SRC_TOP0, 12, 1), | 549 | MUX(0, "mout_aclk200", sclk_ampll_p4210, SRC_TOP0, 12, 1), |
478 | MUX(0, "mout_aclk100", sclk_ampll_p4210, SRC_TOP0, 16, 1), | 550 | MUX(0, "mout_aclk100", sclk_ampll_p4210, SRC_TOP0, 16, 1), |
@@ -519,20 +591,30 @@ static struct samsung_mux_clock exynos4210_mux_clks[] __initdata = { | |||
519 | MUX(0, "mout_spi0", group1_p4210, SRC_PERIL1, 16, 4), | 591 | MUX(0, "mout_spi0", group1_p4210, SRC_PERIL1, 16, 4), |
520 | MUX(0, "mout_spi1", group1_p4210, SRC_PERIL1, 20, 4), | 592 | MUX(0, "mout_spi1", group1_p4210, SRC_PERIL1, 20, 4), |
521 | MUX(0, "mout_spi2", group1_p4210, SRC_PERIL1, 24, 4), | 593 | MUX(0, "mout_spi2", group1_p4210, SRC_PERIL1, 24, 4), |
594 | MUX(0, "mout_clkout_top", clkout_top_p4210, CLKOUT_CMU_TOP, 0, 5), | ||
522 | 595 | ||
523 | MUX(0, "mout_pwi", mout_pwi_p4210, SRC_DMC, 16, 4), | 596 | MUX(0, "mout_pwi", mout_pwi_p4210, SRC_DMC, 16, 4), |
597 | MUX(0, "mout_clkout_dmc", clkout_dmc_p4210, CLKOUT_CMU_DMC, 0, 5), | ||
598 | |||
599 | MUX(0, "mout_clkout_cpu", clkout_cpu_p4210, CLKOUT_CMU_CPU, 0, 5), | ||
524 | }; | 600 | }; |
525 | 601 | ||
526 | /* list of mux clocks supported in exynos4x12 soc */ | 602 | /* list of mux clocks supported in exynos4x12 soc */ |
527 | static struct samsung_mux_clock exynos4x12_mux_clks[] __initdata = { | 603 | static struct samsung_mux_clock exynos4x12_mux_clks[] __initdata = { |
528 | MUX(0, "mout_mpll_user_l", mout_mpll_p, SRC_LEFTBUS, 4, 1), | 604 | MUX(0, "mout_mpll_user_l", mout_mpll_p, SRC_LEFTBUS, 4, 1), |
529 | MUX(0, "mout_gdl", mout_gdl_p4x12, SRC_LEFTBUS, 0, 1), | 605 | MUX(0, "mout_gdl", mout_gdl_p4x12, SRC_LEFTBUS, 0, 1), |
606 | MUX(0, "mout_clkout_leftbus", clkout_left_p4x12, | ||
607 | CLKOUT_CMU_LEFTBUS, 0, 5), | ||
530 | 608 | ||
531 | MUX(0, "mout_mpll_user_r", mout_mpll_p, SRC_RIGHTBUS, 4, 1), | 609 | MUX(0, "mout_mpll_user_r", mout_mpll_p, SRC_RIGHTBUS, 4, 1), |
532 | MUX(0, "mout_gdr", mout_gdr_p4x12, SRC_RIGHTBUS, 0, 1), | 610 | MUX(0, "mout_gdr", mout_gdr_p4x12, SRC_RIGHTBUS, 0, 1), |
611 | MUX(0, "mout_clkout_rightbus", clkout_right_p4x12, | ||
612 | CLKOUT_CMU_RIGHTBUS, 0, 5), | ||
533 | 613 | ||
534 | MUX(CLK_MOUT_MPLL_USER_C, "mout_mpll_user_c", mout_mpll_user_p4x12, | 614 | MUX(CLK_MOUT_MPLL_USER_C, "mout_mpll_user_c", mout_mpll_user_p4x12, |
535 | SRC_CPU, 24, 1), | 615 | SRC_CPU, 24, 1), |
616 | MUX(0, "mout_clkout_cpu", clkout_cpu_p4x12, CLKOUT_CMU_CPU, 0, 5), | ||
617 | |||
536 | MUX(0, "mout_aclk266_gps", aclk_p4412, SRC_TOP1, 4, 1), | 618 | MUX(0, "mout_aclk266_gps", aclk_p4412, SRC_TOP1, 4, 1), |
537 | MUX(0, "mout_aclk400_mcuisp", aclk_p4412, SRC_TOP1, 8, 1), | 619 | MUX(0, "mout_aclk400_mcuisp", aclk_p4412, SRC_TOP1, 8, 1), |
538 | MUX(CLK_MOUT_MPLL_USER_T, "mout_mpll_user_t", mout_mpll_user_p4x12, | 620 | MUX(CLK_MOUT_MPLL_USER_T, "mout_mpll_user_t", mout_mpll_user_p4x12, |
@@ -590,20 +672,27 @@ static struct samsung_mux_clock exynos4x12_mux_clks[] __initdata = { | |||
590 | MUX(0, "mout_spi0_isp", group1_p4x12, E4X12_SRC_ISP, 4, 4), | 672 | MUX(0, "mout_spi0_isp", group1_p4x12, E4X12_SRC_ISP, 4, 4), |
591 | MUX(0, "mout_spi1_isp", group1_p4x12, E4X12_SRC_ISP, 8, 4), | 673 | MUX(0, "mout_spi1_isp", group1_p4x12, E4X12_SRC_ISP, 8, 4), |
592 | MUX(0, "mout_uart_isp", group1_p4x12, E4X12_SRC_ISP, 12, 4), | 674 | MUX(0, "mout_uart_isp", group1_p4x12, E4X12_SRC_ISP, 12, 4), |
675 | MUX(0, "mout_clkout_top", clkout_top_p4x12, CLKOUT_CMU_TOP, 0, 5), | ||
676 | |||
593 | MUX(0, "mout_c2c", sclk_ampll_p4210, SRC_DMC, 0, 1), | 677 | MUX(0, "mout_c2c", sclk_ampll_p4210, SRC_DMC, 0, 1), |
594 | MUX(0, "mout_pwi", mout_pwi_p4x12, SRC_DMC, 16, 4), | 678 | MUX(0, "mout_pwi", mout_pwi_p4x12, SRC_DMC, 16, 4), |
595 | MUX(0, "mout_g2d0", sclk_ampll_p4210, SRC_DMC, 20, 1), | 679 | MUX(0, "mout_g2d0", sclk_ampll_p4210, SRC_DMC, 20, 1), |
596 | MUX(0, "mout_g2d1", sclk_evpll_p, SRC_DMC, 24, 1), | 680 | MUX(0, "mout_g2d1", sclk_evpll_p, SRC_DMC, 24, 1), |
597 | MUX(0, "mout_g2d", mout_g2d_p, SRC_DMC, 28, 1), | 681 | MUX(0, "mout_g2d", mout_g2d_p, SRC_DMC, 28, 1), |
682 | MUX(0, "mout_clkout_dmc", clkout_dmc_p4x12, CLKOUT_CMU_DMC, 0, 5), | ||
598 | }; | 683 | }; |
599 | 684 | ||
600 | /* list of divider clocks supported in all exynos4 soc's */ | 685 | /* list of divider clocks supported in all exynos4 soc's */ |
601 | static struct samsung_div_clock exynos4_div_clks[] __initdata = { | 686 | static struct samsung_div_clock exynos4_div_clks[] __initdata = { |
602 | DIV(0, "div_gdl", "mout_gdl", DIV_LEFTBUS, 0, 3), | 687 | DIV(0, "div_gdl", "mout_gdl", DIV_LEFTBUS, 0, 3), |
603 | DIV(0, "div_gpl", "div_gdl", DIV_LEFTBUS, 4, 3), | 688 | DIV(0, "div_gpl", "div_gdl", DIV_LEFTBUS, 4, 3), |
689 | DIV(0, "div_clkout_leftbus", "mout_clkout_leftbus", | ||
690 | CLKOUT_CMU_LEFTBUS, 8, 6), | ||
604 | 691 | ||
605 | DIV(0, "div_gdr", "mout_gdr", DIV_RIGHTBUS, 0, 3), | 692 | DIV(0, "div_gdr", "mout_gdr", DIV_RIGHTBUS, 0, 3), |
606 | DIV(0, "div_gpr", "div_gdr", DIV_RIGHTBUS, 4, 3), | 693 | DIV(0, "div_gpr", "div_gdr", DIV_RIGHTBUS, 4, 3), |
694 | DIV(0, "div_clkout_rightbus", "mout_clkout_rightbus", | ||
695 | CLKOUT_CMU_RIGHTBUS, 8, 6), | ||
607 | 696 | ||
608 | DIV(0, "div_core", "mout_core", DIV_CPU0, 0, 3), | 697 | DIV(0, "div_core", "mout_core", DIV_CPU0, 0, 3), |
609 | DIV(0, "div_corem0", "div_core2", DIV_CPU0, 4, 3), | 698 | DIV(0, "div_corem0", "div_core2", DIV_CPU0, 4, 3), |
@@ -614,6 +703,8 @@ static struct samsung_div_clock exynos4_div_clks[] __initdata = { | |||
614 | DIV(0, "div_core2", "div_core", DIV_CPU0, 28, 3), | 703 | DIV(0, "div_core2", "div_core", DIV_CPU0, 28, 3), |
615 | DIV(0, "div_copy", "mout_hpm", DIV_CPU1, 0, 3), | 704 | DIV(0, "div_copy", "mout_hpm", DIV_CPU1, 0, 3), |
616 | DIV(0, "div_hpm", "div_copy", DIV_CPU1, 4, 3), | 705 | DIV(0, "div_hpm", "div_copy", DIV_CPU1, 4, 3), |
706 | DIV(0, "div_clkout_cpu", "mout_clkout_cpu", CLKOUT_CMU_CPU, 8, 6), | ||
707 | |||
617 | DIV(0, "div_fimc0", "mout_fimc0", DIV_CAM, 0, 4), | 708 | DIV(0, "div_fimc0", "mout_fimc0", DIV_CAM, 0, 4), |
618 | DIV(0, "div_fimc1", "mout_fimc1", DIV_CAM, 4, 4), | 709 | DIV(0, "div_fimc1", "mout_fimc1", DIV_CAM, 4, 4), |
619 | DIV(0, "div_fimc2", "mout_fimc2", DIV_CAM, 8, 4), | 710 | DIV(0, "div_fimc2", "mout_fimc2", DIV_CAM, 8, 4), |
@@ -671,6 +762,7 @@ static struct samsung_div_clock exynos4_div_clks[] __initdata = { | |||
671 | CLK_SET_RATE_PARENT, 0), | 762 | CLK_SET_RATE_PARENT, 0), |
672 | DIV_F(0, "div_mmc_pre3", "div_mmc3", DIV_FSYS2, 24, 8, | 763 | DIV_F(0, "div_mmc_pre3", "div_mmc3", DIV_FSYS2, 24, 8, |
673 | CLK_SET_RATE_PARENT, 0), | 764 | CLK_SET_RATE_PARENT, 0), |
765 | DIV(0, "div_clkout_top", "mout_clkout_top", CLKOUT_CMU_TOP, 8, 6), | ||
674 | 766 | ||
675 | DIV(0, "div_acp", "mout_dmc_bus", DIV_DMC0, 0, 3), | 767 | DIV(0, "div_acp", "mout_dmc_bus", DIV_DMC0, 0, 3), |
676 | DIV(0, "div_acp_pclk", "div_acp", DIV_DMC0, 4, 3), | 768 | DIV(0, "div_acp_pclk", "div_acp", DIV_DMC0, 4, 3), |
@@ -679,6 +771,7 @@ static struct samsung_div_clock exynos4_div_clks[] __initdata = { | |||
679 | DIV(0, "div_dmcd", "div_dmc", DIV_DMC0, 16, 3), | 771 | DIV(0, "div_dmcd", "div_dmc", DIV_DMC0, 16, 3), |
680 | DIV(0, "div_dmcp", "div_dmcd", DIV_DMC0, 20, 3), | 772 | DIV(0, "div_dmcp", "div_dmcd", DIV_DMC0, 20, 3), |
681 | DIV(0, "div_pwi", "mout_pwi", DIV_DMC1, 8, 4), | 773 | DIV(0, "div_pwi", "mout_pwi", DIV_DMC1, 8, 4), |
774 | DIV(0, "div_clkout_dmc", "mout_clkout_dmc", CLKOUT_CMU_DMC, 8, 6), | ||
682 | }; | 775 | }; |
683 | 776 | ||
684 | /* list of divider clocks supported in exynos4210 soc */ | 777 | /* list of divider clocks supported in exynos4210 soc */ |
@@ -916,6 +1009,17 @@ static struct samsung_gate_clock exynos4_gate_clks[] __initdata = { | |||
916 | GATE(CLK_PPMUDMC1, "ppmudmc1", "aclk133", GATE_IP_DMC, 9, 0, 0), | 1009 | GATE(CLK_PPMUDMC1, "ppmudmc1", "aclk133", GATE_IP_DMC, 9, 0, 0), |
917 | GATE(CLK_PPMUCPU, "ppmucpu", "aclk133", GATE_IP_DMC, 10, 0, 0), | 1010 | GATE(CLK_PPMUCPU, "ppmucpu", "aclk133", GATE_IP_DMC, 10, 0, 0), |
918 | GATE(CLK_PPMUACP, "ppmuacp", "aclk133", GATE_IP_DMC, 16, 0, 0), | 1011 | GATE(CLK_PPMUACP, "ppmuacp", "aclk133", GATE_IP_DMC, 16, 0, 0), |
1012 | |||
1013 | GATE(CLK_OUT_LEFTBUS, "clkout_leftbus", "div_clkout_leftbus", | ||
1014 | CLKOUT_CMU_LEFTBUS, 16, CLK_SET_RATE_PARENT, 0), | ||
1015 | GATE(CLK_OUT_RIGHTBUS, "clkout_rightbus", "div_clkout_rightbus", | ||
1016 | CLKOUT_CMU_RIGHTBUS, 16, CLK_SET_RATE_PARENT, 0), | ||
1017 | GATE(CLK_OUT_TOP, "clkout_top", "div_clkout_top", | ||
1018 | CLKOUT_CMU_TOP, 16, CLK_SET_RATE_PARENT, 0), | ||
1019 | GATE(CLK_OUT_DMC, "clkout_dmc", "div_clkout_dmc", | ||
1020 | CLKOUT_CMU_DMC, 16, CLK_SET_RATE_PARENT, 0), | ||
1021 | GATE(CLK_OUT_CPU, "clkout_cpu", "div_clkout_cpu", | ||
1022 | CLKOUT_CMU_CPU, 16, CLK_SET_RATE_PARENT, 0), | ||
919 | }; | 1023 | }; |
920 | 1024 | ||
921 | /* list of gate clocks supported in exynos4210 soc */ | 1025 | /* list of gate clocks supported in exynos4210 soc */ |
@@ -1293,6 +1397,8 @@ static void __init exynos4_clk_init(struct device_node *np, | |||
1293 | ARRAY_SIZE(exynos4_div_clks)); | 1397 | ARRAY_SIZE(exynos4_div_clks)); |
1294 | samsung_clk_register_gate(ctx, exynos4_gate_clks, | 1398 | samsung_clk_register_gate(ctx, exynos4_gate_clks, |
1295 | ARRAY_SIZE(exynos4_gate_clks)); | 1399 | ARRAY_SIZE(exynos4_gate_clks)); |
1400 | samsung_clk_register_fixed_factor(ctx, exynos4_fixed_factor_clks, | ||
1401 | ARRAY_SIZE(exynos4_fixed_factor_clks)); | ||
1296 | 1402 | ||
1297 | if (exynos4_soc == EXYNOS4210) { | 1403 | if (exynos4_soc == EXYNOS4210) { |
1298 | samsung_clk_register_fixed_rate(ctx, exynos4210_fixed_rate_clks, | 1404 | samsung_clk_register_fixed_rate(ctx, exynos4210_fixed_rate_clks, |
@@ -1305,6 +1411,9 @@ static void __init exynos4_clk_init(struct device_node *np, | |||
1305 | ARRAY_SIZE(exynos4210_gate_clks)); | 1411 | ARRAY_SIZE(exynos4210_gate_clks)); |
1306 | samsung_clk_register_alias(ctx, exynos4210_aliases, | 1412 | samsung_clk_register_alias(ctx, exynos4210_aliases, |
1307 | ARRAY_SIZE(exynos4210_aliases)); | 1413 | ARRAY_SIZE(exynos4210_aliases)); |
1414 | samsung_clk_register_fixed_factor(ctx, | ||
1415 | exynos4210_fixed_factor_clks, | ||
1416 | ARRAY_SIZE(exynos4210_fixed_factor_clks)); | ||
1308 | } else { | 1417 | } else { |
1309 | samsung_clk_register_mux(ctx, exynos4x12_mux_clks, | 1418 | samsung_clk_register_mux(ctx, exynos4x12_mux_clks, |
1310 | ARRAY_SIZE(exynos4x12_mux_clks)); | 1419 | ARRAY_SIZE(exynos4x12_mux_clks)); |
@@ -1314,6 +1423,9 @@ static void __init exynos4_clk_init(struct device_node *np, | |||
1314 | ARRAY_SIZE(exynos4x12_gate_clks)); | 1423 | ARRAY_SIZE(exynos4x12_gate_clks)); |
1315 | samsung_clk_register_alias(ctx, exynos4x12_aliases, | 1424 | samsung_clk_register_alias(ctx, exynos4x12_aliases, |
1316 | ARRAY_SIZE(exynos4x12_aliases)); | 1425 | ARRAY_SIZE(exynos4x12_aliases)); |
1426 | samsung_clk_register_fixed_factor(ctx, | ||
1427 | exynos4x12_fixed_factor_clks, | ||
1428 | ARRAY_SIZE(exynos4x12_fixed_factor_clks)); | ||
1317 | } | 1429 | } |
1318 | 1430 | ||
1319 | samsung_clk_register_alias(ctx, exynos4_aliases, | 1431 | samsung_clk_register_alias(ctx, exynos4_aliases, |
diff --git a/include/dt-bindings/clock/exynos4.h b/include/dt-bindings/clock/exynos4.h index 60fadfc8d6ba..5a9f50225e4a 100644 --- a/include/dt-bindings/clock/exynos4.h +++ b/include/dt-bindings/clock/exynos4.h | |||
@@ -34,6 +34,11 @@ | |||
34 | #define CLK_MOUT_CORE 19 | 34 | #define CLK_MOUT_CORE 19 |
35 | #define CLK_MOUT_APLL 20 | 35 | #define CLK_MOUT_APLL 20 |
36 | #define CLK_SCLK_HDMIPHY 22 | 36 | #define CLK_SCLK_HDMIPHY 22 |
37 | #define CLK_OUT_DMC 23 | ||
38 | #define CLK_OUT_TOP 24 | ||
39 | #define CLK_OUT_LEFTBUS 25 | ||
40 | #define CLK_OUT_RIGHTBUS 26 | ||
41 | #define CLK_OUT_CPU 27 | ||
37 | 42 | ||
38 | /* gate for special clocks (sclk) */ | 43 | /* gate for special clocks (sclk) */ |
39 | #define CLK_SCLK_FIMC0 128 | 44 | #define CLK_SCLK_FIMC0 128 |