static void exynos_dwmci2_cfg_gpio(int width) { unsigned int gpio; /* 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); default: break; } 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); }
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); }
.get_bus_wd = exynos_dwmci2_get_bus_wd, .save_drv_st = exynos_dwmci_save_drv_st, .restore_drv_st = exynos_dwmci_restore_drv_st_with_compensation, .tuning_drv_st = exynos_dwmci_tuning_drv_st, .sdr_timing = 0x03040000, .ddr_timing = 0x03020000, .get_cd = exynos_dwmci2_get_cd, .get_ro = exynos_dwmci2_get_ro, .cd_type = DW_MCI_CD_GPIO, .init = exynos_dwmci2_init, .setpower = exynos_dwmci2_setpower, .exit = exynos_dwmci2_exit, .clk_drv = 0x4, .clk_tbl = exynos_dwmci_clk_rates_for_cpll, .__drv_st = { .pin = EXYNOS5420_GPC2(0), .val = S5P_GPIO_DRVSTR_LV3, }, .tuning_map_mask = 0x80, #if !defined(CONFIG_SUPPORT_WQXGA) .qos_int_level = 111 * 1000, #else .qos_int_level = 222 * 1000, #endif #if defined(CONFIG_MMC_DW_CMD_LOGGING) .dw_mci_cmd_logging = true, .log_count = ATOMIC_INIT(-1), #endif }; static struct platform_device *universal5420_mmc_devices[] __initdata = {
{ EXYNOS5420_GPB3(4), S3C_GPIO_INPUT, GPIO_LV_N, S3C_GPIO_PULL_DOWN }, /* NC */ { EXYNOS5420_GPB3(5), S3C_GPIO_INPUT, GPIO_LV_N, S3C_GPIO_PULL_DOWN }, /* NC */ #else { EXYNOS5420_GPB3(4), S3C_GPIO_INPUT, GPIO_LV_N, S3C_GPIO_PULL_NONE }, /* PEN_SDA_1.8V */ { EXYNOS5420_GPB3(5), S3C_GPIO_INPUT, GPIO_LV_N, S3C_GPIO_PULL_NONE }, /* PEN_SCL_1.8V */ #endif /* GPC 1 */ { EXYNOS5420_GPC1(0), S3C_GPIO_INPUT, GPIO_LV_N, S3C_GPIO_PULL_DOWN }, /* WLAN_SDIO_CLK */ { EXYNOS5420_GPC1(1), S3C_GPIO_INPUT, GPIO_LV_N, S3C_GPIO_PULL_NONE }, /* WLAN_SDIO_CMD */ { EXYNOS5420_GPC1(3), S3C_GPIO_INPUT, GPIO_LV_N, S3C_GPIO_PULL_NONE }, /* WLAN_SDIO_D(0) */ { EXYNOS5420_GPC1(4), S3C_GPIO_INPUT, GPIO_LV_N, S3C_GPIO_PULL_NONE }, /* WLAN_SDIO_D(1) */ { EXYNOS5420_GPC1(5), S3C_GPIO_INPUT, GPIO_LV_N, S3C_GPIO_PULL_NONE }, /* WLAN_SDIO_D(2) */ { EXYNOS5420_GPC1(6), S3C_GPIO_INPUT, GPIO_LV_N, S3C_GPIO_PULL_NONE }, /* WLAN_SDIO_D(3) */ { EXYNOS5420_GPC1(7), S3C_GPIO_INPUT, GPIO_LV_N, S3C_GPIO_PULL_DOWN }, /* NC */ /* GPC 2 */ { EXYNOS5420_GPC2(2), S3C_GPIO_INPUT, GPIO_LV_N, S3C_GPIO_PULL_DOWN }, /* NC */ /* GPC 3 */ /* GPC 4 */ { EXYNOS5420_GPC4(0), S3C_GPIO_INPUT, GPIO_LV_N, S3C_GPIO_PULL_DOWN }, /* NC */ { EXYNOS5420_GPC4(1), S3C_GPIO_INPUT, GPIO_LV_N, S3C_GPIO_PULL_DOWN }, /* NC */ /* GPD 1 */ { EXYNOS5420_GPD1(1), S3C_GPIO_INPUT, GPIO_LV_N, S3C_GPIO_PULL_DOWN }, /* NC */ #if defined(CONFIG_V1A) { EXYNOS5420_GPD1(5), S3C_GPIO_INPUT, GPIO_LV_N, S3C_GPIO_PULL_NONE }, /* MOTOR_I2C_SDA */ { EXYNOS5420_GPD1(6), S3C_GPIO_INPUT, GPIO_LV_N, S3C_GPIO_PULL_NONE }, /* MOTOR_I2C_SCL */ #endif #if defined(CONFIG_V1A_WIFI) || defined(CONFIG_V2A_WIFI) { EXYNOS5420_GPD1(7), S3C_GPIO_INPUT, GPIO_LV_N, S3C_GPIO_PULL_DOWN }, /* NC(PDA_ACTIVE) */ #endif /* GPE 0 */ /* GPE 1 */