History

[PATCH] ARM: 2715/1: restore CPLD interrupts upon resume for Lubbock and Mainstone

Patch from Nicolas Pitre Without this some devices fail to work again after a suspend event.

Nicolas Pitre committed 21 years ago

Commit 22f11c41 parent 95220a22 files · +60 −1Browse files

Unified · Split

2 files
  1. arch/arm/mach-pxa/lubbock.c +30 −0
  2. arch/arm/mach-pxa/mainstone.c +30 −1
arch/arm/mach-pxa/lubbock.c+30−0
@@ -15,6 +15,7 @@ · 14 unmodified lines
1515 #include <linux/kernel.h>
1616 #include <linux/init.h>
1717 #include <linux/device.h>
18+#include <linux/sysdev.h>
1819 #include <linux/major.h>
1920 #include <linux/fb.h>
2021 #include <linux/interrupt.h>
@@ -106,6 +107,35 @@ static void __init lubbock_init_irq(void) · 85 unmodified lines
106107 set_irq_type(IRQ_GPIO(0), IRQT_FALLING);
107108 }
108109
110+#ifdef CONFIG_PM
111+
112+static int lubbock_irq_resume(struct sys_device *dev)
113+{
114+ LUB_IRQ_MASK_EN = lubbock_irq_enabled;
115+ return 0;
116+}
117+
118+static struct sysdev_class lubbock_irq_sysclass = {
119+ set_kset_name("cpld_irq"),
120+ .resume = lubbock_irq_resume,
121+};
122+
123+static struct sys_device lubbock_irq_device = {
124+ .cls = &lubbock_irq_sysclass,
125+};
126+
127+static int __init lubbock_irq_device_init(void)
128+{
129+ int ret = sysdev_class_register(&lubbock_irq_sysclass);
130+ if (ret == 0)
131+ ret = sysdev_register(&lubbock_irq_device);
132+ return ret;
133+}
134+
135+device_initcall(lubbock_irq_device_init);
136+
137+#endif
138+
109139 static int lubbock_udc_is_connected(void)
110140 {
111141 return (LUB_MISC_RD & (1 << 9)) == 0;
arch/arm/mach-pxa/mainstone.c+30−1
@@ -15,6 +15,7 @@ · 14 unmodified lines
1515
1616 #include <linux/init.h>
1717 #include <linux/device.h>
18+#include <linux/sysdev.h>
1819 #include <linux/interrupt.h>
1920 #include <linux/sched.h>
2021 #include <linux/bitops.h>
@@ -62,7 +63,6 @@ static struct irqchip mainstone_irq_chip = { · 41 unmodified lines
6263 .unmask = mainstone_unmask_irq,
6364 };
6465
65−
6666 static void mainstone_irq_handler(unsigned int irq, struct irqdesc *desc,
6767 struct pt_regs *regs)
6868 {
@@ -100,6 +100,35 @@ static void __init mainstone_init_irq(void) · 31 unmodified lines
100100 set_irq_type(IRQ_GPIO(0), IRQT_FALLING);
101101 }
102102
103+#ifdef CONFIG_PM
104+
105+static int mainstone_irq_resume(struct sys_device *dev)
106+{
107+ MST_INTMSKENA = mainstone_irq_enabled;
108+ return 0;
109+}
110+
111+static struct sysdev_class mainstone_irq_sysclass = {
112+ set_kset_name("cpld_irq"),
113+ .resume = mainstone_irq_resume,
114+};
115+
116+static struct sys_device mainstone_irq_device = {
117+ .cls = &mainstone_irq_sysclass,
118+};
119+
120+static int __init mainstone_irq_device_init(void)
121+{
122+ int ret = sysdev_class_register(&mainstone_irq_sysclass);
123+ if (ret == 0)
124+ ret = sysdev_register(&mainstone_irq_device);
125+ return ret;
126+}
127+
128+device_initcall(mainstone_irq_device_init);
129+
130+#endif
131+
103132
104133 static struct resource smc91x_resources[] = {
105134 [0] = {