diff options
author | Xin Xie <xxie@nvidia.com> | 2011-06-28 13:12:48 -0700 |
---|---|---|
committer | Jeremy Wyman <jwyman@nvidia.com> | 2011-06-29 14:35:37 -0700 |
commit | f003ed45b736f5c6198599a8722848936868e698 (patch) | |
tree | b00684e46b4ea93ae2382b73e524c76acb3509db | |
parent | 78be2fbf970470ee5a382d8d6cb17678fe49ee28 (diff) |
video: tegra: dc: fix DSI pclk calculation NO NOT MERGE
BUG 844499
Change-Id: I422afd8f37a4c95d9eaacff010ed2689f2069f12
Reviewed-on: http://git-master/r/39018
Reviewed-by: Thomas Cherry <tcherry@nvidia.com>
Tested-by: Thomas Cherry <tcherry@nvidia.com>
Reviewed-by: Jeremy Wyman <jwyman@nvidia.com>
Tested-by: Jeremy Wyman <jwyman@nvidia.com>
-rw-r--r-- | drivers/video/tegra/dc/dc.c | 8 | ||||
-rw-r--r-- | drivers/video/tegra/dc/dc_priv.h | 1 | ||||
-rwxr-xr-x | drivers/video/tegra/dc/dsi.c | 2 |
3 files changed, 8 insertions, 3 deletions
diff --git a/drivers/video/tegra/dc/dc.c b/drivers/video/tegra/dc/dc.c index ae2c7416115c..0fb187799a5d 100644 --- a/drivers/video/tegra/dc/dc.c +++ b/drivers/video/tegra/dc/dc.c @@ -682,7 +682,7 @@ static unsigned long tegra_dc_get_emc_rate(struct tegra_dc_win *wins[], int n) for (i = 0; w = wins[i], bw[i] = 0, i < n; i++) { if (!WIN_IS_ENABLED(w)) continue; - bw[i] = dc->mode.pclk * + bw[i] = dc->pixel_clk * (tegra_dc_fmt_bpp(w->fmt) >> BIT_TO_BYTE_SHIFT) * (WIN_USE_V_FILTER(w) ? 2 : 1) / w->out_w * w->w * @@ -1195,14 +1195,14 @@ static int calc_ref_to_sync(struct tegra_dc_mode *mode) #ifdef DEBUG /* return in 1000ths of a Hertz */ -static int calc_refresh(const struct tegra_dc_mode *m) +static int calc_refresh(struct tegra_dc *dc, const struct tegra_dc_mode *m) { long h_total, v_total, refresh; h_total = m->h_active + m->h_front_porch + m->h_back_porch + m->h_sync_width; v_total = m->v_active + m->v_front_porch + m->v_back_porch + m->v_sync_width; - refresh = m->pclk / h_total; + refresh = dc->pixel_clk / h_total; refresh *= 1000; refresh /= v_total; return refresh; @@ -1315,6 +1315,8 @@ static int tegra_dc_program_mode(struct tegra_dc *dc, struct tegra_dc_mode *mode switch_set_state(&dc->modeset_switch, (mode->h_active << 16) | mode->v_active); + dc->pixel_clk = dc->mode.pclk; + return 0; } diff --git a/drivers/video/tegra/dc/dc_priv.h b/drivers/video/tegra/dc/dc_priv.h index b3f6eb53c38a..42e8993313c2 100644 --- a/drivers/video/tegra/dc/dc_priv.h +++ b/drivers/video/tegra/dc/dc_priv.h @@ -88,6 +88,7 @@ struct tegra_dc { void __iomem *base; int irq; + int pixel_clk; struct clk *clk; struct clk *emc_clk; int emc_clk_rate; diff --git a/drivers/video/tegra/dc/dsi.c b/drivers/video/tegra/dc/dsi.c index f313ee02e5b7..040ef3f0bfce 100755 --- a/drivers/video/tegra/dc/dsi.c +++ b/drivers/video/tegra/dc/dsi.c @@ -436,6 +436,8 @@ static void tegra_dsi_init_sw(struct tegra_dc *dc, /* Calculate minimum required pixel rate. */ pixel_clk_hz = h_width_pixels * v_width_lines * dsi->info.refresh_rate; + dc->pixel_clk = pixel_clk_hz; + /* Calculate minimum byte rate on DSI interface. */ byte_clk_hz = (pixel_clk_hz * dsi->pixel_scaler_mul) / (dsi->pixel_scaler_div * dsi->info.n_data_lanes); |