ARM: S5PV210: Add support HSMMC on SMDKV210
authorHyuk Lee <hyuk1.lee@samsung.com>
Mon, 14 Jun 2010 01:18:56 +0000 (10:18 +0900)
committerKukjin Kim <kgene.kim@samsung.com>
Thu, 5 Aug 2010 09:31:01 +0000 (18:31 +0900)
This patch adds support HSMMC on SMDKV210, and gpio configuration for
S5PV210 hsmmc3.

Signed-off-by: Hyuk Lee <hyuk1.lee@samsung.com>
Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
arch/arm/mach-s5pv210/Kconfig
arch/arm/mach-s5pv210/cpu.c
arch/arm/mach-s5pv210/include/mach/map.h
arch/arm/mach-s5pv210/mach-smdkv210.c
arch/arm/mach-s5pv210/setup-sdhci-gpio.c
arch/arm/plat-samsung/include/plat/sdhci.h

index 411bc9a529b20055ae13e389b195c37fef8c4a8d..12a2c6b6d8bd7ed15546346b0e7e9e6689224d7c 100644 (file)
@@ -102,6 +102,10 @@ config MACH_SMDKV210
        select CPU_S5PV210
        select ARCH_SPARSEMEM_ENABLE
        select SAMSUNG_DEV_ADC
+       select S3C_DEV_HSMMC
+       select S3C_DEV_HSMMC1
+       select S3C_DEV_HSMMC2
+       select S3C_DEV_HSMMC3
        select SAMSUNG_DEV_IDE
        select SAMSUNG_DEV_KEYPAD
        select SAMSUNG_DEV_TS
@@ -109,6 +113,7 @@ config MACH_SMDKV210
        select S5PV210_SETUP_KEYPAD
        select HAVE_S3C2410_WATCHDOG
        select S5PV210_SETUP_IDE
+       select S5PV210_SETUP_SDHCI
        help
          Machine support for Samsung SMDKV210
 
index 15e983a3f09f8c3175dfda7e485375232a93a415..a0b1687247c9d127463ccf5c5e9639fa02806b3e 100644 (file)
@@ -87,6 +87,7 @@ void __init s5pv210_map_io(void)
        s5pv210_default_sdhci0();
        s5pv210_default_sdhci1();
        s5pv210_default_sdhci2();
+       s5pv210_default_sdhci3();
 
        s3c_cfcon_setname("s5pv210-pata");
 
index d0af0c1a526ed9d38f7a161d3b424e617de33eb2..9f6c2ed2812f05c603c8445a2f54145f5aa25fde 100644 (file)
 #define S3C_PA_HSMMC0          S5PV210_PA_HSMMC(0)
 #define S3C_PA_HSMMC1          S5PV210_PA_HSMMC(1)
 #define S3C_PA_HSMMC2          S5PV210_PA_HSMMC(2)
+#define S3C_PA_HSMMC3          S5PV210_PA_HSMMC(3)
 #define S3C_PA_IIC             S5PV210_PA_IIC0
 #define S3C_PA_IIC1            S5PV210_PA_IIC1
 #define S3C_PA_IIC2            S5PV210_PA_IIC2
index 485ea339dbc4c871324a6168da930066e3cf64fa..d20adf7407bc4e29c2de8ea56ac3e0acd2970a17 100644 (file)
@@ -103,6 +103,10 @@ static struct platform_device *smdkv210_devices[] __initdata = {
        &s5pv210_device_ac97,
        &s3c_device_adc,
        &s3c_device_cfcon,
+       &s3c_device_hsmmc0,
+       &s3c_device_hsmmc1,
+       &s3c_device_hsmmc2,
+       &s3c_device_hsmmc3,
        &samsung_device_keypad,
        &s3c_device_ts,
        &s3c_device_wdt,
index fe7d86dad14cdc3524c842c0aed6600d75b95464..143bfec1e05fbf9aafac7c3e26ab089c4c65382b 100644 (file)
@@ -102,3 +102,23 @@ void s5pv210_setup_sdhci2_cfg_gpio(struct platform_device *dev, int width)
        s3c_gpio_setpull(S5PV210_GPG2(2), S3C_GPIO_PULL_UP);
        s3c_gpio_cfgpin(S5PV210_GPG2(2), S3C_GPIO_SFN(2));
 }
+
+void s5pv210_setup_sdhci3_cfg_gpio(struct platform_device *dev, int width)
+{
+       unsigned int gpio;
+
+       /* Set all the necessary GPG3[0:2] pins to special-function 2 */
+       for (gpio = S5PV210_GPG3(0); gpio < S5PV210_GPG3(2); gpio++) {
+               s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
+               s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
+       }
+
+       /* Data pin GPG3[3:6] to special-function 2 */
+       for (gpio = S5PV210_GPG3(3); gpio <= S5PV210_GPG3(6); gpio++) {
+               s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
+               s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
+       }
+
+       s3c_gpio_setpull(S5PV210_GPG3(2), S3C_GPIO_PULL_UP);
+       s3c_gpio_cfgpin(S5PV210_GPG3(2), S3C_GPIO_SFN(2));
+}
index 016674fa20dd238a086a3d7b956cb891f6f13d94..10413728530fe78506fb6e5641e3e0cd2ce81038 100644 (file)
@@ -78,6 +78,7 @@ extern void s3c64xx_setup_sdhci2_cfg_gpio(struct platform_device *, int w);
 extern void s5pv210_setup_sdhci0_cfg_gpio(struct platform_device *, int w);
 extern void s5pv210_setup_sdhci1_cfg_gpio(struct platform_device *, int w);
 extern void s5pv210_setup_sdhci2_cfg_gpio(struct platform_device *, int w);
+extern void s5pv210_setup_sdhci3_cfg_gpio(struct platform_device *, int w);
 
 /* S3C6400 SDHCI setup */
 
@@ -266,10 +267,22 @@ static inline void s5pv210_default_sdhci2(void)
 static inline void s5pv210_default_sdhci2(void) { }
 #endif /* CONFIG_S3C_DEV_HSMMC2 */
 
+#ifdef CONFIG_S3C_DEV_HSMMC3
+static inline void s5pv210_default_sdhci3(void)
+{
+       s3c_hsmmc3_def_platdata.clocks = s5pv210_hsmmc_clksrcs;
+       s3c_hsmmc3_def_platdata.cfg_gpio = s5pv210_setup_sdhci3_cfg_gpio;
+       s3c_hsmmc3_def_platdata.cfg_card = s5pv210_setup_sdhci_cfg_card;
+}
+#else
+static inline void s5pv210_default_sdhci3(void) { }
+#endif /* CONFIG_S3C_DEV_HSMMC3 */
+
 #else
 static inline void s5pv210_default_sdhci0(void) { }
 static inline void s5pv210_default_sdhci1(void) { }
 static inline void s5pv210_default_sdhci2(void) { }
+static inline void s5pv210_default_sdhci3(void) { }
 #endif /* CONFIG_S5PC100_SETUP_SDHCI */