mmc: atmel-mci: save and restore sdioirq when soft reset is performed
authorLudovic Desroches <[email protected]>
Thu, 9 Feb 2012 10:55:29 +0000 (11:55 +0100)
committerChris Ball <[email protected]>
Tue, 14 Feb 2012 01:39:05 +0000 (20:39 -0500)
Sometimes a software reset is needed. Then some registers are saved and
restored but the interrupt mask register is missing. It causes issues
with sdio devices whose interrupts are masked after reset.

Signed-off-by: Ludovic Desroches <[email protected]>
Cc: stable <[email protected]>
Signed-off-by: Nicolas Ferre <[email protected]>
Signed-off-by: Chris Ball <[email protected]>
drivers/mmc/host/atmel-mci.c

index fcfe1eb5acc8f421a1e10a3c387c3c139171ef4d..6985cdb0bb26e641fb340c0218d331e48844614a 100644 (file)
@@ -969,11 +969,14 @@ static void atmci_start_request(struct atmel_mci *host,
        host->data_status = 0;
 
        if (host->need_reset) {
+               iflags = atmci_readl(host, ATMCI_IMR);
+               iflags &= (ATMCI_SDIOIRQA | ATMCI_SDIOIRQB);
                atmci_writel(host, ATMCI_CR, ATMCI_CR_SWRST);
                atmci_writel(host, ATMCI_CR, ATMCI_CR_MCIEN);
                atmci_writel(host, ATMCI_MR, host->mode_reg);
                if (host->caps.has_cfg_reg)
                        atmci_writel(host, ATMCI_CFG, host->cfg_reg);
+               atmci_writel(host, ATMCI_IER, iflags);
                host->need_reset = false;
        }
        atmci_writel(host, ATMCI_SDCR, slot->sdc_reg);