Blackfin arch: Functional power management support
Merge VR Regulator Hibernate wakeups into set_irq_wake for internal interrupts. Signed-off-by: Michael Hennerich <michael.hennerich@analog.com> Signed-off-by: Bryan Wu <cooloney@kernel.org>
This commit is contained in:
Родитель
5400c5aa2d
Коммит
4a88d0ce49
|
@ -933,13 +933,6 @@ endchoice
|
|||
comment "Possible Suspend Mem / Hibernate Wake-Up Sources"
|
||||
depends on PM
|
||||
|
||||
config PM_BFIN_WAKE_RTC
|
||||
bool "Allow Wake-Up from RESET and on-chip RTC"
|
||||
depends on PM
|
||||
default n
|
||||
help
|
||||
Enable RTC Wake-Up (Voltage Regulator Power-Up)
|
||||
|
||||
config PM_BFIN_WAKE_PH6
|
||||
bool "Allow Wake-Up from on-chip PHY or PH6 GP"
|
||||
depends on PM && (BF52x || BF534 || BF536 || BF537)
|
||||
|
@ -947,41 +940,12 @@ config PM_BFIN_WAKE_PH6
|
|||
help
|
||||
Enable PHY and PH6 GP Wake-Up (Voltage Regulator Power-Up)
|
||||
|
||||
config PM_BFIN_WAKE_CAN
|
||||
bool "Allow Wake-Up from on-chip CAN0/1"
|
||||
depends on PM && (BF54x || BF534 || BF536 || BF537)
|
||||
default n
|
||||
help
|
||||
Enable CAN0/1 Wake-Up (Voltage Regulator Power-Up)
|
||||
|
||||
config PM_BFIN_WAKE_GP
|
||||
bool "Allow Wake-Up from GPIOs"
|
||||
depends on PM && BF54x
|
||||
default n
|
||||
help
|
||||
Enable General-Purpose Wake-Up (Voltage Regulator Power-Up)
|
||||
|
||||
config PM_BFIN_WAKE_USB
|
||||
bool "Allow Wake-Up from on-chip USB"
|
||||
depends on PM && (BF54x || BF52x)
|
||||
default n
|
||||
help
|
||||
Enable USB Wake-Up (Voltage Regulator Power-Up)
|
||||
|
||||
config PM_BFIN_WAKE_KEYPAD
|
||||
bool "Allow Wake-Up from on-chip Keypad"
|
||||
depends on PM && BF54x
|
||||
default n
|
||||
help
|
||||
Enable Keypad Wake-Up (Voltage Regulator Power-Up)
|
||||
|
||||
config PM_BFIN_WAKE_ROTARY
|
||||
bool "Allow Wake-Up from on-chip Rotary"
|
||||
depends on PM && BF54x
|
||||
default n
|
||||
help
|
||||
Enable Rotary Wake-Up (Voltage Regulator Power-Up)
|
||||
|
||||
endmenu
|
||||
|
||||
menu "CPU Frequency scaling"
|
||||
|
|
|
@ -71,6 +71,7 @@ atomic_t num_spurious;
|
|||
|
||||
#ifdef CONFIG_PM
|
||||
unsigned long bfin_sic_iwr[3]; /* Up to 3 SIC_IWRx registers */
|
||||
unsigned vr_wakeup;
|
||||
#endif
|
||||
|
||||
struct ivgx {
|
||||
|
@ -184,17 +185,56 @@ static void bfin_internal_unmask_irq(unsigned int irq)
|
|||
#ifdef CONFIG_PM
|
||||
int bfin_internal_set_wake(unsigned int irq, unsigned int state)
|
||||
{
|
||||
unsigned bank, bit;
|
||||
unsigned bank, bit, wakeup = 0;
|
||||
unsigned long flags;
|
||||
bank = SIC_SYSIRQ(irq) / 32;
|
||||
bit = SIC_SYSIRQ(irq) % 32;
|
||||
|
||||
switch (irq) {
|
||||
#ifdef IRQ_RTC
|
||||
case IRQ_RTC:
|
||||
wakeup |= WAKE;
|
||||
break;
|
||||
#endif
|
||||
#ifdef IRQ_CAN0_RX
|
||||
case IRQ_CAN0_RX:
|
||||
wakeup |= CANWE;
|
||||
break;
|
||||
#endif
|
||||
#ifdef IRQ_CAN1_RX
|
||||
case IRQ_CAN1_RX:
|
||||
wakeup |= CANWE;
|
||||
break;
|
||||
#endif
|
||||
#ifdef IRQ_USB_INT0
|
||||
case IRQ_USB_INT0:
|
||||
wakeup |= USBWE;
|
||||
break;
|
||||
#endif
|
||||
#ifdef IRQ_KEY
|
||||
case IRQ_KEY:
|
||||
wakeup |= KPADWE;
|
||||
break;
|
||||
#endif
|
||||
#ifdef IRQ_CNT
|
||||
case IRQ_CNT:
|
||||
wakeup |= ROTWE;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
if (state)
|
||||
if (state) {
|
||||
bfin_sic_iwr[bank] |= (1 << bit);
|
||||
else
|
||||
vr_wakeup |= wakeup;
|
||||
|
||||
} else {
|
||||
bfin_sic_iwr[bank] &= ~(1 << bit);
|
||||
vr_wakeup &= ~wakeup;
|
||||
}
|
||||
|
||||
local_irq_restore(flags);
|
||||
|
||||
|
|
|
@ -229,28 +229,12 @@ int bfin_pm_suspend_mem_enter(void)
|
|||
wakeup = bfin_read_VR_CTL() & ~FREQ;
|
||||
wakeup |= SCKELOW;
|
||||
|
||||
/* FIXME: merge this somehow with set_irq_wake */
|
||||
#ifdef CONFIG_PM_BFIN_WAKE_RTC
|
||||
wakeup |= WAKE;
|
||||
#endif
|
||||
#ifdef CONFIG_PM_BFIN_WAKE_PH6
|
||||
wakeup |= PHYWE;
|
||||
#endif
|
||||
#ifdef CONFIG_PM_BFIN_WAKE_CAN
|
||||
wakeup |= CANWE;
|
||||
#endif
|
||||
#ifdef CONFIG_PM_BFIN_WAKE_GP
|
||||
wakeup |= GPWE;
|
||||
#endif
|
||||
#ifdef CONFIG_PM_BFIN_WAKE_USB
|
||||
wakeup |= USBWE;
|
||||
#endif
|
||||
#ifdef CONFIG_PM_BFIN_WAKE_KEYPAD
|
||||
wakeup |= KPADWE;
|
||||
#endif
|
||||
#ifdef CONFIG_PM_BFIN_WAKE_ROTARY
|
||||
wakeup |= ROTWE;
|
||||
#endif
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
|
@ -268,7 +252,7 @@ int bfin_pm_suspend_mem_enter(void)
|
|||
icache_disable();
|
||||
bf53x_suspend_l1_mem(memptr);
|
||||
|
||||
do_hibernate(wakeup); /* Goodbye */
|
||||
do_hibernate(wakeup | vr_wakeup); /* Goodbye */
|
||||
|
||||
bf53x_resume_l1_mem(memptr);
|
||||
|
||||
|
|
|
@ -113,6 +113,7 @@ extern const char bfin_board_name[];
|
|||
extern unsigned long wall_jiffies;
|
||||
|
||||
extern unsigned long bfin_sic_iwr[];
|
||||
extern unsigned vr_wakeup;
|
||||
extern u16 _bfin_swrst; /* shadow for Software Reset Register (SWRST) */
|
||||
extern struct file_operations dpmc_fops;
|
||||
extern unsigned long _ramstart, _ramend, _rambase;
|
||||
|
|
Загрузка…
Ссылка в новой задаче