aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc
diff options
context:
space:
mode:
authorLudovic Desroches <ludovic.desroches@atmel.com>2012-02-09 11:55:29 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-02-20 12:46:20 -0800
commitb207384ec8dd38b408be6c29bcf7a3484771c34e (patch)
tree23373ad6dd5613a9799d79f6986a8d0874c4411c /drivers/mmc
parent2edcb814b345ab919010974e88a4bbd407bf4db8 (diff)
downloadkernel_samsung_smdk4412-b207384ec8dd38b408be6c29bcf7a3484771c34e.zip
kernel_samsung_smdk4412-b207384ec8dd38b408be6c29bcf7a3484771c34e.tar.gz
kernel_samsung_smdk4412-b207384ec8dd38b408be6c29bcf7a3484771c34e.tar.bz2
mmc: atmel-mci: save and restore sdioirq when soft reset is performed
commit 18ee684b8ab666329e0a0a72d8b70f16fb0e2243 upstream. 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 <ludovic.desroches@atmel.com> Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> Signed-off-by: Chris Ball <cjb@laptop.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/mmc')
-rw-r--r--drivers/mmc/host/atmel-mci.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/mmc/host/atmel-mci.c b/drivers/mmc/host/atmel-mci.c
index a7ee502..72bc756 100644
--- a/drivers/mmc/host/atmel-mci.c
+++ b/drivers/mmc/host/atmel-mci.c
@@ -965,11 +965,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);