diff options
Diffstat (limited to 'drivers/video/tegra/dc')
-rw-r--r-- | drivers/video/tegra/dc/dc.c | 14 | ||||
-rw-r--r-- | drivers/video/tegra/dc/dc_priv.h | 1 | ||||
-rw-r--r-- | drivers/video/tegra/dc/overlay.c | 4 |
3 files changed, 19 insertions, 0 deletions
diff --git a/drivers/video/tegra/dc/dc.c b/drivers/video/tegra/dc/dc.c index 57ca161f9765..b2cb5c404d90 100644 --- a/drivers/video/tegra/dc/dc.c +++ b/drivers/video/tegra/dc/dc.c @@ -352,6 +352,20 @@ out: return ret; } +unsigned int tegra_dc_has_multiple_dc(void) +{ + unsigned int idx; + unsigned int cnt = 0; + struct tegra_dc *dc; + + mutex_lock(&tegra_dc_lock); + for (idx = 0; idx < TEGRA_MAX_DC; idx++) + cnt += ((dc = tegra_dcs[idx]) != NULL && dc->enabled) ? 1 : 0; + mutex_unlock(&tegra_dc_lock); + + return (cnt > 1); +} + struct tegra_dc *tegra_dc_get_dc(unsigned idx) { if (idx < TEGRA_MAX_DC) diff --git a/drivers/video/tegra/dc/dc_priv.h b/drivers/video/tegra/dc/dc_priv.h index d31c4436dcba..c6097398caf6 100644 --- a/drivers/video/tegra/dc/dc_priv.h +++ b/drivers/video/tegra/dc/dc_priv.h @@ -142,6 +142,7 @@ static inline void *tegra_dc_get_outdata(struct tegra_dc *dc) } void tegra_dc_setup_clk(struct tegra_dc *dc, struct clk *clk); +unsigned int tegra_dc_has_multiple_dc(void); extern struct tegra_dc_out_ops tegra_dc_rgb_ops; extern struct tegra_dc_out_ops tegra_dc_hdmi_ops; diff --git a/drivers/video/tegra/dc/overlay.c b/drivers/video/tegra/dc/overlay.c index c5d293dacca4..ae29bba7b024 100644 --- a/drivers/video/tegra/dc/overlay.c +++ b/drivers/video/tegra/dc/overlay.c @@ -410,6 +410,10 @@ static void tegra_overlay_set_emc_freq(struct tegra_overlay_info *dev) if (dev->overlays[i].owner != NULL) emc_freq += dev->dc->mode.pclk*(i==1?2:1)*2; } + + if (tegra_dc_has_multiple_dc()) + emc_freq = ULONG_MAX; + clk_set_rate(dev->dc->emc_clk, emc_freq); } |