[ARM] pxa: allow dynamic enable/disable of GPIO wakeup for pxa{25x,27x}
Changes include:
1. rename MFP_LPM_WAKEUP_ENABLE into MFP_LPM_CAN_WAKEUP to indicate
the board capability of this pin to wakeup the system
2. add gpio_set_wake() and keypad_set_wake() to allow dynamically
enable/disable wakeup from GPIOs and keypad GPIO
* these functions are currently kept in mfp-pxa2xx.c due to their
dependency to the MFP configuration
3. pxa2xx_mfp_config() only gives early warning if MFP_LPM_CAN_WAKEUP
is set on incorrect pins
So that the GPIO's wakeup capability is now decided by the following:
a) processor's capability: (only those GPIOs which have dedicated
bits within PWER/PRER/PFER can wakeup the system), this is
initialized by pxa{25x,27x}_init_mfp()
b) board design decides:
- whether the pin is designed to wakeup the system (some of
the GPIOs are configured as other functions, which is not
intended to be a wakeup source), by OR'ing the pin config
with MFP_LPM_CAN_WAKEUP
- which edge the pin is designed to wakeup the system, this
may depends on external peripherals/connections, which is
totally board specific; this is indicated by MFP_LPM_EDGE_*
c) the corresponding device's (most likely the gpio_keys.c) wakeup
attribute:
Signed-off-by: eric miao <eric.miao@marvell.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
@@ -428,4 +428,5 @@
|
||||
#define GPIO112_nMSINS MFP_CFG_IN(GPIO112, AF2)
|
||||
#define GPIO32_MSSCLK MFP_CFG_OUT(GPIO32, AF1, DRIVE_LOW)
|
||||
|
||||
extern int keypad_set_wake(unsigned int on);
|
||||
#endif /* __ASM_ARCH_MFP_PXA27X_H */
|
||||
|
||||
@@ -24,13 +24,13 @@
|
||||
#define MFP_DIR_MASK (0x1 << 23)
|
||||
#define MFP_DIR(x) (((x) >> 23) & 0x1)
|
||||
|
||||
#define MFP_LPM_WAKEUP_ENABLE (0x1 << 24)
|
||||
#define WAKEUP_ON_EDGE_RISE (MFP_LPM_WAKEUP_ENABLE | MFP_LPM_EDGE_RISE)
|
||||
#define WAKEUP_ON_EDGE_FALL (MFP_LPM_WAKEUP_ENABLE | MFP_LPM_EDGE_FALL)
|
||||
#define WAKEUP_ON_EDGE_BOTH (MFP_LPM_WAKEUP_ENABLE | MFP_LPM_EDGE_BOTH)
|
||||
#define MFP_LPM_CAN_WAKEUP (0x1 << 24)
|
||||
#define WAKEUP_ON_EDGE_RISE (MFP_LPM_CAN_WAKEUP | MFP_LPM_EDGE_RISE)
|
||||
#define WAKEUP_ON_EDGE_FALL (MFP_LPM_CAN_WAKEUP | MFP_LPM_EDGE_FALL)
|
||||
#define WAKEUP_ON_EDGE_BOTH (MFP_LPM_CAN_WAKEUP | MFP_LPM_EDGE_BOTH)
|
||||
|
||||
/* specifically for enabling wakeup on keypad GPIOs */
|
||||
#define WAKEUP_ON_LEVEL_HIGH (MFP_LPM_WAKEUP_ENABLE)
|
||||
#define WAKEUP_ON_LEVEL_HIGH (MFP_LPM_CAN_WAKEUP)
|
||||
|
||||
#define MFP_CFG_IN(pin, af) \
|
||||
((MFP_CFG_DEFAULT & ~(MFP_AF_MASK | MFP_DIR_MASK)) |\
|
||||
@@ -128,4 +128,5 @@
|
||||
#define GPIO84_GPIO MFP_CFG_IN(GPIO84, AF0)
|
||||
|
||||
extern void pxa2xx_mfp_config(unsigned long *mfp_cfgs, int num);
|
||||
extern int gpio_set_wake(unsigned int gpio, unsigned int on);
|
||||
#endif /* __ASM_ARCH_MFP_PXA2XX_H */
|
||||
|
||||
Reference in New Issue
Block a user