aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/sysdev/mpic.c18
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
923static 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
923void mpic_set_vector(unsigned int virq, unsigned int vector) 939void 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