msm: rpm: Move RPM to CPU0 IRQ handling into RPM driver
RPM driver is probably the right place to handle this interrupt
than pm-8x60 driver. Also, pass the wake up irq as part of
msm_rpm_platform_data instead of calling a separate API from the
boards file.
Change-Id: If42b7b821089de23f216d5b71447833be39789ce
Signed-off-by: Praveen Chidambaram <pchidamb@codeaurora.org>
diff --git a/arch/arm/mach-msm/rpm.c b/arch/arm/mach-msm/rpm.c
index b0fa3d2..44e50dd 100644
--- a/arch/arm/mach-msm/rpm.c
+++ b/arch/arm/mach-msm/rpm.c
@@ -54,7 +54,6 @@
static uint32_t msm_rpm_sel_mask_size;
static struct msm_rpm_platform_data msm_rpm_data;
-
static DEFINE_MUTEX(msm_rpm_mutex);
static DEFINE_SPINLOCK(msm_rpm_lock);
static DEFINE_SPINLOCK(msm_rpm_irq_lock);
@@ -936,9 +935,16 @@
}
}
+static irqreturn_t msm_pm_rpm_wakeup_interrupt(int irq, void *dev_id)
+{
+ if (dev_id != &msm_pm_rpm_wakeup_interrupt)
+ return IRQ_NONE;
+
+ return IRQ_HANDLED;
+}
+
int __init msm_rpm_init(struct msm_rpm_platform_data *data)
{
- unsigned int irq;
int rc;
memcpy(&msm_rpm_data, data, sizeof(struct msm_rpm_platform_data));
@@ -971,21 +977,19 @@
msm_rpm_write(MSM_RPM_PAGE_CTRL,
target_ctrl(MSM_RPM_CTRL_VERSION_BUILD), msm_rpm_data.ver[2]);
- irq = data->irq_ack;
-
- rc = request_irq(irq, msm_rpm_ack_interrupt,
+ rc = request_irq(data->irq_ack, msm_rpm_ack_interrupt,
IRQF_TRIGGER_RISING | IRQF_NO_SUSPEND,
"rpm_drv", msm_rpm_ack_interrupt);
if (rc) {
pr_err("%s: failed to request irq %d: %d\n",
- __func__, irq, rc);
+ __func__, data->irq_ack, rc);
return rc;
}
- rc = irq_set_irq_wake(irq, 1);
+ rc = irq_set_irq_wake(data->irq_ack, 1);
if (rc) {
pr_err("%s: failed to set wakeup irq %u: %d\n",
- __func__, irq, rc);
+ __func__, data->irq_ack, rc);
return rc;
}
@@ -997,6 +1001,22 @@
return rc;
}
+ rc = request_irq(data->irq_wakeup,
+ msm_pm_rpm_wakeup_interrupt, IRQF_TRIGGER_RISING,
+ "pm_drv", msm_pm_rpm_wakeup_interrupt);
+ if (rc) {
+ pr_err("%s: failed to request irq %u: %d\n",
+ __func__, data->irq_wakeup, rc);
+ return rc;
+ }
+
+ rc = irq_set_irq_wake(data->irq_wakeup, 1);
+ if (rc) {
+ pr_err("%s: failed to set wakeup irq %u: %d\n",
+ __func__, data->irq_wakeup, rc);
+ return rc;
+ }
+
msm_rpm_populate_map(data);
return platform_driver_register(&msm_rpm_platform_driver);