summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXin Xie <xxie@nvidia.com>2011-06-28 13:12:48 -0700
committerJeremy Wyman <jwyman@nvidia.com>2011-06-29 14:35:37 -0700
commitf003ed45b736f5c6198599a8722848936868e698 (patch)
treeb00684e46b4ea93ae2382b73e524c76acb3509db
parent78be2fbf970470ee5a382d8d6cb17678fe49ee28 (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.c8
-rw-r--r--drivers/video/tegra/dc/dc_priv.h1
-rwxr-xr-xdrivers/video/tegra/dc/dsi.c2
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);