diff options
Diffstat (limited to 'drivers/media/video/tegra/avp/avp_svc.c')
-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; |