diff options
Diffstat (limited to 'drivers/mmc/host/sdhci-pci-core.c')
| -rw-r--r-- | drivers/mmc/host/sdhci-pci-core.c | 17 | 
1 files changed, 17 insertions, 0 deletions
| diff --git a/drivers/mmc/host/sdhci-pci-core.c b/drivers/mmc/host/sdhci-pci-core.c index bbaddf18a1b3..67d787fa3306 100644 --- a/drivers/mmc/host/sdhci-pci-core.c +++ b/drivers/mmc/host/sdhci-pci-core.c @@ -392,6 +392,7 @@ static const struct sdhci_pci_fixes sdhci_intel_pch_sdio = {  enum {  	INTEL_DSM_FNS		=  0, +	INTEL_DSM_V18_SWITCH	=  3,  	INTEL_DSM_DRV_STRENGTH	=  9,  	INTEL_DSM_D3_RETUNE	= 10,  }; @@ -447,6 +448,8 @@ static void intel_dsm_init(struct intel_host *intel_host, struct device *dev,  	int err;  	u32 val; +	intel_host->d3_retune = true; +  	err = __intel_dsm(intel_host, dev, INTEL_DSM_FNS, &intel_host->dsm_fns);  	if (err) {  		pr_debug("%s: DSM not supported, error %d\n", @@ -557,6 +560,19 @@ static void intel_hs400_enhanced_strobe(struct mmc_host *mmc,  	sdhci_writel(host, val, INTEL_HS400_ES_REG);  } +static void sdhci_intel_voltage_switch(struct sdhci_host *host) +{ +	struct sdhci_pci_slot *slot = sdhci_priv(host); +	struct intel_host *intel_host = sdhci_pci_priv(slot); +	struct device *dev = &slot->chip->pdev->dev; +	u32 result = 0; +	int err; + +	err = intel_dsm(intel_host, dev, INTEL_DSM_V18_SWITCH, &result); +	pr_debug("%s: %s DSM error %d result %u\n", +		 mmc_hostname(host->mmc), __func__, err, result); +} +  static const struct sdhci_ops sdhci_intel_byt_ops = {  	.set_clock		= sdhci_set_clock,  	.set_power		= sdhci_intel_set_power, @@ -565,6 +581,7 @@ static const struct sdhci_ops sdhci_intel_byt_ops = {  	.reset			= sdhci_reset,  	.set_uhs_signaling	= sdhci_set_uhs_signaling,  	.hw_reset		= sdhci_pci_hw_reset, +	.voltage_switch		= sdhci_intel_voltage_switch,  };  static void byt_read_dsm(struct sdhci_pci_slot *slot) |