diff options
Diffstat (limited to 'drivers/mmc/core/host.c')
| -rw-r--r-- | drivers/mmc/core/host.c | 16 | 
1 files changed, 11 insertions, 5 deletions
diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c index 64b03d6eaf18..abf9e884386c 100644 --- a/drivers/mmc/core/host.c +++ b/drivers/mmc/core/host.c @@ -143,9 +143,6 @@ int mmc_retune(struct mmc_host *host)  			goto out;  		return_to_hs400 = true; - -		if (host->ops->prepare_hs400_tuning) -			host->ops->prepare_hs400_tuning(host, &host->ios);  	}  	err = mmc_execute_tuning(host->card); @@ -179,7 +176,7 @@ static void mmc_retune_timer(struct timer_list *t)  int mmc_of_parse(struct mmc_host *host)  {  	struct device *dev = host->parent; -	u32 bus_width, drv_type; +	u32 bus_width, drv_type, cd_debounce_delay_ms;  	int ret;  	bool cd_cap_invert, cd_gpio_invert = false;  	bool ro_cap_invert, ro_gpio_invert = false; @@ -230,11 +227,16 @@ int mmc_of_parse(struct mmc_host *host)  	} else {  		cd_cap_invert = device_property_read_bool(dev, "cd-inverted"); +		if (device_property_read_u32(dev, "cd-debounce-delay-ms", +					     &cd_debounce_delay_ms)) +			cd_debounce_delay_ms = 200; +  		if (device_property_read_bool(dev, "broken-cd"))  			host->caps |= MMC_CAP_NEEDS_POLL;  		ret = mmc_gpiod_request_cd(host, "cd", 0, true, -					   0, &cd_gpio_invert); +					   cd_debounce_delay_ms, +					   &cd_gpio_invert);  		if (!ret)  			dev_info(host->parent, "Got CD GPIO\n");  		else if (ret != -ENOENT && ret != -ENOSYS) @@ -338,6 +340,9 @@ int mmc_of_parse(struct mmc_host *host)  		host->dsr_req = 0;  	} +	device_property_read_u32(dev, "post-power-on-delay-ms", +				 &host->ios.power_delay_ms); +  	return mmc_pwrseq_alloc(host);  } @@ -403,6 +408,7 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *dev)  	host->max_blk_count = PAGE_SIZE / 512;  	host->fixed_drv_type = -EINVAL; +	host->ios.power_delay_ms = 10;  	return host;  }  | 
