From 9972ab81e3496411a8226eb02b5fc3b035d635c4 Mon Sep 17 00:00:00 2001 From: Russell King Date: Sat, 4 Oct 2003 19:03:11 +0100 Subject: [PATCH] [ARM] Add sysdev model for Integrator/AP. --- arch/arm/mach-integrator/integrator_ap.c | 46 ++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/arch/arm/mach-integrator/integrator_ap.c b/arch/arm/mach-integrator/integrator_ap.c index 69d774aa3287b..149c626d6e519 100644 --- a/arch/arm/mach-integrator/integrator_ap.c +++ b/arch/arm/mach-integrator/integrator_ap.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -133,6 +134,51 @@ static void __init ap_init_irq(void) } } +#ifdef CONFIG_PM +static unsigned long ic_irq_enable; + +static int irq_suspend(struct sys_device *dev, u32 state) +{ + ic_irq_enable = readl(VA_IC_BASE + IRQ_ENABLE); + return 0; +} + +static int irq_resume(struct sys_device *dev) +{ + /* disable all irq sources */ + writel(-1, VA_CMIC_BASE + IRQ_ENABLE_CLEAR); + writel(-1, VA_IC_BASE + IRQ_ENABLE_CLEAR); + writel(-1, VA_IC_BASE + FIQ_ENABLE_CLEAR); + + writel(ic_irq_enable, VA_IC_BASE + IRQ_ENABLE_SET); + return 0; +} +#else +#define irq_suspend NULL +#define irq_resume NULL +#endif + +static struct sysdev_class irq_class = { + set_kset_name("irq"), + .suspend = irq_suspend, + .resume = irq_resume, +}; + +static struct sys_device irq_device = { + .id = 0, + .cls = &irq_class, +}; + +static int __init irq_init_sysfs(void) +{ + int ret = sysdev_class_register(&irq_class); + if (ret == 0) + ret = sys_device_register(&irq_device); + return ret; +} + +device_initcall(irq_init_sysfs); + /* * Flash handling. */ -- 2.53.0