Parcourir la source

sdhci: be more cautious about block count register

The block count register shouldn't be trusted for single block transfers,
so avoid using it completely when calculating transferred bytes.

Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
Pierre Ossman il y a 18 ans
Parent
commit
2b06197340
1 fichiers modifiés avec 2 ajouts et 2 suppressions
  1. 2 2
      drivers/mmc/host/sdhci.c

+ 2 - 2
drivers/mmc/host/sdhci.c

@@ -477,8 +477,8 @@ static void sdhci_finish_data(struct sdhci_host *host)
 	/*
 	/*
 	 * Controller doesn't count down when in single block mode.
 	 * Controller doesn't count down when in single block mode.
 	 */
 	 */
-	if ((data->blocks == 1) && (data->error == MMC_ERR_NONE))
-		blocks = 0;
+	if (data->blocks == 1)
+		blocks = (data->error == MMC_ERR_NONE) ? 0 : 1;
 	else
 	else
 		blocks = readw(host->ioaddr + SDHCI_BLOCK_COUNT);
 		blocks = readw(host->ioaddr + SDHCI_BLOCK_COUNT);
 	data->bytes_xfered = data->blksz * (data->blocks - blocks);
 	data->bytes_xfered = data->blksz * (data->blocks - blocks);