Merge branch 'v2.6.36-rc8' into for-2.6.37/barrier
Conflicts: block/blk-core.c drivers/block/loop.c mm/swapfile.c Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
This commit is contained in:
@@ -362,9 +362,8 @@ static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr,
|
||||
goto err;
|
||||
}
|
||||
|
||||
err = mmc_sd_get_cid(host, host->ocr & ocr, card->raw_cid);
|
||||
|
||||
if (!err) {
|
||||
if (ocr & R4_MEMORY_PRESENT
|
||||
&& mmc_sd_get_cid(host, host->ocr & ocr, card->raw_cid) == 0) {
|
||||
card->type = MMC_TYPE_SD_COMBO;
|
||||
|
||||
if (oldcard && (oldcard->type != MMC_TYPE_SD_COMBO ||
|
||||
|
@@ -66,6 +66,7 @@
|
||||
#include <linux/clk.h>
|
||||
#include <linux/atmel_pdc.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/highmem.h>
|
||||
|
||||
#include <linux/mmc/host.h>
|
||||
|
||||
|
@@ -148,11 +148,12 @@ static int imxmci_start_clock(struct imxmci_host *host)
|
||||
|
||||
while (delay--) {
|
||||
reg = readw(host->base + MMC_REG_STATUS);
|
||||
if (reg & STATUS_CARD_BUS_CLK_RUN)
|
||||
if (reg & STATUS_CARD_BUS_CLK_RUN) {
|
||||
/* Check twice before cut */
|
||||
reg = readw(host->base + MMC_REG_STATUS);
|
||||
if (reg & STATUS_CARD_BUS_CLK_RUN)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (test_bit(IMXMCI_PEND_STARTED_b, &host->pending_events))
|
||||
return 0;
|
||||
|
@@ -2305,7 +2305,6 @@ static int omap_hsmmc_suspend(struct device *dev)
|
||||
int ret = 0;
|
||||
struct platform_device *pdev = to_platform_device(dev);
|
||||
struct omap_hsmmc_host *host = platform_get_drvdata(pdev);
|
||||
pm_message_t state = PMSG_SUSPEND; /* unused by MMC core */
|
||||
|
||||
if (host && host->suspended)
|
||||
return 0;
|
||||
@@ -2324,8 +2323,8 @@ static int omap_hsmmc_suspend(struct device *dev)
|
||||
}
|
||||
}
|
||||
cancel_work_sync(&host->mmc_carddetect_work);
|
||||
mmc_host_enable(host->mmc);
|
||||
ret = mmc_suspend_host(host->mmc);
|
||||
mmc_host_enable(host->mmc);
|
||||
if (ret == 0) {
|
||||
omap_hsmmc_disable_irq(host);
|
||||
OMAP_HSMMC_WRITE(host->base, HCTL,
|
||||
|
@@ -1600,7 +1600,7 @@ static int __devinit s3cmci_probe(struct platform_device *pdev)
|
||||
host->pio_active = XFER_NONE;
|
||||
|
||||
#ifdef CONFIG_MMC_S3C_PIODMA
|
||||
host->dodma = host->pdata->dma;
|
||||
host->dodma = host->pdata->use_dma;
|
||||
#endif
|
||||
|
||||
host->mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
|
@@ -241,8 +241,10 @@ static struct sdhci_ops sdhci_s3c_ops = {
|
||||
static void sdhci_s3c_notify_change(struct platform_device *dev, int state)
|
||||
{
|
||||
struct sdhci_host *host = platform_get_drvdata(dev);
|
||||
unsigned long flags;
|
||||
|
||||
if (host) {
|
||||
spin_lock(&host->lock);
|
||||
spin_lock_irqsave(&host->lock, flags);
|
||||
if (state) {
|
||||
dev_dbg(&dev->dev, "card inserted.\n");
|
||||
host->flags &= ~SDHCI_DEVICE_DEAD;
|
||||
@@ -253,7 +255,7 @@ static void sdhci_s3c_notify_change(struct platform_device *dev, int state)
|
||||
host->quirks &= ~SDHCI_QUIRK_BROKEN_CARD_DETECTION;
|
||||
}
|
||||
tasklet_schedule(&host->card_tasklet);
|
||||
spin_unlock(&host->lock);
|
||||
spin_unlock_irqrestore(&host->lock, flags);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -481,8 +483,10 @@ static int __devexit sdhci_s3c_remove(struct platform_device *pdev)
|
||||
sdhci_remove_host(host, 1);
|
||||
|
||||
for (ptr = 0; ptr < 3; ptr++) {
|
||||
clk_disable(sc->clk_bus[ptr]);
|
||||
clk_put(sc->clk_bus[ptr]);
|
||||
if (sc->clk_bus[ptr]) {
|
||||
clk_disable(sc->clk_bus[ptr]);
|
||||
clk_put(sc->clk_bus[ptr]);
|
||||
}
|
||||
}
|
||||
clk_disable(sc->clk_io);
|
||||
clk_put(sc->clk_io);
|
||||
|
@@ -164,6 +164,7 @@ tmio_mmc_start_command(struct tmio_mmc_host *host, struct mmc_command *cmd)
|
||||
static void tmio_mmc_pio_irq(struct tmio_mmc_host *host)
|
||||
{
|
||||
struct mmc_data *data = host->data;
|
||||
void *sg_virt;
|
||||
unsigned short *buf;
|
||||
unsigned int count;
|
||||
unsigned long flags;
|
||||
@@ -173,8 +174,8 @@ static void tmio_mmc_pio_irq(struct tmio_mmc_host *host)
|
||||
return;
|
||||
}
|
||||
|
||||
buf = (unsigned short *)(tmio_mmc_kmap_atomic(host, &flags) +
|
||||
host->sg_off);
|
||||
sg_virt = tmio_mmc_kmap_atomic(host->sg_ptr, &flags);
|
||||
buf = (unsigned short *)(sg_virt + host->sg_off);
|
||||
|
||||
count = host->sg_ptr->length - host->sg_off;
|
||||
if (count > data->blksz)
|
||||
@@ -191,7 +192,7 @@ static void tmio_mmc_pio_irq(struct tmio_mmc_host *host)
|
||||
|
||||
host->sg_off += count;
|
||||
|
||||
tmio_mmc_kunmap_atomic(host, &flags);
|
||||
tmio_mmc_kunmap_atomic(sg_virt, &flags);
|
||||
|
||||
if (host->sg_off == host->sg_ptr->length)
|
||||
tmio_mmc_next_sg(host);
|
||||
|
@@ -82,10 +82,7 @@
|
||||
|
||||
#define ack_mmc_irqs(host, i) \
|
||||
do { \
|
||||
u32 mask;\
|
||||
mask = sd_ctrl_read32((host), CTL_STATUS); \
|
||||
mask &= ~((i) & TMIO_MASK_IRQ); \
|
||||
sd_ctrl_write32((host), CTL_STATUS, mask); \
|
||||
sd_ctrl_write32((host), CTL_STATUS, ~(i)); \
|
||||
} while (0)
|
||||
|
||||
|
||||
@@ -177,19 +174,17 @@ static inline int tmio_mmc_next_sg(struct tmio_mmc_host *host)
|
||||
return --host->sg_len;
|
||||
}
|
||||
|
||||
static inline char *tmio_mmc_kmap_atomic(struct tmio_mmc_host *host,
|
||||
static inline char *tmio_mmc_kmap_atomic(struct scatterlist *sg,
|
||||
unsigned long *flags)
|
||||
{
|
||||
struct scatterlist *sg = host->sg_ptr;
|
||||
|
||||
local_irq_save(*flags);
|
||||
return kmap_atomic(sg_page(sg), KM_BIO_SRC_IRQ) + sg->offset;
|
||||
}
|
||||
|
||||
static inline void tmio_mmc_kunmap_atomic(struct tmio_mmc_host *host,
|
||||
static inline void tmio_mmc_kunmap_atomic(void *virt,
|
||||
unsigned long *flags)
|
||||
{
|
||||
kunmap_atomic(sg_page(host->sg_ptr), KM_BIO_SRC_IRQ);
|
||||
kunmap_atomic(virt, KM_BIO_SRC_IRQ);
|
||||
local_irq_restore(*flags);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user