aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDongsheng.wang@freescale.com <Dongsheng.wang@freescale.com>2013-04-08 22:22:29 -0400
committerScott Wood <scottwood@freescale.com>2013-07-01 19:38:41 -0400
commit5ff04b7287d87c1db74f47360365905ed9a97ff7 (patch)
treea1a01beb55cf349f09cbd9e6f6d145fb861d693c
parent9837b43c5f3514e5d28f65f1513f4dc6759d2810 (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.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