mmc: atmel-mci: fix multiblock SDIO transfers
Based on report made by Yauhen in: "MMC: Fix multiblock SDIO transfers in AT91 MCI" patch, I report those changes to the brother driver: atmel-mci. So, this patch sets SDIO transfer types: SDIO block and SDIO byte transfers instead of using ordinary MMC block transfers. It is checking opcode for SDIO CMD53 and setting transfer type in MCI_CMDR register properly. Reported-by: Yauhen Kharuzhy <yauhen.kharuzhy@promwad.com> Cc: <stable@kernel.org> Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> Signed-off-by: Chris Ball <cjb@laptop.org>
This commit is contained in:
		
							parent
							
								
									a2255ff451
								
							
						
					
					
						commit
						2f1d791882
					
				| @ -26,6 +26,7 @@ | ||||
| #include <linux/stat.h> | ||||
| 
 | ||||
| #include <linux/mmc/host.h> | ||||
| #include <linux/mmc/sdio.h> | ||||
| 
 | ||||
| #include <mach/atmel-mci.h> | ||||
| #include <linux/atmel-mci.h> | ||||
| @ -532,12 +533,17 @@ static u32 atmci_prepare_command(struct mmc_host *mmc, | ||||
| 	data = cmd->data; | ||||
| 	if (data) { | ||||
| 		cmdr |= MCI_CMDR_START_XFER; | ||||
| 		if (data->flags & MMC_DATA_STREAM) | ||||
| 			cmdr |= MCI_CMDR_STREAM; | ||||
| 		else if (data->blocks > 1) | ||||
| 			cmdr |= MCI_CMDR_MULTI_BLOCK; | ||||
| 		else | ||||
| 			cmdr |= MCI_CMDR_BLOCK; | ||||
| 
 | ||||
| 		if (cmd->opcode == SD_IO_RW_EXTENDED) { | ||||
| 			cmdr |= MCI_CMDR_SDIO_BLOCK; | ||||
| 		} else { | ||||
| 			if (data->flags & MMC_DATA_STREAM) | ||||
| 				cmdr |= MCI_CMDR_STREAM; | ||||
| 			else if (data->blocks > 1) | ||||
| 				cmdr |= MCI_CMDR_MULTI_BLOCK; | ||||
| 			else | ||||
| 				cmdr |= MCI_CMDR_BLOCK; | ||||
| 		} | ||||
| 
 | ||||
| 		if (data->flags & MMC_DATA_READ) | ||||
| 			cmdr |= MCI_CMDR_TRDIR_READ; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user