lkml.org 
[lkml]   [2011]   [Jan]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[118/152] mmc: atmel-mci: fix multiblock SDIO transfers
    2.6.36-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Nicolas Ferre <nicolas.ferre@atmel.com>

    commit 2f1d791882d21a4002a719fb016a1ac21c8bd6b7 upstream.

    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>
    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>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    drivers/mmc/host/atmel-mci.c | 18 ++++++++++++------
    1 file changed, 12 insertions(+), 6 deletions(-)

    --- a/drivers/mmc/host/atmel-mci.c
    +++ b/drivers/mmc/host/atmel-mci.c
    @@ -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
    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;



    \
     
     \ /
      Last update: 2011-01-06 01:59    [W:0.022 / U:64.140 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site