Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 260697
b: refs/heads/master
c: d20e1d2
h: refs/heads/master
i:
  260695: 5064553
v: v3
  • Loading branch information
Peter Ujfalusi committed Jul 7, 2011
1 parent 691ffc5 commit 8c33173
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 37 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2a433b9daff58c8ff231b879242a586371acc93f
refs/heads/master: d20e1d21fd0c398a8beb170beacf8e2ca839844c
42 changes: 21 additions & 21 deletions trunk/drivers/mfd/twl6040-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -459,6 +459,12 @@ static int __devinit twl6040_probe(struct platform_device *pdev)
return -EINVAL;
}

/* In order to operate correctly we need valid interrupt config */
if (!pdata->naudint_irq || !pdata->irq_base) {
dev_err(&pdev->dev, "Invalid IRQ configuration\n");
return -EINVAL;
}

twl6040 = kzalloc(sizeof(struct twl6040), GFP_KERNEL);
if (!twl6040)
return -ENOMEM;
Expand Down Expand Up @@ -491,20 +497,18 @@ static int __devinit twl6040_probe(struct platform_device *pdev)
if (twl6040->rev == TWL6040_REV_ES1_0)
twl6040->audpwron = -EINVAL;

if (twl6040->irq) {
/* codec interrupt */
ret = twl6040_irq_init(twl6040);
if (ret)
goto gpio2_err;

ret = twl6040_request_irq(twl6040, TWL6040_IRQ_READY,
twl6040_naudint_handler, 0,
"twl6040_irq_ready", twl6040);
if (ret) {
dev_err(twl6040->dev, "READY IRQ request failed: %d\n",
ret);
goto irq_err;
}
/* codec interrupt */
ret = twl6040_irq_init(twl6040);
if (ret)
goto gpio2_err;

ret = twl6040_request_irq(twl6040, TWL6040_IRQ_READY,
twl6040_naudint_handler, 0,
"twl6040_irq_ready", twl6040);
if (ret) {
dev_err(twl6040->dev, "READY IRQ request failed: %d\n",
ret);
goto irq_err;
}

/* dual-access registers controlled by I2C only */
Expand Down Expand Up @@ -553,11 +557,9 @@ static int __devinit twl6040_probe(struct platform_device *pdev)
return 0;

mfd_err:
if (twl6040->irq)
twl6040_free_irq(twl6040, TWL6040_IRQ_READY, twl6040);
twl6040_free_irq(twl6040, TWL6040_IRQ_READY, twl6040);
irq_err:
if (twl6040->irq)
twl6040_irq_exit(twl6040);
twl6040_irq_exit(twl6040);
gpio2_err:
if (gpio_is_valid(twl6040->audpwron))
gpio_free(twl6040->audpwron);
Expand All @@ -579,9 +581,7 @@ static int __devexit twl6040_remove(struct platform_device *pdev)
gpio_free(twl6040->audpwron);

twl6040_free_irq(twl6040, TWL6040_IRQ_READY, twl6040);

if (twl6040->irq)
twl6040_irq_exit(twl6040);
twl6040_irq_exit(twl6040);

mfd_remove_devices(&pdev->dev);
platform_set_drvdata(pdev, NULL);
Expand Down
16 changes: 1 addition & 15 deletions trunk/drivers/mfd/twl6040-irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -148,19 +148,6 @@ int twl6040_irq_init(struct twl6040 *twl6040)
twl6040->irq_masks_cache = TWL6040_ALLINT_MSK;
twl6040_reg_write(twl6040, TWL6040_REG_INTMR, TWL6040_ALLINT_MSK);

if (!twl6040->irq) {
dev_warn(twl6040->dev,
"no interrupt specified, no interrupts\n");
twl6040->irq_base = 0;
return 0;
}

if (!twl6040->irq_base) {
dev_err(twl6040->dev,
"no interrupt base specified, no interrupts\n");
return 0;
}

/* Register them with genirq */
for (cur_irq = twl6040->irq_base;
cur_irq < twl6040->irq_base + ARRAY_SIZE(twl6040_irqs);
Expand Down Expand Up @@ -199,7 +186,6 @@ EXPORT_SYMBOL(twl6040_irq_init);

void twl6040_irq_exit(struct twl6040 *twl6040)
{
if (twl6040->irq)
free_irq(twl6040->irq, twl6040);
free_irq(twl6040->irq, twl6040);
}
EXPORT_SYMBOL(twl6040_irq_exit);

0 comments on commit 8c33173

Please sign in to comment.