diff options
author | Fred Fan <r01011@freescale.com> | 2008-04-25 10:38:55 +0800 |
---|---|---|
committer | Daniel Schaeffer <daniel.schaeffer@timesys.com> | 2008-08-25 15:21:03 -0400 |
commit | 5c672d5af533e0da596177e3716f60266e2991a9 (patch) | |
tree | 212497aff5b90fdd3f8abe4c79fce25aa29746d7 | |
parent | 84596df6e8b8bc7976c2cbcba4249bdbcd3eca91 (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.c | 39 | ||||
-rw-r--r-- | drivers/mxc/pmic/mc13783/pmic_power.c | 2 |
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; } |