diff options
author | Dongsheng.wang@freescale.com <Dongsheng.wang@freescale.com> | 2013-04-08 22:22:29 -0400 |
---|---|---|
committer | Scott Wood <scottwood@freescale.com> | 2013-07-01 19:38:41 -0400 |
commit | 5ff04b7287d87c1db74f47360365905ed9a97ff7 (patch) | |
tree | a1a01beb55cf349f09cbd9e6f6d145fb861d693c | |
parent | 9837b43c5f3514e5d28f65f1513f4dc6759d2810 (diff) |
powerpc/mpic: add irq_set_wake support
Add irq_set_wake support. Just add IRQF_NO_SUSPEND to desc->action->flag.
So the wake up interrupt will not be disable in suspend_device_irqs.
Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com>
Signed-off-by: Scott Wood <scottwood@freescale.com>
-rw-r--r-- | arch/powerpc/sysdev/mpic.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index 1a4e19c6a688..4635d11f2dc2 100644 --- a/arch/powerpc/sysdev/mpic.c +++ b/arch/powerpc/sysdev/mpic.c | |||
@@ -920,6 +920,22 @@ int mpic_set_irq_type(struct irq_data *d, unsigned int flow_type) | |||
920 | return IRQ_SET_MASK_OK_NOCOPY; | 920 | return IRQ_SET_MASK_OK_NOCOPY; |
921 | } | 921 | } |
922 | 922 | ||
923 | static int mpic_irq_set_wake(struct irq_data *d, unsigned int on) | ||
924 | { | ||
925 | struct irq_desc *desc = container_of(d, struct irq_desc, irq_data); | ||
926 | struct mpic *mpic = mpic_from_irq_data(d); | ||
927 | |||
928 | if (!(mpic->flags & MPIC_FSL)) | ||
929 | return -ENXIO; | ||
930 | |||
931 | if (on) | ||
932 | desc->action->flags |= IRQF_NO_SUSPEND; | ||
933 | else | ||
934 | desc->action->flags &= ~IRQF_NO_SUSPEND; | ||
935 | |||
936 | return 0; | ||
937 | } | ||
938 | |||
923 | void mpic_set_vector(unsigned int virq, unsigned int vector) | 939 | void mpic_set_vector(unsigned int virq, unsigned int vector) |
924 | { | 940 | { |
925 | struct mpic *mpic = mpic_from_irq(virq); | 941 | struct mpic *mpic = mpic_from_irq(virq); |
@@ -957,6 +973,7 @@ static struct irq_chip mpic_irq_chip = { | |||
957 | .irq_unmask = mpic_unmask_irq, | 973 | .irq_unmask = mpic_unmask_irq, |
958 | .irq_eoi = mpic_end_irq, | 974 | .irq_eoi = mpic_end_irq, |
959 | .irq_set_type = mpic_set_irq_type, | 975 | .irq_set_type = mpic_set_irq_type, |
976 | .irq_set_wake = mpic_irq_set_wake, | ||
960 | }; | 977 | }; |
961 | 978 | ||
962 | #ifdef CONFIG_SMP | 979 | #ifdef CONFIG_SMP |
@@ -971,6 +988,7 @@ static struct irq_chip mpic_tm_chip = { | |||
971 | .irq_mask = mpic_mask_tm, | 988 | .irq_mask = mpic_mask_tm, |
972 | .irq_unmask = mpic_unmask_tm, | 989 | .irq_unmask = mpic_unmask_tm, |
973 | .irq_eoi = mpic_end_irq, | 990 | .irq_eoi = mpic_end_irq, |
991 | .irq_set_wake = mpic_irq_set_wake, | ||
974 | }; | 992 | }; |
975 | 993 | ||
976 | #ifdef CONFIG_MPIC_U3_HT_IRQS | 994 | #ifdef CONFIG_MPIC_U3_HT_IRQS |