Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Dongsheng.wang@freescale.com and committed by
Scott Wood
5ff04b72 9837b43c

+18
+18
arch/powerpc/sysdev/mpic.c
··· 920 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 939 void mpic_set_vector(unsigned int virq, unsigned int vector) 924 940 { 925 941 struct mpic *mpic = mpic_from_irq(virq); ··· 973 957 .irq_unmask = mpic_unmask_irq, 974 958 .irq_eoi = mpic_end_irq, 975 959 .irq_set_type = mpic_set_irq_type, 960 + .irq_set_wake = mpic_irq_set_wake, 976 961 }; 977 962 978 963 #ifdef CONFIG_SMP ··· 988 971 .irq_mask = mpic_mask_tm, 989 972 .irq_unmask = mpic_unmask_tm, 990 973 .irq_eoi = mpic_end_irq, 974 + .irq_set_wake = mpic_irq_set_wake, 991 975 }; 992 976 993 977 #ifdef CONFIG_MPIC_U3_HT_IRQS