aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/irq.h
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2011-04-15 16:36:08 -0400
committerThomas Gleixner <tglx@linutronix.de>2011-04-23 09:56:24 -0400
commitcfefd21e693dca791bf9ecfc9dd3794facad533c (patch)
tree20915250e5c9749eea148cab17534b70c094386f /include/linux/irq.h
parent7d8280624797bbe2f5170bd3c85c75a8c9c74242 (diff)
genirq: Add chip suspend and resume callbacks
These callbacks are only called in the syscore suspend/resume code on interrupt chips which have been registered via the generic irq chip mechanism. Calling those callbacks per irq would be rather icky, but with the generic irq chip mechanism we can call this per registered chip. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: linux-arm-kernel@lists.infradead.org
Diffstat (limited to 'include/linux/irq.h')
-rw-r--r--include/linux/irq.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/include/linux/irq.h b/include/linux/irq.h
index 2ba2f1216790..8b4538446636 100644
--- a/include/linux/irq.h
+++ b/include/linux/irq.h
@@ -280,6 +280,9 @@ static inline void irqd_clr_chained_irq_inprogress(struct irq_data *d)
280 * @irq_bus_sync_unlock:function to sync and unlock slow bus (i2c) chips 280 * @irq_bus_sync_unlock:function to sync and unlock slow bus (i2c) chips
281 * @irq_cpu_online: configure an interrupt source for a secondary CPU 281 * @irq_cpu_online: configure an interrupt source for a secondary CPU
282 * @irq_cpu_offline: un-configure an interrupt source for a secondary CPU 282 * @irq_cpu_offline: un-configure an interrupt source for a secondary CPU
283 * @irq_suspend: function called from core code on suspend once per chip
284 * @irq_resume: function called from core code on resume once per chip
285 * @irq_pm_shutdown: function called from core code on shutdown once per chip
283 * @irq_print_chip: optional to print special chip info in show_interrupts 286 * @irq_print_chip: optional to print special chip info in show_interrupts
284 * @flags: chip specific flags 287 * @flags: chip specific flags
285 * 288 *
@@ -309,6 +312,10 @@ struct irq_chip {
309 void (*irq_cpu_online)(struct irq_data *data); 312 void (*irq_cpu_online)(struct irq_data *data);
310 void (*irq_cpu_offline)(struct irq_data *data); 313 void (*irq_cpu_offline)(struct irq_data *data);
311 314
315 void (*irq_suspend)(struct irq_data *data);
316 void (*irq_resume)(struct irq_data *data);
317 void (*irq_pm_shutdown)(struct irq_data *data);
318
312 void (*irq_print_chip)(struct irq_data *data, struct seq_file *p); 319 void (*irq_print_chip)(struct irq_data *data, struct seq_file *p);
313 320
314 unsigned long flags; 321 unsigned long flags;
@@ -626,6 +633,7 @@ struct irq_chip_type {
626 * @wake_active: Interrupt is marked as an wakeup from suspend source 633 * @wake_active: Interrupt is marked as an wakeup from suspend source
627 * @num_ct: Number of available irq_chip_type instances (usually 1) 634 * @num_ct: Number of available irq_chip_type instances (usually 1)
628 * @private: Private data for non generic chip callbacks 635 * @private: Private data for non generic chip callbacks
636 * @list: List head for keeping track of instances
629 * @chip_types: Array of interrupt irq_chip_types 637 * @chip_types: Array of interrupt irq_chip_types
630 * 638 *
631 * Note, that irq_chip_generic can have multiple irq_chip_type 639 * Note, that irq_chip_generic can have multiple irq_chip_type
@@ -646,6 +654,7 @@ struct irq_chip_generic {
646 u32 wake_active; 654 u32 wake_active;
647 unsigned int num_ct; 655 unsigned int num_ct;
648 void *private; 656 void *private;
657 struct list_head list;
649 struct irq_chip_type chip_types[0]; 658 struct irq_chip_type chip_types[0];
650}; 659};
651 660
@@ -680,6 +689,8 @@ void irq_setup_generic_chip(struct irq_chip_generic *gc, u32 msk,
680 enum irq_gc_flags flags, unsigned int clr, 689 enum irq_gc_flags flags, unsigned int clr,
681 unsigned int set); 690 unsigned int set);
682int irq_setup_alt_chip(struct irq_data *d, unsigned int type); 691int irq_setup_alt_chip(struct irq_data *d, unsigned int type);
692void irq_remove_generic_chip(struct irq_chip_generic *gc, u32 msk,
693 unsigned int clr, unsigned int set);
683 694
684static inline struct irq_chip_type *irq_data_get_chip_type(struct irq_data *d) 695static inline struct irq_chip_type *irq_data_get_chip_type(struct irq_data *d)
685{ 696{