|
@@ -31,35 +31,6 @@
|
|
|
* SDI 0 (MicroSD slot)
|
|
|
*/
|
|
|
|
|
|
-/* GPIO pins used by the sdi0 level shifter */
|
|
|
-static int sdi0_en = -1;
|
|
|
-static int sdi0_vsel = -1;
|
|
|
-
|
|
|
-static int mop500_sdi0_ios_handler(struct device *dev, struct mmc_ios *ios)
|
|
|
-{
|
|
|
- switch (ios->power_mode) {
|
|
|
- case MMC_POWER_UP:
|
|
|
- case MMC_POWER_ON:
|
|
|
- /*
|
|
|
- * Level shifter voltage should depend on vdd to when deciding
|
|
|
- * on either 1.8V or 2.9V. Once the decision has been made the
|
|
|
- * level shifter must be disabled and re-enabled with a changed
|
|
|
- * select signal in order to switch the voltage. Since there is
|
|
|
- * no framework support yet for indicating 1.8V in vdd, use the
|
|
|
- * default 2.9V.
|
|
|
- */
|
|
|
- gpio_direction_output(sdi0_vsel, 0);
|
|
|
- gpio_direction_output(sdi0_en, 1);
|
|
|
- break;
|
|
|
- case MMC_POWER_OFF:
|
|
|
- gpio_direction_output(sdi0_vsel, 0);
|
|
|
- gpio_direction_output(sdi0_en, 0);
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
#ifdef CONFIG_STE_DMA40
|
|
|
struct stedma40_chan_cfg mop500_sdi0_dma_cfg_rx = {
|
|
|
.mode = STEDMA40_MODE_LOGICAL,
|
|
@@ -81,7 +52,6 @@ static struct stedma40_chan_cfg mop500_sdi0_dma_cfg_tx = {
|
|
|
#endif
|
|
|
|
|
|
struct mmci_platform_data mop500_sdi0_data = {
|
|
|
- .ios_handler = mop500_sdi0_ios_handler,
|
|
|
.ocr_mask = MMC_VDD_29_30,
|
|
|
.f_max = 50000000,
|
|
|
.capabilities = MMC_CAP_4_BIT_DATA |
|
|
@@ -101,22 +71,6 @@ struct mmci_platform_data mop500_sdi0_data = {
|
|
|
|
|
|
static void sdi0_configure(struct device *parent)
|
|
|
{
|
|
|
- int ret;
|
|
|
-
|
|
|
- ret = gpio_request(sdi0_en, "level shifter enable");
|
|
|
- if (!ret)
|
|
|
- ret = gpio_request(sdi0_vsel,
|
|
|
- "level shifter 1v8-3v select");
|
|
|
-
|
|
|
- if (ret) {
|
|
|
- pr_warning("unable to config sdi0 gpios for level shifter.\n");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- /* Select the default 2.9V and enable level shifter */
|
|
|
- gpio_direction_output(sdi0_vsel, 0);
|
|
|
- gpio_direction_output(sdi0_en, 1);
|
|
|
-
|
|
|
/* Add the device, force v2 to subrevision 1 */
|
|
|
db8500_add_sdi0(parent, &mop500_sdi0_data, U8500_SDI_V2_PERIPHID);
|
|
|
}
|
|
@@ -124,8 +78,6 @@ static void sdi0_configure(struct device *parent)
|
|
|
void mop500_sdi_tc35892_init(struct device *parent)
|
|
|
{
|
|
|
mop500_sdi0_data.gpio_cd = GPIO_SDMMC_CD;
|
|
|
- sdi0_en = GPIO_SDMMC_EN;
|
|
|
- sdi0_vsel = GPIO_SDMMC_1V8_3V_SEL;
|
|
|
sdi0_configure(parent);
|
|
|
}
|
|
|
|
|
@@ -264,8 +216,6 @@ void __init snowball_sdi_init(struct device *parent)
|
|
|
/* External Micro SD slot */
|
|
|
mop500_sdi0_data.gpio_cd = SNOWBALL_SDMMC_CD_GPIO;
|
|
|
mop500_sdi0_data.cd_invert = true;
|
|
|
- sdi0_en = SNOWBALL_SDMMC_EN_GPIO;
|
|
|
- sdi0_vsel = SNOWBALL_SDMMC_1V8_3V_GPIO;
|
|
|
sdi0_configure(parent);
|
|
|
}
|
|
|
|
|
@@ -277,8 +227,6 @@ void __init hrefv60_sdi_init(struct device *parent)
|
|
|
db8500_add_sdi4(parent, &mop500_sdi4_data, U8500_SDI_V2_PERIPHID);
|
|
|
/* External Micro SD slot */
|
|
|
mop500_sdi0_data.gpio_cd = HREFV60_SDMMC_CD_GPIO;
|
|
|
- sdi0_en = HREFV60_SDMMC_EN_GPIO;
|
|
|
- sdi0_vsel = HREFV60_SDMMC_1V8_3V_GPIO;
|
|
|
sdi0_configure(parent);
|
|
|
/* WLAN SDIO channel */
|
|
|
db8500_add_sdi1(parent, &mop500_sdi1_data, U8500_SDI_V2_PERIPHID);
|