From 7feb24c911f64c9c950c364a44dab1972d0e4ef3 Mon Sep 17 00:00:00 2001 From: shawn joo Date: Mon, 13 Feb 2012 14:30:23 +0900 Subject: 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 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 Tested-by: Simone Willett --- arch/arm/mach-tegra/baseband-xmm-power.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'arch/arm/mach-tegra/baseband-xmm-power.c') 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", -- cgit v1.2.3