diff options
Diffstat (limited to 'drivers/mmc/host/mmci.c')
| -rw-r--r-- | drivers/mmc/host/mmci.c | 19 | 
1 files changed, 14 insertions, 5 deletions
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c index f0fcce40cd8..50ff19a6236 100644 --- a/drivers/mmc/host/mmci.c +++ b/drivers/mmc/host/mmci.c @@ -1216,12 +1216,7 @@ static void mmci_dt_populate_generic_pdata(struct device_node *np,  	int bus_width = 0;  	pdata->gpio_wp = of_get_named_gpio(np, "wp-gpios", 0); -	if (!pdata->gpio_wp) -		pdata->gpio_wp = -1; -  	pdata->gpio_cd = of_get_named_gpio(np, "cd-gpios", 0); -	if (!pdata->gpio_cd) -		pdata->gpio_cd = -1;  	if (of_get_property(np, "cd-inverted", NULL))  		pdata->cd_invert = true; @@ -1276,6 +1271,12 @@ static int __devinit mmci_probe(struct amba_device *dev,  		return -EINVAL;  	} +	if (!plat) { +		plat = devm_kzalloc(&dev->dev, sizeof(*plat), GFP_KERNEL); +		if (!plat) +			return -ENOMEM; +	} +  	if (np)  		mmci_dt_populate_generic_pdata(np, plat); @@ -1424,6 +1425,10 @@ static int __devinit mmci_probe(struct amba_device *dev,  	writel(0, host->base + MMCIMASK1);  	writel(0xfff, host->base + MMCICLEAR); +	if (plat->gpio_cd == -EPROBE_DEFER) { +		ret = -EPROBE_DEFER; +		goto err_gpio_cd; +	}  	if (gpio_is_valid(plat->gpio_cd)) {  		ret = gpio_request(plat->gpio_cd, DRIVER_NAME " (cd)");  		if (ret == 0) @@ -1447,6 +1452,10 @@ static int __devinit mmci_probe(struct amba_device *dev,  		if (ret >= 0)  			host->gpio_cd_irq = gpio_to_irq(plat->gpio_cd);  	} +	if (plat->gpio_wp == -EPROBE_DEFER) { +		ret = -EPROBE_DEFER; +		goto err_gpio_wp; +	}  	if (gpio_is_valid(plat->gpio_wp)) {  		ret = gpio_request(plat->gpio_wp, DRIVER_NAME " (wp)");  		if (ret == 0)  |