aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mfd/wm8350-irq.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mfd/wm8350-irq.c')
-rw-r--r--drivers/mfd/wm8350-irq.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/drivers/mfd/wm8350-irq.c b/drivers/mfd/wm8350-irq.c
index ed4b22a167b3..8a1fafd0bf7d 100644
--- a/drivers/mfd/wm8350-irq.c
+++ b/drivers/mfd/wm8350-irq.c
@@ -473,17 +473,13 @@ int wm8350_irq_init(struct wm8350 *wm8350, int irq,
473{ 473{
474 int ret, cur_irq, i; 474 int ret, cur_irq, i;
475 int flags = IRQF_ONESHOT; 475 int flags = IRQF_ONESHOT;
476 int irq_base = -1;
476 477
477 if (!irq) { 478 if (!irq) {
478 dev_warn(wm8350->dev, "No interrupt support, no core IRQ\n"); 479 dev_warn(wm8350->dev, "No interrupt support, no core IRQ\n");
479 return 0; 480 return 0;
480 } 481 }
481 482
482 if (!pdata || !pdata->irq_base) {
483 dev_warn(wm8350->dev, "No interrupt support, no IRQ base\n");
484 return 0;
485 }
486
487 /* Mask top level interrupts */ 483 /* Mask top level interrupts */
488 wm8350_reg_write(wm8350, WM8350_SYSTEM_INTERRUPTS_MASK, 0xFFFF); 484 wm8350_reg_write(wm8350, WM8350_SYSTEM_INTERRUPTS_MASK, 0xFFFF);
489 485
@@ -502,7 +498,17 @@ int wm8350_irq_init(struct wm8350 *wm8350, int irq,
502 wm8350->chip_irq = irq; 498 wm8350->chip_irq = irq;
503 wm8350->irq_base = pdata->irq_base; 499 wm8350->irq_base = pdata->irq_base;
504 500
505 if (pdata->irq_high) { 501 if (pdata && pdata->irq_base > 0)
502 irq_base = pdata->irq_base;
503
504 wm8350->irq_base = irq_alloc_descs(irq_base, 0, ARRAY_SIZE(wm8350_irqs), 0);
505 if (wm8350->irq_base < 0) {
506 dev_warn(wm8350->dev, "Allocating irqs failed with %d\n",
507 wm8350->irq_base);
508 return 0;
509 }
510
511 if (pdata && pdata->irq_high) {
506 flags |= IRQF_TRIGGER_HIGH; 512 flags |= IRQF_TRIGGER_HIGH;
507 513
508 wm8350_set_bits(wm8350, WM8350_SYSTEM_CONTROL_1, 514 wm8350_set_bits(wm8350, WM8350_SYSTEM_CONTROL_1,