aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomasz Figa <t.figa@samsung.com>2014-06-24 12:08:25 -0400
committerTomasz Figa <t.figa@samsung.com>2014-07-25 20:47:10 -0400
commit01f7ec260ab35291f23bf42b1a43367649392646 (patch)
tree523c83e4337f544baa0d7371fd0b2e35c9377b9e
parent800c9797ad5b20edf3b9258b83624efdb2b06e02 (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.c112
-rw-r--r--include/dt-bindings/clock/exynos4.h5
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
247static const struct samsung_clk_reg_dump src_mask_suspend[] = { 257static const struct samsung_clk_reg_dump src_mask_suspend[] = {
@@ -400,6 +410,23 @@ PNAME(mout_dac_p4210) = { "sclk_vpll", "sclk_hdmiphy", };
400PNAME(mout_pwi_p4210) = { "xxti", "xusbxti", "sclk_hdmi24m", "sclk_usbphy0", 410PNAME(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" };
413PNAME(clkout_left_p4210) = { "sclk_mpll_div_2", "sclk_apll_div_2",
414 "div_gdl", "div_gpl" };
415PNAME(clkout_right_p4210) = { "sclk_mpll_div_2", "sclk_apll_div_2",
416 "div_gdr", "div_gpr" };
417PNAME(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" };
424PNAME(clkout_dmc_p4210) = { "div_dmcd", "div_dmcp", "div_acp_pclk", "div_dmc",
425 "div_dphy", "none", "div_pwi" };
426PNAME(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 */
405PNAME(mout_mpll_user_p4x12) = { "fin_pll", "sclk_mpll", }; 432PNAME(mout_mpll_user_p4x12) = { "fin_pll", "sclk_mpll", };
@@ -426,6 +453,29 @@ PNAME(mout_user_aclk266_gps_p4x12) = {"fin_pll", "div_aclk266_gps", };
426PNAME(mout_pwi_p4x12) = { "xxti", "xusbxti", "sclk_hdmi24m", "sclk_usbphy0", 453PNAME(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" };
456PNAME(clkout_left_p4x12) = { "sclk_mpll_user_l_div_2", "sclk_apll_div_2",
457 "div_gdl", "div_gpl" };
458PNAME(clkout_right_p4x12) = { "sclk_mpll_user_r_div_2", "sclk_apll_div_2",
459 "div_gdr", "div_gpr" };
460PNAME(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" };
472PNAME(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" };
475PNAME(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 */
431static struct samsung_fixed_rate_clock exynos4_fixed_rate_ext_clks[] __initdata = { 481static 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
497static 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
504static struct samsung_fixed_factor_clock exynos4210_fixed_factor_clks[] __initdata = {
505 FFACTOR(0, "sclk_mpll_div_2", "sclk_mpll", 1, 2, 0),
506};
507
508static 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 */
448static struct samsung_mux_clock exynos4_mux_clks[] __initdata = { 516static 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
472static struct samsung_mux_clock exynos4210_mux_clks[] __initdata = { 540static 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 */
527static struct samsung_mux_clock exynos4x12_mux_clks[] __initdata = { 603static 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 */
601static struct samsung_div_clock exynos4_div_clks[] __initdata = { 686static 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