Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc: mmc: Fix re-probing with PM_POST_RESTORE notification mmc: atmel-mci: fix multiblock SDIO transfers mmc: at91_mci: fix multiblock SDIO transfers
This commit is contained in:
commit
92a8cd4267
|
@ -74,6 +74,8 @@
|
|||
#define AT91_MCI_TRTYP_BLOCK (0 << 19)
|
||||
#define AT91_MCI_TRTYP_MULTIPLE (1 << 19)
|
||||
#define AT91_MCI_TRTYP_STREAM (2 << 19)
|
||||
#define AT91_MCI_TRTYP_SDIO_BYTE (4 << 19)
|
||||
#define AT91_MCI_TRTYP_SDIO_BLOCK (5 << 19)
|
||||
|
||||
#define AT91_MCI_BLKR 0x18 /* Block Register */
|
||||
#define AT91_MCI_BLKR_BCNT(n) ((0xffff & (n)) << 0) /* Block count */
|
||||
|
|
|
@ -1773,6 +1773,7 @@ int mmc_pm_notify(struct notifier_block *notify_block,
|
|||
|
||||
case PM_POST_SUSPEND:
|
||||
case PM_POST_HIBERNATION:
|
||||
case PM_POST_RESTORE:
|
||||
|
||||
spin_lock_irqsave(&host->lock, flags);
|
||||
host->rescan_disable = 0;
|
||||
|
|
|
@ -69,6 +69,7 @@
|
|||
#include <linux/highmem.h>
|
||||
|
||||
#include <linux/mmc/host.h>
|
||||
#include <linux/mmc/sdio.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/irq.h>
|
||||
|
@ -493,10 +494,14 @@ static void at91_mci_send_command(struct at91mci_host *host, struct mmc_command
|
|||
else if (data->flags & MMC_DATA_WRITE)
|
||||
cmdr |= AT91_MCI_TRCMD_START;
|
||||
|
||||
if (data->flags & MMC_DATA_STREAM)
|
||||
cmdr |= AT91_MCI_TRTYP_STREAM;
|
||||
if (data->blocks > 1)
|
||||
cmdr |= AT91_MCI_TRTYP_MULTIPLE;
|
||||
if (cmd->opcode == SD_IO_RW_EXTENDED) {
|
||||
cmdr |= AT91_MCI_TRTYP_SDIO_BLOCK;
|
||||
} else {
|
||||
if (data->flags & MMC_DATA_STREAM)
|
||||
cmdr |= AT91_MCI_TRTYP_STREAM;
|
||||
if (data->blocks > 1)
|
||||
cmdr |= AT91_MCI_TRTYP_MULTIPLE;
|
||||
}
|
||||
}
|
||||
else {
|
||||
block_length = 0;
|
||||
|
|
|
@ -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 a new issue