diff options
author | Russell King <rmk@dyn-67.arm.linux.org.uk> | 2006-06-04 17:51:15 +0100 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2006-06-19 13:05:08 +0100 |
commit | a3fd4a1b9ced850ac1a9d5bb9f8fab494d07f3fa (patch) | |
tree | dc2b9354fe087663cc862a966d12824601702c29 /drivers/mmc/sdhci.c | |
parent | 12223dabc617a4babfba4e17feb1ed88e8cfeb8f (diff) | |
download | op-kernel-dev-a3fd4a1b9ced850ac1a9d5bb9f8fab494d07f3fa.zip op-kernel-dev-a3fd4a1b9ced850ac1a9d5bb9f8fab494d07f3fa.tar.gz |
[MMC] Convert all hosts except mmci to use data->blksz
The MMC specification allows non-power of two block sizes. As such,
we should not pass the log2 block size to host drivers, but instead
pass the byte size.
However, ARM MMCI can only work with log2 block size, so continue to
pass both the log2 block size and byte block size. This means that
for the moment, the byte block size must remain a power of two, but
this is the first stage of removing this restriction for other hosts.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'drivers/mmc/sdhci.c')
-rw-r--r-- | drivers/mmc/sdhci.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c index 6bfcdbc..8e9100b 100644 --- a/drivers/mmc/sdhci.c +++ b/drivers/mmc/sdhci.c @@ -268,7 +268,7 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_data *data) } DBG("blksz %04x blks %04x flags %08x\n", - 1 << data->blksz_bits, data->blocks, data->flags); + data->blksz, data->blocks, data->flags); DBG("tsac %d ms nsac %d clk\n", data->timeout_ns / 1000000, data->timeout_clks); @@ -282,7 +282,7 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_data *data) writew(mode, host->ioaddr + SDHCI_TRANSFER_MODE); - writew(1 << data->blksz_bits, host->ioaddr + SDHCI_BLOCK_SIZE); + writew(data->blksz, host->ioaddr + SDHCI_BLOCK_SIZE); writew(data->blocks, host->ioaddr + SDHCI_BLOCK_COUNT); if (host->flags & SDHCI_USE_DMA) { @@ -294,7 +294,7 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_data *data) writel(sg_dma_address(data->sg), host->ioaddr + SDHCI_DMA_ADDRESS); } else { - host->size = (1 << data->blksz_bits) * data->blocks; + host->size = data->blksz * data->blocks; host->cur_sg = data->sg; host->num_sg = data->sg_len; @@ -335,7 +335,7 @@ static void sdhci_finish_data(struct sdhci_host *host) blocks = 0; else blocks = readw(host->ioaddr + SDHCI_BLOCK_COUNT); - data->bytes_xfered = (1 << data->blksz_bits) * (data->blocks - blocks); + data->bytes_xfered = data->blksz * (data->blocks - blocks); if ((data->error == MMC_ERR_NONE) && blocks) { printk(KERN_ERR "%s: Controller signalled completion even " |