aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThierry Reding <treding@nvidia.com>2016-06-09 11:53:57 -0400
committerThierry Reding <treding@nvidia.com>2016-07-14 08:57:01 -0400
commit618dee3941a43d8d4f762a7af99bcb59baba2bc5 (patch)
treef2d28fff57d07089847f8e5972a1e12af742cdd8
parent5d2304c1de6b353a0e09f4ed22165835f5651e4b (diff)
drm/tegra: sor: Use sor1_src clock to set parent for HDMI
When running in HDMI mode, the sor1 IP block needs to use the sor1_src as parent clock, and in turn configure the sor1_src to use pll_d2_out0 as its parent. Signed-off-by: Thierry Reding <treding@nvidia.com>
-rw-r--r--drivers/gpu/drm/tegra/sor.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/drivers/gpu/drm/tegra/sor.c b/drivers/gpu/drm/tegra/sor.c
index 896ba3bfbb2f..26568ca3c43c 100644
--- a/drivers/gpu/drm/tegra/sor.c
+++ b/drivers/gpu/drm/tegra/sor.c
@@ -173,6 +173,7 @@ struct tegra_sor {
173 struct clk *clk_parent; 173 struct clk *clk_parent;
174 struct clk *clk_brick; 174 struct clk *clk_brick;
175 struct clk *clk_safe; 175 struct clk *clk_safe;
176 struct clk *clk_src;
176 struct clk *clk_dp; 177 struct clk *clk_dp;
177 struct clk *clk; 178 struct clk *clk;
178 179
@@ -2101,7 +2102,11 @@ static void tegra_sor_hdmi_enable(struct drm_encoder *encoder)
2101 tegra_sor_writel(sor, 0x00000000, SOR_XBAR_POL); 2102 tegra_sor_writel(sor, 0x00000000, SOR_XBAR_POL);
2102 2103
2103 /* switch to parent clock */ 2104 /* switch to parent clock */
2104 err = tegra_sor_set_parent_clock(sor, sor->clk_parent); 2105 err = clk_set_parent(sor->clk_src, sor->clk_parent);
2106 if (err < 0)
2107 dev_err(sor->dev, "failed to set source clock: %d\n", err);
2108
2109 err = tegra_sor_set_parent_clock(sor, sor->clk_src);
2105 if (err < 0) 2110 if (err < 0)
2106 dev_err(sor->dev, "failed to set parent clock: %d\n", err); 2111 dev_err(sor->dev, "failed to set parent clock: %d\n", err);
2107 2112
@@ -2595,6 +2600,16 @@ static int tegra_sor_probe(struct platform_device *pdev)
2595 goto remove; 2600 goto remove;
2596 } 2601 }
2597 2602
2603 if (sor->soc->supports_hdmi || sor->soc->supports_dp) {
2604 sor->clk_src = devm_clk_get(&pdev->dev, "source");
2605 if (IS_ERR(sor->clk_src)) {
2606 err = PTR_ERR(sor->clk_src);
2607 dev_err(sor->dev, "failed to get source clock: %d\n",
2608 err);
2609 goto remove;
2610 }
2611 }
2612
2598 sor->clk_parent = devm_clk_get(&pdev->dev, "parent"); 2613 sor->clk_parent = devm_clk_get(&pdev->dev, "parent");
2599 if (IS_ERR(sor->clk_parent)) { 2614 if (IS_ERR(sor->clk_parent)) {
2600 err = PTR_ERR(sor->clk_parent); 2615 err = PTR_ERR(sor->clk_parent);