diff options
Diffstat (limited to 'arch/arm/mach-s3c64xx/irq-pm.c')
| -rw-r--r-- | arch/arm/mach-s3c64xx/irq-pm.c | 23 | 
1 files changed, 19 insertions, 4 deletions
diff --git a/arch/arm/mach-s3c64xx/irq-pm.c b/arch/arm/mach-s3c64xx/irq-pm.c index c3da1b68d03..ae4ea7601f6 100644 --- a/arch/arm/mach-s3c64xx/irq-pm.c +++ b/arch/arm/mach-s3c64xx/irq-pm.c @@ -12,16 +12,21 @@   * published by the Free Software Foundation.   */ +/* + * NOTE: Code in this file is not used when booting with Device Tree support. + */ +  #include <linux/kernel.h>  #include <linux/syscore_ops.h>  #include <linux/interrupt.h>  #include <linux/serial_core.h> +#include <linux/serial_s3c.h>  #include <linux/irq.h>  #include <linux/io.h> +#include <linux/of.h>  #include <mach/map.h> -#include <plat/regs-serial.h>  #include <mach/regs-gpio.h>  #include <plat/cpu.h>  #include <plat/pm.h> @@ -50,7 +55,13 @@ static struct irq_grp_save {  	u32	mask;  } eint_grp_save[5]; -static u32 irq_uart_mask[CONFIG_SERIAL_SAMSUNG_UARTS]; +#ifndef CONFIG_SERIAL_SAMSUNG_UARTS +#define SERIAL_SAMSUNG_UARTS 0 +#else +#define	SERIAL_SAMSUNG_UARTS CONFIG_SERIAL_SAMSUNG_UARTS +#endif + +static u32 irq_uart_mask[SERIAL_SAMSUNG_UARTS];  static int s3c64xx_irq_pm_suspend(void)  { @@ -61,7 +72,7 @@ static int s3c64xx_irq_pm_suspend(void)  	s3c_pm_do_save(irq_save, ARRAY_SIZE(irq_save)); -	for (i = 0; i < CONFIG_SERIAL_SAMSUNG_UARTS; i++) +	for (i = 0; i < SERIAL_SAMSUNG_UARTS; i++)  		irq_uart_mask[i] = __raw_readl(S3C_VA_UARTx(i) + S3C64XX_UINTM);  	for (i = 0; i < ARRAY_SIZE(eint_grp_save); i++, grp++) { @@ -82,7 +93,7 @@ static void s3c64xx_irq_pm_resume(void)  	s3c_pm_do_restore(irq_save, ARRAY_SIZE(irq_save)); -	for (i = 0; i < CONFIG_SERIAL_SAMSUNG_UARTS; i++) +	for (i = 0; i < SERIAL_SAMSUNG_UARTS; i++)  		__raw_writel(irq_uart_mask[i], S3C_VA_UARTx(i) + S3C64XX_UINTM);  	for (i = 0; i < ARRAY_SIZE(eint_grp_save); i++, grp++) { @@ -101,6 +112,10 @@ static struct syscore_ops s3c64xx_irq_syscore_ops = {  static __init int s3c64xx_syscore_init(void)  { +	/* Appropriate drivers (pinctrl, uart) handle this when using DT. */ +	if (of_have_populated_dt()) +		return 0; +  	register_syscore_ops(&s3c64xx_irq_syscore_ops);  	return 0;  | 
