ARM: 5896/1: MMCI: work around a hardware bug in U300
authorLinus Walleij <linus.walleij@stericsson.com>
Mon, 25 Jan 2010 06:14:46 +0000 (07:14 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Wed, 27 Jan 2010 22:00:47 +0000 (22:00 +0000)
In the U300 some hardware bug makes the status flag not come up
signalling a successful write (or anything else, like an error, for
that matter) on write requests. This little quirk makes the writes
work on U300.

Signed-off-by: Linus Walleij <linus.walleij@stericsson.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/mmc/host/mmci.c

index 90d168ad03b6ca60574f45c03175b845bb2033b3..643818a5ac459fd7ad473cddd6821666fc5bec20 100644 (file)
@@ -184,6 +184,17 @@ mmci_data_irq(struct mmci_host *host, struct mmc_data *data,
 {
        if (status & MCI_DATABLOCKEND) {
                host->data_xfered += data->blksz;
+#ifdef CONFIG_ARCH_U300
+               /*
+                * On the U300 some signal or other is
+                * badly routed so that a data write does
+                * not properly terminate with a MCI_DATAEND
+                * status flag. This quirk will make writes
+                * work again.
+                */
+               if (data->flags & MMC_DATA_WRITE)
+                       status |= MCI_DATAEND;
+#endif
        }
        if (status & (MCI_DATACRCFAIL|MCI_DATATIMEOUT|MCI_TXUNDERRUN|MCI_RXOVERRUN)) {
                if (status & MCI_DATACRCFAIL)