diff options
author | Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> | 2010-05-13 01:08:21 +0000 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2010-05-31 13:43:26 +0900 |
commit | c8ee3d4b5f9de761d65a588b5f243a7a7c01a722 (patch) | |
tree | dbf56366616a3724b775cb6de7847c0727240805 /arch/arm/mach-shmobile | |
parent | cb9215e1fa13860fa8fbe9941a59fcbc45781373 (diff) |
ARM: mach-shmobile: ap4evb: Add MMC support
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/arm/mach-shmobile')
-rw-r--r-- | arch/arm/mach-shmobile/board-ap4evb.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/arch/arm/mach-shmobile/board-ap4evb.c b/arch/arm/mach-shmobile/board-ap4evb.c index 8fb51f5157f..8e8a6fb213f 100644 --- a/arch/arm/mach-shmobile/board-ap4evb.c +++ b/arch/arm/mach-shmobile/board-ap4evb.c @@ -28,6 +28,8 @@ #include <linux/mtd/mtd.h> #include <linux/mtd/partitions.h> #include <linux/mtd/physmap.h> +#include <linux/mmc/host.h> +#include <linux/mmc/sh_mmcif.h> #include <linux/i2c.h> #include <linux/i2c/tsc2007.h> #include <linux/io.h> @@ -124,6 +126,18 @@ * : OFF : Bluetooth Audio Mode */ +/* + * MMC (CN7) + * + * J22 : 1-2: 1.8v for MMC + * 2-3: 3.3v for MMC + * SW1 : OFF + * SW33: bit1: OFF + * bit2: ON + * bit3: ON + * bit4: X + */ + /* MTD */ static struct mtd_partition nor_flash_partitions[] = { { @@ -242,6 +256,46 @@ static struct platform_device keysc_device = { }, }; +/* SH_MMCIF */ +static struct resource sh_mmcif_resources[] = { + [0] = { + .name = "SH_MMCIF", + .start = 0xE6BD0000, + .end = 0xE6BD00FF, + .flags = IORESOURCE_MEM, + }, + [1] = { + /* MMC ERR */ + .start = 198, + .flags = IORESOURCE_IRQ, + }, + [2] = { + /* MMC NOR */ + .start = 199, + .flags = IORESOURCE_IRQ, + }, +}; + +struct sh_mmcif_plat_data sh_mmcif_plat = { + .sup_pclk = 0, + .ocr = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34, + .caps = MMC_CAP_4_BIT_DATA | + MMC_CAP_8_BIT_DATA | + MMC_CAP_NEEDS_POLL, +}; + +static struct platform_device sh_mmcif_device = { + .name = "sh_mmcif", + .id = 0, + .dev = { + .dma_mask = NULL, + .coherent_dma_mask = 0xffffffff, + .platform_data = &sh_mmcif_plat, + }, + .num_resources = ARRAY_SIZE(sh_mmcif_resources), + .resource = sh_mmcif_resources, +}; + /* SDHI0 */ static struct sh_mobile_sdhi_info sdhi0_info = { .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, @@ -447,6 +501,7 @@ static struct platform_device *ap4evb_devices[] __initdata = { &lcdc_device, &mipidsi0_device, &fsi_device, + &sh_mmcif_device }; /* TouchScreen (Needs SW3 set to OFF) */ @@ -620,6 +675,18 @@ static void __init ap4evb_init(void) gpio_request(GPIO_FN_IRQ28_123, NULL); set_irq_type(IRQ28, IRQ_TYPE_LEVEL_LOW); + /* MMCIF */ + gpio_request(GPIO_FN_MMCD0_0, NULL); + gpio_request(GPIO_FN_MMCD0_1, NULL); + gpio_request(GPIO_FN_MMCD0_2, NULL); + gpio_request(GPIO_FN_MMCD0_3, NULL); + gpio_request(GPIO_FN_MMCD0_4, NULL); + gpio_request(GPIO_FN_MMCD0_5, NULL); + gpio_request(GPIO_FN_MMCD0_6, NULL); + gpio_request(GPIO_FN_MMCD0_7, NULL); + gpio_request(GPIO_FN_MMCCMD0, NULL); + gpio_request(GPIO_FN_MMCCLK0, NULL); + /* USB enable */ gpio_request(GPIO_FN_VBUS0_1, NULL); gpio_request(GPIO_FN_IDIN_1_18, NULL); |