diff options
| author | Mark Brown <[email protected]> | 2013-06-14 10:16:06 +0100 | 
|---|---|---|
| committer | Mark Brown <[email protected]> | 2013-06-14 10:16:06 +0100 | 
| commit | 384b8345589cbbb18a99ce1b112da90c58c802e8 (patch) | |
| tree | 51fee39fa19adad6b24fb90123e7a0ca3159c9c5 /drivers/mmc/host/omap_hsmmc.c | |
| parent | 9c24b1672283644adf871244771ebf387dd73f90 (diff) | |
| parent | 2e7ee15ced914e109a1a5b6dfcd463d846a13bd5 (diff) | |
Merge branch 'fix/wm8962' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into asoc-wm8962
Conflicts:
	sound/soc/codecs/wm8962.c
Diffstat (limited to 'drivers/mmc/host/omap_hsmmc.c')
| -rw-r--r-- | drivers/mmc/host/omap_hsmmc.c | 51 | 
1 files changed, 32 insertions, 19 deletions
diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c index 6e44025acf01..eccedc7d06a4 100644 --- a/drivers/mmc/host/omap_hsmmc.c +++ b/drivers/mmc/host/omap_hsmmc.c @@ -161,6 +161,7 @@ struct omap_hsmmc_host {  	 */  	struct	regulator	*vcc;  	struct	regulator	*vcc_aux; +	int			pbias_disable;  	void	__iomem		*base;  	resource_size_t		mapbase;  	spinlock_t		irq_lock; /* Prevent races with irq handler */ @@ -255,11 +256,11 @@ static int omap_hsmmc_set_power(struct device *dev, int slot, int power_on,  	if (!host->vcc)  		return 0;  	/* -	 * With DT, never turn OFF the regulator. This is because +	 * With DT, never turn OFF the regulator for MMC1. This is because  	 * the pbias cell programming support is still missing when  	 * booting with Device tree  	 */ -	if (dev->of_node && !vdd) +	if (host->pbias_disable && !vdd)  		return 0;  	if (mmc_slot(host).before_set_reg) @@ -1520,10 +1521,10 @@ static void omap_hsmmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)  			(ios->vdd == DUAL_VOLT_OCR_BIT) &&  			/*  			 * With pbias cell programming missing, this -			 * can't be allowed when booting with device +			 * can't be allowed on MMC1 when booting with device  			 * tree.  			 */ -			!host->dev->of_node) { +			!host->pbias_disable) {  				/*  				 * The mmc_select_voltage fn of the core does  				 * not seem to set the power_mode to @@ -1871,6 +1872,10 @@ static int omap_hsmmc_probe(struct platform_device *pdev)  	omap_hsmmc_context_save(host); +	/* This can be removed once we support PBIAS with DT */ +	if (host->dev->of_node && host->mapbase == 0x4809c000) +		host->pbias_disable = 1; +  	host->dbclk = clk_get(&pdev->dev, "mmchsdb_fck");  	/*  	 * MMC can still work without debounce clock. @@ -1906,33 +1911,41 @@ static int omap_hsmmc_probe(struct platform_device *pdev)  	omap_hsmmc_conf_bus_power(host); -	res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "tx"); -	if (!res) { -		dev_err(mmc_dev(host->mmc), "cannot get DMA TX channel\n"); -		ret = -ENXIO; -		goto err_irq; -	} -	tx_req = res->start; +	if (!pdev->dev.of_node) { +		res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "tx"); +		if (!res) { +			dev_err(mmc_dev(host->mmc), "cannot get DMA TX channel\n"); +			ret = -ENXIO; +			goto err_irq; +		} +		tx_req = res->start; -	res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "rx"); -	if (!res) { -		dev_err(mmc_dev(host->mmc), "cannot get DMA RX channel\n"); -		ret = -ENXIO; -		goto err_irq; +		res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "rx"); +		if (!res) { +			dev_err(mmc_dev(host->mmc), "cannot get DMA RX channel\n"); +			ret = -ENXIO; +			goto err_irq; +		} +		rx_req = res->start;  	} -	rx_req = res->start;  	dma_cap_zero(mask);  	dma_cap_set(DMA_SLAVE, mask); -	host->rx_chan = dma_request_channel(mask, omap_dma_filter_fn, &rx_req); +	host->rx_chan = +		dma_request_slave_channel_compat(mask, omap_dma_filter_fn, +						 &rx_req, &pdev->dev, "rx"); +  	if (!host->rx_chan) {  		dev_err(mmc_dev(host->mmc), "unable to obtain RX DMA engine channel %u\n", rx_req);  		ret = -ENXIO;  		goto err_irq;  	} -	host->tx_chan = dma_request_channel(mask, omap_dma_filter_fn, &tx_req); +	host->tx_chan = +		dma_request_slave_channel_compat(mask, omap_dma_filter_fn, +						 &tx_req, &pdev->dev, "tx"); +  	if (!host->tx_chan) {  		dev_err(mmc_dev(host->mmc), "unable to obtain TX DMA engine channel %u\n", tx_req);  		ret = -ENXIO;  |