diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
index 1ea640f..9ed2cb8 100644
--- a/arch/arm/mach-omap2/board-am335xevm.c
+++ b/arch/arm/mach-omap2/board-am335xevm.c
@@ -105,6 +105,9 @@
 #define am335x_tlk110_phy_init() do { } while (0);
 #endif
 
+/* Convert GPIO signal to GPIO pin number */
+#define GPIO_TO_PIN(bank, gpio) (32 * (bank) + (gpio))
+
 static const struct display_panel disp_panel = {
 	WVGA,
 	32,
@@ -189,8 +192,8 @@ static struct omap2_hsmmc_info am335x_mmc[] __initdata = {
 	{
 		.mmc            = 1,
 		.caps           = MMC_CAP_4_BIT_DATA,
-		.gpio_cd        = -EINVAL,/* Dedicated pins for CD and WP */
-		.gpio_wp        = -EINVAL,
+		.gpio_cd        = GPIO_TO_PIN(0, 6),
+		.gpio_wp        = GPIO_TO_PIN(3, 18),
 		.ocr_mask       = MMC_VDD_32_33 | MMC_VDD_33_34, /* 3V3 */
 	},
 	{
@@ -516,8 +519,8 @@ static struct pinmux_config mmc0_pin_mux[] = {
 	{"mmc0_dat0.mmc0_dat0",	OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
 	{"mmc0_clk.mmc0_clk",	OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
 	{"mmc0_cmd.mmc0_cmd",	OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
-	{"mcasp0_aclkr.mmc0_sdwp", OMAP_MUX_MODE4 | AM33XX_PIN_INPUT_PULLDOWN},
-	{"spi0_cs1.mmc0_sdcd",  OMAP_MUX_MODE5 | AM33XX_PIN_INPUT_PULLUP},
+	{"mcasp0_aclkr.mmc0_sdwp", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP},
+	{"spi0_cs1.mmc0_sdcd",  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP},
 	{NULL, 0},
 };
 
@@ -544,8 +547,8 @@ static struct pinmux_config mmc1_pin_mux[] = {
 	{"gpmc_ad0.mmc1_dat0",	OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP},
 	{"gpmc_csn1.mmc1_clk",	OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLUP},
 	{"gpmc_csn2.mmc1_cmd",	OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLUP},
-	{"uart1_rxd.mmc1_sdwp",	OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP},
-	{"mcasp0_fsx.mmc1_sdcd", OMAP_MUX_MODE4 | AM33XX_PIN_INPUT_PULLDOWN},
+	{"uart1_rxd.mmc1_sdwp",	OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP},
+	{"mcasp0_fsx.mmc1_sdcd", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP},
 	{NULL, 0},
 };
 
@@ -561,8 +564,8 @@ static struct pinmux_config mmc2_pin_mux[] = {
 	{"gpmc_ad12.mmc2_dat0",	OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP},
 	{"gpmc_clk.mmc2_clk",	OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP},
 	{"gpmc_csn3.mmc2_cmd",	OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP},
-	{"spi0_cs0.mmc2_sdwp",	OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN},
-	{"mcasp0_axr0.mmc2_sdcd", OMAP_MUX_MODE4 | AM33XX_PIN_INPUT_PULLUP},
+	{"spi0_cs0.mmc2_sdwp",	OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP},
+	{"mcasp0_axr0.mmc2_sdcd", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP},
 	{NULL, 0},
 };
 
@@ -627,9 +630,6 @@ static void _configure_device(int evm_id, struct evm_dev_cfg *dev_cfg,
 	}
 }
 
-/* Convert GPIO signal to GPIO pin number */
-#define GPIO_TO_PIN(bank, gpio) (32 * (bank) + (gpio))
-
 #define AM335X_LCD_BL_PIN	GPIO_TO_PIN(0, 7)
 
 /* pinmux for usb0 drvvbus */
@@ -947,8 +947,8 @@ static void mmc1_init(int evm_id, int profile)
 
 	am335x_mmc[1].mmc = 2;
 	am335x_mmc[1].caps = MMC_CAP_4_BIT_DATA;
-	am335x_mmc[1].gpio_cd = -EINVAL;
-	am335x_mmc[1].gpio_wp = -EINVAL;
+	am335x_mmc[1].gpio_cd = GPIO_TO_PIN(3, 15);
+	am335x_mmc[1].gpio_wp = GPIO_TO_PIN(0, 14);
 	am335x_mmc[1].ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34; /* 3V3 */
 
 	/* mmc will be initialized when mmc0_init is called */
@@ -961,8 +961,8 @@ static void mmc2_init(int evm_id, int profile)
 
 	am335x_mmc[1].mmc = 3;
 	am335x_mmc[1].caps = MMC_CAP_4_BIT_DATA;
-	am335x_mmc[1].gpio_cd = -EINVAL;
-	am335x_mmc[1].gpio_wp = -EINVAL;
+	am335x_mmc[1].gpio_cd = GPIO_TO_PIN(3, 16);
+	am335x_mmc[1].gpio_wp = GPIO_TO_PIN(0, 5);
 	am335x_mmc[1].ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34; /* 3V3 */
 
 	/* mmc will be initialized when mmc0_init is called */
diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
index c8a95f3..35505bd 100644
--- a/drivers/mmc/host/omap_hsmmc.c
+++ b/drivers/mmc/host/omap_hsmmc.c
@@ -211,63 +211,25 @@ static irqreturn_t omap_hsmmc_cd_handler(int irq, void *dev_id);
 static int omap_hsmmc_card_detect(struct device *dev, int slot)
 {
 	struct omap_mmc_platform_data *mmc = dev->platform_data;
-	struct omap_hsmmc_host *host =
-		platform_get_drvdata(to_platform_device(dev));
-
-	u32 pstate;
-	u32 enabled;
-
-	if (mmc->version != MMC_CTRL_VERSION_2)
-		/* NOTE: assumes card detect signal is active-low */
-		return !gpio_get_value_cansleep(mmc->slots[0].switch_pin);
-	else {
-		pstate = 0;
-		enabled = 0;
 
-		enabled = host->mmc->enabled;
-		if (!enabled)
-			mmc_host_enable(host->mmc);
-
-		pstate = OMAP_HSMMC_READ(host->base, PSTATE);
-
-		if (!enabled)
-			mmc_host_disable(host->mmc);
-		pstate = pstate & PSTATE_CINS_MASK;
-		pstate = pstate >> PSTATE_CINS_SHIFT;
-		return pstate;
-	}
+	/* NOTE: assumes card detect signal is active-low */
+	return !gpio_get_value_cansleep(mmc->slots[0].switch_pin);
 }
 
 static int omap_hsmmc_get_wp(struct device *dev, int slot)
 {
 	struct omap_mmc_platform_data *mmc = dev->platform_data;
-	struct omap_hsmmc_host *host =
-		platform_get_drvdata(to_platform_device(dev));
 
-	u32 pstate;
-
-	if (mmc->version != MMC_CTRL_VERSION_2)
-		/* NOTE: assumes write protect signal is active-high */
-		return gpio_get_value_cansleep(mmc->slots[0].gpio_wp);
-	else {
-		pstate = 0;
-		pstate = OMAP_HSMMC_READ(host->base, PSTATE);
-		pstate &= PSTATE_WP_MASK;
-		return !(pstate >> PSTATE_WP_SHIFT);
-	}
+	/* NOTE: assumes write protect signal is active-high */
+	return gpio_get_value_cansleep(mmc->slots[0].gpio_wp);
 }
 
 static int omap_hsmmc_get_cover_state(struct device *dev, int slot)
 {
 	struct omap_mmc_platform_data *mmc = dev->platform_data;
-	struct omap_hsmmc_host *host =
-		platform_get_drvdata(to_platform_device(dev));
 
-	if (mmc->version != MMC_CTRL_VERSION_2)
-		/* NOTE: assumes card detect signal is active-low */
-		return !gpio_get_value_cansleep(mmc->slots[0].switch_pin);
-	else
-		return OMAP_HSMMC_READ(host->base, PSTATE) >> PSTATE_CINS_SHIFT;
+	/* NOTE: assumes card detect signal is active-low */
+	return !gpio_get_value_cansleep(mmc->slots[0].switch_pin);
 }
 
 #ifdef CONFIG_PM
@@ -275,28 +237,18 @@ static int omap_hsmmc_get_cover_state(struct device *dev, int slot)
 static int omap_hsmmc_suspend_cdirq(struct device *dev, int slot)
 {
 	struct omap_mmc_platform_data *mmc = dev->platform_data;
-	struct omap_hsmmc_host *host =
-		platform_get_drvdata(to_platform_device(dev));
 
-	if (mmc->version != MMC_CTRL_VERSION_2)
-		disable_irq(mmc->slots[0].card_detect_irq);
-	else
-		OMAP_HSMMC_WRITE(host->base, IE,
-			OMAP_HSMMC_READ(host->base, IE) & ~IE_CINS);
+	disable_irq(mmc->slots[0].card_detect_irq);
+
 	return 0;
 }
 
 static int omap_hsmmc_resume_cdirq(struct device *dev, int slot)
 {
 	struct omap_mmc_platform_data *mmc = dev->platform_data;
-	struct omap_hsmmc_host *host =
-		platform_get_drvdata(to_platform_device(dev));
 
-	if (mmc->version != MMC_CTRL_VERSION_2)
-		enable_irq(mmc->slots[0].card_detect_irq);
-	else
-		OMAP_HSMMC_WRITE(host->base, IE,
-			OMAP_HSMMC_READ(host->base, IE) | IE_CINS);
+	enable_irq(mmc->slots[0].card_detect_irq);
+
 	return 0;
 }
 
@@ -452,7 +404,6 @@ static int omap_hsmmc_reg_get(struct omap_hsmmc_host *host)
 	struct regulator *reg;
 	int ret = 0;
 	int ocr_value = 0;
-	struct omap_mmc_platform_data *pdata = host->pdata;
 
 	switch (host->id) {
 	case OMAP_MMC1_DEVID:
@@ -501,10 +452,6 @@ static int omap_hsmmc_reg_get(struct omap_hsmmc_host *host)
 			}
 		}
 
-		if (pdata->version == MMC_CTRL_VERSION_2)
-			mmc_slot(host).ocr_mask =
-						mmc_regulator_get_ocrmask(reg);
-
 		/* Allow an aux regulator */
 		reg = regulator_get(host->dev, "vmmc_aux");
 		host->vcc_aux = IS_ERR(reg) ? NULL : reg;
@@ -603,14 +550,6 @@ static int omap_hsmmc_gpio_init(struct omap_mmc_platform_data *pdata)
 	} else
 		pdata->slots[0].gpio_wp = -EINVAL;
 
-	if (pdata->version == MMC_CTRL_VERSION_2) {
-		pdata->suspend = omap_hsmmc_suspend_cdirq;
-		pdata->resume = omap_hsmmc_resume_cdirq;
-		pdata->slots[0].get_cover_state = omap_hsmmc_get_cover_state;
-		pdata->slots[0].get_ro = omap_hsmmc_get_wp;
-		pdata->slots[0].card_detect = omap_hsmmc_card_detect;
-	}
-
 	return 0;
 
 err_free_wp:
@@ -671,17 +610,11 @@ static void omap_hsmmc_enable_irq(struct omap_hsmmc_host *host,
 
 static void omap_hsmmc_disable_irq(struct omap_hsmmc_host *host)
 {
-	struct omap_mmc_platform_data *pdata = host->pdata;
 
-	if (pdata->version == MMC_CTRL_VERSION_2) {
-		OMAP_HSMMC_WRITE(host->base, ISE, 0xC0);
-		OMAP_HSMMC_WRITE(host->base, IE, 0xC0);
-		OMAP_HSMMC_WRITE(host->base, STAT, STAT_CLEAR);
-	} else {
-		OMAP_HSMMC_WRITE(host->base, ISE, 0);
-		OMAP_HSMMC_WRITE(host->base, IE, 0);
-		OMAP_HSMMC_WRITE(host->base, STAT, STAT_CLEAR);
-	}
+	OMAP_HSMMC_WRITE(host->base, ISE, 0);
+	OMAP_HSMMC_WRITE(host->base, IE, 0);
+	OMAP_HSMMC_WRITE(host->base, STAT, STAT_CLEAR);
+
 }
 
 /* Calculate divisor for the given clock frequency */
@@ -1184,11 +1117,6 @@ static void omap_hsmmc_do_irq(struct omap_hsmmc_host *host, int status, int irq)
 	struct mmc_data *data;
 	int end_cmd = 0, end_trans = 0;
 
-	/* Schedule card detect here ONLY if irq for CD isn't registerted*/
-	if ((host->pdata->version == MMC_CTRL_VERSION_2) &&
-				((status & CINS) || (status & 0x80)))
-		omap_hsmmc_cd_handler(irq, host);
-
 	if (!host->req_in_progress) {
 		do {
 			OMAP_HSMMC_WRITE(host->base, STAT, status);