[MMC] mmci: allow small data transfers
authorRussell King <rmk@dyn-67.arm.linux.org.uk>
Thu, 16 Feb 2006 16:48:31 +0000 (16:48 +0000)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Thu, 16 Feb 2006 16:48:31 +0000 (16:48 +0000)
If a data transfer is small (less than a FIFO size) we would
hang waiting for the data to be read due to the PIO interrupt
not occuring.  We allowed for this in our PIO interrupt handler,
but not when setting up a data transfer.

Apply the "fix" when setting up a data transfer as well.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/mmc/mmci.c

index 37ee7f8dc82fe305195472e0ad5dd281e5c5f219..9fef29d978b5e676fead18b320f86cbd19c533b4 100644 (file)
@@ -97,6 +97,13 @@ static void mmci_start_data(struct mmci_host *host, struct mmc_data *data)
        if (data->flags & MMC_DATA_READ) {
                datactrl |= MCI_DPSM_DIRECTION;
                irqmask = MCI_RXFIFOHALFFULLMASK;
+
+               /*
+                * If we have less than a FIFOSIZE of bytes to transfer,
+                * trigger a PIO interrupt as soon as any data is available.
+                */
+               if (host->size < MCI_FIFOSIZE)
+                       irqmask |= MCI_RXDATAAVLBLMASK;
        } else {
                /*
                 * We don't actually need to include "FIFO empty" here