summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Mayo <jmayo@nvidia.com>2011-07-07 16:29:57 -0700
committerVarun Colbert <vcolbert@nvidia.com>2011-07-15 16:09:08 -0700
commitf9de6e2cffed3d3202378aaf46438a759196565e (patch)
tree5c12d4c561562eca9bfa77ffce2e15507aa002ba
parent745a3e60bdc5e781efd1e6c05602ff30e5aa6d35 (diff)
video: tegra: dc: clean up dynamic emc code
refactor emc code and centralize it in one place. Bug 850852 Change-Id: Icddd270d1ea4f47de11aa3633dd2dbb205a15742 Reviewed-on: http://git-master/r/40131 Reviewed-by: Varun Colbert <vcolbert@nvidia.com> Tested-by: Varun Colbert <vcolbert@nvidia.com>
-rw-r--r--arch/arm/mach-tegra/include/mach/dc.h1
-rw-r--r--drivers/video/tegra/dc/dc.c15
-rw-r--r--drivers/video/tegra/dc/overlay.c2
-rw-r--r--drivers/video/tegra/fb.c3
4 files changed, 4 insertions, 17 deletions
diff --git a/arch/arm/mach-tegra/include/mach/dc.h b/arch/arm/mach-tegra/include/mach/dc.h
index 0311c482a099..d02ba23a03f8 100644
--- a/arch/arm/mach-tegra/include/mach/dc.h
+++ b/arch/arm/mach-tegra/include/mach/dc.h
@@ -436,7 +436,6 @@ u32 tegra_dc_incr_syncpt_max(struct tegra_dc *dc);
void tegra_dc_incr_syncpt_min(struct tegra_dc *dc, u32 val);
int tegra_dc_set_default_emc(struct tegra_dc *dc);
-int tegra_dc_set_dynamic_emc(struct tegra_dc_win *windows[], int n);
/* tegra_dc_update_windows and tegra_dc_sync_windows do not support windows
* with differenct dcs in one call
diff --git a/drivers/video/tegra/dc/dc.c b/drivers/video/tegra/dc/dc.c
index aa99dce17e0b..f3091b618ebe 100644
--- a/drivers/video/tegra/dc/dc.c
+++ b/drivers/video/tegra/dc/dc.c
@@ -736,7 +736,7 @@ static void tegra_dc_reduce_emc_worker(struct work_struct *work)
mutex_unlock(&dc->lock);
}
-int tegra_dc_set_dynamic_emc(struct tegra_dc_win *windows[], int n)
+static int tegra_dc_set_dynamic_emc(struct tegra_dc_win *windows[], int n)
{
unsigned long new_rate;
struct tegra_dc *dc;
@@ -746,13 +746,6 @@ int tegra_dc_set_dynamic_emc(struct tegra_dc_win *windows[], int n)
dc = windows[0]->dc;
- mutex_lock(&dc->lock);
-
- if (!dc->enabled) {
- mutex_unlock(&dc->lock);
- return -EFAULT;
- }
-
/* calculate the new rate based on this POST */
new_rate = tegra_dc_get_emc_rate(windows, n);
@@ -770,12 +763,10 @@ int tegra_dc_set_dynamic_emc(struct tegra_dc_win *windows[], int n)
schedule_delayed_work(&dc->reduce_emc_clk_work,
msecs_to_jiffies(windows_idle_detection_time));
- mutex_unlock(&dc->lock);
-
return 0;
}
-int tegra_dc_set_default_emc(struct tegra_dc *dc)
+int tegra_dc_set_default_emc(struct tegra_dc *dc)
{
/*
* POST happens whenever this function is called, we first delete any
@@ -820,6 +811,8 @@ int tegra_dc_update_windows(struct tegra_dc_win *windows[], int n)
return -EFAULT;
}
+ tegra_dc_set_dynamic_emc(windows, n);
+
if (no_vsync)
tegra_dc_writel(dc, WRITE_MUX_ACTIVE | READ_MUX_ACTIVE, DC_CMD_STATE_ACCESS);
else
diff --git a/drivers/video/tegra/dc/overlay.c b/drivers/video/tegra/dc/overlay.c
index ed4561217c8d..fc4b02a3a92d 100644
--- a/drivers/video/tegra/dc/overlay.c
+++ b/drivers/video/tegra/dc/overlay.c
@@ -310,11 +310,9 @@ static void tegra_overlay_flip_worker(struct work_struct *work)
dcwins[i] = tegra_dc_get_window(overlay->dc, i);
tegra_overlay_blend_reorder(&overlay->blend, dcwins);
- tegra_dc_set_dynamic_emc(dcwins, DC_N_WINDOWS);
tegra_dc_update_windows(dcwins, DC_N_WINDOWS);
tegra_dc_sync_windows(dcwins, DC_N_WINDOWS);
} else {
- tegra_dc_set_dynamic_emc(wins, nr_win);
tegra_dc_update_windows(wins, nr_win);
/* TODO: implement swapinterval here */
tegra_dc_sync_windows(wins, nr_win);
diff --git a/drivers/video/tegra/fb.c b/drivers/video/tegra/fb.c
index 4b46fdf32c13..0fdf6e0453bc 100644
--- a/drivers/video/tegra/fb.c
+++ b/drivers/video/tegra/fb.c
@@ -289,7 +289,6 @@ static int tegra_fb_pan_display(struct fb_var_screeninfo *var,
/* TODO: update virt_addr */
tegra_dc_set_default_emc(tegra_fb->win->dc);
- tegra_dc_set_dynamic_emc(&tegra_fb->win, 1);
tegra_dc_update_windows(&tegra_fb->win, 1);
tegra_dc_sync_windows(&tegra_fb->win, 1);
}
@@ -500,7 +499,6 @@ static void tegra_fb_flip_worker(struct work_struct *work)
#endif
}
- tegra_dc_set_dynamic_emc(wins, nr_win);
tegra_dc_update_windows(wins, nr_win);
/* TODO: implement swapinterval here */
tegra_dc_sync_windows(wins, nr_win);
@@ -861,7 +859,6 @@ struct tegra_fb_info *tegra_fb_register(struct nvhost_device *ndev,
if (fb_data->flags & TEGRA_FB_FLIP_ON_PROBE) {
tegra_dc_set_default_emc(tegra_fb->win->dc);
- tegra_dc_set_dynamic_emc(&tegra_fb->win, 1);
tegra_dc_update_windows(&tegra_fb->win, 1);
tegra_dc_sync_windows(&tegra_fb->win, 1);
}