diff options
author | Thierry Reding <treding@nvidia.com> | 2016-06-09 11:53:57 -0400 |
---|---|---|
committer | Thierry Reding <treding@nvidia.com> | 2016-07-14 08:57:01 -0400 |
commit | 618dee3941a43d8d4f762a7af99bcb59baba2bc5 (patch) | |
tree | f2d28fff57d07089847f8e5972a1e12af742cdd8 | |
parent | 5d2304c1de6b353a0e09f4ed22165835f5651e4b (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.c | 17 |
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); |