diff options
author | Xin Xie <xxie@nvidia.com> | 2011-06-03 20:47:14 -0700 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:47:11 -0800 |
commit | d21b89daf5e816d00855133f5e31cd40ce104d9b (patch) | |
tree | f0d6b5ce3ced33c0c7641016bf6edc4142b50ffc /drivers/video/tegra/fb.c | |
parent | af504e4dbb71172136b2db26b2911da57bffc72e (diff) |
tegra: dc: set EMC clock dynamically
If the screen is idle (no POST for some time), reduce the DC EMC clock
according the windows size. If external display connected, the EMC clock
will not be reduced.
BUG 828306
Original-Change-Id: I6fb62ce6baf3380737c76b71f16e38ad6465a667
Reviewed-on: http://git-master/r/37106
Reviewed-by: Niket Sirsi <nsirsi@nvidia.com>
Tested-by: Niket Sirsi <nsirsi@nvidia.com>
Rebase-Id: Re2b2c8b1a57c2a04b61c338b0b50e41d8c11ad65
Diffstat (limited to 'drivers/video/tegra/fb.c')
-rw-r--r-- | drivers/video/tegra/fb.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/video/tegra/fb.c b/drivers/video/tegra/fb.c index 913feeb49796..2954661a4064 100644 --- a/drivers/video/tegra/fb.c +++ b/drivers/video/tegra/fb.c @@ -279,6 +279,8 @@ static int tegra_fb_pan_display(struct fb_var_screeninfo *var, tegra_fb->win->phys_addr = addr; /* 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); } @@ -489,6 +491,7 @@ 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); @@ -546,6 +549,12 @@ static int tegra_fb_flip(struct tegra_fb_info *tegra_fb, queue_work(tegra_fb->flip_wq, &data->work); + /* + * Before the queued flip_wq get scheduled, we set the EMC clock to the + * default value in order to do FLIP without glitch. + */ + tegra_dc_set_default_emc(tegra_fb->win->dc); + args->post_syncpt_val = syncpt_max; args->post_syncpt_id = tegra_dc_get_syncpt_id(tegra_fb->win->dc); @@ -840,6 +849,8 @@ struct tegra_fb_info *tegra_fb_register(struct nvhost_device *ndev, dev_info(&ndev->dev, "probed\n"); 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); } |