Commit abc45e1d authored by Kyungmin Park's avatar Kyungmin Park Committed by Tony Lindgren

ARM: OMAP: Apollon MMC support

Apollon board MMC supports on OMAP2

TODO:
        We have to check MMC on H4
Signed-off-by: default avatarKyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent d1284b5f
...@@ -166,8 +166,8 @@ static struct omap_uart_config apollon_uart_config __initdata = { ...@@ -166,8 +166,8 @@ static struct omap_uart_config apollon_uart_config __initdata = {
static struct omap_mmc_config apollon_mmc_config __initdata = { static struct omap_mmc_config apollon_mmc_config __initdata = {
.mmc [0] = { .mmc [0] = {
.enabled = 0, .enabled = 1,
.wire4 = 0, .wire4 = 1,
.wp_pin = -1, .wp_pin = -1,
.power_pin = -1, .power_pin = -1,
.switch_pin = -1, .switch_pin = -1,
...@@ -257,6 +257,9 @@ static void __init omap_apollon_init(void) ...@@ -257,6 +257,9 @@ static void __init omap_apollon_init(void)
/* REVISIT: where's the correct place */ /* REVISIT: where's the correct place */
omap_cfg_reg(W19_24XX_SYS_NIRQ); omap_cfg_reg(W19_24XX_SYS_NIRQ);
/* Use Interal loop-back in MMC/SDIO Module Input Clock selection */
CONTROL_DEVCONF |= (1 << 24);
/* /*
* Make sure the serial ports are muxed on at this point. * Make sure the serial ports are muxed on at this point.
* You have to mux them off in device drivers later on * You have to mux them off in device drivers later on
......
...@@ -104,6 +104,20 @@ MUX_CFG_24XX("P20_24XX_TSC_IRQ", 0x108, 0, 0, 0, 1) ...@@ -104,6 +104,20 @@ MUX_CFG_24XX("P20_24XX_TSC_IRQ", 0x108, 0, 0, 0, 1)
MUX_CFG_24XX("K15_24XX_UART3_TX", 0x118, 0, 0, 0, 1) MUX_CFG_24XX("K15_24XX_UART3_TX", 0x118, 0, 0, 0, 1)
MUX_CFG_24XX("K14_24XX_UART3_RX", 0x119, 0, 0, 0, 1) MUX_CFG_24XX("K14_24XX_UART3_RX", 0x119, 0, 0, 0, 1)
/* MMC/SDIO */
MUX_CFG_24XX("G19_24XX_MMC_CLKO", 0x0f3, 0, 0, 0, 1)
MUX_CFG_24XX("H18_24XX_MMC_CMD", 0x0f4, 0, 0, 0, 1)
MUX_CFG_24XX("F20_24XX_MMC_DAT0", 0x0f5, 0, 0, 0, 1)
MUX_CFG_24XX("H14_24XX_MMC_DAT1", 0x0f6, 0, 0, 0, 1)
MUX_CFG_24XX("E19_24XX_MMC_DAT2", 0x0f7, 0, 0, 0, 1)
MUX_CFG_24XX("D19_24XX_MMC_DAT3", 0x0f8, 0, 0, 0, 1)
MUX_CFG_24XX("F19_24XX_MMC_DAT_DIR0", 0x0f9, 0, 0, 0, 1)
MUX_CFG_24XX("E20_24XX_MMC_DAT_DIR1", 0x0fa, 0, 0, 0, 1)
MUX_CFG_24XX("F18_24XX_MMC_DAT_DIR2", 0x0fb, 0, 0, 0, 1)
MUX_CFG_24XX("E18_24XX_MMC_DAT_DIR3", 0x0fc, 0, 0, 0, 1)
MUX_CFG_24XX("G18_24XX_MMC_CMD_DIR", 0x0fd, 0, 0, 0, 1)
MUX_CFG_24XX("H15_24XX_MMC_CLKI", 0x0fe, 0, 0, 0, 1)
/* Keypad GPIO*/ /* Keypad GPIO*/
MUX_CFG_24XX("T19_24XX_KBR0", 0x106, 3, 1, 1, 1) MUX_CFG_24XX("T19_24XX_KBR0", 0x106, 3, 1, 1, 1)
MUX_CFG_24XX("R19_24XX_KBR1", 0x107, 3, 1, 1, 1) MUX_CFG_24XX("R19_24XX_KBR1", 0x107, 3, 1, 1, 1)
......
...@@ -148,7 +148,7 @@ static inline void omap_init_kp(void) {} ...@@ -148,7 +148,7 @@ static inline void omap_init_kp(void) {}
#ifdef CONFIG_ARCH_OMAP24XX #ifdef CONFIG_ARCH_OMAP24XX
#define OMAP_MMC1_BASE 0x4809c000 #define OMAP_MMC1_BASE 0x4809c000
#define OMAP_MMC1_INT 83 #define OMAP_MMC1_INT INT_24XX_MMC_IRQ
#else #else
#define OMAP_MMC1_BASE 0xfffb7800 #define OMAP_MMC1_BASE 0xfffb7800
#define OMAP_MMC1_INT INT_MMC #define OMAP_MMC1_INT INT_MMC
...@@ -225,7 +225,14 @@ static void __init omap_init_mmc(void) ...@@ -225,7 +225,14 @@ static void __init omap_init_mmc(void)
/* block 1 is always available and has just one pinout option */ /* block 1 is always available and has just one pinout option */
mmc = &mmc_conf->mmc[0]; mmc = &mmc_conf->mmc[0];
if (mmc->enabled) { if (mmc->enabled) {
if (!cpu_is_omap24xx()) { if (cpu_is_omap24xx()) {
omap_cfg_reg(H18_24XX_MMC_CMD);
omap_cfg_reg(H15_24XX_MMC_CLKI);
omap_cfg_reg(G19_24XX_MMC_CLKO);
omap_cfg_reg(F20_24XX_MMC_DAT0);
omap_cfg_reg(F19_24XX_MMC_DAT_DIR0);
omap_cfg_reg(G18_24XX_MMC_CMD_DIR);
} else {
omap_cfg_reg(MMC_CMD); omap_cfg_reg(MMC_CMD);
omap_cfg_reg(MMC_CLK); omap_cfg_reg(MMC_CLK);
omap_cfg_reg(MMC_DAT0); omap_cfg_reg(MMC_DAT0);
...@@ -236,7 +243,14 @@ static void __init omap_init_mmc(void) ...@@ -236,7 +243,14 @@ static void __init omap_init_mmc(void)
} }
} }
if (mmc->wire4) { if (mmc->wire4) {
if (!cpu_is_omap24xx()) { if (cpu_is_omap24xx()) {
omap_cfg_reg(H14_24XX_MMC_DAT1);
omap_cfg_reg(E19_24XX_MMC_DAT2);
omap_cfg_reg(D19_24XX_MMC_DAT3);
omap_cfg_reg(E20_24XX_MMC_DAT_DIR1);
omap_cfg_reg(F18_24XX_MMC_DAT_DIR2);
omap_cfg_reg(E18_24XX_MMC_DAT_DIR3);
} else {
omap_cfg_reg(MMC_DAT1); omap_cfg_reg(MMC_DAT1);
/* NOTE: DAT2 can be on W10 (here) or M15 */ /* NOTE: DAT2 can be on W10 (here) or M15 */
if (!mmc->nomux) if (!mmc->nomux)
......
...@@ -262,6 +262,7 @@ ...@@ -262,6 +262,7 @@
#define INT_24XX_UART1_IRQ 72 #define INT_24XX_UART1_IRQ 72
#define INT_24XX_UART2_IRQ 73 #define INT_24XX_UART2_IRQ 73
#define INT_24XX_UART3_IRQ 74 #define INT_24XX_UART3_IRQ 74
#define INT_24XX_MMC_IRQ 83
/* Max. 128 level 2 IRQs (OMAP1610), 192 GPIOs (OMAP730) and /* Max. 128 level 2 IRQs (OMAP1610), 192 GPIOs (OMAP730) and
* 16 MPUIO lines */ * 16 MPUIO lines */
......
...@@ -461,6 +461,20 @@ enum omap24xx_index { ...@@ -461,6 +461,20 @@ enum omap24xx_index {
K15_24XX_UART3_TX, K15_24XX_UART3_TX,
K14_24XX_UART3_RX, K14_24XX_UART3_RX,
/* MMC/SDIO */
G19_24XX_MMC_CLKO,
H18_24XX_MMC_CMD,
F20_24XX_MMC_DAT0,
H14_24XX_MMC_DAT1,
E19_24XX_MMC_DAT2,
D19_24XX_MMC_DAT3,
F19_24XX_MMC_DAT_DIR0,
E20_24XX_MMC_DAT_DIR1,
F18_24XX_MMC_DAT_DIR2,
E18_24XX_MMC_DAT_DIR3,
G18_24XX_MMC_CMD_DIR,
H15_24XX_MMC_CLKI,
/* Keypad GPIO*/ /* Keypad GPIO*/
T19_24XX_KBR0, T19_24XX_KBR0,
R19_24XX_KBR1, R19_24XX_KBR1,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment