diff options
author | Heiko Stuebner <heiko@sntech.de> | 2013-02-12 10:09:10 -0800 |
---|---|---|
committer | Kukjin Kim <kgene.kim@samsung.com> | 2013-03-05 20:20:59 +0900 |
commit | 592957085e3763b9339a6a281f1aeb1247cdd245 (patch) | |
tree | ebecf19830b1dddb590fa2923c9a8cec8788b6d9 | |
parent | f0301673ff7ad8aae45c4a95613771d34b1cf052 (diff) | |
download | linux-stable-592957085e3763b9339a6a281f1aeb1247cdd245.tar.gz linux-stable-592957085e3763b9339a6a281f1aeb1247cdd245.tar.bz2 linux-stable-592957085e3763b9339a6a281f1aeb1247cdd245.zip |
ARM: S3C24XX: use samsung_sync_wakemask in s3c2412 pm
Originally the s3c2412 used a overidden irq chip to set the rtc wakeup flag.
But with using the samsung_sync_wakemask function the same can be achieved
without introducing soc specific irq functions.
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
-rw-r--r-- | arch/arm/mach-s3c24xx/Kconfig | 1 | ||||
-rw-r--r-- | arch/arm/mach-s3c24xx/irq-s3c2412.c | 23 | ||||
-rw-r--r-- | arch/arm/mach-s3c24xx/pm-s3c2412.c | 8 |
3 files changed, 9 insertions, 23 deletions
diff --git a/arch/arm/mach-s3c24xx/Kconfig b/arch/arm/mach-s3c24xx/Kconfig index 0c5e4fb61117..0a8663c5f2ba 100644 --- a/arch/arm/mach-s3c24xx/Kconfig +++ b/arch/arm/mach-s3c24xx/Kconfig @@ -407,6 +407,7 @@ config S3C2412_DMA config S3C2412_PM bool select S3C2412_PM_SLEEP + select SAMSUNG_WAKEMASK help Internal config node to apply S3C2412 power management diff --git a/arch/arm/mach-s3c24xx/irq-s3c2412.c b/arch/arm/mach-s3c24xx/irq-s3c2412.c index 67d763178d3f..e6fd954c5fd4 100644 --- a/arch/arm/mach-s3c24xx/irq-s3c2412.c +++ b/arch/arm/mach-s3c24xx/irq-s3c2412.c @@ -155,22 +155,6 @@ static struct irq_chip s3c2412_irq_cfsdi = { .irq_unmask = s3c2412_irq_cfsdi_unmask, }; -static int s3c2412_irq_rtc_wake(struct irq_data *data, 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.irq_set_wake(data, state); -} - -static struct irq_chip s3c2412_irq_rtc_chip; - static int s3c2412_irq_add(struct device *dev, struct subsys_interface *sif) { unsigned int irqno; @@ -191,13 +175,6 @@ static int s3c2412_irq_add(struct device *dev, struct subsys_interface *sif) set_irq_flags(irqno, IRQF_VALID); } - /* change RTC IRQ's set wake method */ - - s3c2412_irq_rtc_chip = s3c_irq_chip; - s3c2412_irq_rtc_chip.irq_set_wake = s3c2412_irq_rtc_wake; - - irq_set_chip(IRQ_RTC, &s3c2412_irq_rtc_chip); - return 0; } diff --git a/arch/arm/mach-s3c24xx/pm-s3c2412.c b/arch/arm/mach-s3c24xx/pm-s3c2412.c index 4c4bc1c83b77..d75f95e487ee 100644 --- a/arch/arm/mach-s3c24xx/pm-s3c2412.c +++ b/arch/arm/mach-s3c24xx/pm-s3c2412.c @@ -29,6 +29,7 @@ #include <plat/cpu.h> #include <plat/pm.h> +#include <plat/wakeup-mask.h> #include "regs-dsc.h" #include "s3c2412-power.h" @@ -51,8 +52,15 @@ static int s3c2412_cpu_suspend(unsigned long arg) return 1; /* Aborting suspend */ } +/* mapping of interrupts to parts of the wakeup mask */ +static struct samsung_wakeup_mask wake_irqs[] = { + { .irq = IRQ_RTC, .bit = S3C2412_PWRCFG_RTC_MASKIRQ, }, +}; + static void s3c2412_pm_prepare(void) { + samsung_sync_wakemask(S3C2412_PWRCFG, + wake_irqs, ARRAY_SIZE(wake_irqs)); } static int s3c2412_pm_add(struct device *dev, struct subsys_interface *sif) |