diff options
author | Steven Miao <realmz6@gmail.com> | 2012-05-17 11:29:54 +0200 |
---|---|---|
committer | Bob Liu <lliubbo@gmail.com> | 2012-05-21 08:54:50 +0200 |
commit | 0fbd88ca20a68a633b565e1f5ba18ca64afb0c78 (patch) | |
tree | 0c97e9c20a71ba20750f4e51d8e0e4a07e845ddd /arch/blackfin/mach-bf609/pm.c | |
parent | blackfin: bf60x: make clock changeable in kernel menuconfig (diff) | |
download | linux-0fbd88ca20a68a633b565e1f5ba18ca64afb0c78.tar.xz linux-0fbd88ca20a68a633b565e1f5ba18ca64afb0c78.zip |
blackfin: bf60x: add wakeup source select
Support select the wakeup source for power management on bf60x.
Signed-off-by: Steven Miao <realmz6@gmail.com>
Signed-off-by: Bob Liu <lliubbo@gmail.com>
Diffstat (limited to 'arch/blackfin/mach-bf609/pm.c')
-rw-r--r-- | arch/blackfin/mach-bf609/pm.c | 83 |
1 files changed, 62 insertions, 21 deletions
diff --git a/arch/blackfin/mach-bf609/pm.c b/arch/blackfin/mach-bf609/pm.c index bbc5a79b5e22..79cdf41096c2 100644 --- a/arch/blackfin/mach-bf609/pm.c +++ b/arch/blackfin/mach-bf609/pm.c @@ -212,6 +212,65 @@ void bfin_hibernate(unsigned long mask) void bf609_cpu_pm_enter(suspend_state_t state) { int error; + unsigned long wakeup = 0; + unsigned long wakeup_pol = 0; + +#ifdef CONFIG_PM_BFIN_WAKE_PA15 + wakeup |= PA15WE; +# if CONFIG_PM_BFIN_WAKE_PA15_POL + wakeup_pol |= PA15WE; +# endif +#endif + +#ifdef CONFIG_PM_BFIN_WAKE_PB15 + wakeup |= PB15WE; +# if CONFIG_PM_BFIN_WAKE_PA15_POL + wakeup_pol |= PB15WE; +# endif +#endif + +#ifdef CONFIG_PM_BFIN_WAKE_PC15 + wakeup |= PC15WE; +# if CONFIG_PM_BFIN_WAKE_PC15_POL + wakeup_pol |= PC15WE; +# endif +#endif + +#ifdef CONFIG_PM_BFIN_WAKE_PD06 + wakeup |= PD06WE; +# if CONFIG_PM_BFIN_WAKE_PD06_POL + wakeup_pol |= PD06WE; +# endif +#endif + +#ifdef CONFIG_PM_BFIN_WAKE_PE12 + wakeup |= PE12WE; +# if CONFIG_PM_BFIN_WAKE_PE12_POL + wakeup_pol |= PE12WE; +# endif +#endif + +#ifdef CONFIG_PM_BFIN_WAKE_PG04 + wakeup |= PG04WE; +# if CONFIG_PM_BFIN_WAKE_PG04_POL + wakeup_pol |= PG04WE; +# endif +#endif + +#ifdef CONFIG_PM_BFIN_WAKE_PG13 + wakeup |= PG13WE; +# if CONFIG_PM_BFIN_WAKE_PG13_POL + wakeup_pol |= PG13WE; +# endif +#endif + +#ifdef CONFIG_PM_BFIN_WAKE_USB + wakeup |= USBWE; +# if CONFIG_PM_BFIN_WAKE_USB_POL + wakeup_pol |= USBWE; +# endif +#endif + error = irq_set_irq_wake(255, 1); if(error < 0) printk(KERN_DEBUG "Unable to get irq wake\n"); @@ -220,9 +279,9 @@ void bf609_cpu_pm_enter(suspend_state_t state) printk(KERN_DEBUG "Unable to get irq wake\n"); if (state == PM_SUSPEND_STANDBY) - bfin_deepsleep(0xffff); + bfin_deepsleep(wakeup); else { - bfin_hibernate(0xffff); + bfin_hibernate(wakeup); } } @@ -263,26 +322,8 @@ static int __init bf609_init_pm(void) { int irq; int error; - error = gpio_request(GPIO_PG4, "gpiopg4"); - if (error < 0) { - printk(KERN_DEBUG "failed to request GPIO %d, error %d\n", - GPIO_PG4, error); - } - - irq = gpio_to_irq(GPIO_PG4); - if (irq < 0) { - error = irq; - printk(KERN_DEBUG "Unable to get irq number for GPIO %d, error %d\n", - GPIO_PG4, error); - } - - printk(KERN_DEBUG "%s gpio %d irq %d\n", __func__, GPIO_PG4, irq); - - error = request_irq(irq, test_isr, IRQF_TRIGGER_FALLING | IRQF_NO_SUSPEND, "gpiopg4", NULL); - if(error < 0) - printk(KERN_DEBUG "Unable to get irq\n"); -#if 1 +#if CONFIG_PM_BFIN_WAKE_PE12 irq = gpio_to_irq(GPIO_PE12); if (irq < 0) { error = irq; |