diff options
Diffstat (limited to 'drivers/mmc/host/davinci_mmc.c')
| -rw-r--r-- | drivers/mmc/host/davinci_mmc.c | 14 | 
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/mmc/host/davinci_mmc.c b/drivers/mmc/host/davinci_mmc.c index d7427894e0bc..9cbde800685d 100644 --- a/drivers/mmc/host/davinci_mmc.c +++ b/drivers/mmc/host/davinci_mmc.c @@ -224,6 +224,9 @@ static void davinci_fifo_data_trans(struct mmc_davinci_host *host,  	}  	p = sgm->addr; +	if (n > sgm->length) +		n = sgm->length; +  	/* NOTE:  we never transfer more than rw_threshold bytes  	 * to/from the fifo here; there's no I/O overlap.  	 * This also assumes that access width( i.e. ACCWD) is 4 bytes @@ -1184,7 +1187,7 @@ static int davinci_mmcsd_probe(struct platform_device *pdev)  	struct mmc_davinci_host *host = NULL;  	struct mmc_host *mmc = NULL;  	struct resource *r, *mem = NULL; -	int ret, irq; +	int ret, irq, bus_width;  	size_t mem_size;  	const struct platform_device_id *id_entry; @@ -1314,9 +1317,14 @@ static int davinci_mmcsd_probe(struct platform_device *pdev)  	rename_region(mem, mmc_hostname(mmc)); +	if (mmc->caps & MMC_CAP_8_BIT_DATA) +		bus_width = 8; +	else if (mmc->caps & MMC_CAP_4_BIT_DATA) +		bus_width = 4; +	else +		bus_width = 1;  	dev_info(mmc_dev(host->mmc), "Using %s, %d-bit mode\n", -		host->use_dma ? "DMA" : "PIO", -		(mmc->caps & MMC_CAP_4_BIT_DATA) ? 4 : 1); +		 host->use_dma ? "DMA" : "PIO", bus_width);  	return 0;  | 
