diff options
Diffstat (limited to 'drivers/mmc')
| -rw-r--r-- | drivers/mmc/host/Kconfig | 2 | ||||
| -rw-r--r-- | drivers/mmc/host/omap_hsmmc.c | 36 | 
2 files changed, 27 insertions, 11 deletions
| diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig index afe8c6fa166a..54f91321749a 100644 --- a/drivers/mmc/host/Kconfig +++ b/drivers/mmc/host/Kconfig @@ -225,7 +225,7 @@ config MMC_OMAP  config MMC_OMAP_HS  	tristate "TI OMAP High Speed Multimedia Card Interface support" -	depends on ARCH_OMAP2430 || ARCH_OMAP3 || ARCH_OMAP4 +	depends on SOC_OMAP2430 || ARCH_OMAP3 || ARCH_OMAP4  	help  	  This selects the TI OMAP High Speed Multimedia card Interface.  	  If you have an OMAP2430 or OMAP3 board or OMAP4 board with a diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c index 078fdf11af03..158c0ee53b2c 100644 --- a/drivers/mmc/host/omap_hsmmc.c +++ b/drivers/mmc/host/omap_hsmmc.c @@ -118,7 +118,7 @@  #define MMC_TIMEOUT_MS		20  #define OMAP_MMC_MASTER_CLOCK	96000000 -#define DRIVER_NAME		"mmci-omap-hs" +#define DRIVER_NAME		"omap_hsmmc"  /* Timeouts for entering power saving states on inactivity, msec */  #define OMAP_MMC_DISABLED_TIMEOUT	100 @@ -260,7 +260,7 @@ static int omap_hsmmc_1_set_power(struct device *dev, int slot, int power_on,  	return ret;  } -static int omap_hsmmc_23_set_power(struct device *dev, int slot, int power_on, +static int omap_hsmmc_235_set_power(struct device *dev, int slot, int power_on,  				   int vdd)  {  	struct omap_hsmmc_host *host = @@ -316,6 +316,12 @@ static int omap_hsmmc_23_set_power(struct device *dev, int slot, int power_on,  	return ret;  } +static int omap_hsmmc_4_set_power(struct device *dev, int slot, int power_on, +					int vdd) +{ +	return 0; +} +  static int omap_hsmmc_1_set_sleep(struct device *dev, int slot, int sleep,  				  int vdd, int cardsleep)  { @@ -326,7 +332,7 @@ static int omap_hsmmc_1_set_sleep(struct device *dev, int slot, int sleep,  	return regulator_set_mode(host->vcc, mode);  } -static int omap_hsmmc_23_set_sleep(struct device *dev, int slot, int sleep, +static int omap_hsmmc_235_set_sleep(struct device *dev, int slot, int sleep,  				   int vdd, int cardsleep)  {  	struct omap_hsmmc_host *host = @@ -365,6 +371,12 @@ static int omap_hsmmc_23_set_sleep(struct device *dev, int slot, int sleep,  		return regulator_enable(host->vcc_aux);  } +static int omap_hsmmc_4_set_sleep(struct device *dev, int slot, int sleep, +					int vdd, int cardsleep) +{ +	return 0; +} +  static int omap_hsmmc_reg_get(struct omap_hsmmc_host *host)  {  	struct regulator *reg; @@ -379,10 +391,14 @@ static int omap_hsmmc_reg_get(struct omap_hsmmc_host *host)  		break;  	case OMAP_MMC2_DEVID:  	case OMAP_MMC3_DEVID: +	case OMAP_MMC5_DEVID:  		/* Off-chip level shifting, or none */ -		mmc_slot(host).set_power = omap_hsmmc_23_set_power; -		mmc_slot(host).set_sleep = omap_hsmmc_23_set_sleep; +		mmc_slot(host).set_power = omap_hsmmc_235_set_power; +		mmc_slot(host).set_sleep = omap_hsmmc_235_set_sleep;  		break; +	case OMAP_MMC4_DEVID: +		mmc_slot(host).set_power = omap_hsmmc_4_set_power; +		mmc_slot(host).set_sleep = omap_hsmmc_4_set_sleep;  	default:  		pr_err("MMC%d configuration not supported!\n", host->id);  		return -EINVAL; @@ -1555,7 +1571,7 @@ static void omap_hsmmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)  		break;  	} -	if (host->id == OMAP_MMC1_DEVID) { +	if (host->pdata->controller_flags & OMAP_HSMMC_SUPPORTS_DUAL_VOLT) {  		/* Only MMC1 can interface at 3V without some flavor  		 * of external transceiver; but they all handle 1.8V.  		 */ @@ -1647,7 +1663,7 @@ static void omap_hsmmc_conf_bus_power(struct omap_hsmmc_host *host)  	u32 hctl, capa, value;  	/* Only MMC1 supports 3.0V */ -	if (host->id == OMAP_MMC1_DEVID) { +	if (host->pdata->controller_flags & OMAP_HSMMC_SUPPORTS_DUAL_VOLT) {  		hctl = SDVS30;  		capa = VS30 | VS18;  	} else { @@ -2101,14 +2117,14 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)  	/* we start off in DISABLED state */  	host->dpm_state = DISABLED; -	if (mmc_host_enable(host->mmc) != 0) { +	if (clk_enable(host->iclk) != 0) {  		clk_put(host->iclk);  		clk_put(host->fclk);  		goto err1;  	} -	if (clk_enable(host->iclk) != 0) { -		mmc_host_disable(host->mmc); +	if (mmc_host_enable(host->mmc) != 0) { +		clk_disable(host->iclk);  		clk_put(host->iclk);  		clk_put(host->fclk);  		goto err1; |