summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFred Fan <r01011@freescale.com>2008-04-25 10:38:55 +0800
committerDaniel Schaeffer <daniel.schaeffer@timesys.com>2008-08-25 15:21:03 -0400
commit5c672d5af533e0da596177e3716f60266e2991a9 (patch)
tree212497aff5b90fdd3f8abe4c79fce25aa29746d7
parent84596df6e8b8bc7976c2cbcba4249bdbcd3eca91 (diff)
ENGR00074262 Fix gpio line interrupt can not work for wakeup interrupt
register gpio sysdev after avic sysdev Signed-off-by: Fred Fan <r01011@freescale.com> (cherry picked from commit 3ff35c4ccb2b6d642d42176b429fddd7bd0bef68)
-rw-r--r--arch/arm/plat-mxc/gpio.c39
-rw-r--r--drivers/mxc/pmic/mc13783/pmic_power.c2
2 files changed, 20 insertions, 21 deletions
diff --git a/arch/arm/plat-mxc/gpio.c b/arch/arm/plat-mxc/gpio.c
index d852ad53f051..30ece543077a 100644
--- a/arch/arm/plat-mxc/gpio.c
+++ b/arch/arm/plat-mxc/gpio.c
@@ -490,10 +490,27 @@ static int gpio_set_wake_irq(u32 irq, u32 enable)
if (check_gpio(gpio) < 0)
return -ENODEV;
- if (enable)
+ if (enable) {
port->suspend_wakeup |= (1 << gpio_idx);
- else
+#ifdef MXC_GPIO_SPLIT_IRQ_2
+ if (gpio_idx < 16)
+ enable_irq_wake(port->irq_0_15);
+ else
+ enable_irq_wake(port->irq_16_31);
+#else
+ enable_irq_wake(port->irq);
+#endif
+ } else {
port->suspend_wakeup &= ~(1 << gpio_idx);
+#ifdef MXC_GPIO_SPLIT_IRQ_2
+ if (gpio_idx < 16)
+ disable_irq_wake(port->irq_0_15);
+ else
+ disable_irq_wake(port->irq_16_31);
+#else
+ disable_irq_wake(port->irq);
+#endif
+ }
return 0;
}
@@ -595,15 +612,6 @@ static int mxc_gpio_suspend(struct sys_device *dev, pm_message_t mesg)
}
port->saved_wakeup = __raw_readl(imr_reg);
__raw_writel(port->suspend_wakeup, imr_reg);
-#ifdef MXC_GPIO_SPLIT_IRQ_2
- if (port->suspend_wakeup & 0xFFFF)
- enable_irq_wake(port->irq_0_15);
- if (port->suspend_wakeup & 0xFFFF0000)
- enable_irq_wake(port->irq_16_31);
-#else
- if (port->suspend_wakeup)
- enable_irq_wake(port->irq);
-#endif
}
return 0;
@@ -632,15 +640,6 @@ static int mxc_gpio_resume(struct sys_device *dev)
imr_reg = port->base + GPIO_IMR;
__raw_writel(port->saved_wakeup, imr_reg);
-#ifdef MXC_GPIO_SPLIT_IRQ_2
- if (port->suspend_wakeup & 0xFFFF)
- disable_irq_wake(port->irq_0_15);
- if (port->suspend_wakeup & 0xFFFF0000)
- disable_irq_wake(port->irq_16_31);
-#else
- if (port->suspend_wakeup)
- disable_irq_wake(port->irq);
-#endif
}
return 0;
diff --git a/drivers/mxc/pmic/mc13783/pmic_power.c b/drivers/mxc/pmic/mc13783/pmic_power.c
index f2f5890ed18a..7691c9fb2a8f 100644
--- a/drivers/mxc/pmic/mc13783/pmic_power.c
+++ b/drivers/mxc/pmic/mc13783/pmic_power.c
@@ -3100,7 +3100,7 @@ static int pmic_power_probe(struct platform_device *pdev)
set_irq_wake(irq, 1);
-done:
+ done:
pr_info(KERN_INFO "PMIC Power successfully probed\n");
return 0;
}