msm: mdss: ensure rotator clocks on for entire rotator session

Rotator clock and BW votes are updated on each rotator request
during same session. This is not required because rotator source
and destination does not change during session. Ensure that
rotator clocks are on throughout session such that extra overhead
of rpm calls are avoided.

Change-Id: I7a74aa2b8d8556b1d8ee4c52f871b9ebb149764a
Signed-off-by: Jayant Shekhar <jshekhar@codeaurora.org>
This commit is contained in:
Jayant Shekhar 2015-12-21 10:21:16 +05:30 committed by David Keitel
parent f7bad5e06a
commit f63539528d

View file

@ -1841,7 +1841,6 @@ static void mdss_rotator_wq_handler(struct work_struct *work)
return; return;
} }
mdss_rotator_clk_ctrl(rot_mgr, true);
hw = mdss_rotator_get_hw_resource(entry->queue, entry); hw = mdss_rotator_get_hw_resource(entry->queue, entry);
if (!hw) { if (!hw) {
pr_err("no hw for the queue\n"); pr_err("no hw for the queue\n");
@ -1865,7 +1864,6 @@ static void mdss_rotator_wq_handler(struct work_struct *work)
get_hw_res_err: get_hw_res_err:
mdss_rotator_signal_output(entry); mdss_rotator_signal_output(entry);
mdss_rotator_clk_ctrl(rot_mgr, false);
mdss_rotator_release_entry(rot_mgr, entry); mdss_rotator_release_entry(rot_mgr, entry);
atomic_dec(&request->pending_count); atomic_dec(&request->pending_count);
} }
@ -1962,6 +1960,7 @@ static int mdss_rotator_open_session(struct mdss_rot_mgr *mgr,
goto resource_err; goto resource_err;
} }
mdss_rotator_clk_ctrl(rot_mgr, true);
ret = mdss_rotator_update_perf(mgr); ret = mdss_rotator_update_perf(mgr);
if (ret) { if (ret) {
pr_err("fail to open session, not enough clk/bw\n"); pr_err("fail to open session, not enough clk/bw\n");
@ -1974,6 +1973,7 @@ static int mdss_rotator_open_session(struct mdss_rot_mgr *mgr,
goto done; goto done;
perf_err: perf_err:
mdss_rotator_clk_ctrl(rot_mgr, false);
mdss_rotator_resource_ctrl(mgr, false); mdss_rotator_resource_ctrl(mgr, false);
resource_err: resource_err:
mutex_lock(&private->perf_lock); mutex_lock(&private->perf_lock);
@ -2027,6 +2027,7 @@ static int mdss_rotator_close_session(struct mdss_rot_mgr *mgr,
devm_kfree(&mgr->pdev->dev, perf->work_distribution); devm_kfree(&mgr->pdev->dev, perf->work_distribution);
devm_kfree(&mgr->pdev->dev, perf); devm_kfree(&mgr->pdev->dev, perf);
mdss_rotator_update_perf(mgr); mdss_rotator_update_perf(mgr);
mdss_rotator_clk_ctrl(rot_mgr, false);
done: done:
pr_debug("Closed session id:%u", id); pr_debug("Closed session id:%u", id);
ATRACE_END(__func__); ATRACE_END(__func__);