mfd wm8350: allocate irq descs dynamically
Subsystems (2)
PATCH 1/1 mfd wm8350: allocate irq descs dynamically
This allows boards to leave the irq_base field unitialized and prevents them having to reserve irqs in the platform. pdata can be optional for irq support now. Without pdata the driver allocates some free irq range. With pdata and irq_base > 0 the driver allocates exactly the specified irq.
Without pdata the irq defaults to IRQF_TRIGGER_LOW.
--- drivers/mfd/wm8350-irq.c | 18 ++++++++++++------ 1 files changed, 12 insertions(+), 6 deletions(-)
drivers/mfd/wm8350-irq.c +12 -6
@@ -473,17 +473,13 @@ int wm8350_irq_init(struct wm8350 *wm8350, int irq, {int ret, cur_irq, i;int flags =IRQF_ONESHOT ; +int irq_base =-1 ;if (!irq) {dev_warn (wm8350->dev,"No interrupt support, no core IRQ\n" );return 0 ; } -if (!pdata || !pdata->irq_base) { -dev_warn (wm8350->dev,"No interrupt support, no IRQ base\n" ); -return 0 ; - } -/* Mask top level interrupts */ wm8350_reg_write (wm8350,WM8350_SYSTEM_INTERRUPTS_MASK ,0xFFFF );
@@ -502,7 +498,17 @@ int wm8350_irq_init(struct wm8350 *wm8350, int irq, wm8350->chip_irq = irq; wm8350->irq_base = pdata->irq_base; -if (pdata->irq_high) { +if (pdata && pdata->irq_base >0 ) + irq_base = pdata->irq_base; + + wm8350->irq_base =irq_alloc_descs (irq_base,0 ,ARRAY_SIZE (wm8350_irqs),0 ); +if (wm8350->irq_base <0 ) { +dev_warn (wm8350->dev,"Allocating irqs failed with %d\n" , + wm8350->irq_base); +return 0 ; + } + +if (pdata && pdata->irq_high) { flags |=IRQF_TRIGGER_HIGH ; wm8350_set_bits(wm8350, WM8350_SYSTEM_CONTROL_1,
Signature · 7 lines
1.7.5.3 -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
Quoted 9 lines · Sascha Hauer
This allows boards to leave the
irq_basefield unitialized and prevents them having to reserve irqs in the platform. pdata can be optional for irq support now. Without pdata the driver allocates some free irq range. With pdata andirq_base> 0 the driver allocates exactly the specified irq.
Without pdata the irq defaults toIRQF_TRIGGER_LOW.Signed-off-by Sascha Hauer <[email protected]>
Quoted 9 lines · Mark Brown
Quoted 7 lines · Sascha Hauer
This allows boards to leave the
irq_basefield unitialized and prevents them having to reserve irqs in the platform. pdata can be optional for irq support now. Without pdata the driver allocates some free irq range. With pdata andirq_base> 0 the driver allocates exactly the specified irq.
Without pdata the irq defaults toIRQF_TRIGGER_LOW.
Quoted 3 lines
Quoted 1 line
Signed-off-by Sascha Hauer <[email protected]>Acked-by Mark Brown <[email protected]>
Actually I take that back, it looks like the wm831x equivalent patch is causing some sort of semi-intermittent issue with the IRQ infrastructure on non-sparse systems so I suspect this patch is also problematic. The major symptom is lockups in softirq handling.
Quoted 4 lines · Mark Brown
Actually I take that back, it looks like the wm831x equivalent patch is causing some sort of semi-intermittent issue with the IRQ infrastructure on non-sparse systems so I suspect this patch is also problematic. The major symptom is lockups in softirq handling.
I figured this out - it's not an issue with this code so I reinstate my ack, sorry for the noise!