Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

[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.

Signed-off-by: Nicolas Pitre
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>

authored by

Nicolas Pitre and committed by
Russell King
22f11c4e 95220a2e

+60 -1
+30
arch/arm/mach-pxa/lubbock.c
··· 15 15 #include <linux/kernel.h> 16 16 #include <linux/init.h> 17 17 #include <linux/device.h> 18 + #include <linux/sysdev.h> 18 19 #include <linux/major.h> 19 20 #include <linux/fb.h> 20 21 #include <linux/interrupt.h> ··· 106 105 set_irq_chained_handler(IRQ_GPIO(0), lubbock_irq_handler); 107 106 set_irq_type(IRQ_GPIO(0), IRQT_FALLING); 108 107 } 108 + 109 + #ifdef CONFIG_PM 110 + 111 + static int lubbock_irq_resume(struct sys_device *dev) 112 + { 113 + LUB_IRQ_MASK_EN = lubbock_irq_enabled; 114 + return 0; 115 + } 116 + 117 + static struct sysdev_class lubbock_irq_sysclass = { 118 + set_kset_name("cpld_irq"), 119 + .resume = lubbock_irq_resume, 120 + }; 121 + 122 + static struct sys_device lubbock_irq_device = { 123 + .cls = &lubbock_irq_sysclass, 124 + }; 125 + 126 + static int __init lubbock_irq_device_init(void) 127 + { 128 + int ret = sysdev_class_register(&lubbock_irq_sysclass); 129 + if (ret == 0) 130 + ret = sysdev_register(&lubbock_irq_device); 131 + return ret; 132 + } 133 + 134 + device_initcall(lubbock_irq_device_init); 135 + 136 + #endif 109 137 110 138 static int lubbock_udc_is_connected(void) 111 139 {
+30 -1
arch/arm/mach-pxa/mainstone.c
··· 15 15 16 16 #include <linux/init.h> 17 17 #include <linux/device.h> 18 + #include <linux/sysdev.h> 18 19 #include <linux/interrupt.h> 19 20 #include <linux/sched.h> 20 21 #include <linux/bitops.h> ··· 63 62 .unmask = mainstone_unmask_irq, 64 63 }; 65 64 66 - 67 65 static void mainstone_irq_handler(unsigned int irq, struct irqdesc *desc, 68 66 struct pt_regs *regs) 69 67 { ··· 99 99 set_irq_chained_handler(IRQ_GPIO(0), mainstone_irq_handler); 100 100 set_irq_type(IRQ_GPIO(0), IRQT_FALLING); 101 101 } 102 + 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 102 131 103 132 104 133 static struct resource smc91x_resources[] = {