ARM: S3C24XX: use samsung_sync_wakemask in s3c2412 pm
authorHeiko Stuebner <heiko@sntech.de>
Tue, 12 Feb 2013 18:09:10 +0000 (10:09 -0800)
committerKukjin Kim <kgene.kim@samsung.com>
Tue, 5 Mar 2013 11:20:59 +0000 (20:20 +0900)
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>
arch/arm/mach-s3c24xx/Kconfig
arch/arm/mach-s3c24xx/irq-s3c2412.c
arch/arm/mach-s3c24xx/pm-s3c2412.c

index 0c5e4fb61117bc0665224e00649c629baafe54a4..0a8663c5f2ba4e064db16b02a5bfc6f6ed6be29c 100644 (file)
@@ -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
 
index 67d763178d3f98fe8c79d9ad7249cbca80a90da9..e6fd954c5fd48adf4ce5140a047ce74f5ae16b2a 100644 (file)
@@ -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;
 }
 
index 4c4bc1c83b77626d0690fd2da84ea09a4d1b3397..d75f95e487ee6414eb7d02908bbdf5320475950a 100644 (file)
@@ -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)