Interrupt management fix up. Signed-off-by: Rodolfo Giometti <giometti@xxxxxxxx> -- GNU/Linux Solutions e-mail: giometti@xxxxxxxxxxxx Linux Device Driver giometti@xxxxxxxxx Embedded Systems giometti@xxxxxxxx UNIX programming phone: +39 349 2432127
diff --git a/drivers/mmc/au1xmmc.c b/drivers/mmc/au1xmmc.c index 10e8e06..f2d44cd 100644 --- a/drivers/mmc/au1xmmc.c +++ b/drivers/mmc/au1xmmc.c @@ -772,11 +772,7 @@ static irqreturn_t au1xmmc_irq(int irq, { struct au1xmmc_host *host = dev_id; u32 status; - int i, ret = 0; - - disable_irq(AU1100_SD_IRQ); - - u32 handled = 1; + int ret = IRQ_HANDLED; status = au_readl(HOST_STATUS(host)); @@ -821,15 +817,12 @@ #endif } else if (status & 0x203FBC70) { dbg("Unhandled status %8.8x\n", host->id, status); - handled = 0; + ret = IRQ_NONE; } au_writel(status, HOST_STATUS(host)); au_sync(); - ret |= handled; - - enable_irq(AU1100_SD_IRQ); return ret; } @@ -987,7 +980,6 @@ static int __devinit au1xmmc_probe(struc info("MMC controller set up at %x irq %d (mode=%s)\n", host->id, base_addr_phys, host->irq, dma ? "dma" : "pio"); - enable_irq(AU1100_SD_IRQ); platform_set_drvdata(pdev, host); return 0; @@ -1021,8 +1013,6 @@ static int __devexit au1xmmc_remove(stru if (!host) return 0; - disable_irq(AU1100_SD_IRQ); - tasklet_kill(&host->data_task); tasklet_kill(&host->finish_task);