msm: clock-rpm: Add support for the new RPM SMD API.
Starting with the MSM Copper, the RPM driver has a new
communication method with the RPM that uses SMD as its
transport layer. Add support for the new RPM APIs.
Change-Id: I63413984db8ecd262abcfa4065f9852dce646a7f
Signed-off-by: Vikram Mulukutla <markivx@codeaurora.org>
diff --git a/arch/arm/mach-msm/clock-rpm.c b/arch/arm/mach-msm/clock-rpm.c
index 616dcdc..e0707fc 100644
--- a/arch/arm/mach-msm/clock-rpm.c
+++ b/arch/arm/mach-msm/clock-rpm.c
@@ -54,6 +54,25 @@
return (rc < 0) ? rc : iv.value * 1000;
}
+#define RPM_SMD_KEY_CLOCK_SET_RATE 0x007A484B
+
+static int clk_rpmrs_set_rate_smd(struct rpm_clk *r, uint32_t value,
+ uint32_t context, int noirq)
+{
+ struct msm_rpm_kvp kvp = {
+ .key = RPM_SMD_KEY_CLOCK_SET_RATE,
+ .data = (void *)&value,
+ .length = sizeof(value),
+ };
+
+ if (noirq)
+ return msm_rpm_send_message_noirq(context,
+ r->rpm_res_type, r->rpm_clk_id, &kvp, 1);
+ else
+ return msm_rpm_send_message(context, r->rpm_res_type,
+ r->rpm_clk_id, &kvp, 1);
+}
+
struct clk_rpmrs_data {
int (*set_rate_fn)(struct rpm_clk *r, uint32_t value,
uint32_t context, int noirq);
@@ -69,6 +88,12 @@
.ctx_sleep_id = MSM_RPM_CTX_SET_SLEEP,
};
+struct clk_rpmrs_data clk_rpmrs_data_smd = {
+ .set_rate_fn = clk_rpmrs_set_rate_smd,
+ .ctx_active_id = MSM_RPM_CTX_ACTIVE_SET,
+ .ctx_sleep_id = MSM_RPM_CTX_SLEEP_SET,
+};
+
static DEFINE_SPINLOCK(rpm_clock_lock);
static int rpm_clk_enable(struct clk *clk)