Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 56b34426 authored by Ben Dooks's avatar Ben Dooks
Browse files

[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: default avatarBen Dooks <ben-linux@fluff.org>
parent 7299a409
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -80,7 +80,7 @@
#define IRQ_EINT22     S3C2410_IRQ(50)
#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_LCD_FIFO   S3C2410_IRQ(52)
+2 −0
Original line number Diff line number Diff line
@@ -70,6 +70,8 @@
#define IRQ_EINT17	S3C2410_IRQ(49)
#define IRQ_EINT18	S3C2410_IRQ(50)

#define IRQ_EINT_BIT(x) ((x) - IRQ_EINT00)

/* SUB IRQS */
#define IRQ_S3CUART_RX0		S3C2410_IRQ(51)	/* 67 */
#define IRQ_S3CUART_TX0		S3C2410_IRQ(52)
+2 −0
Original line number Diff line number Diff line
@@ -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);

#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_resume(struct sys_device *dev);
#else
#define s3c_irqext_wake NULL
#define s3c24xx_irq_suspend NULL
#define s3c24xx_irq_resume  NULL
#endif
+24 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@
#include <mach/regs-gpio.h>
#include <mach/regs-mem.h>
#include <mach/regs-irq.h>
#include <asm/irq.h>

#include <plat/pm.h>
#include <plat/pm-core.h>
@@ -100,6 +101,29 @@ static void s3c_pm_save_uart(void) { }
static void s3c_pm_restore_uart(void) { }
#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 */

+0 −2
Original line number Diff line number Diff line
@@ -108,9 +108,7 @@ s3c_irqsub_ack(unsigned int irqno, unsigned int parentmask, unsigned int group)

#ifdef CONFIG_PM
extern int s3c_irq_wake(unsigned int irqno, unsigned int state);
extern int s3c_irqext_wake(unsigned int irqno, unsigned int state);
#else
#define s3c_irqext_wake NULL
#define s3c_irq_wake NULL
#endif

Loading