|
@@ -370,6 +370,43 @@ static void exynos4_i2c_config(int peripheral, int flags)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static int exynos4_mmc_config(int peripheral, int flags)
|
|
|
+{
|
|
|
+ struct exynos4_gpio_part2 *gpio2 =
|
|
|
+ (struct exynos4_gpio_part2 *)samsung_get_base_gpio_part2();
|
|
|
+ struct s5p_gpio_bank *bank, *bank_ext;
|
|
|
+ int i;
|
|
|
+
|
|
|
+ switch (peripheral) {
|
|
|
+ case PERIPH_ID_SDMMC0:
|
|
|
+ bank = &gpio2->k0;
|
|
|
+ bank_ext = &gpio2->k1;
|
|
|
+ break;
|
|
|
+ case PERIPH_ID_SDMMC2:
|
|
|
+ bank = &gpio2->k2;
|
|
|
+ bank_ext = &gpio2->k3;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ for (i = 0; i < 7; i++) {
|
|
|
+ if (i == 2)
|
|
|
+ continue;
|
|
|
+ s5p_gpio_cfg_pin(bank, i, GPIO_FUNC(0x2));
|
|
|
+ s5p_gpio_set_pull(bank, i, GPIO_PULL_NONE);
|
|
|
+ s5p_gpio_set_drv(bank, i, GPIO_DRV_4X);
|
|
|
+ }
|
|
|
+ if (flags & PINMUX_FLAG_8BIT_MODE) {
|
|
|
+ for (i = 3; i < 7; i++) {
|
|
|
+ s5p_gpio_cfg_pin(bank_ext, i, GPIO_FUNC(0x3));
|
|
|
+ s5p_gpio_set_pull(bank_ext, i, GPIO_PULL_NONE);
|
|
|
+ s5p_gpio_set_drv(bank_ext, i, GPIO_DRV_4X);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static int exynos4_pinmux_config(int peripheral, int flags)
|
|
|
{
|
|
|
switch (peripheral) {
|
|
@@ -383,6 +420,14 @@ static int exynos4_pinmux_config(int peripheral, int flags)
|
|
|
case PERIPH_ID_I2C7:
|
|
|
exynos4_i2c_config(peripheral, flags);
|
|
|
break;
|
|
|
+ case PERIPH_ID_SDMMC0:
|
|
|
+ case PERIPH_ID_SDMMC2:
|
|
|
+ return exynos4_mmc_config(peripheral, flags);
|
|
|
+ case PERIPH_ID_SDMMC1:
|
|
|
+ case PERIPH_ID_SDMMC3:
|
|
|
+ case PERIPH_ID_SDMMC4:
|
|
|
+ printf("SDMMC device %d not implemented\n", peripheral);
|
|
|
+ return -1;
|
|
|
default:
|
|
|
debug("%s: invalid peripheral %d", __func__, peripheral);
|
|
|
return -1;
|