diff options
| author | Mark Zhang <markz@nvidia.com> | 2014-12-09 01:59:59 -0500 |
|---|---|---|
| committer | Peter De Schrijver <pdeschrijver@nvidia.com> | 2015-02-02 09:22:34 -0500 |
| commit | b270491eb9a033a1ab6c66e778c9dd3e3a4f7639 (patch) | |
| tree | 4b0c4d9b987aa11332a5a2f774c0beb7c78f0a6e | |
| parent | 08acae34e8dadaa8c3a0a432760555bba1db8bfb (diff) | |
clk: tegra: Define PLLD_DSI and remove dsia(b)_mux
PLLD is the only parent for DSIA & DSIB on Tegra124 and
Tegra132. Besides, BIT 30 in PLLD_MISC register controls
the output of DSI clock.
So this patch removes "dsia_mux" & "dsib_mux", and create
a new clock "plld_dsi" to represent the DSI clock enable
control.
Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
Signed-off-by: Mark Zhang <markz@nvidia.com>
| -rw-r--r-- | drivers/clk/tegra/clk-id.h | 2 | ||||
| -rw-r--r-- | drivers/clk/tegra/clk-tegra-periph.c | 2 | ||||
| -rw-r--r-- | drivers/clk/tegra/clk-tegra114.c | 10 | ||||
| -rw-r--r-- | drivers/clk/tegra/clk-tegra124.c | 36 | ||||
| -rw-r--r-- | include/dt-bindings/clock/tegra124-car-common.h | 6 |
5 files changed, 27 insertions, 29 deletions
diff --git a/drivers/clk/tegra/clk-id.h b/drivers/clk/tegra/clk-id.h index 0011d547a9f7..60738cc954cb 100644 --- a/drivers/clk/tegra/clk-id.h +++ b/drivers/clk/tegra/clk-id.h | |||
| @@ -64,10 +64,8 @@ enum clk_id { | |||
| 64 | tegra_clk_disp2, | 64 | tegra_clk_disp2, |
| 65 | tegra_clk_dp2, | 65 | tegra_clk_dp2, |
| 66 | tegra_clk_dpaux, | 66 | tegra_clk_dpaux, |
| 67 | tegra_clk_dsia, | ||
| 68 | tegra_clk_dsialp, | 67 | tegra_clk_dsialp, |
| 69 | tegra_clk_dsia_mux, | 68 | tegra_clk_dsia_mux, |
| 70 | tegra_clk_dsib, | ||
| 71 | tegra_clk_dsiblp, | 69 | tegra_clk_dsiblp, |
| 72 | tegra_clk_dsib_mux, | 70 | tegra_clk_dsib_mux, |
| 73 | tegra_clk_dtv, | 71 | tegra_clk_dtv, |
diff --git a/drivers/clk/tegra/clk-tegra-periph.c b/drivers/clk/tegra/clk-tegra-periph.c index fa20002fb422..cef0727b9eec 100644 --- a/drivers/clk/tegra/clk-tegra-periph.c +++ b/drivers/clk/tegra/clk-tegra-periph.c | |||
| @@ -537,8 +537,6 @@ static struct tegra_periph_init_data gate_clks[] = { | |||
| 537 | GATE("xusb_host", "xusb_host_src", 89, 0, tegra_clk_xusb_host, 0), | 537 | GATE("xusb_host", "xusb_host_src", 89, 0, tegra_clk_xusb_host, 0), |
| 538 | GATE("xusb_ss", "xusb_ss_src", 156, 0, tegra_clk_xusb_ss, 0), | 538 | GATE("xusb_ss", "xusb_ss_src", 156, 0, tegra_clk_xusb_ss, 0), |
| 539 | GATE("xusb_dev", "xusb_dev_src", 95, 0, tegra_clk_xusb_dev, 0), | 539 | GATE("xusb_dev", "xusb_dev_src", 95, 0, tegra_clk_xusb_dev, 0), |
| 540 | GATE("dsia", "dsia_mux", 48, 0, tegra_clk_dsia, 0), | ||
| 541 | GATE("dsib", "dsib_mux", 82, 0, tegra_clk_dsib, 0), | ||
| 542 | GATE("emc", "emc_mux", 57, 0, tegra_clk_emc, CLK_IGNORE_UNUSED), | 540 | GATE("emc", "emc_mux", 57, 0, tegra_clk_emc, CLK_IGNORE_UNUSED), |
| 543 | GATE("sata_cold", "clk_m", 129, TEGRA_PERIPH_ON_APB, tegra_clk_sata_cold, 0), | 541 | GATE("sata_cold", "clk_m", 129, TEGRA_PERIPH_ON_APB, tegra_clk_sata_cold, 0), |
| 544 | GATE("ispb", "clk_m", 3, 0, tegra_clk_ispb, 0), | 542 | GATE("ispb", "clk_m", 3, 0, tegra_clk_ispb, 0), |
diff --git a/drivers/clk/tegra/clk-tegra114.c b/drivers/clk/tegra/clk-tegra114.c index 0b03d2cf7264..d0766423a5d6 100644 --- a/drivers/clk/tegra/clk-tegra114.c +++ b/drivers/clk/tegra/clk-tegra114.c | |||
| @@ -715,7 +715,6 @@ static struct tegra_clk tegra114_clks[tegra_clk_max] __initdata = { | |||
| 715 | [tegra_clk_sbc2_8] = { .dt_id = TEGRA114_CLK_SBC2, .present = true }, | 715 | [tegra_clk_sbc2_8] = { .dt_id = TEGRA114_CLK_SBC2, .present = true }, |
| 716 | [tegra_clk_sbc3_8] = { .dt_id = TEGRA114_CLK_SBC3, .present = true }, | 716 | [tegra_clk_sbc3_8] = { .dt_id = TEGRA114_CLK_SBC3, .present = true }, |
| 717 | [tegra_clk_i2c5] = { .dt_id = TEGRA114_CLK_I2C5, .present = true }, | 717 | [tegra_clk_i2c5] = { .dt_id = TEGRA114_CLK_I2C5, .present = true }, |
| 718 | [tegra_clk_dsia] = { .dt_id = TEGRA114_CLK_DSIA, .present = true }, | ||
| 719 | [tegra_clk_mipi] = { .dt_id = TEGRA114_CLK_MIPI, .present = true }, | 718 | [tegra_clk_mipi] = { .dt_id = TEGRA114_CLK_MIPI, .present = true }, |
| 720 | [tegra_clk_hdmi] = { .dt_id = TEGRA114_CLK_HDMI, .present = true }, | 719 | [tegra_clk_hdmi] = { .dt_id = TEGRA114_CLK_HDMI, .present = true }, |
| 721 | [tegra_clk_csi] = { .dt_id = TEGRA114_CLK_CSI, .present = true }, | 720 | [tegra_clk_csi] = { .dt_id = TEGRA114_CLK_CSI, .present = true }, |
| @@ -739,7 +738,6 @@ static struct tegra_clk tegra114_clks[tegra_clk_max] __initdata = { | |||
| 739 | [tegra_clk_dtv] = { .dt_id = TEGRA114_CLK_DTV, .present = true }, | 738 | [tegra_clk_dtv] = { .dt_id = TEGRA114_CLK_DTV, .present = true }, |
| 740 | [tegra_clk_ndspeed] = { .dt_id = TEGRA114_CLK_NDSPEED, .present = true }, | 739 | [tegra_clk_ndspeed] = { .dt_id = TEGRA114_CLK_NDSPEED, .present = true }, |
| 741 | [tegra_clk_i2cslow] = { .dt_id = TEGRA114_CLK_I2CSLOW, .present = true }, | 740 | [tegra_clk_i2cslow] = { .dt_id = TEGRA114_CLK_I2CSLOW, .present = true }, |
| 742 | [tegra_clk_dsib] = { .dt_id = TEGRA114_CLK_DSIB, .present = true }, | ||
| 743 | [tegra_clk_tsec] = { .dt_id = TEGRA114_CLK_TSEC, .present = true }, | 741 | [tegra_clk_tsec] = { .dt_id = TEGRA114_CLK_TSEC, .present = true }, |
| 744 | [tegra_clk_xusb_host] = { .dt_id = TEGRA114_CLK_XUSB_HOST, .present = true }, | 742 | [tegra_clk_xusb_host] = { .dt_id = TEGRA114_CLK_XUSB_HOST, .present = true }, |
| 745 | [tegra_clk_msenc] = { .dt_id = TEGRA114_CLK_MSENC, .present = true }, | 743 | [tegra_clk_msenc] = { .dt_id = TEGRA114_CLK_MSENC, .present = true }, |
| @@ -1224,6 +1222,14 @@ static __init void tegra114_periph_clk_init(void __iomem *clk_base, | |||
| 1224 | clk_base + PLLD2_BASE, 25, 1, 0, &pll_d2_lock); | 1222 | clk_base + PLLD2_BASE, 25, 1, 0, &pll_d2_lock); |
| 1225 | clks[TEGRA114_CLK_DSIB_MUX] = clk; | 1223 | clks[TEGRA114_CLK_DSIB_MUX] = clk; |
| 1226 | 1224 | ||
| 1225 | clk = tegra_clk_register_periph_gate("dsia", "dsia_mux", 0, clk_base, | ||
| 1226 | 0, 48, periph_clk_enb_refcnt); | ||
| 1227 | clks[TEGRA114_CLK_DSIA] = clk; | ||
| 1228 | |||
| 1229 | clk = tegra_clk_register_periph_gate("dsib", "dsib_mux", 0, clk_base, | ||
| 1230 | 0, 82, periph_clk_enb_refcnt); | ||
| 1231 | clks[TEGRA114_CLK_DSIB] = clk; | ||
| 1232 | |||
| 1227 | /* emc mux */ | 1233 | /* emc mux */ |
| 1228 | clk = clk_register_mux(NULL, "emc_mux", mux_pllmcp_clkm, | 1234 | clk = clk_register_mux(NULL, "emc_mux", mux_pllmcp_clkm, |
| 1229 | ARRAY_SIZE(mux_pllmcp_clkm), | 1235 | ARRAY_SIZE(mux_pllmcp_clkm), |
diff --git a/drivers/clk/tegra/clk-tegra124.c b/drivers/clk/tegra/clk-tegra124.c index 5c11ed9f5e54..9a893f2fe8e9 100644 --- a/drivers/clk/tegra/clk-tegra124.c +++ b/drivers/clk/tegra/clk-tegra124.c | |||
| @@ -136,7 +136,6 @@ static unsigned long osc_freq; | |||
| 136 | static unsigned long pll_ref_freq; | 136 | static unsigned long pll_ref_freq; |
| 137 | 137 | ||
| 138 | static DEFINE_SPINLOCK(pll_d_lock); | 138 | static DEFINE_SPINLOCK(pll_d_lock); |
| 139 | static DEFINE_SPINLOCK(pll_d2_lock); | ||
| 140 | static DEFINE_SPINLOCK(pll_e_lock); | 139 | static DEFINE_SPINLOCK(pll_e_lock); |
| 141 | static DEFINE_SPINLOCK(pll_re_lock); | 140 | static DEFINE_SPINLOCK(pll_re_lock); |
| 142 | static DEFINE_SPINLOCK(pll_u_lock); | 141 | static DEFINE_SPINLOCK(pll_u_lock); |
| @@ -153,11 +152,6 @@ static unsigned long tegra124_input_freq[] = { | |||
| 153 | [12] = 260000000, | 152 | [12] = 260000000, |
| 154 | }; | 153 | }; |
| 155 | 154 | ||
| 156 | static const char *mux_plld_out0_plld2_out0[] = { | ||
| 157 | "pll_d_out0", "pll_d2_out0", | ||
| 158 | }; | ||
| 159 | #define mux_plld_out0_plld2_out0_idx NULL | ||
| 160 | |||
| 161 | static const char *mux_pllmcp_clkm[] = { | 155 | static const char *mux_pllmcp_clkm[] = { |
| 162 | "pll_m", "pll_c", "pll_p", "clk_m", "pll_m_ud", "pll_c2", "pll_c3", | 156 | "pll_m", "pll_c", "pll_p", "clk_m", "pll_m_ud", "pll_c2", "pll_c3", |
| 163 | }; | 157 | }; |
| @@ -791,7 +785,6 @@ static struct tegra_clk tegra124_clks[tegra_clk_max] __initdata = { | |||
| 791 | [tegra_clk_sbc2] = { .dt_id = TEGRA124_CLK_SBC2, .present = true }, | 785 | [tegra_clk_sbc2] = { .dt_id = TEGRA124_CLK_SBC2, .present = true }, |
| 792 | [tegra_clk_sbc3] = { .dt_id = TEGRA124_CLK_SBC3, .present = true }, | 786 | [tegra_clk_sbc3] = { .dt_id = TEGRA124_CLK_SBC3, .present = true }, |
| 793 | [tegra_clk_i2c5] = { .dt_id = TEGRA124_CLK_I2C5, .present = true }, | 787 | [tegra_clk_i2c5] = { .dt_id = TEGRA124_CLK_I2C5, .present = true }, |
| 794 | [tegra_clk_dsia] = { .dt_id = TEGRA124_CLK_DSIA, .present = true }, | ||
| 795 | [tegra_clk_mipi] = { .dt_id = TEGRA124_CLK_MIPI, .present = true }, | 788 | [tegra_clk_mipi] = { .dt_id = TEGRA124_CLK_MIPI, .present = true }, |
| 796 | [tegra_clk_hdmi] = { .dt_id = TEGRA124_CLK_HDMI, .present = true }, | 789 | [tegra_clk_hdmi] = { .dt_id = TEGRA124_CLK_HDMI, .present = true }, |
| 797 | [tegra_clk_csi] = { .dt_id = TEGRA124_CLK_CSI, .present = true }, | 790 | [tegra_clk_csi] = { .dt_id = TEGRA124_CLK_CSI, .present = true }, |
| @@ -817,7 +810,6 @@ static struct tegra_clk tegra124_clks[tegra_clk_max] __initdata = { | |||
| 817 | [tegra_clk_soc_therm] = { .dt_id = TEGRA124_CLK_SOC_THERM, .present = true }, | 810 | [tegra_clk_soc_therm] = { .dt_id = TEGRA124_CLK_SOC_THERM, .present = true }, |
| 818 | [tegra_clk_dtv] = { .dt_id = TEGRA124_CLK_DTV, .present = true }, | 811 | [tegra_clk_dtv] = { .dt_id = TEGRA124_CLK_DTV, .present = true }, |
| 819 | [tegra_clk_i2cslow] = { .dt_id = TEGRA124_CLK_I2CSLOW, .present = true }, | 812 | [tegra_clk_i2cslow] = { .dt_id = TEGRA124_CLK_I2CSLOW, .present = true }, |
| 820 | [tegra_clk_dsib] = { .dt_id = TEGRA124_CLK_DSIB, .present = true }, | ||
| 821 | [tegra_clk_tsec] = { .dt_id = TEGRA124_CLK_TSEC, .present = true }, | 813 | [tegra_clk_tsec] = { .dt_id = TEGRA124_CLK_TSEC, .present = true }, |
| 822 | [tegra_clk_xusb_host] = { .dt_id = TEGRA124_CLK_XUSB_HOST, .present = true }, | 814 | [tegra_clk_xusb_host] = { .dt_id = TEGRA124_CLK_XUSB_HOST, .present = true }, |
| 823 | [tegra_clk_msenc] = { .dt_id = TEGRA124_CLK_MSENC, .present = true }, | 815 | [tegra_clk_msenc] = { .dt_id = TEGRA124_CLK_MSENC, .present = true }, |
| @@ -957,8 +949,6 @@ static struct tegra_clk tegra124_clks[tegra_clk_max] __initdata = { | |||
| 957 | [tegra_clk_clk_out_1_mux] = { .dt_id = TEGRA124_CLK_CLK_OUT_1_MUX, .present = true }, | 949 | [tegra_clk_clk_out_1_mux] = { .dt_id = TEGRA124_CLK_CLK_OUT_1_MUX, .present = true }, |
| 958 | [tegra_clk_clk_out_2_mux] = { .dt_id = TEGRA124_CLK_CLK_OUT_2_MUX, .present = true }, | 950 | [tegra_clk_clk_out_2_mux] = { .dt_id = TEGRA124_CLK_CLK_OUT_2_MUX, .present = true }, |
| 959 | [tegra_clk_clk_out_3_mux] = { .dt_id = TEGRA124_CLK_CLK_OUT_3_MUX, .present = true }, | 951 | [tegra_clk_clk_out_3_mux] = { .dt_id = TEGRA124_CLK_CLK_OUT_3_MUX, .present = true }, |
| 960 | [tegra_clk_dsia_mux] = { .dt_id = TEGRA124_CLK_DSIA_MUX, .present = true }, | ||
| 961 | [tegra_clk_dsib_mux] = { .dt_id = TEGRA124_CLK_DSIB_MUX, .present = true }, | ||
| 962 | }; | 952 | }; |
| 963 | 953 | ||
| 964 | static struct tegra_devclk devclks[] __initdata = { | 954 | static struct tegra_devclk devclks[] __initdata = { |
| @@ -1120,17 +1110,17 @@ static __init void tegra124_periph_clk_init(void __iomem *clk_base, | |||
| 1120 | 1, 2); | 1110 | 1, 2); |
| 1121 | clks[TEGRA124_CLK_XUSB_SS_DIV2] = clk; | 1111 | clks[TEGRA124_CLK_XUSB_SS_DIV2] = clk; |
| 1122 | 1112 | ||
| 1123 | /* dsia mux */ | 1113 | clk = clk_register_gate(NULL, "plld_dsi", "plld_out0", 0, |
| 1124 | clk = clk_register_mux(NULL, "dsia_mux", mux_plld_out0_plld2_out0, | 1114 | clk_base + PLLD_MISC, 30, 0, &pll_d_lock); |
| 1125 | ARRAY_SIZE(mux_plld_out0_plld2_out0), 0, | 1115 | clks[TEGRA124_CLK_PLLD_DSI] = clk; |
| 1126 | clk_base + PLLD_BASE, 25, 1, 0, &pll_d_lock); | ||
| 1127 | clks[TEGRA124_CLK_DSIA_MUX] = clk; | ||
| 1128 | 1116 | ||
| 1129 | /* dsib mux */ | 1117 | clk = tegra_clk_register_periph_gate("dsia", "plld_dsi", 0, clk_base, |
| 1130 | clk = clk_register_mux(NULL, "dsib_mux", mux_plld_out0_plld2_out0, | 1118 | 0, 48, periph_clk_enb_refcnt); |
| 1131 | ARRAY_SIZE(mux_plld_out0_plld2_out0), 0, | 1119 | clks[TEGRA124_CLK_DSIA] = clk; |
| 1132 | clk_base + PLLD2_BASE, 25, 1, 0, &pll_d2_lock); | 1120 | |
| 1133 | clks[TEGRA124_CLK_DSIB_MUX] = clk; | 1121 | clk = tegra_clk_register_periph_gate("dsib", "plld_dsi", 0, clk_base, |
| 1122 | 0, 82, periph_clk_enb_refcnt); | ||
| 1123 | clks[TEGRA124_CLK_DSIB] = clk; | ||
| 1134 | 1124 | ||
| 1135 | /* emc mux */ | 1125 | /* emc mux */ |
| 1136 | clk = clk_register_mux(NULL, "emc_mux", mux_pllmcp_clkm, | 1126 | clk = clk_register_mux(NULL, "emc_mux", mux_pllmcp_clkm, |
| @@ -1457,6 +1447,7 @@ static void __init tegra132_clock_apply_init_table(void) | |||
| 1457 | static void __init tegra124_132_clock_init_pre(struct device_node *np) | 1447 | static void __init tegra124_132_clock_init_pre(struct device_node *np) |
| 1458 | { | 1448 | { |
| 1459 | struct device_node *node; | 1449 | struct device_node *node; |
| 1450 | u32 plld_base; | ||
| 1460 | 1451 | ||
| 1461 | clk_base = of_iomap(np, 0); | 1452 | clk_base = of_iomap(np, 0); |
| 1462 | if (!clk_base) { | 1453 | if (!clk_base) { |
| @@ -1492,6 +1483,11 @@ static void __init tegra124_132_clock_init_pre(struct device_node *np) | |||
| 1492 | tegra124_periph_clk_init(clk_base, pmc_base); | 1483 | tegra124_periph_clk_init(clk_base, pmc_base); |
| 1493 | tegra_audio_clk_init(clk_base, pmc_base, tegra124_clks, &pll_a_params); | 1484 | tegra_audio_clk_init(clk_base, pmc_base, tegra124_clks, &pll_a_params); |
| 1494 | tegra_pmc_clk_init(pmc_base, tegra124_clks); | 1485 | tegra_pmc_clk_init(pmc_base, tegra124_clks); |
| 1486 | |||
| 1487 | /* For Tegra124 & Tegra132, PLLD is the only source for DSIA & DSIB */ | ||
| 1488 | plld_base = clk_readl(clk_base + PLLD_BASE); | ||
| 1489 | plld_base &= ~BIT(25); | ||
| 1490 | clk_writel(plld_base, clk_base + PLLD_BASE); | ||
| 1495 | } | 1491 | } |
| 1496 | 1492 | ||
| 1497 | /** | 1493 | /** |
diff --git a/include/dt-bindings/clock/tegra124-car-common.h b/include/dt-bindings/clock/tegra124-car-common.h index aeb52df2feb3..ae2eb17a1658 100644 --- a/include/dt-bindings/clock/tegra124-car-common.h +++ b/include/dt-bindings/clock/tegra124-car-common.h | |||
| @@ -297,7 +297,7 @@ | |||
| 297 | #define TEGRA124_CLK_PLL_C4 270 | 297 | #define TEGRA124_CLK_PLL_C4 270 |
| 298 | #define TEGRA124_CLK_PLL_DP 271 | 298 | #define TEGRA124_CLK_PLL_DP 271 |
| 299 | #define TEGRA124_CLK_PLL_E_MUX 272 | 299 | #define TEGRA124_CLK_PLL_E_MUX 272 |
| 300 | /* 273 */ | 300 | #define TEGRA124_CLK_PLLD_DSI 273 |
| 301 | /* 274 */ | 301 | /* 274 */ |
| 302 | /* 275 */ | 302 | /* 275 */ |
| 303 | /* 276 */ | 303 | /* 276 */ |
| @@ -334,8 +334,8 @@ | |||
| 334 | #define TEGRA124_CLK_CLK_OUT_1_MUX 306 | 334 | #define TEGRA124_CLK_CLK_OUT_1_MUX 306 |
| 335 | #define TEGRA124_CLK_CLK_OUT_2_MUX 307 | 335 | #define TEGRA124_CLK_CLK_OUT_2_MUX 307 |
| 336 | #define TEGRA124_CLK_CLK_OUT_3_MUX 308 | 336 | #define TEGRA124_CLK_CLK_OUT_3_MUX 308 |
| 337 | #define TEGRA124_CLK_DSIA_MUX 309 | 337 | /* 309 */ |
| 338 | #define TEGRA124_CLK_DSIB_MUX 310 | 338 | /* 310 */ |
| 339 | #define TEGRA124_CLK_SOR0_LVDS 311 | 339 | #define TEGRA124_CLK_SOR0_LVDS 311 |
| 340 | #define TEGRA124_CLK_XUSB_SS_DIV2 312 | 340 | #define TEGRA124_CLK_XUSB_SS_DIV2 312 |
| 341 | 341 | ||
