[ARM] S3C: Make IRQ_EINT sleep control common
Move the IRQ_EINT sleep control to be available to all s3c impelmentations. Since s3c_irqext_wake is not large, place it in arch/arm/plat-s3c/pm.c as adding it to a new file would be a waste of compile time. Signed-off-by: Ben Dooks <ben-linux@fluff.org>
This commit is contained in:
parent
7299a40918
commit
56b3442688
|
@ -80,7 +80,7 @@
|
||||||
#define IRQ_EINT22 S3C2410_IRQ(50)
|
#define IRQ_EINT22 S3C2410_IRQ(50)
|
||||||
#define IRQ_EINT23 S3C2410_IRQ(51)
|
#define IRQ_EINT23 S3C2410_IRQ(51)
|
||||||
|
|
||||||
|
#define IRQ_EINT_BIT(x) ((x) - (IRQ_EINT4 + 4))
|
||||||
#define IRQ_EINT(x) (((x) >= 4) ? (IRQ_EINT4 + (x) - 4) : (IRQ_EINT0 + (x)))
|
#define IRQ_EINT(x) (((x) >= 4) ? (IRQ_EINT4 + (x) - 4) : (IRQ_EINT0 + (x)))
|
||||||
|
|
||||||
#define IRQ_LCD_FIFO S3C2410_IRQ(52)
|
#define IRQ_LCD_FIFO S3C2410_IRQ(52)
|
||||||
|
|
|
@ -70,6 +70,8 @@
|
||||||
#define IRQ_EINT17 S3C2410_IRQ(49)
|
#define IRQ_EINT17 S3C2410_IRQ(49)
|
||||||
#define IRQ_EINT18 S3C2410_IRQ(50)
|
#define IRQ_EINT18 S3C2410_IRQ(50)
|
||||||
|
|
||||||
|
#define IRQ_EINT_BIT(x) ((x) - IRQ_EINT00)
|
||||||
|
|
||||||
/* SUB IRQS */
|
/* SUB IRQS */
|
||||||
#define IRQ_S3CUART_RX0 S3C2410_IRQ(51) /* 67 */
|
#define IRQ_S3CUART_RX0 S3C2410_IRQ(51) /* 67 */
|
||||||
#define IRQ_S3CUART_TX0 S3C2410_IRQ(52)
|
#define IRQ_S3CUART_TX0 S3C2410_IRQ(52)
|
||||||
|
|
|
@ -77,9 +77,11 @@ extern void s3c_pm_do_restore(struct sleep_save *ptr, int count);
|
||||||
extern void s3c_pm_do_restore_core(struct sleep_save *ptr, int count);
|
extern void s3c_pm_do_restore_core(struct sleep_save *ptr, int count);
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
|
extern int s3c_irqext_wake(unsigned int irqno, unsigned int state);
|
||||||
extern int s3c24xx_irq_suspend(struct sys_device *dev, pm_message_t state);
|
extern int s3c24xx_irq_suspend(struct sys_device *dev, pm_message_t state);
|
||||||
extern int s3c24xx_irq_resume(struct sys_device *dev);
|
extern int s3c24xx_irq_resume(struct sys_device *dev);
|
||||||
#else
|
#else
|
||||||
|
#define s3c_irqext_wake NULL
|
||||||
#define s3c24xx_irq_suspend NULL
|
#define s3c24xx_irq_suspend NULL
|
||||||
#define s3c24xx_irq_resume NULL
|
#define s3c24xx_irq_resume NULL
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include <mach/regs-gpio.h>
|
#include <mach/regs-gpio.h>
|
||||||
#include <mach/regs-mem.h>
|
#include <mach/regs-mem.h>
|
||||||
#include <mach/regs-irq.h>
|
#include <mach/regs-irq.h>
|
||||||
|
#include <asm/irq.h>
|
||||||
|
|
||||||
#include <plat/pm.h>
|
#include <plat/pm.h>
|
||||||
#include <plat/pm-core.h>
|
#include <plat/pm-core.h>
|
||||||
|
@ -100,6 +101,29 @@ static void s3c_pm_save_uart(void) { }
|
||||||
static void s3c_pm_restore_uart(void) { }
|
static void s3c_pm_restore_uart(void) { }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* The IRQ ext-int code goes here, it is too small to currently bother
|
||||||
|
* with its own file. */
|
||||||
|
|
||||||
|
unsigned long s3c_irqwake_intmask = 0xffffffffL;
|
||||||
|
unsigned long s3c_irqwake_eintmask = 0xffffffffL;
|
||||||
|
|
||||||
|
int s3c_irqext_wake(unsigned int irqno, unsigned int state)
|
||||||
|
{
|
||||||
|
unsigned long bit = 1L << IRQ_EINT_BIT(irqno);
|
||||||
|
|
||||||
|
if (!(s3c_irqwake_eintallow & bit))
|
||||||
|
return -ENOENT;
|
||||||
|
|
||||||
|
printk(KERN_INFO "wake %s for irq %d\n",
|
||||||
|
state ? "enabled" : "disabled", irqno);
|
||||||
|
|
||||||
|
if (!state)
|
||||||
|
s3c_irqwake_eintmask |= bit;
|
||||||
|
else
|
||||||
|
s3c_irqwake_eintmask &= ~bit;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* helper functions to save and restore register state */
|
/* helper functions to save and restore register state */
|
||||||
|
|
||||||
|
|
|
@ -108,9 +108,7 @@ s3c_irqsub_ack(unsigned int irqno, unsigned int parentmask, unsigned int group)
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
extern int s3c_irq_wake(unsigned int irqno, unsigned int state);
|
extern int s3c_irq_wake(unsigned int irqno, unsigned int state);
|
||||||
extern int s3c_irqext_wake(unsigned int irqno, unsigned int state);
|
|
||||||
#else
|
#else
|
||||||
#define s3c_irqext_wake NULL
|
|
||||||
#define s3c_irq_wake NULL
|
#define s3c_irq_wake NULL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -28,12 +28,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
unsigned long s3c_irqwake_intallow = 1L << (IRQ_RTC - IRQ_EINT0) | 0xfL;
|
unsigned long s3c_irqwake_intallow = 1L << (IRQ_RTC - IRQ_EINT0) | 0xfL;
|
||||||
unsigned long s3c_irqwake_intmask = 0xffffffffL;
|
|
||||||
unsigned long s3c_irqwake_eintallow = 0x0000fff0L;
|
unsigned long s3c_irqwake_eintallow = 0x0000fff0L;
|
||||||
unsigned long s3c_irqwake_eintmask = 0xffffffffL;
|
|
||||||
|
|
||||||
int
|
int s3c_irq_wake(unsigned int irqno, unsigned int state)
|
||||||
s3c_irq_wake(unsigned int irqno, unsigned int state)
|
|
||||||
{
|
{
|
||||||
unsigned long irqbit = 1 << (irqno - IRQ_EINT0);
|
unsigned long irqbit = 1 << (irqno - IRQ_EINT0);
|
||||||
|
|
||||||
|
@ -51,24 +48,6 @@ s3c_irq_wake(unsigned int irqno, unsigned int state)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int s3c_irqext_wake(unsigned int irqno, unsigned int state)
|
|
||||||
{
|
|
||||||
unsigned long bit = 1L << (irqno - EXTINT_OFF);
|
|
||||||
|
|
||||||
if (!(s3c_irqwake_eintallow & bit))
|
|
||||||
return -ENOENT;
|
|
||||||
|
|
||||||
printk(KERN_INFO "wake %s for irq %d\n",
|
|
||||||
state ? "enabled" : "disabled", irqno);
|
|
||||||
|
|
||||||
if (!state)
|
|
||||||
s3c_irqwake_eintmask |= bit;
|
|
||||||
else
|
|
||||||
s3c_irqwake_eintmask &= ~bit;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct sleep_save irq_save[] = {
|
static struct sleep_save irq_save[] = {
|
||||||
SAVE_ITEM(S3C2410_INTMSK),
|
SAVE_ITEM(S3C2410_INTMSK),
|
||||||
SAVE_ITEM(S3C2410_INTSUBMSK),
|
SAVE_ITEM(S3C2410_INTSUBMSK),
|
||||||
|
|
Loading…
Reference in New Issue