Commit 22f11c4e authored by Nicolas Pitre's avatar Nicolas Pitre Committed by Russell King

[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: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 95220a2e
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/device.h> #include <linux/device.h>
#include <linux/sysdev.h>
#include <linux/major.h> #include <linux/major.h>
#include <linux/fb.h> #include <linux/fb.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
...@@ -106,6 +107,35 @@ static void __init lubbock_init_irq(void) ...@@ -106,6 +107,35 @@ static void __init lubbock_init_irq(void)
set_irq_type(IRQ_GPIO(0), IRQT_FALLING); set_irq_type(IRQ_GPIO(0), IRQT_FALLING);
} }
#ifdef CONFIG_PM
static int lubbock_irq_resume(struct sys_device *dev)
{
LUB_IRQ_MASK_EN = lubbock_irq_enabled;
return 0;
}
static struct sysdev_class lubbock_irq_sysclass = {
set_kset_name("cpld_irq"),
.resume = lubbock_irq_resume,
};
static struct sys_device lubbock_irq_device = {
.cls = &lubbock_irq_sysclass,
};
static int __init lubbock_irq_device_init(void)
{
int ret = sysdev_class_register(&lubbock_irq_sysclass);
if (ret == 0)
ret = sysdev_register(&lubbock_irq_device);
return ret;
}
device_initcall(lubbock_irq_device_init);
#endif
static int lubbock_udc_is_connected(void) static int lubbock_udc_is_connected(void)
{ {
return (LUB_MISC_RD & (1 << 9)) == 0; return (LUB_MISC_RD & (1 << 9)) == 0;
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/device.h> #include <linux/device.h>
#include <linux/sysdev.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/bitops.h> #include <linux/bitops.h>
...@@ -62,7 +63,6 @@ static struct irqchip mainstone_irq_chip = { ...@@ -62,7 +63,6 @@ static struct irqchip mainstone_irq_chip = {
.unmask = mainstone_unmask_irq, .unmask = mainstone_unmask_irq,
}; };
static void mainstone_irq_handler(unsigned int irq, struct irqdesc *desc, static void mainstone_irq_handler(unsigned int irq, struct irqdesc *desc,
struct pt_regs *regs) struct pt_regs *regs)
{ {
...@@ -100,6 +100,35 @@ static void __init mainstone_init_irq(void) ...@@ -100,6 +100,35 @@ static void __init mainstone_init_irq(void)
set_irq_type(IRQ_GPIO(0), IRQT_FALLING); set_irq_type(IRQ_GPIO(0), IRQT_FALLING);
} }
#ifdef CONFIG_PM
static int mainstone_irq_resume(struct sys_device *dev)
{
MST_INTMSKENA = mainstone_irq_enabled;
return 0;
}
static struct sysdev_class mainstone_irq_sysclass = {
set_kset_name("cpld_irq"),
.resume = mainstone_irq_resume,
};
static struct sys_device mainstone_irq_device = {
.cls = &mainstone_irq_sysclass,
};
static int __init mainstone_irq_device_init(void)
{
int ret = sysdev_class_register(&mainstone_irq_sysclass);
if (ret == 0)
ret = sysdev_register(&mainstone_irq_device);
return ret;
}
device_initcall(mainstone_irq_device_init);
#endif
static struct resource smc91x_resources[] = { static struct resource smc91x_resources[] = {
[0] = { [0] = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment