summaryrefslogtreecommitdiff
path: root/drivers/media/video
diff options
context:
space:
mode:
authorPrashant Gaikwad <pgaikwad@nvidia.com>2011-11-18 14:26:33 +0530
committerRohan Somvanshi <rsomvanshi@nvidia.com>2012-01-10 08:22:52 -0800
commitc79f10016290facfd1a79ad9504be422144c83ed (patch)
treeb86403d6b32d99fba16ae1654d236bdbb1e76ef2 /drivers/media/video
parent58f413029677a7130bda646111b07fc75dca8951 (diff)
media: video: tegra: set emc clk rate
Max EMC rate is required only for video. Audio does not need max EMC rate hence set EMC rate to min if no video. Bug 869840 Reviewed-on: http://git-master/r/65460 (cherry picked from commit e256178831e5e6786ecd2c816c66dceec3d29b1a) Change-Id: I185906a02e8afad1ca456747f87a81b38ad9d548 Signed-off-by: Bharat Nihalani <bnihalani@nvidia.com> Reviewed-on: http://git-master/r/73704 Reviewed-by: Automatic_Commit_Validation_User (cherry picked from commit f38c3c1ce7c81b8045f2789850704c0d764827fa) Reviewed-on: http://git-master/r/73965 Reviewed-by: Varun Wadekar <vwadekar@nvidia.com> Tested-by: Varun Wadekar <vwadekar@nvidia.com>
Diffstat (limited to 'drivers/media/video')
-rw-r--r--drivers/media/video/tegra/avp/avp_svc.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/media/video/tegra/avp/avp_svc.c b/drivers/media/video/tegra/avp/avp_svc.c
index a05742a78ffa..6df1872ff1e8 100644
--- a/drivers/media/video/tegra/avp/avp_svc.c
+++ b/drivers/media/video/tegra/avp/avp_svc.c
@@ -350,6 +350,7 @@ static void do_svc_module_clock(struct avp_svc_info *avp_svc,
struct svc_common_resp resp;
struct avp_module *mod;
struct avp_clk *aclk;
+ unsigned long emc_rate;
mod = find_avp_module(avp_svc, msg->module_id);
if (!mod) {
@@ -359,11 +360,17 @@ static void do_svc_module_clock(struct avp_svc_info *avp_svc,
goto send_response;
}
+ if (msg->module_id == AVP_MODULE_ID_VDE)
+ emc_rate = ULONG_MAX;
+ else
+ emc_rate = 0;
+
mutex_lock(&avp_svc->clk_lock);
aclk = &avp_svc->clks[mod->clk_req];
if (msg->enable) {
if (aclk->refcnt++ == 0) {
clk_enable(avp_svc->emcclk);
+ clk_set_rate(avp_svc->emcclk, emc_rate);
clk_enable(avp_svc->sclk);
clk_enable(aclk->clk);
}
@@ -375,6 +382,7 @@ static void do_svc_module_clock(struct avp_svc_info *avp_svc,
clk_disable(aclk->clk);
clk_set_rate(avp_svc->sclk, 0);
clk_disable(avp_svc->sclk);
+ clk_set_rate(avp_svc->emcclk, 0);
clk_disable(avp_svc->emcclk);
}
}
@@ -768,6 +776,7 @@ void avp_svc_stop(struct avp_svc_info *avp_svc)
/* sclk/emcclk was enabled once for every clock */
clk_set_rate(avp_svc->sclk, 0);
clk_disable(avp_svc->sclk);
+ clk_set_rate(avp_svc->emcclk, 0);
clk_disable(avp_svc->emcclk);
}
aclk->refcnt = 0;