diff options
| -rw-r--r-- | arch/arm/plat-omap/mcbsp.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/arch/arm/plat-omap/mcbsp.c b/arch/arm/plat-omap/mcbsp.c index 2cc1cc328bac..f75767278fc3 100644 --- a/arch/arm/plat-omap/mcbsp.c +++ b/arch/arm/plat-omap/mcbsp.c | |||
| @@ -436,7 +436,7 @@ int omap_mcbsp_request(unsigned int id) | |||
| 436 | dev_err(mcbsp->dev, "Unable to request TX IRQ %d " | 436 | dev_err(mcbsp->dev, "Unable to request TX IRQ %d " |
| 437 | "for McBSP%d\n", mcbsp->tx_irq, | 437 | "for McBSP%d\n", mcbsp->tx_irq, |
| 438 | mcbsp->id); | 438 | mcbsp->id); |
| 439 | return err; | 439 | goto error; |
| 440 | } | 440 | } |
| 441 | 441 | ||
| 442 | init_completion(&mcbsp->rx_irq_completion); | 442 | init_completion(&mcbsp->rx_irq_completion); |
| @@ -446,12 +446,26 @@ int omap_mcbsp_request(unsigned int id) | |||
| 446 | dev_err(mcbsp->dev, "Unable to request RX IRQ %d " | 446 | dev_err(mcbsp->dev, "Unable to request RX IRQ %d " |
| 447 | "for McBSP%d\n", mcbsp->rx_irq, | 447 | "for McBSP%d\n", mcbsp->rx_irq, |
| 448 | mcbsp->id); | 448 | mcbsp->id); |
| 449 | free_irq(mcbsp->tx_irq, (void *)mcbsp); | 449 | goto tx_irq; |
| 450 | return err; | ||
| 451 | } | 450 | } |
| 452 | } | 451 | } |
| 453 | 452 | ||
| 454 | return 0; | 453 | return 0; |
| 454 | tx_irq: | ||
| 455 | free_irq(mcbsp->tx_irq, (void *)mcbsp); | ||
| 456 | error: | ||
| 457 | if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->free) | ||
| 458 | mcbsp->pdata->ops->free(id); | ||
| 459 | |||
| 460 | /* Do procedure specific to omap34xx arch, if applicable */ | ||
| 461 | omap34xx_mcbsp_free(mcbsp); | ||
| 462 | |||
| 463 | clk_disable(mcbsp->fclk); | ||
| 464 | clk_disable(mcbsp->iclk); | ||
| 465 | |||
| 466 | mcbsp->free = 1; | ||
| 467 | |||
| 468 | return err; | ||
| 455 | } | 469 | } |
| 456 | EXPORT_SYMBOL(omap_mcbsp_request); | 470 | EXPORT_SYMBOL(omap_mcbsp_request); |
| 457 | 471 | ||
