diff options
author | Prashant Gaikwad <pgaikwad@nvidia.com> | 2011-11-18 14:26:33 +0530 |
---|---|---|
committer | Rohan Somvanshi <rsomvanshi@nvidia.com> | 2012-01-10 08:22:52 -0800 |
commit | c79f10016290facfd1a79ad9504be422144c83ed (patch) | |
tree | b86403d6b32d99fba16ae1654d236bdbb1e76ef2 /drivers/media/video | |
parent | 58f413029677a7130bda646111b07fc75dca8951 (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.c | 9 |
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; |