aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc/host/mmci.h
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@stericsson.com>2010-10-19 13:41:24 +0100
committerRussell King <rmk+kernel@arm.linux.org.uk>2010-11-10 13:12:59 +0000
commitf20f8f21e0402c785c342547f7e49eafc42cfb52 (patch)
treece9f9b37de7c065a406273d597bc31e114effdfd /drivers/mmc/host/mmci.h
parentARM: 6311/2: mmci: work with only one irq (diff)
downloadlinux-dev-f20f8f21e0402c785c342547f7e49eafc42cfb52.tar.xz
linux-dev-f20f8f21e0402c785c342547f7e49eafc42cfb52.zip
ARM: 6399/3: mmci: handle broken MCI_DATABLOCKEND hardware
On the U300 the MCI_DATAEND and MCI_DATABLOCKEND IRQs can arrive out-of-order. Replace an ugly #ifdef hack with a proper runtime solution which models what is really happening. In the U300 DMA mode and on all Ux500 models, the MCI_DATABLOCKEND flag isn't properly cleared in hardware following and ACK leading to all kind of weird behaviour when the flag is still up in subsequent interrupts, so we add two flags indicating the error and handle this runtime. Cc: Rabin Vincent <rabin.vincent@stericsson.com> Signed-off-by: Linus Walleij <linus.walleij@stericsson.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'drivers/mmc/host/mmci.h')
-rw-r--r--drivers/mmc/host/mmci.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/mmc/host/mmci.h b/drivers/mmc/host/mmci.h
index b4e48bde1b4e..df06f01aac89 100644
--- a/drivers/mmc/host/mmci.h
+++ b/drivers/mmc/host/mmci.h
@@ -177,6 +177,9 @@ struct mmci_host {
struct timer_list timer;
unsigned int oldstat;
+ bool blockend;
+ bool dataend;
+
/* pio stuff */
struct sg_mapping_iter sg_miter;
unsigned int size;