浏览代码

[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>
Ben Dooks 16 年之前
父节点
当前提交
56b3442688

+ 1 - 1
arch/arm/mach-s3c2410/include/mach/irqs.h

@@ -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)

+ 2 - 0
arch/arm/mach-s3c24a0/include/mach/irqs.h

@@ -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)

+ 2 - 0
arch/arm/plat-s3c/include/plat/pm.h

@@ -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

+ 24 - 0
arch/arm/plat-s3c/pm.c

@@ -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 */
 
 

+ 0 - 2
arch/arm/plat-s3c24xx/include/plat/irq.h

@@ -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
 
 

+ 1 - 22
arch/arm/plat-s3c24xx/irq-pm.c

@@ -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
-s3c_irq_wake(unsigned int irqno, unsigned int state)
+int 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),