aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-shmobile/intc-sh7372.c1
-rw-r--r--drivers/sh/intc/core.c8
-rw-r--r--drivers/sh/intc/internals.h1
-rw-r--r--include/linux/sh_intc.h1
4 files changed, 11 insertions, 0 deletions
diff --git a/arch/arm/mach-shmobile/intc-sh7372.c b/arch/arm/mach-shmobile/intc-sh7372.c
index d087b31b5d12..89afcaba99a1 100644
--- a/arch/arm/mach-shmobile/intc-sh7372.c
+++ b/arch/arm/mach-shmobile/intc-sh7372.c
@@ -535,6 +535,7 @@ static struct resource intcs_resources[] __initdata = {
535static struct intc_desc intcs_desc __initdata = { 535static struct intc_desc intcs_desc __initdata = {
536 .name = "sh7372-intcs", 536 .name = "sh7372-intcs",
537 .force_enable = ENABLED_INTCS, 537 .force_enable = ENABLED_INTCS,
538 .skip_syscore_suspend = true,
538 .resource = intcs_resources, 539 .resource = intcs_resources,
539 .num_resources = ARRAY_SIZE(intcs_resources), 540 .num_resources = ARRAY_SIZE(intcs_resources),
540 .hw = INTC_HW_DESC(intcs_vectors, intcs_groups, intcs_mask_registers, 541 .hw = INTC_HW_DESC(intcs_vectors, intcs_groups, intcs_mask_registers,
diff --git a/drivers/sh/intc/core.c b/drivers/sh/intc/core.c
index 8b7a141ff35e..be5a025eeca3 100644
--- a/drivers/sh/intc/core.c
+++ b/drivers/sh/intc/core.c
@@ -354,6 +354,8 @@ int __init register_intc_controller(struct intc_desc *desc)
354 if (desc->force_enable) 354 if (desc->force_enable)
355 intc_enable_disable_enum(desc, d, desc->force_enable, 1); 355 intc_enable_disable_enum(desc, d, desc->force_enable, 1);
356 356
357 d->skip_suspend = desc->skip_syscore_suspend;
358
357 nr_intc_controllers++; 359 nr_intc_controllers++;
358 360
359 return 0; 361 return 0;
@@ -386,6 +388,9 @@ static int intc_suspend(void)
386 list_for_each_entry(d, &intc_list, list) { 388 list_for_each_entry(d, &intc_list, list) {
387 int irq; 389 int irq;
388 390
391 if (d->skip_suspend)
392 continue;
393
389 /* enable wakeup irqs belonging to this intc controller */ 394 /* enable wakeup irqs belonging to this intc controller */
390 for_each_active_irq(irq) { 395 for_each_active_irq(irq) {
391 struct irq_data *data; 396 struct irq_data *data;
@@ -409,6 +414,9 @@ static void intc_resume(void)
409 list_for_each_entry(d, &intc_list, list) { 414 list_for_each_entry(d, &intc_list, list) {
410 int irq; 415 int irq;
411 416
417 if (d->skip_suspend)
418 continue;
419
412 for_each_active_irq(irq) { 420 for_each_active_irq(irq) {
413 struct irq_data *data; 421 struct irq_data *data;
414 struct irq_chip *chip; 422 struct irq_chip *chip;
diff --git a/drivers/sh/intc/internals.h b/drivers/sh/intc/internals.h
index 5b934851efa8..b3fe1cf25a28 100644
--- a/drivers/sh/intc/internals.h
+++ b/drivers/sh/intc/internals.h
@@ -67,6 +67,7 @@ struct intc_desc_int {
67 struct intc_window *window; 67 struct intc_window *window;
68 unsigned int nr_windows; 68 unsigned int nr_windows;
69 struct irq_chip chip; 69 struct irq_chip chip;
70 bool skip_suspend;
70}; 71};
71 72
72 73
diff --git a/include/linux/sh_intc.h b/include/linux/sh_intc.h
index 5812fefbcedf..b160645f5599 100644
--- a/include/linux/sh_intc.h
+++ b/include/linux/sh_intc.h
@@ -95,6 +95,7 @@ struct intc_desc {
95 unsigned int num_resources; 95 unsigned int num_resources;
96 intc_enum force_enable; 96 intc_enum force_enable;
97 intc_enum force_disable; 97 intc_enum force_disable;
98 bool skip_syscore_suspend;
98 struct intc_hw_desc hw; 99 struct intc_hw_desc hw;
99}; 100};
100 101