Merge branch 'cleanups/assorted' into imx-fixes-for-arnd
[pandora-kernel.git] / drivers / mmc / core / sdio_ops.c
index f087d87..b0517cc 100644 (file)
@@ -121,7 +121,7 @@ int mmc_io_rw_direct(struct mmc_card *card, int write, unsigned fn,
 int mmc_io_rw_extended(struct mmc_card *card, int write, unsigned fn,
        unsigned addr, int incr_addr, u8 *buf, unsigned blocks, unsigned blksz)
 {
-       struct mmc_request mrq = {0};
+       struct mmc_request mrq = {NULL};
        struct mmc_command cmd = {0};
        struct mmc_data data = {0};
        struct scatterlist sg;
@@ -144,8 +144,11 @@ int mmc_io_rw_extended(struct mmc_card *card, int write, unsigned fn,
        cmd.arg |= fn << 28;
        cmd.arg |= incr_addr ? 0x04000000 : 0x00000000;
        cmd.arg |= addr << 9;
-       if (blocks == 1 && blksz <= 512)
-               cmd.arg |= (blksz == 512) ? 0 : blksz;  /* byte mode */
+       if (blocks == 1 && blksz < 512)
+               cmd.arg |= blksz;                       /* byte mode */
+       else if (blocks == 1 && blksz == 512 &&
+                !(mmc_card_broken_byte_mode_512(card)))
+               cmd.arg |= 0;                           /* byte mode, 0==512 */
        else
                cmd.arg |= 0x08000000 | blocks;         /* block mode */
        cmd.flags = MMC_RSP_SPI_R5 | MMC_RSP_R5 | MMC_CMD_ADTC;