There are 3 MMC/SD/SDIO host controllers inside the device. This patch will support mmc2 and mmc3.
Signed-off-by: Minkyu Kang <mk7.k...@samsung.com> --- drivers/mmc/omap3_mmc.c | 38 ++++++++++++++++++++++------- include/asm-arm/arch-omap3/mmc_host_def.h | 18 ++++++++++++- include/asm-arm/arch-omap3/omap3.h | 3 ++ include/configs/omap3_beagle.h | 1 + include/configs/omap3_evm.h | 1 + include/configs/omap3_overo.h | 1 + include/configs/omap3_pandora.h | 1 + include/configs/omap3_zoom1.h | 1 + 8 files changed, 53 insertions(+), 11 deletions(-) diff --git a/drivers/mmc/omap3_mmc.c b/drivers/mmc/omap3_mmc.c index e90db7e..edc56fa 100644 --- a/drivers/mmc/omap3_mmc.c +++ b/drivers/mmc/omap3_mmc.c @@ -62,10 +62,21 @@ void twl4030_mmc_config(void) { unsigned char data; - data = DEV_GRP_P1; - i2c_write(PWRMGT_ADDR_ID4, VMMC1_DEV_GRP, 1, &data, 1); - data = VMMC1_VSEL_30; - i2c_write(PWRMGT_ADDR_ID4, VMMC1_DEDICATED, 1, &data, 1); + switch (CONFIG_MMC_INDEX) { + case 1: + data = DEV_GRP_P1; + i2c_write(PWRMGT_ADDR_ID4, VMMC1_DEV_GRP, 1, &data, 1); + data = VMMC1_VSEL_30; + i2c_write(PWRMGT_ADDR_ID4, VMMC1_DEDICATED, 1, &data, 1); + break; + case 2: + case 3: + data = DEV_GRP_P1; + i2c_write(PWRMGT_ADDR_ID4, VMMC2_DEV_GRP, 1, &data, 1); + data = VMMC2_VSEL_185; + i2c_write(PWRMGT_ADDR_ID4, VMMC2_DEDICATED, 1, &data, 1); + break; + } } unsigned char mmc_board_init(void) @@ -74,12 +85,21 @@ unsigned char mmc_board_init(void) twl4030_mmc_config(); - writel(readl(&t2_base->pbias_lite) | PBIASLITEPWRDNZ1 | - PBIASSPEEDCTRL0 | PBIASLITEPWRDNZ0, - &t2_base->pbias_lite); + switch (CONFIG_MMC_INDEX) { + case 1: + writel(readl(&t2_base->pbias_lite) | PBIASLITEPWRDNZ1 | + PBIASSPEEDCTRL0 | PBIASLITEPWRDNZ0, + &t2_base->pbias_lite); - writel(readl(&t2_base->devconf0) | MMCSDIO1ADPCLKISEL, - &t2_base->devconf0); + writel(readl(&t2_base->devconf0) | MMCSDIO1ADPCLKISEL, + &t2_base->devconf0); + break; + case 2: + case 3: + writel(readl(&t2_base->devconf1) | MMCSDIO2ADPCLKISEL, + &t2_base->devconf1); + break; + } return 1; } diff --git a/include/asm-arm/arch-omap3/mmc_host_def.h b/include/asm-arm/arch-omap3/mmc_host_def.h index aa751c9..01884f9 100644 --- a/include/asm-arm/arch-omap3/mmc_host_def.h +++ b/include/asm-arm/arch-omap3/mmc_host_def.h @@ -31,7 +31,9 @@ typedef struct t2 { unsigned char res1[0x274]; unsigned int devconf0; /* 0x274 */ - unsigned char res2[0x2A8]; + unsigned char res2[0x60]; + unsigned int devconf1; /* 0x2D8 */ + unsigned char res3[0x244]; unsigned int pbias_lite; /* 0x520 */ } t2_t; @@ -41,10 +43,22 @@ typedef struct t2 { #define PBIASSPEEDCTRL0 (1 << 2) #define PBIASLITEPWRDNZ1 (1 << 9) +#define MMCSDIO2ADPCLKISEL (1 << 6) + /* * OMAP HSMMC register definitions */ -#define OMAP_HSMMC_BASE 0x4809C000 +#define OMAP_HSMMC_BASE_MMC1 0x4809C000 +#define OMAP_HSMMC_BASE_MMC2 0x480B4000 +#define OMAP_HSMMC_BASE_MMC3 0x480AD000 + +#if CONFIG_MMC_INDEX == 1 +#define OMAP_HSMMC_BASE OMAP_HSMMC_BASE_MMC1 +#elif CONFIG_MMC_INDEX == 2 +#define OMAP_HSMMC_BASE OMAP_HSMMC_BASE_MMC2 +#elif CONFIG_MMC_INDEX == 3 +#define OMAP_HSMMC_BASE OMAP_HSMMC_BASE_MMC3 +#endif typedef struct hsmmc { unsigned char res1[0x10]; diff --git a/include/asm-arm/arch-omap3/omap3.h b/include/asm-arm/arch-omap3/omap3.h index 8c9656f..b5b5def 100644 --- a/include/asm-arm/arch-omap3/omap3.h +++ b/include/asm-arm/arch-omap3/omap3.h @@ -206,6 +206,8 @@ typedef struct gpio { #define VAUX3_DEDICATED 0x7D #define VMMC1_DEV_GRP 0x82 #define VMMC1_DEDICATED 0x85 +#define VMMC2_DEV_GRP 0x86 +#define VMMC2_DEDICATED 0x89 #define VPLL2_DEV_GRP 0x8E #define VPLL2_DEDICATED 0x91 #define VDAC_DEV_GRP 0x96 @@ -219,5 +221,6 @@ typedef struct gpio { #define VPLL2_VSEL_18 0x05 #define VDAC_VSEL_18 0x03 #define VMMC1_VSEL_30 0x02 +#define VMMC2_VSEL_185 0x06 #endif diff --git a/include/configs/omap3_beagle.h b/include/configs/omap3_beagle.h index 0f9344b..3609a0d 100644 --- a/include/configs/omap3_beagle.h +++ b/include/configs/omap3_beagle.h @@ -90,6 +90,7 @@ 115200} #define CONFIG_MMC 1 #define CONFIG_OMAP3_MMC 1 +#define CONFIG_MMC_INDEX 1 #define CONFIG_DOS_PARTITION 1 /* commands to include */ diff --git a/include/configs/omap3_evm.h b/include/configs/omap3_evm.h index f4498a9..6417eba 100644 --- a/include/configs/omap3_evm.h +++ b/include/configs/omap3_evm.h @@ -95,6 +95,7 @@ 115200} #define CONFIG_MMC 1 #define CONFIG_OMAP3_MMC 1 +#define CONFIG_MMC_INDEX 1 #define CONFIG_DOS_PARTITION 1 /* commands to include */ diff --git a/include/configs/omap3_overo.h b/include/configs/omap3_overo.h index dee0417..af23abd 100644 --- a/include/configs/omap3_overo.h +++ b/include/configs/omap3_overo.h @@ -82,6 +82,7 @@ 115200} #define CONFIG_MMC 1 #define CONFIG_OMAP3_MMC 1 +#define CONFIG_MMC_INDEX 1 #define CONFIG_DOS_PARTITION 1 /* commands to include */ diff --git a/include/configs/omap3_pandora.h b/include/configs/omap3_pandora.h index 00c0374..4e09a9a 100644 --- a/include/configs/omap3_pandora.h +++ b/include/configs/omap3_pandora.h @@ -85,6 +85,7 @@ 115200} #define CONFIG_MMC 1 #define CONFIG_OMAP3_MMC 1 +#define CONFIG_MMC_INDEX 1 #define CONFIG_DOS_PARTITION 1 /* commands to include */ diff --git a/include/configs/omap3_zoom1.h b/include/configs/omap3_zoom1.h index f8ae163..2af5b07 100644 --- a/include/configs/omap3_zoom1.h +++ b/include/configs/omap3_zoom1.h @@ -91,6 +91,7 @@ 115200} #define CONFIG_MMC 1 #define CONFIG_OMAP3_MMC 1 +#define CONFIG_MMC_INDEX 1 #define CONFIG_DOS_PARTITION 1 /* commands to include */ _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot