Skip to content

Commit

Permalink
[ARM] 4730/1: S3C2412: Ensure the PWRCFG has the right mode for RTC wake
Browse files Browse the repository at this point in the history
Ensure that if the RTC IRQ is not selected for wake in the
base configuration, then the PWRCFG has the same value set
in it.

Signed-off-by: Ben Dooks <[email protected]>
Signed-off-by: Russell King <[email protected]>
  • Loading branch information
Ben Dooks authored and Russell King committed Jan 28, 2008
1 parent 8e3007a commit 0baada2
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 1 deletion.
24 changes: 24 additions & 0 deletions arch/arm/mach-s3c2412/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@

#include <asm/arch/regs-irq.h>
#include <asm/arch/regs-gpio.h>
#include <asm/arch/regs-power.h>

#include <asm/plat-s3c24xx/cpu.h>
#include <asm/plat-s3c24xx/irq.h>
Expand Down Expand Up @@ -153,6 +154,22 @@ static struct irq_chip s3c2412_irq_cfsdi = {
.unmask = s3c2412_irq_cfsdi_unmask,
};

static int s3c2412_irq_rtc_wake(unsigned int irqno, unsigned int state)
{
unsigned long pwrcfg;

pwrcfg = __raw_readl(S3C2412_PWRCFG);
if (state)
pwrcfg &= ~S3C2412_PWRCFG_RTC_MASKIRQ;
else
pwrcfg |= S3C2412_PWRCFG_RTC_MASKIRQ;
__raw_writel(pwrcfg, S3C2412_PWRCFG);

return s3c_irq_chip.set_wake(irqno, state);
}

static struct irq_chip s3c2412_irq_rtc_chip;

static int s3c2412_irq_add(struct sys_device *sysdev)
{
unsigned int irqno;
Expand All @@ -173,6 +190,13 @@ static int s3c2412_irq_add(struct sys_device *sysdev)
set_irq_flags(irqno, IRQF_VALID);
}

/* change RTC IRQ's set wake method */

s3c2412_irq_rtc_chip = s3c_irq_chip;
s3c2412_irq_rtc_chip.set_wake = s3c2412_irq_rtc_wake;

set_irq_chip(IRQ_RTC, &s3c2412_irq_rtc_chip);

return 0;
}

Expand Down
2 changes: 1 addition & 1 deletion arch/arm/plat-s3c24xx/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ struct irq_chip s3c_irq_level_chip = {
.set_wake = s3c_irq_wake
};

static struct irq_chip s3c_irq_chip = {
struct irq_chip s3c_irq_chip = {
.name = "s3c",
.ack = s3c_irq_ack,
.mask = s3c_irq_mask,
Expand Down
2 changes: 2 additions & 0 deletions include/asm-arm/plat-s3c24xx/irq.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@

#define EXTINT_OFF (IRQ_EINT4 - 4)

/* these are exported for arch/arm/mach-* usage */
extern struct irq_chip s3c_irq_level_chip;
extern struct irq_chip s3c_irq_chip;

static inline void
s3c_irqsub_mask(unsigned int irqno, unsigned int parentbit,
Expand Down

0 comments on commit 0baada2

Please sign in to comment.