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);