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 = {
Ejemplo n.º 4
0
	{ 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 */