summaryrefslogtreecommitdiff
path: root/drivers/video/tegra/dc
diff options
context:
space:
mode:
authorKevin Huang <kevinh@nvidia.com>2011-06-29 15:54:20 -0700
committerDan Willemsen <dwillemsen@nvidia.com>2011-11-30 21:47:25 -0800
commit01a60375d2c1aa28875a69dbb318833b0b69268b (patch)
tree2f37d5d2a457e105710dd5a1a04400ea7c81867b /drivers/video/tegra/dc
parent816c4e933672cf3f7217a6b352b6f997dca490c4 (diff)
video: tegra: dc: Update the tegra_dc_setup_clk() for HDMI and DSI.
Fix the conflict of clock sources for HDMI & DSI. Original-Change-Id: I730a39fbfd5fe56eea10c0f2147ceee7c3f03921 Reviewed-on: http://git-master/r/39081 Reviewed-by: Varun Colbert <vcolbert@nvidia.com> Tested-by: Varun Colbert <vcolbert@nvidia.com> Rebase-Id: Rb7201a0b141f699841f2eeb73faddea3f7983759
Diffstat (limited to 'drivers/video/tegra/dc')
-rw-r--r--drivers/video/tegra/dc/dc.c49
1 files changed, 26 insertions, 23 deletions
diff --git a/drivers/video/tegra/dc/dc.c b/drivers/video/tegra/dc/dc.c
index d50f0359c779..25814a5fa4a8 100644
--- a/drivers/video/tegra/dc/dc.c
+++ b/drivers/video/tegra/dc/dc.c
@@ -1069,48 +1069,51 @@ void tegra_dc_setup_clk(struct tegra_dc *dc, struct clk *clk)
if (dc->out->type == TEGRA_DC_OUT_HDMI) {
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");
+ struct clk *parent_clk =
+ clk_get_sys(NULL, dc->out->parent_clk ? : "pll_d_out0");
+ struct clk *base_clk = clk_get_parent(parent_clk);
if (dc->mode.pclk > 70000000)
rate = 594000000;
else
rate = 216000000;
- if (rate != clk_get_rate(pll_d_clk))
- clk_set_rate(pll_d_clk, rate);
+ if (rate != clk_get_rate(base_clk))
+ clk_set_rate(base_clk, rate);
- if (clk_get_parent(clk) != pll_d_out0_clk)
- clk_set_parent(clk, pll_d_out0_clk);
+ if (clk_get_parent(clk) != parent_clk)
+ clk_set_parent(clk, parent_clk);
}
if (dc->out->type == TEGRA_DC_OUT_DSI) {
unsigned long rate;
- struct clk *pll_d_out0_clk;
- struct clk *pll_d_clk;
+ struct clk *parent_clk;
+ struct clk *base_clk;
if (clk == dc->clk) {
- pll_d_out0_clk = clk_get_sys(NULL, "pll_d_out0");
- pll_d_clk = clk_get_sys(NULL, "pll_d");
+ parent_clk = clk_get_sys(NULL,
+ dc->out->parent_clk ? : "pll_d_out0");
+ base_clk = clk_get_parent(parent_clk);
} else {
if (dc->pdata->default_out->dsi->dsi_instance) {
- pll_d_out0_clk = clk_get_sys(NULL, "pll_d2_out0");
- pll_d_clk = clk_get_sys(NULL, "pll_d2");
- tegra_clk_cfg_ex(pll_d_clk, TEGRA_CLK_PLLD_CSI_OUT_ENB, 1);
+ parent_clk = clk_get_sys(NULL,
+ dc->out->parent_clk ? : "pll_d2_out0");
+ base_clk = clk_get_parent(parent_clk);
+ tegra_clk_cfg_ex(base_clk,
+ TEGRA_CLK_PLLD_CSI_OUT_ENB, 1);
} else {
- pll_d_out0_clk = clk_get_sys(NULL, "pll_d_out0");
- pll_d_clk = clk_get_sys(NULL, "pll_d");
+ parent_clk = clk_get_sys(NULL,
+ dc->out->parent_clk ? : "pll_d_out0");
+ base_clk = clk_get_parent(parent_clk);
}
}
rate = dc->mode.pclk;
- if (rate != clk_get_rate(pll_d_clk))
- clk_set_rate(pll_d_clk, rate);
+ if (rate != clk_get_rate(base_clk))
+ clk_set_rate(base_clk, rate);
- if (clk_get_parent(clk) != pll_d_out0_clk)
- clk_set_parent(clk, pll_d_out0_clk);
+ if (clk_get_parent(clk) != parent_clk)
+ clk_set_parent(clk, parent_clk);
}
pclk = tegra_dc_pclk_round_rate(dc, dc->mode.pclk);
@@ -1174,8 +1177,8 @@ static int calc_v_ref_to_sync(const struct tegra_dc_mode *mode, int *vref)
if (mode->v_active < 16)
return 7;
- if (vref)
- *vref = a;
+ if (vref)
+ *vref = a;
return 0;
}