static void exynos_dwmci2_cfg_gpio(int width) { unsigned int gpio; /* set to pull up pin for write protection */ gpio = EXYNOS5410_GPM5(0); s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4); // T-Flash CD_TYPE INTERNAL for (gpio = EXYNOS5410_GPC2(0); gpio < EXYNOS5410_GPC2(3); gpio++) { s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4); } switch (width) { case 4: for (gpio = EXYNOS5410_GPC2(3); gpio <= EXYNOS5410_GPC2(6); gpio++) { s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4); } break; case 1: gpio = EXYNOS5410_GPC2(3); s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4); default: break; } gpio = EXYNOS5410_GPC2(2); s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4); }
static void exynos_dwmci2_cfg_gpio(int width) { unsigned int gpio; s3c_gpio_setpull(GPIO_T_FLASH_DETECT, S3C_GPIO_PULL_NONE); /* set to pull up pin for write protection */ gpio = EXYNOS5420_GPC4(0); s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV3); for (gpio = EXYNOS5420_GPC2(0); gpio < EXYNOS5420_GPC2(2); gpio++) { s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV3); } switch (width) { case 4: for (gpio = EXYNOS5420_GPC2(3); gpio <= EXYNOS5420_GPC2(6); gpio++) { s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV3); } break; case 1: gpio = EXYNOS5420_GPC2(3); s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV3); break; case 0: for (gpio = EXYNOS5410_GPC2(0); gpio < EXYNOS5410_GPC2(2); gpio++) { s3c_gpio_cfgpin(gpio, S3C_GPIO_INPUT); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); } for (gpio = EXYNOS5410_GPC2(3); gpio <= EXYNOS5410_GPC2(6); gpio++) { s3c_gpio_cfgpin(gpio, S3C_GPIO_INPUT); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); } gpio = GPIO_TF_EN; if (gpio_get_value(gpio)) { gpio_set_value(gpio, 0); pr_info("external MMC(SD) card %s.\n", gpio_get_value(gpio) ? "On" : "Off"); } return; default: break; } gpio = GPIO_TF_EN; if (gpio_get_value(GPIO_T_FLASH_DETECT)) gpio_set_value(gpio, 0); else gpio_set_value(gpio, 1); pr_info("external MMC(SD) card %s.\n", gpio_get_value(gpio) ? "on" : "off"); gpio = EXYNOS5420_GPC2(2); s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV3); }
.fifo_depth = 0x80, .detect_delay_ms = 200, .hclk_name = "dwmci", .cclk_name = "sclk_dwmci", .cfg_gpio = exynos_dwmci2_cfg_gpio, .get_bus_wd = exynos_dwmci2_get_bus_wd, .save_drv_st = exynos_dwmci_save_drv_st, .restore_drv_st = exynos_dwmci_restore_drv_st, .tuning_drv_st = exynos_dwmci_tuning_drv_st, .sdr_timing = 0x03040000, .ddr_timing = 0x03020000, .clk_drv = 0x3, .cd_type = DW_MCI_CD_INTERNAL, .clk_tbl = exynos_dwmci_clk_rates, .__drv_st = { .pin = EXYNOS5410_GPC2(0), .val = S5P_GPIO_DRVSTR_LV4, }, }; static struct platform_device *odroidxu_emmc_devices[] __initdata = { #ifdef CONFIG_MMC_DW &exynos5_device_dwmci0, &exynos5_device_dwmci2, #endif }; static struct platform_device *odroidxu_tflash_devices[] __initdata = { #ifdef CONFIG_MMC_DW &exynos5_device_dwmci2, &exynos5_device_dwmci0,