diff options
Diffstat (limited to 'drivers/mmc/core/sdio_ops.c')
-rw-r--r-- | drivers/mmc/core/sdio_ops.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/mmc/core/sdio_ops.c b/drivers/mmc/core/sdio_ops.c index f087d876c573..b0517cc06200 100644 --- a/drivers/mmc/core/sdio_ops.c +++ b/drivers/mmc/core/sdio_ops.c | |||
@@ -121,7 +121,7 @@ int mmc_io_rw_direct(struct mmc_card *card, int write, unsigned fn, | |||
121 | int mmc_io_rw_extended(struct mmc_card *card, int write, unsigned fn, | 121 | int mmc_io_rw_extended(struct mmc_card *card, int write, unsigned fn, |
122 | unsigned addr, int incr_addr, u8 *buf, unsigned blocks, unsigned blksz) | 122 | unsigned addr, int incr_addr, u8 *buf, unsigned blocks, unsigned blksz) |
123 | { | 123 | { |
124 | struct mmc_request mrq = {0}; | 124 | struct mmc_request mrq = {NULL}; |
125 | struct mmc_command cmd = {0}; | 125 | struct mmc_command cmd = {0}; |
126 | struct mmc_data data = {0}; | 126 | struct mmc_data data = {0}; |
127 | struct scatterlist sg; | 127 | struct scatterlist sg; |
@@ -144,8 +144,11 @@ int mmc_io_rw_extended(struct mmc_card *card, int write, unsigned fn, | |||
144 | cmd.arg |= fn << 28; | 144 | cmd.arg |= fn << 28; |
145 | cmd.arg |= incr_addr ? 0x04000000 : 0x00000000; | 145 | cmd.arg |= incr_addr ? 0x04000000 : 0x00000000; |
146 | cmd.arg |= addr << 9; | 146 | cmd.arg |= addr << 9; |
147 | if (blocks == 1 && blksz <= 512) | 147 | if (blocks == 1 && blksz < 512) |
148 | cmd.arg |= (blksz == 512) ? 0 : blksz; /* byte mode */ | 148 | cmd.arg |= blksz; /* byte mode */ |
149 | else if (blocks == 1 && blksz == 512 && | ||
150 | !(mmc_card_broken_byte_mode_512(card))) | ||
151 | cmd.arg |= 0; /* byte mode, 0==512 */ | ||
149 | else | 152 | else |
150 | cmd.arg |= 0x08000000 | blocks; /* block mode */ | 153 | cmd.arg |= 0x08000000 | blocks; /* block mode */ |
151 | cmd.flags = MMC_RSP_SPI_R5 | MMC_RSP_R5 | MMC_CMD_ADTC; | 154 | cmd.flags = MMC_RSP_SPI_R5 | MMC_RSP_R5 | MMC_CMD_ADTC; |