From mboxrd@z Thu Jan 1 00:00:00 1970 From: ludovic.desroches Subject: Re: [PATCH v2] ARM: at91: add atmel-mci support for chips and boards which can use it Date: Mon, 21 May 2012 12:31:12 +0200 Message-ID: <4FBA1970.1000703@atmel.com> References: <1337183519-25459-3-git-send-email-ludovic.desroches@atmel.com> <1337595807-8539-1-git-send-email-ludovic.desroches@atmel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1"; Format="flowed" Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <1337595807-8539-1-git-send-email-ludovic.desroches@atmel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-arm-kernel-bounces@lists.infradead.org Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: ludovic.desroches@atmel.com Cc: nicolas.ferre@atmel.com, plagnioj@jcrosoft.com, linux-mmc@vger.kernel.org, linux-arm-kernel@lists.infradead.org List-Id: linux-mmc@vger.kernel.org Le 05/21/2012 12:23 PM, ludovic.desroches@atmel.com a =E9crit : > From: Ludovic Desroches > > Since atmel-mci driver supports all atmel mci version excepted the rm9200= one, > use it instead of at91_mci driver. Sorry commit message is wrong. Since atmel-mci driver supports all atmel mci versions, use it instead = of at91_mci driver. > > Signed-off-by: Ludovic Desroches > --- > V2: add several boards I missed > > arch/arm/mach-at91/at91rm9200_devices.c | 99 ++++++++++++++++++ > arch/arm/mach-at91/at91sam9261_devices.c | 67 ++++++++++++ > arch/arm/mach-at91/at91sam9263.c | 2 + > arch/arm/mach-at91/at91sam9263_devices.c | 164 +++++++++++++++++++++++= +++++++ > arch/arm/mach-at91/at91sam9rl_devices.c | 70 +++++++++++++ > arch/arm/mach-at91/board-afeb-9260v1.c | 14 +++ > arch/arm/mach-at91/board-carmeva.c | 14 +++ > arch/arm/mach-at91/board-cpu9krea.c | 14 +++ > arch/arm/mach-at91/board-cpuat91.c | 14 +++ > arch/arm/mach-at91/board-csb337.c | 14 +++ > arch/arm/mach-at91/board-eb9200.c | 14 +++ > arch/arm/mach-at91/board-ecbat91.c | 14 +++ > arch/arm/mach-at91/board-eco920.c | 14 +++ > arch/arm/mach-at91/board-flexibity.c | 14 +++ > arch/arm/mach-at91/board-foxg20.c | 16 +++- > arch/arm/mach-at91/board-kb9202.c | 14 +++ > arch/arm/mach-at91/board-neocore926.c | 14 +++ > arch/arm/mach-at91/board-picotux200.c | 14 +++ > arch/arm/mach-at91/board-qil-a9260.c | 14 +++ > arch/arm/mach-at91/board-rm9200dk.c | 14 +++ > arch/arm/mach-at91/board-rm9200ek.c | 14 +++ > arch/arm/mach-at91/board-rsi-ews.c | 14 +++ > arch/arm/mach-at91/board-sam9-l9260.c | 16 +++- > arch/arm/mach-at91/board-sam9260ek.c | 16 +++- > arch/arm/mach-at91/board-sam9261ek.c | 14 +++ > arch/arm/mach-at91/board-sam9263ek.c | 14 +++ > arch/arm/mach-at91/board-sam9rlek.c | 14 +++ > arch/arm/mach-at91/board-usb-a926x.c | 2 +- > arch/arm/mach-at91/board-yl-9200.c | 14 +++ > 29 files changed, 728 insertions(+), 4 deletions(-) > > diff --git a/arch/arm/mach-at91/at91rm9200_devices.c b/arch/arm/mach-at91= /at91rm9200_devices.c > index 05774e5..2c13783 100644 > --- a/arch/arm/mach-at91/at91rm9200_devices.c > +++ b/arch/arm/mach-at91/at91rm9200_devices.c > @@ -374,6 +374,105 @@ void __init at91_add_device_mmc(short mmc_id, struc= t at91_mmc_data *data) {} > > > /* -------------------------------------------------------------------- > + * MMC / SD > + * -------------------------------------------------------------------- = */ > + > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static u64 mmc_dmamask =3D DMA_BIT_MASK(32); > +static struct mci_platform_data mmc_data; > + > +static struct resource mmc_resources[] =3D { > + [0] =3D { > + .start =3D AT91RM9200_BASE_MCI, > + .end =3D AT91RM9200_BASE_MCI + SZ_16K - 1, > + .flags =3D IORESOURCE_MEM, > + }, > + [1] =3D { > + .start =3D AT91RM9200_ID_MCI, > + .end =3D AT91RM9200_ID_MCI, > + .flags =3D IORESOURCE_IRQ, > + }, > +}; > + > +static struct platform_device at91rm9200_mmc_device =3D { > + .name =3D "atmel_mci", > + .id =3D -1, > + .dev =3D { > + .dma_mask =3D&mmc_dmamask, > + .coherent_dma_mask =3D DMA_BIT_MASK(32), > + .platform_data =3D&mmc_data, > + }, > + .resource =3D mmc_resources, > + .num_resources =3D ARRAY_SIZE(mmc_resources), > +}; > + > +void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *= data) > +{ > + unsigned int i; > + unsigned int slot_count =3D 0; > + > + if (!data) > + return; > + > + for (i =3D 0; i< ATMCI_MAX_NR_SLOTS; i++) { > + > + if (!data->slot[i].bus_width) > + continue; > + > + /* input/irq */ > + if (gpio_is_valid(data->slot[i].detect_pin)) { > + at91_set_gpio_input(data->slot[i].detect_pin, 1); > + at91_set_deglitch(data->slot[i].detect_pin, 1); > + } > + if (gpio_is_valid(data->slot[i].wp_pin)) > + at91_set_gpio_input(data->slot[i].wp_pin, 1); > + > + switch (i) { > + case 0: /* slot A */ > + /* CMD */ > + at91_set_A_periph(AT91_PIN_PA28, 1); > + /* DAT0, maybe DAT1..DAT3 */ > + at91_set_A_periph(AT91_PIN_PA29, 1); > + if (data->slot[i].bus_width =3D=3D 4) { > + at91_set_B_periph(AT91_PIN_PB3, 1); > + at91_set_B_periph(AT91_PIN_PB4, 1); > + at91_set_B_periph(AT91_PIN_PB5, 1); > + } > + slot_count++; > + break; > + case 1: /* slot B */ > + /* CMD */ > + at91_set_B_periph(AT91_PIN_PA8, 1); > + /* DAT0, maybe DAT1..DAT3 */ > + at91_set_B_periph(AT91_PIN_PA9, 1); > + if (data->slot[i].bus_width =3D=3D 4) { > + at91_set_B_periph(AT91_PIN_PA10, 1); > + at91_set_B_periph(AT91_PIN_PA11, 1); > + at91_set_B_periph(AT91_PIN_PA12, 1); > + } > + slot_count++; > + break; > + default: > + printk(KERN_ERR > + "AT91: SD/MMC slot %d not available\n", i); > + break; > + } > + if (slot_count) { > + /* CLK */ > + at91_set_A_periph(AT91_PIN_PA27, 0); > + > + mmc_data =3D *data; > + platform_device_register(&at91rm9200_mmc_device); > + } > + } > + > +} > +#else > +void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *= data) {} > +#endif > + > + > +/* -------------------------------------------------------------------- > * NAND / SmartMedia > * --------------------------------------------------------------------= */ > > diff --git a/arch/arm/mach-at91/at91sam9261_devices.c b/arch/arm/mach-at9= 1/at91sam9261_devices.c > index 4db961a..0817854 100644 > --- a/arch/arm/mach-at91/at91sam9261_devices.c > +++ b/arch/arm/mach-at91/at91sam9261_devices.c > @@ -202,7 +202,74 @@ void __init at91_add_device_mmc(short mmc_id, struct= at91_mmc_data *data) > void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *dat= a) {} > #endif > > +/* -------------------------------------------------------------------- > + * MMC / SD Slot for Atmel MCI Driver > + * -------------------------------------------------------------------- = */ > + > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static u64 mmc_dmamask =3D DMA_BIT_MASK(32); > +static struct mci_platform_data mmc_data; > + > +static struct resource mmc_resources[] =3D { > + [0] =3D { > + .start =3D AT91SAM9261_BASE_MCI, > + .end =3D AT91SAM9261_BASE_MCI + SZ_16K - 1, > + .flags =3D IORESOURCE_MEM, > + }, > + [1] =3D { > + .start =3D AT91SAM9261_ID_MCI, > + .end =3D AT91SAM9261_ID_MCI, > + .flags =3D IORESOURCE_IRQ, > + }, > +}; > + > +static struct platform_device at91sam9261_mmc_device =3D { > + .name =3D "atmel_mci", > + .id =3D -1, > + .dev =3D { > + .dma_mask =3D&mmc_dmamask, > + .coherent_dma_mask =3D DMA_BIT_MASK(32), > + .platform_data =3D&mmc_data, > + }, > + .resource =3D mmc_resources, > + .num_resources =3D ARRAY_SIZE(mmc_resources), > +}; > + > +void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *= data) > +{ > + if (!data) > + return; > > + if (data->slot[0].bus_width) { > + /* input/irq */ > + if (gpio_is_valid(data->slot[0].detect_pin)) { > + at91_set_gpio_input(data->slot[0].detect_pin, 1); > + at91_set_deglitch(data->slot[0].detect_pin, 1); > + } > + if (gpio_is_valid(data->slot[0].wp_pin)) > + at91_set_gpio_input(data->slot[0].wp_pin, 1); > + > + /* CLK */ > + at91_set_B_periph(AT91_PIN_PA2, 0); > + > + /* CMD */ > + at91_set_B_periph(AT91_PIN_PA1, 1); > + > + /* DAT0, maybe DAT1..DAT3 */ > + at91_set_B_periph(AT91_PIN_PA0, 1); > + if (data->slot[0].bus_width =3D=3D 4) { > + at91_set_B_periph(AT91_PIN_PA4, 1); > + at91_set_B_periph(AT91_PIN_PA5, 1); > + at91_set_B_periph(AT91_PIN_PA6, 1); > + } > + > + mmc_data =3D *data; > + platform_device_register(&at91sam9261_mmc_device); > + } > +} > +#else > +void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *= data) {} > +#endif > /* -------------------------------------------------------------------- > * NAND / SmartMedia > * --------------------------------------------------------------------= */ > diff --git a/arch/arm/mach-at91/at91sam9263.c b/arch/arm/mach-at91/at91sa= m9263.c > index ef301be..053e47a 100644 > --- a/arch/arm/mach-at91/at91sam9263.c > +++ b/arch/arm/mach-at91/at91sam9263.c > @@ -189,6 +189,8 @@ static struct clk_lookup periph_clocks_lookups[] =3D { > CLKDEV_CON_DEV_ID("pclk", "ssc.1",&ssc1_clk), > CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.0",&mmc0_clk), > CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.1",&mmc1_clk), > + CLKDEV_CON_DEV_ID("mci_clk", "atmel_mci.0",&mmc0_clk), > + CLKDEV_CON_DEV_ID("mci_clk", "atmel_mci.1",&mmc1_clk), > CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.0",&spi0_clk), > CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.1",&spi1_clk), > CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0",&tcb_clk), > diff --git a/arch/arm/mach-at91/at91sam9263_devices.c b/arch/arm/mach-at9= 1/at91sam9263_devices.c > index fe99206..617fbfc 100644 > --- a/arch/arm/mach-at91/at91sam9263_devices.c > +++ b/arch/arm/mach-at91/at91sam9263_devices.c > @@ -354,6 +354,170 @@ void __init at91_add_device_mmc(short mmc_id, struc= t at91_mmc_data *data) {} > #endif > > /* -------------------------------------------------------------------- > + * MMC / SD > + * -------------------------------------------------------------------- = */ > + > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static u64 mmc_dmamask =3D DMA_BIT_MASK(32); > +static struct mci_platform_data mmc0_data, mmc1_data; > + > +static struct resource mmc0_resources[] =3D { > + [0] =3D { > + .start =3D AT91SAM9263_BASE_MCI0, > + .end =3D AT91SAM9263_BASE_MCI0 + SZ_16K - 1, > + .flags =3D IORESOURCE_MEM, > + }, > + [1] =3D { > + .start =3D AT91SAM9263_ID_MCI0, > + .end =3D AT91SAM9263_ID_MCI0, > + .flags =3D IORESOURCE_IRQ, > + }, > +}; > + > +static struct platform_device at91sam9263_mmc0_device =3D { > + .name =3D "atmel_mci", > + .id =3D 0, > + .dev =3D { > + .dma_mask =3D&mmc_dmamask, > + .coherent_dma_mask =3D DMA_BIT_MASK(32), > + .platform_data =3D&mmc0_data, > + }, > + .resource =3D mmc0_resources, > + .num_resources =3D ARRAY_SIZE(mmc0_resources), > +}; > + > +static struct resource mmc1_resources[] =3D { > + [0] =3D { > + .start =3D AT91SAM9263_BASE_MCI1, > + .end =3D AT91SAM9263_BASE_MCI1 + SZ_16K - 1, > + .flags =3D IORESOURCE_MEM, > + }, > + [1] =3D { > + .start =3D AT91SAM9263_ID_MCI1, > + .end =3D AT91SAM9263_ID_MCI1, > + .flags =3D IORESOURCE_IRQ, > + }, > +}; > + > +static struct platform_device at91sam9263_mmc1_device =3D { > + .name =3D "atmel_mci", > + .id =3D 1, > + .dev =3D { > + .dma_mask =3D&mmc_dmamask, > + .coherent_dma_mask =3D DMA_BIT_MASK(32), > + .platform_data =3D&mmc1_data, > + }, > + .resource =3D mmc1_resources, > + .num_resources =3D ARRAY_SIZE(mmc1_resources), > +}; > + > +void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *= data) > +{ > + unsigned int i; > + unsigned int slot_count =3D 0; > + > + if (!data) > + return; > + > + for (i =3D 0; i< ATMCI_MAX_NR_SLOTS; i++) { > + > + if (!data->slot[i].bus_width) > + continue; > + > + /* input/irq */ > + if (gpio_is_valid(data->slot[i].detect_pin)) { > + at91_set_gpio_input(data->slot[i].detect_pin, > + 1); > + at91_set_deglitch(data->slot[i].detect_pin, > + 1); > + } > + if (gpio_is_valid(data->slot[i].wp_pin)) > + at91_set_gpio_input(data->slot[i].wp_pin, 1); > + > + if (mmc_id =3D=3D 0) { /* MCI0 */ > + switch (i) { > + case 0: /* slot A */ > + /* CMD */ > + at91_set_A_periph(AT91_PIN_PA1, 1); > + /* DAT0, maybe DAT1..DAT3 */ > + at91_set_A_periph(AT91_PIN_PA0, 1); > + if (data->slot[i].bus_width =3D=3D 4) { > + at91_set_A_periph(AT91_PIN_PA3, 1); > + at91_set_A_periph(AT91_PIN_PA4, 1); > + at91_set_A_periph(AT91_PIN_PA5, 1); > + } > + slot_count++; > + break; > + case 1: /* slot B */ > + /* CMD */ > + at91_set_A_periph(AT91_PIN_PA16, 1); > + /* DAT0, maybe DAT1..DAT3 */ > + at91_set_A_periph(AT91_PIN_PA17, 1); > + if (data->slot[i].bus_width =3D=3D 4) { > + at91_set_A_periph(AT91_PIN_PA18, 1); > + at91_set_A_periph(AT91_PIN_PA19, 1); > + at91_set_A_periph(AT91_PIN_PA20, 1); > + } > + slot_count++; > + break; > + default: > + printk(KERN_ERR > + "AT91: SD/MMC slot %d not available\n", i); > + break; > + } > + if (slot_count) { > + /* CLK */ > + at91_set_A_periph(AT91_PIN_PA12, 0); > + > + mmc0_data =3D *data; > + platform_device_register(&at91sam9263_mmc0_device); > + } > + } else if (mmc_id =3D=3D 1) { /* MCI1 */ > + switch (i) { > + case 0: /* slot A */ > + /* CMD */ > + at91_set_A_periph(AT91_PIN_PA7, 1); > + /* DAT0, maybe DAT1..DAT3 */ > + at91_set_A_periph(AT91_PIN_PA8, 1); > + if (data->slot[i].bus_width =3D=3D 4) { > + at91_set_A_periph(AT91_PIN_PA9, 1); > + at91_set_A_periph(AT91_PIN_PA10, 1); > + at91_set_A_periph(AT91_PIN_PA11, 1); > + } > + slot_count++; > + break; > + case 1: /* slot B */ > + /* CMD */ > + at91_set_A_periph(AT91_PIN_PA21, 1); > + /* DAT0, maybe DAT1..DAT3 */ > + at91_set_A_periph(AT91_PIN_PA22, 1); > + if (data->slot[i].bus_width =3D=3D 4) { > + at91_set_A_periph(AT91_PIN_PA23, 1); > + at91_set_A_periph(AT91_PIN_PA24, 1); > + at91_set_A_periph(AT91_PIN_PA25, 1); > + } > + slot_count++; > + break; > + default: > + printk(KERN_ERR > + "AT91: SD/MMC slot %d not available\n", i); > + break; > + } > + if (slot_count) { > + /* CLK */ > + at91_set_A_periph(AT91_PIN_PA6, 0); > + > + mmc1_data =3D *data; > + platform_device_register(&at91sam9263_mmc1_device); > + } > + } > + } > +} > +#else > +void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *= data) {} > +#endif > + > +/* -------------------------------------------------------------------- > * Compact Flash (PCMCIA or IDE) > * --------------------------------------------------------------------= */ > > diff --git a/arch/arm/mach-at91/at91sam9rl_devices.c b/arch/arm/mach-at91= /at91sam9rl_devices.c > index fe4ae22..83c5845 100644 > --- a/arch/arm/mach-at91/at91sam9rl_devices.c > +++ b/arch/arm/mach-at91/at91sam9rl_devices.c > @@ -228,6 +228,76 @@ void __init at91_add_device_mmc(short mmc_id, struct= at91_mmc_data *data) {} > > > /* -------------------------------------------------------------------- > + * MMC / SD > + * -------------------------------------------------------------------- = */ > + > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static u64 mmc_dmamask =3D DMA_BIT_MASK(32); > +static struct mci_platform_data mmc_data; > + > +static struct resource mmc_resources[] =3D { > + [0] =3D { > + .start =3D AT91SAM9RL_BASE_MCI, > + .end =3D AT91SAM9RL_BASE_MCI + SZ_16K - 1, > + .flags =3D IORESOURCE_MEM, > + }, > + [1] =3D { > + .start =3D AT91SAM9RL_ID_MCI, > + .end =3D AT91SAM9RL_ID_MCI, > + .flags =3D IORESOURCE_IRQ, > + }, > +}; > + > +static struct platform_device at91sam9rl_mmc_device =3D { > + .name =3D "atmel_mci", > + .id =3D -1, > + .dev =3D { > + .dma_mask =3D&mmc_dmamask, > + .coherent_dma_mask =3D DMA_BIT_MASK(32), > + .platform_data =3D&mmc_data, > + }, > + .resource =3D mmc_resources, > + .num_resources =3D ARRAY_SIZE(mmc_resources), > +}; > + > +void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *= data) > +{ > + if (!data) > + return; > + > + if (data->slot[0].bus_width) { > + /* input/irq */ > + if (gpio_is_valid(data->slot[0].detect_pin)) { > + at91_set_gpio_input(data->slot[0].detect_pin, 1); > + at91_set_deglitch(data->slot[0].detect_pin, 1); > + } > + if (gpio_is_valid(data->slot[0].wp_pin)) > + at91_set_gpio_input(data->slot[0].wp_pin, 1); > + > + /* CLK */ > + at91_set_A_periph(AT91_PIN_PA2, 0); > + > + /* CMD */ > + at91_set_A_periph(AT91_PIN_PA1, 1); > + > + /* DAT0, maybe DAT1..DAT3 */ > + at91_set_A_periph(AT91_PIN_PA0, 1); > + if (data->slot[0].bus_width =3D=3D 4) { > + at91_set_A_periph(AT91_PIN_PA3, 1); > + at91_set_A_periph(AT91_PIN_PA4, 1); > + at91_set_A_periph(AT91_PIN_PA5, 1); > + } > + > + mmc_data =3D *data; > + platform_device_register(&at91sam9rl_mmc_device); > + } > +} > +#else > +void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *= data) {} > +#endif > + > + > +/* -------------------------------------------------------------------- > * NAND / SmartMedia > * --------------------------------------------------------------------= */ > > diff --git a/arch/arm/mach-at91/board-afeb-9260v1.c b/arch/arm/mach-at91/= board-afeb-9260v1.c > index 161efba..1e294ba 100644 > --- a/arch/arm/mach-at91/board-afeb-9260v1.c > +++ b/arch/arm/mach-at91/board-afeb-9260v1.c > @@ -148,6 +148,15 @@ static struct atmel_nand_data __initdata afeb9260_na= nd_data =3D { > /* > * MCI (SD/MMC) > */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static struct mci_platform_data __initdata afeb9260_mci0_data =3D { > + .slot[1] =3D { > + .bus_width =3D 4, > + .detect_pin =3D AT91_PIN_PC9, > + .wp_pin =3D AT91_PIN_PC4, > + }, > +}; > +#else > static struct at91_mmc_data __initdata afeb9260_mmc_data =3D { > .det_pin =3D AT91_PIN_PC9, > .wp_pin =3D AT91_PIN_PC4, > @@ -155,6 +164,7 @@ static struct at91_mmc_data __initdata afeb9260_mmc_d= ata =3D { > .wire4 =3D 1, > .vcc_pin =3D -EINVAL, > }; > +#endif > > > > @@ -202,7 +212,11 @@ static void __init afeb9260_board_init(void) > at91_set_B_periph(AT91_PIN_PA10, 0); /* ETX2 */ > at91_set_B_periph(AT91_PIN_PA11, 0); /* ETX3 */ > /* MMC */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > + at91_add_device_mci(0,&afeb9260_mci0_data); > +#else > at91_add_device_mmc(0,&afeb9260_mmc_data); > +#endif > /* I2C */ > at91_add_device_i2c(afeb9260_i2c_devices, > ARRAY_SIZE(afeb9260_i2c_devices)); > diff --git a/arch/arm/mach-at91/board-carmeva.c b/arch/arm/mach-at91/boar= d-carmeva.c > index 59d9cf9..050b9d5 100644 > --- a/arch/arm/mach-at91/board-carmeva.c > +++ b/arch/arm/mach-at91/board-carmeva.c > @@ -81,6 +81,15 @@ static struct at91_udc_data __initdata carmeva_udc_dat= a =3D { > // .vcc_pin =3D -EINVAL, > // }; > > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static struct mci_platform_data __initdata carmeva_mci0_data =3D { > + .slot[0] =3D { > + .bus_width =3D 4, > + .detect_pin =3D AT91_PIN_PB10, > + .wp_pin =3D AT91_PIN_PC14, > + }, > +}; > +#else > static struct at91_mmc_data __initdata carmeva_mmc_data =3D { > .slot_b =3D 0, > .wire4 =3D 1, > @@ -88,6 +97,7 @@ static struct at91_mmc_data __initdata carmeva_mmc_data= =3D { > .wp_pin =3D AT91_PIN_PC14, > .vcc_pin =3D -EINVAL, > }; > +#endif > > static struct spi_board_info carmeva_spi_devices[] =3D { > { /* DataFlash chip */ > @@ -153,7 +163,11 @@ static void __init carmeva_board_init(void) > /* Compact Flash */ > // at91_add_device_cf(&carmeva_cf_data); > /* MMC */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > + at91_add_device_mci(0,&carmeva_mci0_data); > +#else > at91_add_device_mmc(0,&carmeva_mmc_data); > +#endif > /* LEDs */ > at91_gpio_leds(carmeva_leds, ARRAY_SIZE(carmeva_leds)); > } > diff --git a/arch/arm/mach-at91/board-cpu9krea.c b/arch/arm/mach-at91/boa= rd-cpu9krea.c > index 5f3680e..9842297 100644 > --- a/arch/arm/mach-at91/board-cpu9krea.c > +++ b/arch/arm/mach-at91/board-cpu9krea.c > @@ -339,6 +339,15 @@ static void __init cpu9krea_add_device_buttons(void) > /* > * MCI (SD/MMC) > */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static struct mci_platform_data __initdata cpu9krea_mci0_data =3D { > + .slot[0] =3D { > + .bus_width =3D 4, > + .detect_pin =3D AT91_PIN_PA29, > + .wp_pin =3D -EINVAL, > + }, > +}; > +#else > static struct at91_mmc_data __initdata cpu9krea_mmc_data =3D { > .slot_b =3D 0, > .wire4 =3D 1, > @@ -346,6 +355,7 @@ static struct at91_mmc_data __initdata cpu9krea_mmc_d= ata =3D { > .wp_pin =3D -EINVAL, > .vcc_pin =3D -EINVAL, > }; > +#endif > > static void __init cpu9krea_board_init(void) > { > @@ -362,7 +372,11 @@ static void __init cpu9krea_board_init(void) > /* Ethernet */ > at91_add_device_eth(&cpu9krea_macb_data); > /* MMC */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > + at91_add_device_mci(0,&cpu9krea_mci0_data); > +#else > at91_add_device_mmc(0,&cpu9krea_mmc_data); > +#endif > /* I2C */ > at91_add_device_i2c(cpu9krea_i2c_devices, > ARRAY_SIZE(cpu9krea_i2c_devices)); > diff --git a/arch/arm/mach-at91/board-cpuat91.c b/arch/arm/mach-at91/boar= d-cpuat91.c > index e094cc8..cb5dcbf 100644 > --- a/arch/arm/mach-at91/board-cpuat91.c > +++ b/arch/arm/mach-at91/board-cpuat91.c > @@ -99,12 +99,22 @@ static struct at91_udc_data __initdata cpuat91_udc_da= ta =3D { > .pullup_pin =3D AT91_PIN_PC14, > }; > > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static struct mci_platform_data __initdata cpuat91_mci0_data =3D { > + .slot[0] =3D { > + .bus_width =3D 4, > + .detect_pin =3D AT91_PIN_PC2, > + .wp_pin =3D -EINVAL, > + }, > +}; > +#else > static struct at91_mmc_data __initdata cpuat91_mmc_data =3D { > .det_pin =3D AT91_PIN_PC2, > .wire4 =3D 1, > .wp_pin =3D -EINVAL, > .vcc_pin =3D -EINVAL, > }; > +#endif > > static struct physmap_flash_data cpuat91_flash_data =3D { > .width =3D 2, > @@ -171,7 +181,11 @@ static void __init cpuat91_board_init(void) > /* USB Device */ > at91_add_device_udc(&cpuat91_udc_data); > /* MMC */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > + at91_add_device_mci(0,&cpuat91_mci0_data); > +#else > at91_add_device_mmc(0,&cpuat91_mmc_data); > +#endif > /* I2C */ > at91_add_device_i2c(NULL, 0); > /* Platform devices */ > diff --git a/arch/arm/mach-at91/board-csb337.c b/arch/arm/mach-at91/board= -csb337.c > index 1a1547b..36d65ef 100644 > --- a/arch/arm/mach-at91/board-csb337.c > +++ b/arch/arm/mach-at91/board-csb337.c > @@ -95,6 +95,15 @@ static struct at91_cf_data __initdata csb337_cf_data = =3D { > .rst_pin =3D AT91_PIN_PD2, > }; > > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static struct mci_platform_data __initdata csb337_mci0_data =3D { > + .slot[0] =3D { > + .bus_width =3D 4, > + .detect_pin =3D AT91_PIN_PD5, > + .wp_pin =3D AT91_PIN_PD6, > + }, > +}; > +#else > static struct at91_mmc_data __initdata csb337_mmc_data =3D { > .det_pin =3D AT91_PIN_PD5, > .slot_b =3D 0, > @@ -102,6 +111,7 @@ static struct at91_mmc_data __initdata csb337_mmc_dat= a =3D { > .wp_pin =3D AT91_PIN_PD6, > .vcc_pin =3D -EINVAL, > }; > +#endif > > static struct spi_board_info csb337_spi_devices[] =3D { > { /* CAN controller */ > @@ -244,7 +254,11 @@ static void __init csb337_board_init(void) > /* SPI */ > at91_add_device_spi(csb337_spi_devices, ARRAY_SIZE(csb337_spi_devices)= ); > /* MMC */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > + at91_add_device_mci(0,&csb337_mci0_data); > +#else > at91_add_device_mmc(0,&csb337_mmc_data); > +#endif > /* NOR flash */ > platform_device_register(&csb_flash); > /* LEDs */ > diff --git a/arch/arm/mach-at91/board-eb9200.c b/arch/arm/mach-at91/board= -eb9200.c > index d302ca3..f374ecc 100644 > --- a/arch/arm/mach-at91/board-eb9200.c > +++ b/arch/arm/mach-at91/board-eb9200.c > @@ -83,6 +83,15 @@ static struct at91_cf_data __initdata eb9200_cf_data = =3D { > .rst_pin =3D AT91_PIN_PC5, > }; > > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static struct mci_platform_data __initdata eb9200_mci0_data =3D { > + .slot[0] =3D { > + .bus_width =3D 4, > + .detect_pin =3D -EINVAL, > + .wp_pin =3D -EINVAL, > + }, > +}; > +#else > static struct at91_mmc_data __initdata eb9200_mmc_data =3D { > .slot_b =3D 0, > .wire4 =3D 1, > @@ -90,6 +99,7 @@ static struct at91_mmc_data __initdata eb9200_mmc_data = =3D { > .wp_pin =3D -EINVAL, > .vcc_pin =3D -EINVAL, > }; > +#endif > > static struct i2c_board_info __initdata eb9200_i2c_devices[] =3D { > { > @@ -116,7 +126,11 @@ static void __init eb9200_board_init(void) > at91_add_device_spi(NULL, 0); > /* MMC */ > /* only supports 1 or 4 bit interface, not wired through to SPI */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > + at91_add_device_mci(0,&eb9200_mci0_data); > +#else > at91_add_device_mmc(0,&eb9200_mmc_data); > +#endif > } > > MACHINE_START(ATEB9200, "Embest ATEB9200") > diff --git a/arch/arm/mach-at91/board-ecbat91.c b/arch/arm/mach-at91/boar= d-ecbat91.c > index 69966ce..0f39fb3 100644 > --- a/arch/arm/mach-at91/board-ecbat91.c > +++ b/arch/arm/mach-at91/board-ecbat91.c > @@ -75,6 +75,15 @@ static struct at91_usbh_data __initdata ecb_at91usbh_d= ata =3D { > .overcurrent_pin=3D {-EINVAL, -EINVAL}, > }; > > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static struct mci_platform_data __initdata ecbat91_mci0_data =3D { > + .slot[0] =3D { > + .bus_width =3D 4, > + .detect_pin =3D -EINVAL, > + .wp_pin =3D -EINVAL, > + }, > +}; > +#else > static struct at91_mmc_data __initdata ecb_at91mmc_data =3D { > .slot_b =3D 0, > .wire4 =3D 1, > @@ -82,6 +91,7 @@ static struct at91_mmc_data __initdata ecb_at91mmc_data= =3D { > .wp_pin =3D -EINVAL, > .vcc_pin =3D -EINVAL, > }; > +#endif > > > #if defined(CONFIG_MTD_DATAFLASH) > @@ -164,7 +174,11 @@ static void __init ecb_at91board_init(void) > at91_add_device_i2c(NULL, 0); > > /* MMC */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > + at91_add_device_mci(0,&ecbat91_mci0_data); > +#else > at91_add_device_mmc(0,&ecb_at91mmc_data); > +#endif > > /* SPI */ > at91_add_device_spi(ecb_at91spi_devices, ARRAY_SIZE(ecb_at91spi_device= s)); > diff --git a/arch/arm/mach-at91/board-eco920.c b/arch/arm/mach-at91/board= -eco920.c > index f23aabe..932bebd 100644 > --- a/arch/arm/mach-at91/board-eco920.c > +++ b/arch/arm/mach-at91/board-eco920.c > @@ -64,6 +64,15 @@ static struct at91_udc_data __initdata eco920_udc_data= =3D { > .pullup_pin =3D AT91_PIN_PB13, > }; > > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static struct mci_platform_data __initdata eco920_mci0_data =3D { > + .slot[0] =3D { > + .bus_width =3D 1, > + .detect_pin =3D -EINVAL, > + .wp_pin =3D -EINVAL, > + }, > +}; > +#else > static struct at91_mmc_data __initdata eco920_mmc_data =3D { > .slot_b =3D 0, > .wire4 =3D 0, > @@ -71,6 +80,7 @@ static struct at91_mmc_data __initdata eco920_mmc_data = =3D { > .wp_pin =3D -EINVAL, > .vcc_pin =3D -EINVAL, > }; > +#endif > > static struct physmap_flash_data eco920_flash_data =3D { > .width =3D 2, > @@ -108,7 +118,11 @@ static void __init eco920_board_init(void) > at91_add_device_usbh(&eco920_usbh_data); > at91_add_device_udc(&eco920_udc_data); > > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > + at91_add_device_mci(0,&eco920_mci0_data); > +#else > at91_add_device_mmc(0,&eco920_mmc_data); > +#endif > platform_device_register(&eco920_flash); > > at91_ramc_write(0, AT91_SMC_CSR(7), AT91_SMC_RWHOLD_(1) > diff --git a/arch/arm/mach-at91/board-flexibity.c b/arch/arm/mach-at91/bo= ard-flexibity.c > index 1815152..6632a80 100644 > --- a/arch/arm/mach-at91/board-flexibity.c > +++ b/arch/arm/mach-at91/board-flexibity.c > @@ -80,6 +80,15 @@ static struct spi_board_info flexibity_spi_devices[] = =3D { > }; > > /* MCI (SD/MMC) */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static struct mci_platform_data __initdata flexibity_mci0_data =3D { > + .slot[0] =3D { > + .bus_width =3D 4, > + .detect_pin =3D AT91_PIN_PC9, > + .wp_pin =3D AT91_PIN_PC4, > + }, > +}; > +#else > static struct at91_mmc_data __initdata flexibity_mmc_data =3D { > .slot_b =3D 0, > .wire4 =3D 1, > @@ -87,6 +96,7 @@ static struct at91_mmc_data __initdata flexibity_mmc_da= ta =3D { > .wp_pin =3D AT91_PIN_PC4, > .vcc_pin =3D -EINVAL, > }; > +#endif > > /* LEDs */ > static struct gpio_led flexibity_leds[] =3D { > @@ -155,7 +165,11 @@ static void __init flexibity_board_init(void) > at91_add_device_spi(flexibity_spi_devices, > ARRAY_SIZE(flexibity_spi_devices)); > /* MMC */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > + at91_add_device_mci(0,&flexibity_mci0_data); > +#else > at91_add_device_mmc(0,&flexibity_mmc_data); > +#endif > /* LEDs */ > at91_gpio_leds(flexibity_leds, ARRAY_SIZE(flexibity_leds)); > } > diff --git a/arch/arm/mach-at91/board-foxg20.c b/arch/arm/mach-at91/board= -foxg20.c > index caf017f..6cda303 100644 > --- a/arch/arm/mach-at91/board-foxg20.c > +++ b/arch/arm/mach-at91/board-foxg20.c > @@ -123,7 +123,7 @@ static struct at91_udc_data __initdata foxg20_udc_dat= a =3D { > * SPI devices. > */ > static struct spi_board_info foxg20_spi_devices[] =3D { > -#if !defined(CONFIG_MMC_AT91) > +#if !defined(CONFIG_MMC_AT91)&& !defined(CONFIG_MMC_ATMELMCI) > { > .modalias =3D "mtd_dataflash", > .chip_select =3D 1, > @@ -146,6 +146,7 @@ static struct macb_platform_data __initdata foxg20_ma= cb_data =3D { > * MCI (SD/MMC) > * det_pin, wp_pin and vcc_pin are not connected > */ > +#if defined(CONFIG_MMC_AT91) || defined(CONFIG_MMC_AT91_MODULE) > static struct at91_mmc_data __initdata foxg20_mmc_data =3D { > .slot_b =3D 1, > .wire4 =3D 1, > @@ -153,6 +154,15 @@ static struct at91_mmc_data __initdata foxg20_mmc_da= ta =3D { > .wp_pin =3D -EINVAL, > .vcc_pin =3D -EINVAL, > }; > +#elif defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static struct mci_platform_data __initdata foxg20_mci0_data =3D { > + .slot[1] =3D { > + .bus_width =3D 4, > + .detect_pin =3D -EINVAL, > + .wp_pin =3D -EINVAL, > + }, > +}; > +#endif > > > /* > @@ -251,7 +261,11 @@ static void __init foxg20_board_init(void) > /* Ethernet */ > at91_add_device_eth(&foxg20_macb_data); > /* MMC */ > +#if defined(CONFIG_MMC_AT91) || defined(CONFIG_MMC_AT91_MODULE) > at91_add_device_mmc(0,&foxg20_mmc_data); > +#elif defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > + at91_add_device_mci(0,&foxg20_mci0_data); > +#endif > /* I2C */ > at91_add_device_i2c(foxg20_i2c_devices, ARRAY_SIZE(foxg20_i2c_devices)= ); > /* LEDs */ > diff --git a/arch/arm/mach-at91/board-kb9202.c b/arch/arm/mach-at91/board= -kb9202.c > index 59b92aa..e31ec8e 100644 > --- a/arch/arm/mach-at91/board-kb9202.c > +++ b/arch/arm/mach-at91/board-kb9202.c > @@ -86,6 +86,15 @@ static struct at91_udc_data __initdata kb9202_udc_data= =3D { > .pullup_pin =3D AT91_PIN_PB22, > }; > > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static struct mci_platform_data __initdata kb9202_mci0_data =3D { > + .slot[0] =3D { > + .bus_width =3D 4, > + .detect_pin =3D AT91_PIN_PB2, > + .wp_pin =3D -EINVAL, > + }, > +}; > +#else > static struct at91_mmc_data __initdata kb9202_mmc_data =3D { > .det_pin =3D AT91_PIN_PB2, > .slot_b =3D 0, > @@ -93,6 +102,7 @@ static struct at91_mmc_data __initdata kb9202_mmc_data= =3D { > .wp_pin =3D -EINVAL, > .vcc_pin =3D -EINVAL, > }; > +#endif > > static struct mtd_partition __initdata kb9202_nand_partition[] =3D { > { > @@ -124,7 +134,11 @@ static void __init kb9202_board_init(void) > /* USB Device */ > at91_add_device_udc(&kb9202_udc_data); > /* MMC */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > + at91_add_device_mci(0,&kb9202_mci0_data); > +#else > at91_add_device_mmc(0,&kb9202_mmc_data); > +#endif > /* I2C */ > at91_add_device_i2c(NULL, 0); > /* SPI */ > diff --git a/arch/arm/mach-at91/board-neocore926.c b/arch/arm/mach-at91/b= oard-neocore926.c > index 57d5f6a..849b938 100644 > --- a/arch/arm/mach-at91/board-neocore926.c > +++ b/arch/arm/mach-at91/board-neocore926.c > @@ -146,12 +146,22 @@ static struct spi_board_info neocore926_spi_devices= [] =3D { > /* > * MCI (SD/MMC) > */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static struct mci_platform_data __initdata neocore926_mci0_data =3D { > + .slot[0] =3D { > + .bus_width =3D 4, > + .detect_pin =3D AT91_PIN_PE18, > + .wp_pin =3D AT91_PIN_PE19, > + }, > +}; > +#else > static struct at91_mmc_data __initdata neocore926_mmc_data =3D { > .wire4 =3D 1, > .det_pin =3D AT91_PIN_PE18, > .wp_pin =3D AT91_PIN_PE19, > .vcc_pin =3D -EINVAL, > }; > +#endif > > > /* > @@ -357,7 +367,11 @@ static void __init neocore926_board_init(void) > neocore926_add_device_ts(); > > /* MMC */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > + at91_add_device_mci(0,&neocore926_mci0_data); > +#else > at91_add_device_mmc(1,&neocore926_mmc_data); > +#endif > > /* Ethernet */ > at91_add_device_eth(&neocore926_macb_data); > diff --git a/arch/arm/mach-at91/board-picotux200.c b/arch/arm/mach-at91/b= oard-picotux200.c > index 59e35dd..a8cb032 100644 > --- a/arch/arm/mach-at91/board-picotux200.c > +++ b/arch/arm/mach-at91/board-picotux200.c > @@ -72,6 +72,15 @@ static struct at91_usbh_data __initdata picotux200_usb= h_data =3D { > .overcurrent_pin=3D {-EINVAL, -EINVAL}, > }; > > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static struct mci_platform_data __initdata picotux200_mci0_data =3D { > + .slot[0] =3D { > + .bus_width =3D 4, > + .detect_pin =3D AT91_PIN_PB27, > + .wp_pin =3D AT91_PIN_PA17, > + }, > +}; > +#else > static struct at91_mmc_data __initdata picotux200_mmc_data =3D { > .det_pin =3D AT91_PIN_PB27, > .slot_b =3D 0, > @@ -79,6 +88,7 @@ static struct at91_mmc_data __initdata picotux200_mmc_d= ata =3D { > .wp_pin =3D AT91_PIN_PA17, > .vcc_pin =3D -EINVAL, > }; > +#endif > > #define PICOTUX200_FLASH_BASE AT91_CHIPSELECT_0 > #define PICOTUX200_FLASH_SIZE SZ_4M > @@ -115,7 +125,11 @@ static void __init picotux200_board_init(void) > at91_add_device_i2c(NULL, 0); > /* MMC */ > at91_set_gpio_output(AT91_PIN_PB22, 1); /* this MMC card slot can opti= onally use SPI signaling (CS3). */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > + at91_add_device_mci(0,&picotux200_mci0_data); > +#else > at91_add_device_mmc(0,&picotux200_mmc_data); > +#endif > /* NOR Flash */ > platform_device_register(&picotux200_flash); > } > diff --git a/arch/arm/mach-at91/board-qil-a9260.c b/arch/arm/mach-at91/bo= ard-qil-a9260.c > index b6ed5ed..2a49993 100644 > --- a/arch/arm/mach-at91/board-qil-a9260.c > +++ b/arch/arm/mach-at91/board-qil-a9260.c > @@ -173,6 +173,15 @@ static void __init ek_add_device_nand(void) > /* > * MCI (SD/MMC) > */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static struct mci_platform_data __initdata ek_mci0_data =3D { > + .slot[0] =3D { > + .bus_width =3D 4, > + .detect_pin =3D -EINVAL, > + .wp_pin =3D -EINVAL, > + }, > +}; > +#else > static struct at91_mmc_data __initdata ek_mmc_data =3D { > .slot_b =3D 0, > .wire4 =3D 1, > @@ -180,6 +189,7 @@ static struct at91_mmc_data __initdata ek_mmc_data = =3D { > .wp_pin =3D -EINVAL, > .vcc_pin =3D -EINVAL, > }; > +#endif > > /* > * GPIO Buttons > @@ -249,7 +259,11 @@ static void __init ek_board_init(void) > /* Ethernet */ > at91_add_device_eth(&ek_macb_data); > /* MMC */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > + at91_add_device_mci(0,&ek_mci0_data); > +#else > at91_add_device_mmc(0,&ek_mmc_data); > +#endif > /* Push Buttons */ > ek_add_device_buttons(); > /* LEDs */ > diff --git a/arch/arm/mach-at91/board-rm9200dk.c b/arch/arm/mach-at91/boa= rd-rm9200dk.c > index 01332aa..b6128fb 100644 > --- a/arch/arm/mach-at91/board-rm9200dk.c > +++ b/arch/arm/mach-at91/board-rm9200dk.c > @@ -90,6 +90,15 @@ static struct at91_cf_data __initdata dk_cf_data =3D { > }; > > #ifndef CONFIG_MTD_AT91_DATAFLASH_CARD > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static struct mci_platform_data __initdata dk_mci0_data =3D { > + .slot[0] =3D { > + .bus_width =3D 4, > + .detect_pin =3D -EINVAL, > + .wp_pin =3D -EINVAL, > + }, > +}; > +#else > static struct at91_mmc_data __initdata dk_mmc_data =3D { > .slot_b =3D 0, > .wire4 =3D 1, > @@ -98,6 +107,7 @@ static struct at91_mmc_data __initdata dk_mmc_data =3D= { > .vcc_pin =3D -EINVAL, > }; > #endif > +#endif > > static struct spi_board_info dk_spi_devices[] =3D { > { /* DataFlash chip */ > @@ -211,8 +221,12 @@ static void __init dk_board_init(void) > #else > /* MMC */ > at91_set_gpio_output(AT91_PIN_PB7, 1); /* this MMC card slot can optio= nally use SPI signaling (CS3). */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > + at91_add_device_mci(0,&dk_mci0_data); > +#else > at91_add_device_mmc(0,&dk_mmc_data); > #endif > +#endif > /* NAND */ > at91_add_device_nand(&dk_nand_data); > /* NOR Flash */ > diff --git a/arch/arm/mach-at91/board-rm9200ek.c b/arch/arm/mach-at91/boa= rd-rm9200ek.c > index b2e4fe2..7177aac 100644 > --- a/arch/arm/mach-at91/board-rm9200ek.c > +++ b/arch/arm/mach-at91/board-rm9200ek.c > @@ -83,6 +83,7 @@ static struct at91_udc_data __initdata ek_udc_data =3D { > }; > > #ifndef CONFIG_MTD_AT91_DATAFLASH_CARD > +#if defined(CONFIG_MMC_AT91) || defined(CONFIG_MMC_AT91_MODULE) > static struct at91_mmc_data __initdata ek_mmc_data =3D { > .det_pin =3D AT91_PIN_PB27, > .slot_b =3D 0, > @@ -90,6 +91,15 @@ static struct at91_mmc_data __initdata ek_mmc_data =3D= { > .wp_pin =3D AT91_PIN_PA17, > .vcc_pin =3D -EINVAL, > }; > +#elif defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static struct mci_platform_data __initdata ek_mci0_data =3D { > + .slot[0] =3D { > + .bus_width =3D 4, > + .detect_pin =3D AT91_PIN_PB27, > + .wp_pin =3D AT91_PIN_PA17, > + } > +}; > +#endif > #endif > > static struct spi_board_info ek_spi_devices[] =3D { > @@ -180,7 +190,11 @@ static void __init ek_board_init(void) > #else > /* MMC */ > at91_set_gpio_output(AT91_PIN_PB22, 1); /* this MMC card slot can opti= onally use SPI signaling (CS3). */ > +#if defined(CONFIG_MMC_AT91) || defined(CONFIG_MMC_AT91_MODULE) > at91_add_device_mmc(0,&ek_mmc_data); > +#elif defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > + at91_add_device_mci(0,&ek_mci0_data); > +#endif > #endif > /* NOR Flash */ > platform_device_register(&ek_flash); > diff --git a/arch/arm/mach-at91/board-rsi-ews.c b/arch/arm/mach-at91/boar= d-rsi-ews.c > index af0750f..373537a 100644 > --- a/arch/arm/mach-at91/board-rsi-ews.c > +++ b/arch/arm/mach-at91/board-rsi-ews.c > @@ -77,12 +77,22 @@ static struct at91_usbh_data rsi_ews_usbh_data __init= data =3D { > /* > * SD/MC > */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static struct mci_platform_data __initdata rsi_ews_mci0_data =3D { > + .slot[0] =3D { > + .bus_width =3D 4, > + .detect_pin =3D AT91_PIN_PB27, > + .wp_pin =3D AT91_PIN_PB29, > + }, > +}; > +#else > static struct at91_mmc_data rsi_ews_mmc_data __initdata =3D { > .slot_b =3D 0, > .wire4 =3D 1, > .det_pin =3D AT91_PIN_PB27, > .wp_pin =3D AT91_PIN_PB29, > }; > +#endif > > /* > * I2C > @@ -218,7 +228,11 @@ static void __init rsi_ews_board_init(void) > at91_add_device_spi(rsi_ews_spi_devices, > ARRAY_SIZE(rsi_ews_spi_devices)); > /* MMC */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > + at91_add_device_mci(0,&rsi_ews_mci0_data); > +#else > at91_add_device_mmc(0,&rsi_ews_mmc_data); > +#endif > /* NOR Flash */ > platform_device_register(&rsiews_nor_flash); > /* LEDs */ > diff --git a/arch/arm/mach-at91/board-sam9-l9260.c b/arch/arm/mach-at91/b= oard-sam9-l9260.c > index e8b116b..7562011 100644 > --- a/arch/arm/mach-at91/board-sam9-l9260.c > +++ b/arch/arm/mach-at91/board-sam9-l9260.c > @@ -89,7 +89,7 @@ static struct at91_udc_data __initdata ek_udc_data =3D { > * SPI devices. > */ > static struct spi_board_info ek_spi_devices[] =3D { > -#if !defined(CONFIG_MMC_AT91) > +#if !defined(CONFIG_MMC_AT91)&& !defined(CONFIG_MMC_ATMELMCI) > { /* DataFlash chip */ > .modalias =3D "mtd_dataflash", > .chip_select =3D 1, > @@ -174,6 +174,15 @@ static void __init ek_add_device_nand(void) > /* > * MCI (SD/MMC) > */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static struct mci_platform_data __initdata ek_mci0_data =3D { > + .slot[1] =3D { > + .bus_width =3D 4, > + .detect_pin =3D AT91_PIN_PC8, > + .wp_pin =3D AT91_PIN_PC4, > + }, > +}; > +#else > static struct at91_mmc_data __initdata ek_mmc_data =3D { > .slot_b =3D 1, > .wire4 =3D 1, > @@ -181,6 +190,7 @@ static struct at91_mmc_data __initdata ek_mmc_data = =3D { > .wp_pin =3D AT91_PIN_PC4, > .vcc_pin =3D -EINVAL, > }; > +#endif > > static void __init ek_board_init(void) > { > @@ -197,7 +207,11 @@ static void __init ek_board_init(void) > /* Ethernet */ > at91_add_device_eth(&ek_macb_data); > /* MMC */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > + at91_add_device_mci(0,&ek_mci0_data); > +#else > at91_add_device_mmc(0,&ek_mmc_data); > +#endif > /* I2C */ > at91_add_device_i2c(NULL, 0); > } > diff --git a/arch/arm/mach-at91/board-sam9260ek.c b/arch/arm/mach-at91/bo= ard-sam9260ek.c > index d5aec55..b39009e 100644 > --- a/arch/arm/mach-at91/board-sam9260ek.c > +++ b/arch/arm/mach-at91/board-sam9260ek.c > @@ -121,7 +121,7 @@ static void __init at73c213_set_clk(struct at73c213_b= oard_info *info) {} > * SPI devices. > */ > static struct spi_board_info ek_spi_devices[] =3D { > -#if !defined(CONFIG_MMC_AT91) > +#if !defined(CONFIG_MMC_AT91)&& !defined(CONFIG_MMC_ATMELMCI) > { /* DataFlash chip */ > .modalias =3D "mtd_dataflash", > .chip_select =3D 1, > @@ -224,6 +224,15 @@ static void __init ek_add_device_nand(void) > /* > * MCI (SD/MMC) > */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static struct mci_platform_data __initdata ek_mci0_data =3D { > + .slot[1] =3D { > + .bus_width =3D 4, > + .detect_pin =3D -EINVAL, > + .wp_pin =3D -EINVAL, > + }, > +}; > +#else > static struct at91_mmc_data __initdata ek_mmc_data =3D { > .slot_b =3D 1, > .wire4 =3D 1, > @@ -231,6 +240,7 @@ static struct at91_mmc_data __initdata ek_mmc_data = =3D { > .wp_pin =3D -EINVAL, > .vcc_pin =3D -EINVAL, > }; > +#endif > > > /* > @@ -332,7 +342,11 @@ static void __init ek_board_init(void) > /* Ethernet */ > at91_add_device_eth(&ek_macb_data); > /* MMC */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > + at91_add_device_mci(0,&ek_mci0_data); > +#else > at91_add_device_mmc(0,&ek_mmc_data); > +#endif > /* I2C */ > at91_add_device_i2c(ek_i2c_devices, ARRAY_SIZE(ek_i2c_devices)); > /* SSC (to AT73C213) */ > diff --git a/arch/arm/mach-at91/board-sam9261ek.c b/arch/arm/mach-at91/bo= ard-sam9261ek.c > index 065fed3..797dd7c 100644 > --- a/arch/arm/mach-at91/board-sam9261ek.c > +++ b/arch/arm/mach-at91/board-sam9261ek.c > @@ -344,6 +344,7 @@ static struct spi_board_info ek_spi_devices[] =3D { > #else /* CONFIG_SPI_ATMEL_* */ > /* spi0 and mmc/sd share the same PIO pins: cannot be used at the same = time */ > > +#if defined(CONFIG_MMC_AT91) || defined(CONFIG_MMC_AT91_MODULE) > /* > * MCI (SD/MMC) > * det_pin, wp_pin and vcc_pin are not connected > @@ -354,6 +355,15 @@ static struct at91_mmc_data __initdata ek_mmc_data = =3D { > .wp_pin =3D -EINVAL, > .vcc_pin =3D -EINVAL, > }; > +#elif defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static struct mci_platform_data __initdata mci0_data =3D { > + .slot[0] =3D { > + .bus_width =3D 4, > + .detect_pin =3D -EINVAL, > + .wp_pin =3D -EINVAL, > + }, > +}; > +#endif > > #endif /* CONFIG_SPI_ATMEL_* */ > > @@ -601,7 +611,11 @@ static void __init ek_board_init(void) > at91_add_device_ssc(AT91SAM9261_ID_SSC1, ATMEL_SSC_TX); > #else > /* MMC */ > +#if defined(CONFIG_MMC_AT91) || defined(CONFIG_MMC_AT91_MODULE) > at91_add_device_mmc(0,&ek_mmc_data); > +#elif defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > + at91_add_device_mci(0,&mci0_data); > +#endif > #endif > /* LCD Controller */ > at91_add_device_lcdc(&ek_lcdc_data); > diff --git a/arch/arm/mach-at91/board-sam9263ek.c b/arch/arm/mach-at91/bo= ard-sam9263ek.c > index 2ffe50f..419c57a 100644 > --- a/arch/arm/mach-at91/board-sam9263ek.c > +++ b/arch/arm/mach-at91/board-sam9263ek.c > @@ -149,12 +149,22 @@ static struct spi_board_info ek_spi_devices[] =3D { > /* > * MCI (SD/MMC) > */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static struct mci_platform_data __initdata mci1_data =3D { > + .slot[0] =3D { > + .bus_width =3D 4, > + .detect_pin =3D AT91_PIN_PE18, > + .wp_pin =3D AT91_PIN_PE19, > + }, > +}; > +#else > static struct at91_mmc_data __initdata ek_mmc_data =3D { > .wire4 =3D 1, > .det_pin =3D AT91_PIN_PE18, > .wp_pin =3D AT91_PIN_PE19, > .vcc_pin =3D -EINVAL, > }; > +#endif > > > /* > @@ -423,7 +433,11 @@ static void __init ek_board_init(void) > /* Touchscreen */ > ek_add_device_ts(); > /* MMC */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > + at91_add_device_mci(1,&mci1_data); > +#else > at91_add_device_mmc(1,&ek_mmc_data); > +#endif > /* Ethernet */ > at91_add_device_eth(&ek_macb_data); > /* NAND */ > diff --git a/arch/arm/mach-at91/board-sam9rlek.c b/arch/arm/mach-at91/boa= rd-sam9rlek.c > index b109ce2..bb06521 100644 > --- a/arch/arm/mach-at91/board-sam9rlek.c > +++ b/arch/arm/mach-at91/board-sam9rlek.c > @@ -64,12 +64,22 @@ static struct usba_platform_data __initdata ek_usba_u= dc_data =3D { > /* > * MCI (SD/MMC) > */ > +#if defined(CONFIG_MMC_AT91) || defined(CONFIG_MMC_AT91_MODULE) > static struct at91_mmc_data __initdata ek_mmc_data =3D { > .wire4 =3D 1, > .det_pin =3D AT91_PIN_PA15, > .wp_pin =3D -EINVAL, > .vcc_pin =3D -EINVAL, > }; > +#elif defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static struct mci_platform_data __initdata mci0_data =3D { > + .slot[0] =3D { > + .bus_width =3D 4, > + .detect_pin =3D AT91_PIN_PA15, > + .wp_pin =3D -EINVAL, > + }, > +}; > +#endif > > > /* > @@ -306,7 +316,11 @@ static void __init ek_board_init(void) > /* SPI */ > at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices)); > /* MMC */ > +#if defined(CONFIG_MMC_AT91) || defined(CONFIG_MMC_AT91_MODULE) > at91_add_device_mmc(0,&ek_mmc_data); > +#elif defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > + at91_add_device_mci(0,&mci0_data); > +#endif > /* LCD Controller */ > at91_add_device_lcdc(&ek_lcdc_data); > /* AC97 */ > diff --git a/arch/arm/mach-at91/board-usb-a926x.c b/arch/arm/mach-at91/bo= ard-usb-a926x.c > index b7483a3..879e34e 100644 > --- a/arch/arm/mach-at91/board-usb-a926x.c > +++ b/arch/arm/mach-at91/board-usb-a926x.c > @@ -114,7 +114,7 @@ static struct mmc_spi_platform_data at91_mmc_spi_pdat= a =3D { > * SPI devices. > */ > static struct spi_board_info usb_a9263_spi_devices[] =3D { > -#if !defined(CONFIG_MMC_AT91) > +#if !defined(CONFIG_MMC_AT91)&& !defined(CONFIG_MMC_ATMELMCI) > { /* DataFlash chip */ > .modalias =3D "mtd_dataflash", > .chip_select =3D 0, > diff --git a/arch/arm/mach-at91/board-yl-9200.c b/arch/arm/mach-at91/boar= d-yl-9200.c > index 38dd279..3d3b8a6 100644 > --- a/arch/arm/mach-at91/board-yl-9200.c > +++ b/arch/arm/mach-at91/board-yl-9200.c > @@ -138,12 +138,22 @@ static struct at91_udc_data __initdata yl9200_udc_d= ata =3D { > /* > * MMC > */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > +static struct mci_platform_data __initdata yl9200_mci0_data =3D { > + .slot[0] =3D { > + .bus_width =3D 4, > + .detect_pin =3D AT91_PIN_PB9, > + .wp_pin =3D -EINVAL, > + }, > +}; > +#else > static struct at91_mmc_data __initdata yl9200_mmc_data =3D { > .det_pin =3D AT91_PIN_PB9, > .wire4 =3D 1, > .wp_pin =3D -EINVAL, > .vcc_pin =3D -EINVAL, > }; > +#endif > > /* > * NAND Flash > @@ -571,7 +581,11 @@ static void __init yl9200_board_init(void) > /* I2C */ > at91_add_device_i2c(yl9200_i2c_devices, ARRAY_SIZE(yl9200_i2c_devices)= ); > /* MMC */ > +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) > + at91_add_device_mci(0,&yl9200_mci0_data); > +#else > at91_add_device_mmc(0,&yl9200_mmc_data); > +#endif > /* NAND */ > at91_add_device_nand(&yl9200_nand_data); > /* NOR Flash */