diff options
Diffstat (limited to 'drivers/video/tegra/dc/dc.c')
-rw-r--r-- | drivers/video/tegra/dc/dc.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/drivers/video/tegra/dc/dc.c b/drivers/video/tegra/dc/dc.c index 085ab037fc9e..68681aefce12 100644 --- a/drivers/video/tegra/dc/dc.c +++ b/drivers/video/tegra/dc/dc.c @@ -725,6 +725,21 @@ void tegra_dc_setup_clk(struct tegra_dc *dc, struct clk *clk) clk_set_parent(clk, pll_d_out0_clk); } + if (dc->out->type == TEGRA_DC_OUT_DSI) { + unsigned long rate; + struct clk *pll_d_out0_clk = + clk_get_sys(NULL, "pll_d_out0"); + struct clk *pll_d_clk = + clk_get_sys(NULL, "pll_d"); + + rate = dc->mode.pclk; + if (rate != clk_get_rate(pll_d_clk)) + clk_set_rate(pll_d_clk, rate); + + if (clk_get_parent(clk) != pll_d_out0_clk) + clk_set_parent(clk, pll_d_out0_clk); + } + pclk = tegra_dc_pclk_round_rate(dc, dc->mode.pclk); tegra_dvfs_set_rate(clk, pclk); } @@ -920,7 +935,11 @@ static void tegra_dc_set_out(struct tegra_dc *dc, struct tegra_dc_out *out) case TEGRA_DC_OUT_HDMI: dc->out_ops = &tegra_dc_hdmi_ops; break; - +#ifdef CONFIG_TEGRA_DSI + case TEGRA_DC_OUT_DSI: + dc->out_ops = &tegra_dc_dsi_ops; + break; +#endif default: dc->out_ops = NULL; break; |