summaryrefslogtreecommitdiff
path: root/drivers/media/video/tegra/avp/avp_svc.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/tegra/avp/avp_svc.c')
-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;