Patch from Nicolas Pitre Without this some devices fail to work again after a suspend event.
Unified · Split
| @@ -15,6 +15,7 @@ · 14 unmodified lines | ||
| 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,6 +107,35 @@ static void __init lubbock_init_irq(void) · 85 unmodified lines | ||
| 106 | 107 | set_irq_type(IRQ_GPIO(0), IRQT_FALLING); |
| 107 | 108 | } |
| 108 | 109 | |
| 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 | + | |
| 109 | 139 | static int lubbock_udc_is_connected(void) |
| 110 | 140 | { |
| 111 | 141 | return (LUB_MISC_RD & (1 << 9)) == 0; |
| @@ -15,6 +15,7 @@ · 14 unmodified lines | ||
| 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> |
| @@ -62,7 +63,6 @@ static struct irqchip mainstone_irq_chip = { · 41 unmodified lines | ||
| 62 | 63 | .unmask = mainstone_unmask_irq, |
| 63 | 64 | }; |
| 64 | 65 | |
| 65 | − | |
| 66 | 66 | static void mainstone_irq_handler(unsigned int irq, struct irqdesc *desc, |
| 67 | 67 | struct pt_regs *regs) |
| 68 | 68 | { |
| @@ -100,6 +100,35 @@ static void __init mainstone_init_irq(void) · 31 unmodified lines | ||
| 100 | 100 | set_irq_type(IRQ_GPIO(0), IRQT_FALLING); |
| 101 | 101 | } |
| 102 | 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 | |
| 131 | + | |
| 103 | 132 | |
| 104 | 133 | static struct resource smc91x_resources[] = { |
| 105 | 134 | [0] = { |