summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmit Nischal <anischal@codeaurora.org>2017-01-12 19:29:17 +0530
committerAmit Nischal <anischal@codeaurora.org>2017-01-12 19:29:17 +0530
commita7602b3f5f654a07e0963c90aaa0d9c5b992b019 (patch)
tree6f680a5637f26185f1d111f4cb847d30debeabeb
parent2dc96b1cbbdcf5aef3780696708012d55fec57f2 (diff)
clk: qcom: Fix for rate request to RPM during handoff
For all rpm clocks, max rate request is going to RPM during handoff which always shows max requested rate value from APSS so fix the same. Change-Id: I4f184ea053fc1a40830eb9f555c24fdf17ba3fa1 Signed-off-by: Amit Nischal <anischal@codeaurora.org>
-rw-r--r--drivers/clk/qcom/clk-smd-rpm.c29
1 files changed, 4 insertions, 25 deletions
diff --git a/drivers/clk/qcom/clk-smd-rpm.c b/drivers/clk/qcom/clk-smd-rpm.c
index 79db93ac5ae1..095530e72b78 100644
--- a/drivers/clk/qcom/clk-smd-rpm.c
+++ b/drivers/clk/qcom/clk-smd-rpm.c
@@ -185,28 +185,7 @@ static int clk_smd_rpm_prepare(struct clk_hw *hw);
static int clk_smd_rpm_handoff(struct clk_hw *hw)
{
- int ret = 0;
- uint32_t value = cpu_to_le32(INT_MAX);
- struct clk_smd_rpm *r = to_clk_smd_rpm(hw);
- struct msm_rpm_kvp req = {
- .key = cpu_to_le32(r->rpm_key),
- .data = (void *)&value,
- .length = sizeof(value),
- };
-
- ret = msm_rpm_send_message(QCOM_SMD_RPM_ACTIVE_STATE, r->rpm_res_type,
- r->rpm_clk_id, &req, 1);
- if (ret)
- return ret;
-
- ret = msm_rpm_send_message(QCOM_SMD_RPM_SLEEP_STATE, r->rpm_res_type,
- r->rpm_clk_id, &req, 1);
- if (ret)
- return ret;
-
- ret = clk_smd_rpm_prepare(hw);
-
- return ret;
+ return clk_smd_rpm_prepare(hw);
}
static int clk_smd_rpm_set_rate_active(struct clk_smd_rpm *r,
@@ -282,12 +261,12 @@ static int clk_smd_rpm_prepare(struct clk_hw *hw)
mutex_lock(&rpm_smd_clk_lock);
+ to_active_sleep(r, r->rate, &this_rate, &this_sleep_rate);
+
/* Don't send requests to the RPM if the rate has not been set. */
- if (!r->rate)
+ if (this_rate == 0)
goto out;
- to_active_sleep(r, r->rate, &this_rate, &this_sleep_rate);
-
/* Take peer clock's rate into account only if it's enabled. */
if (peer->enabled)
to_active_sleep(peer, peer->rate,