diff options
Diffstat (limited to 'drivers/mmc')
| -rw-r--r-- | drivers/mmc/card/block.c | 8 | ||||
| -rw-r--r-- | drivers/mmc/core/core.c | 4 | ||||
| -rw-r--r-- | drivers/mmc/host/mmci.c | 2 | ||||
| -rw-r--r-- | drivers/mmc/host/mvsdio.c | 11 | ||||
| -rw-r--r-- | drivers/mmc/host/omap.c | 2 | ||||
| -rw-r--r-- | drivers/mmc/host/sdhci-pci.c | 8 | ||||
| -rw-r--r-- | drivers/mmc/host/sdhci.h | 2 | 
7 files changed, 22 insertions, 15 deletions
diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c index fe8041e619e..b25e9b6516a 100644 --- a/drivers/mmc/card/block.c +++ b/drivers/mmc/card/block.c @@ -254,6 +254,14 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)  		brq.data.blocks = req->nr_sectors;  		/* +		 * The block layer doesn't support all sector count +		 * restrictions, so we need to be prepared for too big +		 * requests. +		 */ +		if (brq.data.blocks > card->host->max_blk_count) +			brq.data.blocks = card->host->max_blk_count; + +		/*  		 * After a read error, we redo the request one sector at a time  		 * in order to accurately determine which sectors can be read  		 * successfully. diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index fa073ab3fa3..26491173275 100644 --- a/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c @@ -706,7 +706,7 @@ static void mmc_power_up(struct mmc_host *host)  	 * This delay should be sufficient to allow the power supply  	 * to reach the minimum voltage.  	 */ -	mmc_delay(2); +	mmc_delay(10);  	host->ios.clock = host->f_min;  	host->ios.power_mode = MMC_POWER_ON; @@ -716,7 +716,7 @@ static void mmc_power_up(struct mmc_host *host)  	 * This delay must be at least 74 clock sizes, or 1 ms, or the  	 * time required to reach a stable voltage.  	 */ -	mmc_delay(2); +	mmc_delay(10);  }  static void mmc_power_off(struct mmc_host *host) diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c index a663429b3d5..36875dcfa49 100644 --- a/drivers/mmc/host/mmci.c +++ b/drivers/mmc/host/mmci.c @@ -514,6 +514,7 @@ static int __devinit mmci_probe(struct amba_device *dev, void *id)  	}  	host = mmc_priv(mmc); +	host->mmc = mmc;  	/* Bits 12 thru 19 is the designer */  	host->hw_designer = (dev->periphid >> 12) & 0xff;  	/* Bits 20 thru 23 is the revison */ @@ -545,7 +546,6 @@ static int __devinit mmci_probe(struct amba_device *dev, void *id)  		host->mclk = clk_get_rate(host->clk);  		DBG(host, "eventual mclk rate: %u Hz\n", host->mclk);  	} -	host->mmc = mmc;  	host->base = ioremap(dev->res.start, SZ_4K);  	if (!host->base) {  		ret = -ENOMEM; diff --git a/drivers/mmc/host/mvsdio.c b/drivers/mmc/host/mvsdio.c index b5c375d94ab..c643d0fe118 100644 --- a/drivers/mmc/host/mvsdio.c +++ b/drivers/mmc/host/mvsdio.c @@ -825,24 +825,23 @@ static int __exit mvsd_remove(struct platform_device *pdev)  }  #ifdef CONFIG_PM -static int mvsd_suspend(struct platform_device *dev, pm_message_t state, -			   u32 level) +static int mvsd_suspend(struct platform_device *dev, pm_message_t state)  {  	struct mmc_host *mmc = platform_get_drvdata(dev);  	int ret = 0; -	if (mmc && level == SUSPEND_DISABLE) +	if (mmc)  		ret = mmc_suspend_host(mmc, state);  	return ret;  } -static int mvsd_resume(struct platform_device *dev, u32 level) +static int mvsd_resume(struct platform_device *dev)  { -	struct mmc_host *mmc = platform_dev_get_drvdata(dev); +	struct mmc_host *mmc = platform_get_drvdata(dev);  	int ret = 0; -	if (mmc && level == RESUME_ENABLE) +	if (mmc)  		ret = mmc_resume_host(mmc);  	return ret; diff --git a/drivers/mmc/host/omap.c b/drivers/mmc/host/omap.c index 5570849188c..bfa25c01c87 100644 --- a/drivers/mmc/host/omap.c +++ b/drivers/mmc/host/omap.c @@ -157,8 +157,6 @@ struct mmc_omap_host {  	struct timer_list	dma_timer;  	unsigned		dma_len; -	short			power_pin; -  	struct mmc_omap_slot    *slots[OMAP_MMC_MAX_SLOTS];  	struct mmc_omap_slot    *current_slot;  	spinlock_t              slot_lock; diff --git a/drivers/mmc/host/sdhci-pci.c b/drivers/mmc/host/sdhci-pci.c index cd37962ec44..65be27995d5 100644 --- a/drivers/mmc/host/sdhci-pci.c +++ b/drivers/mmc/host/sdhci-pci.c @@ -522,8 +522,8 @@ static struct sdhci_pci_slot * __devinit sdhci_pci_probe_slot(  	host = sdhci_alloc_host(&pdev->dev, sizeof(struct sdhci_pci_slot));  	if (IS_ERR(host)) { -		ret = PTR_ERR(host); -		goto unmap; +		dev_err(&pdev->dev, "cannot allocate host\n"); +		return ERR_PTR(PTR_ERR(host));  	}  	slot = sdhci_priv(host); @@ -541,7 +541,7 @@ static struct sdhci_pci_slot * __devinit sdhci_pci_probe_slot(  	ret = pci_request_region(pdev, bar, mmc_hostname(host->mmc));  	if (ret) {  		dev_err(&pdev->dev, "cannot request region\n"); -		return ERR_PTR(ret); +		goto free;  	}  	addr = pci_resource_start(pdev, bar); @@ -572,6 +572,8 @@ unmap:  release:  	pci_release_region(pdev, bar); + +free:  	sdhci_free_host(host);  	return ERR_PTR(ret); diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h index f20a834f430..65c6f996bbd 100644 --- a/drivers/mmc/host/sdhci.h +++ b/drivers/mmc/host/sdhci.h @@ -125,7 +125,7 @@  #define  SDHCI_INT_DATA_MASK	(SDHCI_INT_DATA_END | SDHCI_INT_DMA_END | \  		SDHCI_INT_DATA_AVAIL | SDHCI_INT_SPACE_AVAIL | \  		SDHCI_INT_DATA_TIMEOUT | SDHCI_INT_DATA_CRC | \ -		SDHCI_INT_DATA_END_BIT) +		SDHCI_INT_DATA_END_BIT | SDHCI_ADMA_ERROR)  #define SDHCI_INT_ALL_MASK	((unsigned int)-1)  #define SDHCI_ACMD12_ERR	0x3C  |