diff options
Diffstat (limited to 'drivers/mmc')
| -rw-r--r-- | drivers/mmc/host/mxs-mmc.c | 8 | ||||
| -rw-r--r-- | drivers/mmc/host/sdhci-esdhc-imx.c | 9 | ||||
| -rw-r--r-- | drivers/mmc/host/sdhci-tegra.c | 24 | 
3 files changed, 22 insertions, 19 deletions
diff --git a/drivers/mmc/host/mxs-mmc.c b/drivers/mmc/host/mxs-mmc.c index e3f5af96ab8..bb03ddda481 100644 --- a/drivers/mmc/host/mxs-mmc.c +++ b/drivers/mmc/host/mxs-mmc.c @@ -39,6 +39,7 @@  #include <linux/regulator/consumer.h>  #include <linux/module.h>  #include <linux/fsl/mxs-dma.h> +#include <linux/pinctrl/consumer.h>  #include <mach/mxs.h>  #include <mach/common.h> @@ -682,6 +683,7 @@ static int mxs_mmc_probe(struct platform_device *pdev)  	struct mmc_host *mmc;  	struct resource *iores, *dmares, *r;  	struct mxs_mmc_platform_data *pdata; +	struct pinctrl *pinctrl;  	int ret = 0, irq_err, irq_dma;  	dma_cap_mask_t mask; @@ -719,6 +721,12 @@ static int mxs_mmc_probe(struct platform_device *pdev)  	host->irq = irq_err;  	host->sdio_irq_en = 0; +	pinctrl = devm_pinctrl_get_select_default(&pdev->dev); +	if (IS_ERR(pinctrl)) { +		ret = PTR_ERR(pinctrl); +		goto out_iounmap; +	} +  	host->clk = clk_get(&pdev->dev, NULL);  	if (IS_ERR(host->clk)) {  		ret = PTR_ERR(host->clk); diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c index 8abdaf6697a..d190d04636a 100644 --- a/drivers/mmc/host/sdhci-esdhc-imx.c +++ b/drivers/mmc/host/sdhci-esdhc-imx.c @@ -24,6 +24,7 @@  #include <linux/of.h>  #include <linux/of_device.h>  #include <linux/of_gpio.h> +#include <linux/pinctrl/consumer.h>  #include <mach/esdhc.h>  #include "sdhci-pltfm.h"  #include "sdhci-esdhc.h" @@ -68,6 +69,7 @@ struct pltfm_imx_data {  	int flags;  	u32 scratchpad;  	enum imx_esdhc_type devtype; +	struct pinctrl *pinctrl;  	struct esdhc_platform_data boarddata;  }; @@ -467,6 +469,12 @@ static int __devinit sdhci_esdhc_imx_probe(struct platform_device *pdev)  	clk_prepare_enable(clk);  	pltfm_host->clk = clk; +	imx_data->pinctrl = devm_pinctrl_get_select_default(&pdev->dev); +	if (IS_ERR(imx_data->pinctrl)) { +		err = PTR_ERR(imx_data->pinctrl); +		goto pin_err; +	} +  	host->quirks |= SDHCI_QUIRK_BROKEN_TIMEOUT_VAL;  	if (is_imx25_esdhc(imx_data) || is_imx35_esdhc(imx_data)) @@ -558,6 +566,7 @@ no_card_detect_irq:  		gpio_free(boarddata->wp_gpio);  no_card_detect_pin:  no_board_data: +pin_err:  	clk_disable_unprepare(pltfm_host->clk);  	clk_put(pltfm_host->clk);  err_clk_get: diff --git a/drivers/mmc/host/sdhci-tegra.c b/drivers/mmc/host/sdhci-tegra.c index 53b26502f6e..ff5a1699193 100644 --- a/drivers/mmc/host/sdhci-tegra.c +++ b/drivers/mmc/host/sdhci-tegra.c @@ -269,7 +269,6 @@ static int __devinit sdhci_tegra_probe(struct platform_device *pdev)  				"failed to allocate power gpio\n");  			goto err_power_req;  		} -		tegra_gpio_enable(plat->power_gpio);  		gpio_direction_output(plat->power_gpio, 1);  	} @@ -280,7 +279,6 @@ static int __devinit sdhci_tegra_probe(struct platform_device *pdev)  				"failed to allocate cd gpio\n");  			goto err_cd_req;  		} -		tegra_gpio_enable(plat->cd_gpio);  		gpio_direction_input(plat->cd_gpio);  		rc = request_irq(gpio_to_irq(plat->cd_gpio), carddetect_irq, @@ -301,7 +299,6 @@ static int __devinit sdhci_tegra_probe(struct platform_device *pdev)  				"failed to allocate wp gpio\n");  			goto err_wp_req;  		} -		tegra_gpio_enable(plat->wp_gpio);  		gpio_direction_input(plat->wp_gpio);  	} @@ -329,23 +326,17 @@ err_add_host:  	clk_disable(pltfm_host->clk);  	clk_put(pltfm_host->clk);  err_clk_get: -	if (gpio_is_valid(plat->wp_gpio)) { -		tegra_gpio_disable(plat->wp_gpio); +	if (gpio_is_valid(plat->wp_gpio))  		gpio_free(plat->wp_gpio); -	}  err_wp_req:  	if (gpio_is_valid(plat->cd_gpio))  		free_irq(gpio_to_irq(plat->cd_gpio), host);  err_cd_irq_req: -	if (gpio_is_valid(plat->cd_gpio)) { -		tegra_gpio_disable(plat->cd_gpio); +	if (gpio_is_valid(plat->cd_gpio))  		gpio_free(plat->cd_gpio); -	}  err_cd_req: -	if (gpio_is_valid(plat->power_gpio)) { -		tegra_gpio_disable(plat->power_gpio); +	if (gpio_is_valid(plat->power_gpio))  		gpio_free(plat->power_gpio); -	}  err_power_req:  err_no_plat:  	sdhci_pltfm_free(pdev); @@ -362,21 +353,16 @@ static int __devexit sdhci_tegra_remove(struct platform_device *pdev)  	sdhci_remove_host(host, dead); -	if (gpio_is_valid(plat->wp_gpio)) { -		tegra_gpio_disable(plat->wp_gpio); +	if (gpio_is_valid(plat->wp_gpio))  		gpio_free(plat->wp_gpio); -	}  	if (gpio_is_valid(plat->cd_gpio)) {  		free_irq(gpio_to_irq(plat->cd_gpio), host); -		tegra_gpio_disable(plat->cd_gpio);  		gpio_free(plat->cd_gpio);  	} -	if (gpio_is_valid(plat->power_gpio)) { -		tegra_gpio_disable(plat->power_gpio); +	if (gpio_is_valid(plat->power_gpio))  		gpio_free(plat->power_gpio); -	}  	clk_disable(pltfm_host->clk);  	clk_put(pltfm_host->clk);  |