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 |
