summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorshawn joo <sjoo@nvidia.com>2012-02-13 14:30:23 +0900
committerSimone Willett <swillett@nvidia.com>2012-03-07 21:28:32 -0800
commit7feb24c911f64c9c950c364a44dab1972d0e4ef3 (patch)
tree9e04873ceeec4648e93c8fbc935175da81a5c4b7 /arch
parentbe971c964a63493e4c7f42015d6681a44b7d54b1 (diff)
arm: tegra: xmm: change irq handler to irq thread
since irq function has printk and long context. change the handler to irq thread for stable running. Bug 937413 Signed-off-by: shawn joo <sjoo@nvidia.com> Reviewed-on: http://git-master/r/83350 (cherry picked from commit 1bf117669ed8b4fdb854074aef26d1a568544616) Change-Id: Ib760e19903b7e9975a1ac7b8275537c75830764d Reviewed-on: http://git-master/r/87633 Reviewed-by: Simone Willett <swillett@nvidia.com> Tested-by: Simone Willett <swillett@nvidia.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-tegra/baseband-xmm-power.c15
-rw-r--r--arch/arm/mach-tegra/baseband-xmm-power2.c22
2 files changed, 17 insertions, 20 deletions
diff --git a/arch/arm/mach-tegra/baseband-xmm-power.c b/arch/arm/mach-tegra/baseband-xmm-power.c
index 13a904dcf40d..51118f7a1c0f 100644
--- a/arch/arm/mach-tegra/baseband-xmm-power.c
+++ b/arch/arm/mach-tegra/baseband-xmm-power.c
@@ -376,13 +376,14 @@ irqreturn_t baseband_xmm_power_ipc_ap_wake_irq(int irq, void *dev_id)
{
int value;
- pr_debug("%s\n", __func__);
+ value = gpio_get_value(baseband_power_driver_data->
+ modem.xmm.ipc_ap_wake);
+
+ pr_debug("%s g(%d), wake_st(%d)\n", __func__, value, ipc_ap_wake_state);
if (ipc_ap_wake_state < IPC_AP_WAKE_IRQ_READY) {
pr_err("%s - spurious irq\n", __func__);
} else if (ipc_ap_wake_state == IPC_AP_WAKE_IRQ_READY) {
- value = gpio_get_value(baseband_power_driver_data->
- modem.xmm.ipc_ap_wake);
if (!value) {
pr_debug("%s - IPC_AP_WAKE_INIT1"
" - got falling edge\n",
@@ -397,8 +398,6 @@ irqreturn_t baseband_xmm_power_ipc_ap_wake_irq(int irq, void *dev_id)
__func__);
}
} else if (ipc_ap_wake_state == IPC_AP_WAKE_INIT1) {
- value = gpio_get_value(baseband_power_driver_data->
- modem.xmm.ipc_ap_wake);
if (!value) {
pr_debug("%s - IPC_AP_WAKE_INIT2"
" - wait for rising edge\n",
@@ -413,8 +412,6 @@ irqreturn_t baseband_xmm_power_ipc_ap_wake_irq(int irq, void *dev_id)
queue_work(workqueue, &init2_work);
}
} else {
- value = gpio_get_value(baseband_power_driver_data->
- modem.xmm.ipc_ap_wake);
if (!value) {
pr_debug("%s - falling\n", __func__);
/* [ver < 1130] gpio protocol falling edge */
@@ -827,7 +824,9 @@ static int baseband_xmm_power_driver_probe(struct platform_device *device)
if (modem_flash && modem_pm) {
pr_debug("%s: request_irq IPC_AP_WAKE_IRQ\n", __func__);
ipc_ap_wake_state = IPC_AP_WAKE_UNINIT;
- err = request_irq(gpio_to_irq(data->modem.xmm.ipc_ap_wake),
+ err = request_threaded_irq(
+ gpio_to_irq(data->modem.xmm.ipc_ap_wake),
+ NULL,
baseband_xmm_power_ipc_ap_wake_irq,
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
"IPC_AP_WAKE_IRQ",
diff --git a/arch/arm/mach-tegra/baseband-xmm-power2.c b/arch/arm/mach-tegra/baseband-xmm-power2.c
index 77ba073d751c..4295b3958202 100644
--- a/arch/arm/mach-tegra/baseband-xmm-power2.c
+++ b/arch/arm/mach-tegra/baseband-xmm-power2.c
@@ -73,12 +73,13 @@ static irqreturn_t baseband_xmm_power2_ver_lt_1130_ipc_ap_wake_irq2
if (!baseband_power2_driver_data)
return IRQ_HANDLED;
+ value = gpio_get_value(baseband_power2_driver_data->
+ modem.xmm.ipc_ap_wake);
+
/* IPC_AP_WAKE state machine */
if (ipc_ap_wake_state < IPC_AP_WAKE_IRQ_READY) {
pr_err("%s - spurious irq\n", __func__);
} else if (ipc_ap_wake_state == IPC_AP_WAKE_IRQ_READY) {
- value = gpio_get_value(baseband_power2_driver_data->
- modem.xmm.ipc_ap_wake);
if (!value) {
pr_debug("%s - IPC_AP_WAKE_INIT1"
" - got falling edge\n",
@@ -96,8 +97,6 @@ static irqreturn_t baseband_xmm_power2_ver_lt_1130_ipc_ap_wake_irq2
__func__);
}
} else if (ipc_ap_wake_state == IPC_AP_WAKE_INIT1) {
- value = gpio_get_value(baseband_power2_driver_data->
- modem.xmm.ipc_ap_wake);
if (!value) {
pr_debug("%s - IPC_AP_WAKE_INIT2"
" - wait for rising edge\n",
@@ -115,8 +114,6 @@ static irqreturn_t baseband_xmm_power2_ver_lt_1130_ipc_ap_wake_irq2
baseband_xmm_power2_work);
}
} else {
- value = gpio_get_value(baseband_power2_driver_data->
- modem.xmm.ipc_ap_wake);
if (!value) {
pr_debug("%s - falling\n", __func__);
ipc_ap_wake_state = IPC_AP_WAKE_L;
@@ -141,12 +138,13 @@ static irqreturn_t baseband_xmm_power2_ver_ge_1130_ipc_ap_wake_irq2
if (!baseband_power2_driver_data)
return IRQ_HANDLED;
+ value = gpio_get_value(baseband_power2_driver_data->
+ modem.xmm.ipc_ap_wake);
+
/* IPC_AP_WAKE state machine */
if (ipc_ap_wake_state < IPC_AP_WAKE_IRQ_READY) {
pr_err("%s - spurious irq\n", __func__);
} else if (ipc_ap_wake_state == IPC_AP_WAKE_IRQ_READY) {
- value = gpio_get_value(baseband_power2_driver_data->
- modem.xmm.ipc_ap_wake);
if (!value) {
pr_debug("%s - IPC_AP_WAKE_INIT1"
" - got falling edge\n",
@@ -164,8 +162,6 @@ static irqreturn_t baseband_xmm_power2_ver_ge_1130_ipc_ap_wake_irq2
__func__);
}
} else {
- value = gpio_get_value(baseband_power2_driver_data->
- modem.xmm.ipc_ap_wake);
if (!value) {
pr_debug("%s - falling\n", __func__);
ipc_ap_wake_state = IPC_AP_WAKE_L;
@@ -476,8 +472,10 @@ static void baseband_xmm_power2_work_func(struct work_struct *work)
pr_debug("BBXMM_WORK_INIT\n");
/* request baseband irq(s) */
ipc_ap_wake_state = IPC_AP_WAKE_UNINIT;
- err = request_irq(gpio_to_irq(baseband_power2_driver_data
- ->modem.xmm.ipc_ap_wake),
+ err = request_threaded_irq(
+ gpio_to_irq(baseband_power2_driver_data->
+ modem.xmm.ipc_ap_wake),
+ NULL,
(modem_ver < XMM_MODEM_VER_1130)
? baseband_xmm_power2_ver_lt_1130_ipc_ap_wake_irq2
: baseband_xmm_power2_ver_ge_1130_ipc_ap_wake_irq2,