Merge tag 'at91-for-next-soc' of git://github.com/at91linux/linux-at91 into at91/mci
authorArnd Bergmann <arnd@arndb.de>
Fri, 10 Aug 2012 10:34:18 +0000 (12:34 +0200)
committerArnd Bergmann <arnd@arndb.de>
Mon, 13 Aug 2012 15:09:38 +0000 (17:09 +0200)
AT91 SoC related code modifications: a cleanup in defconfigs and
a one liner in a board file.
The most important is the move to atmel-mci driver in AT91 SoC & boards.
The old at91_mci (marked as deprecated) will be removed in 3.7. So all
platform data for this old driver are erased and replace by information
needed by atmel-mci driver.

* tag 'at91-for-next-soc' of git://github.com/at91linux/linux-at91:
  ARM: at91: add atmel-mci support for chips and boards which can use it
  ARM: at91/defconfig: change the MCI driver to use in defconfigs
  ARM: at91: set i2c_board_info.type to "ds1339" directly
  ARM: at91/defconfig: Remove unaffected config option

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
44 files changed:
arch/arm/configs/afeb9260_defconfig
arch/arm/configs/at91rm9200_defconfig
arch/arm/configs/at91sam9261_defconfig
arch/arm/configs/at91sam9263_defconfig
arch/arm/configs/at91sam9g20_defconfig
arch/arm/configs/at91sam9rl_defconfig
arch/arm/configs/cpu9260_defconfig
arch/arm/configs/cpu9g20_defconfig
arch/arm/configs/qil-a9260_defconfig
arch/arm/configs/stamp9g20_defconfig
arch/arm/configs/usb-a9260_defconfig
arch/arm/mach-at91/at91rm9200_devices.c
arch/arm/mach-at91/at91sam9260_devices.c
arch/arm/mach-at91/at91sam9261_devices.c
arch/arm/mach-at91/at91sam9263.c
arch/arm/mach-at91/at91sam9263_devices.c
arch/arm/mach-at91/at91sam9rl_devices.c
arch/arm/mach-at91/board-afeb-9260v1.c
arch/arm/mach-at91/board-carmeva.c
arch/arm/mach-at91/board-cpu9krea.c
arch/arm/mach-at91/board-cpuat91.c
arch/arm/mach-at91/board-csb337.c
arch/arm/mach-at91/board-eb9200.c
arch/arm/mach-at91/board-ecbat91.c
arch/arm/mach-at91/board-eco920.c
arch/arm/mach-at91/board-flexibity.c
arch/arm/mach-at91/board-foxg20.c
arch/arm/mach-at91/board-kb9202.c
arch/arm/mach-at91/board-neocore926.c
arch/arm/mach-at91/board-picotux200.c
arch/arm/mach-at91/board-qil-a9260.c
arch/arm/mach-at91/board-rm9200dk.c
arch/arm/mach-at91/board-rm9200ek.c
arch/arm/mach-at91/board-rsi-ews.c
arch/arm/mach-at91/board-sam9-l9260.c
arch/arm/mach-at91/board-sam9260ek.c
arch/arm/mach-at91/board-sam9261ek.c
arch/arm/mach-at91/board-sam9263ek.c
arch/arm/mach-at91/board-sam9g20ek.c
arch/arm/mach-at91/board-sam9rlek.c
arch/arm/mach-at91/board-stamp9g20.c
arch/arm/mach-at91/board-usb-a926x.c
arch/arm/mach-at91/board-yl-9200.c
drivers/mtd/nand/Kconfig

index 2afdf67..c285a9d 100644 (file)
@@ -39,7 +39,6 @@ CONFIG_MTD_BLOCK=y
 CONFIG_MTD_DATAFLASH=y
 CONFIG_MTD_NAND=y
 CONFIG_MTD_NAND_ATMEL=y
-CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y
 CONFIG_BLK_DEV_RAM=y
 CONFIG_BLK_DEV_RAM_SIZE=8192
 CONFIG_ATMEL_SSC=y
index d54e2ac..4ae57a3 100644 (file)
@@ -232,7 +232,7 @@ CONFIG_USB_GADGET=y
 CONFIG_USB_ETH=m
 CONFIG_USB_MASS_STORAGE=m
 CONFIG_MMC=y
-CONFIG_MMC_AT91=y
+CONFIG_MMC_ATMELMCI=y
 CONFIG_NEW_LEDS=y
 CONFIG_LEDS_CLASS=y
 CONFIG_LEDS_GPIO=y
index ade6b2f..1e8712e 100644 (file)
@@ -128,7 +128,7 @@ CONFIG_USB_GADGETFS=m
 CONFIG_USB_FILE_STORAGE=m
 CONFIG_USB_G_SERIAL=m
 CONFIG_MMC=y
-CONFIG_MMC_AT91=m
+CONFIG_MMC_ATMELMCI=m
 CONFIG_NEW_LEDS=y
 CONFIG_LEDS_CLASS=y
 CONFIG_LEDS_GPIO=y
index 1cf9626..d2050ca 100644 (file)
@@ -61,7 +61,6 @@ CONFIG_MTD_DATAFLASH=y
 CONFIG_MTD_BLOCK2MTD=y
 CONFIG_MTD_NAND=y
 CONFIG_MTD_NAND_ATMEL=y
-CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y
 CONFIG_MTD_UBI=y
 CONFIG_MTD_UBI_GLUEBI=y
 CONFIG_BLK_DEV_LOOP=y
@@ -138,7 +137,7 @@ CONFIG_USB_FILE_STORAGE=m
 CONFIG_USB_G_SERIAL=m
 CONFIG_MMC=y
 CONFIG_SDIO_UART=m
-CONFIG_MMC_AT91=m
+CONFIG_MMC_ATMELMCI=m
 CONFIG_NEW_LEDS=y
 CONFIG_LEDS_CLASS=y
 CONFIG_LEDS_ATMEL_PWM=y
index 994d331..e1b0e80 100644 (file)
@@ -99,7 +99,7 @@ CONFIG_USB_GADGETFS=m
 CONFIG_USB_FILE_STORAGE=m
 CONFIG_USB_G_SERIAL=m
 CONFIG_MMC=y
-CONFIG_MMC_AT91=m
+CONFIG_MMC_ATMELMCI=m
 CONFIG_NEW_LEDS=y
 CONFIG_LEDS_CLASS=y
 CONFIG_LEDS_GPIO=y
index ad562ee..7cf8785 100644 (file)
@@ -60,7 +60,7 @@ CONFIG_AT91SAM9X_WATCHDOG=y
 CONFIG_FB=y
 CONFIG_FB_ATMEL=y
 CONFIG_MMC=y
-CONFIG_MMC_AT91=m
+CONFIG_MMC_ATMELMCI=m
 CONFIG_RTC_CLASS=y
 CONFIG_RTC_DRV_AT91SAM9=y
 CONFIG_EXT2_FS=y
index bbf729e..921480c 100644 (file)
@@ -82,7 +82,7 @@ CONFIG_USB_STORAGE=y
 CONFIG_USB_GADGET=y
 CONFIG_USB_ETH=m
 CONFIG_MMC=y
-CONFIG_MMC_AT91=m
+CONFIG_MMC_ATMELMCI=m
 CONFIG_NEW_LEDS=y
 CONFIG_LEDS_CLASS=y
 CONFIG_LEDS_GPIO=y
index e7d7942..ea116cb 100644 (file)
@@ -82,7 +82,7 @@ CONFIG_USB_STORAGE=y
 CONFIG_USB_GADGET=y
 CONFIG_USB_ETH=m
 CONFIG_MMC=y
-CONFIG_MMC_AT91=m
+CONFIG_MMC_ATMELMCI=m
 CONFIG_NEW_LEDS=y
 CONFIG_LEDS_CLASS=y
 CONFIG_LEDS_GPIO=y
index 9160f3b..42d5db1 100644 (file)
@@ -50,7 +50,6 @@ CONFIG_MTD_BLOCK=y
 CONFIG_MTD_DATAFLASH=y
 CONFIG_MTD_NAND=y
 CONFIG_MTD_NAND_ATMEL=y
-CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y
 CONFIG_BLK_DEV_LOOP=y
 # CONFIG_MISC_DEVICES is not set
 CONFIG_SCSI=y
@@ -87,7 +86,7 @@ CONFIG_USB_STORAGE=y
 CONFIG_USB_GADGET=y
 CONFIG_USB_ETH=m
 CONFIG_MMC=y
-CONFIG_MMC_AT91=m
+CONFIG_MMC_ATMELMCI=m
 CONFIG_NEW_LEDS=y
 CONFIG_LEDS_CLASS=y
 CONFIG_LEDS_GPIO=y
index d5e260b..52f1488 100644 (file)
@@ -100,7 +100,6 @@ CONFIG_USB_ETH=m
 CONFIG_USB_FILE_STORAGE=m
 CONFIG_USB_G_SERIAL=m
 CONFIG_MMC=y
-# CONFIG_MMC_AT91 is not set
 CONFIG_MMC_ATMELMCI=y
 CONFIG_NEW_LEDS=y
 CONFIG_LEDS_CLASS=y
index 2e39f38..a1501e1 100644 (file)
@@ -49,7 +49,6 @@ CONFIG_MTD_BLOCK=y
 CONFIG_MTD_DATAFLASH=y
 CONFIG_MTD_NAND=y
 CONFIG_MTD_NAND_ATMEL=y
-CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y
 CONFIG_BLK_DEV_LOOP=y
 # CONFIG_MISC_DEVICES is not set
 CONFIG_SCSI=y
index 01fb732..9ac427a 100644 (file)
@@ -294,9 +294,9 @@ void __init at91_add_device_cf(struct at91_cf_data *data) {}
  *  MMC / SD
  * -------------------------------------------------------------------- */
 
-#if defined(CONFIG_MMC_AT91) || defined(CONFIG_MMC_AT91_MODULE)
+#if IS_ENABLED(CONFIG_MMC_ATMELMCI)
 static u64 mmc_dmamask = DMA_BIT_MASK(32);
-static struct at91_mmc_data mmc_data;
+static struct mci_platform_data mmc_data;
 
 static struct resource mmc_resources[] = {
        [0] = {
@@ -312,7 +312,7 @@ static struct resource mmc_resources[] = {
 };
 
 static struct platform_device at91rm9200_mmc_device = {
-       .name           = "at91_mci",
+       .name           = "atmel_mci",
        .id             = -1,
        .dev            = {
                                .dma_mask               = &mmc_dmamask,
@@ -323,53 +323,69 @@ static struct platform_device at91rm9200_mmc_device = {
        .num_resources  = ARRAY_SIZE(mmc_resources),
 };
 
-void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data)
+void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *data)
 {
+       unsigned int i;
+       unsigned int slot_count = 0;
+
        if (!data)
                return;
 
-       /* input/irq */
-       if (gpio_is_valid(data->det_pin)) {
-               at91_set_gpio_input(data->det_pin, 1);
-               at91_set_deglitch(data->det_pin, 1);
-       }
-       if (gpio_is_valid(data->wp_pin))
-               at91_set_gpio_input(data->wp_pin, 1);
-       if (gpio_is_valid(data->vcc_pin))
-               at91_set_gpio_output(data->vcc_pin, 0);
-
-       /* CLK */
-       at91_set_A_periph(AT91_PIN_PA27, 0);
+       for (i = 0; i < ATMCI_MAX_NR_SLOTS; i++) {
 
-       if (data->slot_b) {
-               /* CMD */
-               at91_set_B_periph(AT91_PIN_PA8, 1);
+               if (!data->slot[i].bus_width)
+                       continue;
 
-               /* DAT0, maybe DAT1..DAT3 */
-               at91_set_B_periph(AT91_PIN_PA9, 1);
-               if (data->wire4) {
-                       at91_set_B_periph(AT91_PIN_PA10, 1);
-                       at91_set_B_periph(AT91_PIN_PA11, 1);
-                       at91_set_B_periph(AT91_PIN_PA12, 1);
+               /* 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);
                }
-       } else {
-               /* CMD */
-               at91_set_A_periph(AT91_PIN_PA28, 1);
-
-               /* DAT0, maybe DAT1..DAT3 */
-               at91_set_A_periph(AT91_PIN_PA29, 1);
-               if (data->wire4) {
-                       at91_set_B_periph(AT91_PIN_PB3, 1);
-                       at91_set_B_periph(AT91_PIN_PB4, 1);
-                       at91_set_B_periph(AT91_PIN_PB5, 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 == 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 == 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 = *data;
+                       platform_device_register(&at91rm9200_mmc_device);
                }
        }
 
-       mmc_data = *data;
-       platform_device_register(&at91rm9200_mmc_device);
 }
 #else
-void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data) {}
+void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *data) {}
 #endif
 
 
index 7b9c2ba..156e639 100644 (file)
@@ -208,93 +208,11 @@ void __init at91_add_device_eth(struct macb_platform_data *data) {}
 #endif
 
 
-/* --------------------------------------------------------------------
- *  MMC / SD
- * -------------------------------------------------------------------- */
-
-#if defined(CONFIG_MMC_AT91) || defined(CONFIG_MMC_AT91_MODULE)
-static u64 mmc_dmamask = DMA_BIT_MASK(32);
-static struct at91_mmc_data mmc_data;
-
-static struct resource mmc_resources[] = {
-       [0] = {
-               .start  = AT91SAM9260_BASE_MCI,
-               .end    = AT91SAM9260_BASE_MCI + SZ_16K - 1,
-               .flags  = IORESOURCE_MEM,
-       },
-       [1] = {
-               .start  = NR_IRQS_LEGACY + AT91SAM9260_ID_MCI,
-               .end    = NR_IRQS_LEGACY + AT91SAM9260_ID_MCI,
-               .flags  = IORESOURCE_IRQ,
-       },
-};
-
-static struct platform_device at91sam9260_mmc_device = {
-       .name           = "at91_mci",
-       .id             = -1,
-       .dev            = {
-                               .dma_mask               = &mmc_dmamask,
-                               .coherent_dma_mask      = DMA_BIT_MASK(32),
-                               .platform_data          = &mmc_data,
-       },
-       .resource       = mmc_resources,
-       .num_resources  = ARRAY_SIZE(mmc_resources),
-};
-
-void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data)
-{
-       if (!data)
-               return;
-
-       /* input/irq */
-       if (gpio_is_valid(data->det_pin)) {
-               at91_set_gpio_input(data->det_pin, 1);
-               at91_set_deglitch(data->det_pin, 1);
-       }
-       if (gpio_is_valid(data->wp_pin))
-               at91_set_gpio_input(data->wp_pin, 1);
-       if (gpio_is_valid(data->vcc_pin))
-               at91_set_gpio_output(data->vcc_pin, 0);
-
-       /* CLK */
-       at91_set_A_periph(AT91_PIN_PA8, 0);
-
-       if (data->slot_b) {
-               /* CMD */
-               at91_set_B_periph(AT91_PIN_PA1, 1);
-
-               /* DAT0, maybe DAT1..DAT3 */
-               at91_set_B_periph(AT91_PIN_PA0, 1);
-               if (data->wire4) {
-                       at91_set_B_periph(AT91_PIN_PA5, 1);
-                       at91_set_B_periph(AT91_PIN_PA4, 1);
-                       at91_set_B_periph(AT91_PIN_PA3, 1);
-               }
-       } else {
-               /* CMD */
-               at91_set_A_periph(AT91_PIN_PA7, 1);
-
-               /* DAT0, maybe DAT1..DAT3 */
-               at91_set_A_periph(AT91_PIN_PA6, 1);
-               if (data->wire4) {
-                       at91_set_A_periph(AT91_PIN_PA9, 1);
-                       at91_set_A_periph(AT91_PIN_PA10, 1);
-                       at91_set_A_periph(AT91_PIN_PA11, 1);
-               }
-       }
-
-       mmc_data = *data;
-       platform_device_register(&at91sam9260_mmc_device);
-}
-#else
-void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data) {}
-#endif
-
 /* --------------------------------------------------------------------
  *  MMC / SD Slot for Atmel MCI Driver
  * -------------------------------------------------------------------- */
 
-#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE)
+#if IS_ENABLED(CONFIG_MMC_ATMELMCI)
 static u64 mmc_dmamask = DMA_BIT_MASK(32);
 static struct mci_platform_data mmc_data;
 
index 8df5c1b..06c0c6e 100644 (file)
@@ -137,9 +137,9 @@ void __init at91_add_device_udc(struct at91_udc_data *data) {}
  *  MMC / SD
  * -------------------------------------------------------------------- */
 
-#if defined(CONFIG_MMC_AT91) || defined(CONFIG_MMC_AT91_MODULE)
+#if IS_ENABLED(CONFIG_MMC_ATMELMCI)
 static u64 mmc_dmamask = DMA_BIT_MASK(32);
-static struct at91_mmc_data mmc_data;
+static struct mci_platform_data mmc_data;
 
 static struct resource mmc_resources[] = {
        [0] = {
@@ -155,7 +155,7 @@ static struct resource mmc_resources[] = {
 };
 
 static struct platform_device at91sam9261_mmc_device = {
-       .name           = "at91_mci",
+       .name           = "atmel_mci",
        .id             = -1,
        .dev            = {
                                .dma_mask               = &mmc_dmamask,
@@ -166,40 +166,40 @@ static struct platform_device at91sam9261_mmc_device = {
        .num_resources  = ARRAY_SIZE(mmc_resources),
 };
 
-void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data)
+void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *data)
 {
        if (!data)
                return;
 
-       /* input/irq */
-       if (gpio_is_valid(data->det_pin)) {
-               at91_set_gpio_input(data->det_pin, 1);
-               at91_set_deglitch(data->det_pin, 1);
-       }
-       if (gpio_is_valid(data->wp_pin))
-               at91_set_gpio_input(data->wp_pin, 1);
-       if (gpio_is_valid(data->vcc_pin))
-               at91_set_gpio_output(data->vcc_pin, 0);
-
-       /* 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->wire4) {
-               at91_set_B_periph(AT91_PIN_PA4, 1);
-               at91_set_B_periph(AT91_PIN_PA5, 1);
-               at91_set_B_periph(AT91_PIN_PA6, 1);
-       }
+       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);
 
-       mmc_data = *data;
-       platform_device_register(&at91sam9261_mmc_device);
+               /* 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 == 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 = *data;
+               platform_device_register(&at91sam9261_mmc_device);
+       }
 }
 #else
-void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data) {}
+void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *data) {}
 #endif
 
 
index 84b3810..144ef5d 100644 (file)
@@ -188,8 +188,8 @@ static struct clk_lookup periph_clocks_lookups[] = {
        CLKDEV_CON_ID("hclk", &macb_clk),
        CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk),
        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),
index eb6bbf8..1e176aa 100644 (file)
@@ -218,9 +218,9 @@ void __init at91_add_device_eth(struct macb_platform_data *data) {}
  *  MMC / SD
  * -------------------------------------------------------------------- */
 
-#if defined(CONFIG_MMC_AT91) || defined(CONFIG_MMC_AT91_MODULE)
+#if IS_ENABLED(CONFIG_MMC_ATMELMCI)
 static u64 mmc_dmamask = DMA_BIT_MASK(32);
-static struct at91_mmc_data mmc0_data, mmc1_data;
+static struct mci_platform_data mmc0_data, mmc1_data;
 
 static struct resource mmc0_resources[] = {
        [0] = {
@@ -236,7 +236,7 @@ static struct resource mmc0_resources[] = {
 };
 
 static struct platform_device at91sam9263_mmc0_device = {
-       .name           = "at91_mci",
+       .name           = "atmel_mci",
        .id             = 0,
        .dev            = {
                                .dma_mask               = &mmc_dmamask,
@@ -261,7 +261,7 @@ static struct resource mmc1_resources[] = {
 };
 
 static struct platform_device at91sam9263_mmc1_device = {
-       .name           = "at91_mci",
+       .name           = "atmel_mci",
        .id             = 1,
        .dev            = {
                                .dma_mask               = &mmc_dmamask,
@@ -272,85 +272,110 @@ static struct platform_device at91sam9263_mmc1_device = {
        .num_resources  = ARRAY_SIZE(mmc1_resources),
 };
 
-void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data)
+void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *data)
 {
+       unsigned int i;
+       unsigned int slot_count = 0;
+
        if (!data)
                return;
 
-       /* input/irq */
-       if (gpio_is_valid(data->det_pin)) {
-               at91_set_gpio_input(data->det_pin, 1);
-               at91_set_deglitch(data->det_pin, 1);
-       }
-       if (gpio_is_valid(data->wp_pin))
-               at91_set_gpio_input(data->wp_pin, 1);
-       if (gpio_is_valid(data->vcc_pin))
-               at91_set_gpio_output(data->vcc_pin, 0);
+       for (i = 0; i < ATMCI_MAX_NR_SLOTS; i++) {
 
-       if (mmc_id == 0) {              /* MCI0 */
-               /* CLK */
-               at91_set_A_periph(AT91_PIN_PA12, 0);
+               if (!data->slot[i].bus_width)
+                       continue;
 
-               if (data->slot_b) {
-                       /* CMD */
-                       at91_set_A_periph(AT91_PIN_PA16, 1);
+               /* 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 == 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 == 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 == 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);
 
-                       /* DAT0, maybe DAT1..DAT3 */
-                       at91_set_A_periph(AT91_PIN_PA17, 1);
-                       if (data->wire4) {
-                               at91_set_A_periph(AT91_PIN_PA18, 1);
-                               at91_set_A_periph(AT91_PIN_PA19, 1);
-                               at91_set_A_periph(AT91_PIN_PA20, 1);
+                               mmc0_data = *data;
+                               platform_device_register(&at91sam9263_mmc0_device);
                        }
-               } else {
-                       /* CMD */
-                       at91_set_A_periph(AT91_PIN_PA1, 1);
-
-                       /* DAT0, maybe DAT1..DAT3 */
-                       at91_set_A_periph(AT91_PIN_PA0, 1);
-                       if (data->wire4) {
-                               at91_set_A_periph(AT91_PIN_PA3, 1);
-                               at91_set_A_periph(AT91_PIN_PA4, 1);
-                               at91_set_A_periph(AT91_PIN_PA5, 1);
+               } else if (mmc_id == 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 == 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 == 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);
 
-               mmc0_data = *data;
-               platform_device_register(&at91sam9263_mmc0_device);
-       } else {                        /* MCI1 */
-               /* CLK */
-               at91_set_A_periph(AT91_PIN_PA6, 0);
-
-               if (data->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->wire4) {
-                               at91_set_A_periph(AT91_PIN_PA23, 1);
-                               at91_set_A_periph(AT91_PIN_PA24, 1);
-                               at91_set_A_periph(AT91_PIN_PA25, 1);
-                       }
-               } else {
-                       /* CMD */
-                       at91_set_A_periph(AT91_PIN_PA7, 1);
-
-                       /* DAT0, maybe DAT1..DAT3 */
-                       at91_set_A_periph(AT91_PIN_PA8, 1);
-                       if (data->wire4) {
-                               at91_set_A_periph(AT91_PIN_PA9, 1);
-                               at91_set_A_periph(AT91_PIN_PA10, 1);
-                               at91_set_A_periph(AT91_PIN_PA11, 1);
+                               mmc1_data = *data;
+                               platform_device_register(&at91sam9263_mmc1_device);
                        }
                }
-
-               mmc1_data = *data;
-               platform_device_register(&at91sam9263_mmc1_device);
        }
 }
 #else
-void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data) {}
+void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *data) {}
 #endif
 
 /* --------------------------------------------------------------------
index f09fff9..ea4479e 100644 (file)
@@ -161,9 +161,9 @@ void __init at91_add_device_usba(struct usba_platform_data *data) {}
  *  MMC / SD
  * -------------------------------------------------------------------- */
 
-#if defined(CONFIG_MMC_AT91) || defined(CONFIG_MMC_AT91_MODULE)
+#if IS_ENABLED(CONFIG_MMC_ATMELMCI)
 static u64 mmc_dmamask = DMA_BIT_MASK(32);
-static struct at91_mmc_data mmc_data;
+static struct mci_platform_data mmc_data;
 
 static struct resource mmc_resources[] = {
        [0] = {
@@ -179,7 +179,7 @@ static struct resource mmc_resources[] = {
 };
 
 static struct platform_device at91sam9rl_mmc_device = {
-       .name           = "at91_mci",
+       .name           = "atmel_mci",
        .id             = -1,
        .dev            = {
                                .dma_mask               = &mmc_dmamask,
@@ -190,40 +190,40 @@ static struct platform_device at91sam9rl_mmc_device = {
        .num_resources  = ARRAY_SIZE(mmc_resources),
 };
 
-void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data)
+void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *data)
 {
        if (!data)
                return;
 
-       /* input/irq */
-       if (gpio_is_valid(data->det_pin)) {
-               at91_set_gpio_input(data->det_pin, 1);
-               at91_set_deglitch(data->det_pin, 1);
-       }
-       if (gpio_is_valid(data->wp_pin))
-               at91_set_gpio_input(data->wp_pin, 1);
-       if (gpio_is_valid(data->vcc_pin))
-               at91_set_gpio_output(data->vcc_pin, 0);
-
-       /* 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->wire4) {
-               at91_set_A_periph(AT91_PIN_PA3, 1);
-               at91_set_A_periph(AT91_PIN_PA4, 1);
-               at91_set_A_periph(AT91_PIN_PA5, 1);
+       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 == 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 = *data;
+               platform_device_register(&at91sam9rl_mmc_device);
        }
-
-       mmc_data = *data;
-       platform_device_register(&at91sam9rl_mmc_device);
 }
 #else
-void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data) {}
+void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *data) {}
 #endif
 
 
index de7be19..93a832f 100644 (file)
@@ -133,12 +133,12 @@ static struct atmel_nand_data __initdata afeb9260_nand_data = {
 /*
  * MCI (SD/MMC)
  */
-static struct at91_mmc_data __initdata afeb9260_mmc_data = {
-       .det_pin        = AT91_PIN_PC9,
-       .wp_pin         = AT91_PIN_PC4,
-       .slot_b         = 1,
-       .wire4          = 1,
-       .vcc_pin        = -EINVAL,
+static struct mci_platform_data __initdata afeb9260_mci0_data = {
+       .slot[1] = {
+               .bus_width      = 4,
+               .detect_pin     = AT91_PIN_PC9,
+               .wp_pin         = AT91_PIN_PC4,
+       },
 };
 
 
@@ -199,7 +199,7 @@ 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 */
-       at91_add_device_mmc(0, &afeb9260_mmc_data);
+       at91_add_device_mci(0, &afeb9260_mci0_data);
        /* I2C */
        at91_add_device_i2c(afeb9260_i2c_devices,
                        ARRAY_SIZE(afeb9260_i2c_devices));
index a5b002f..71d8f36 100644 (file)
@@ -71,12 +71,12 @@ static struct at91_udc_data __initdata carmeva_udc_data = {
        // .vcc_pin     = -EINVAL,
 // };
 
-static struct at91_mmc_data __initdata carmeva_mmc_data = {
-       .slot_b         = 0,
-       .wire4          = 1,
-       .det_pin        = AT91_PIN_PB10,
-       .wp_pin         = AT91_PIN_PC14,
-       .vcc_pin        = -EINVAL,
+static struct mci_platform_data __initdata carmeva_mci0_data = {
+       .slot[0] = {
+               .bus_width      = 4,
+               .detect_pin     = AT91_PIN_PB10,
+               .wp_pin         = AT91_PIN_PC14,
+       },
 };
 
 static struct spi_board_info carmeva_spi_devices[] = {
@@ -150,7 +150,7 @@ static void __init carmeva_board_init(void)
        /* Compact Flash */
 //     at91_add_device_cf(&carmeva_cf_data);
        /* MMC */
-       at91_add_device_mmc(0, &carmeva_mmc_data);
+       at91_add_device_mci(0, &carmeva_mci0_data);
        /* LEDs */
        at91_gpio_leds(carmeva_leds, ARRAY_SIZE(carmeva_leds));
 }
index ecbc13b..e71c473 100644 (file)
@@ -254,8 +254,7 @@ static struct gpio_led cpu9krea_leds[] = {
 
 static struct i2c_board_info __initdata cpu9krea_i2c_devices[] = {
        {
-               I2C_BOARD_INFO("rtc-ds1307", 0x68),
-               .type   = "ds1339",
+               I2C_BOARD_INFO("ds1339", 0x68),
        },
 };
 
@@ -312,12 +311,12 @@ static void __init cpu9krea_add_device_buttons(void)
 /*
  * MCI (SD/MMC)
  */
-static struct at91_mmc_data __initdata cpu9krea_mmc_data = {
-       .slot_b         = 0,
-       .wire4          = 1,
-       .det_pin        = AT91_PIN_PA29,
-       .wp_pin         = -EINVAL,
-       .vcc_pin        = -EINVAL,
+static struct mci_platform_data __initdata cpu9krea_mci0_data = {
+       .slot[0] = {
+               .bus_width      = 4,
+               .detect_pin     = AT91_PIN_PA29,
+               .wp_pin         = -EINVAL,
+       },
 };
 
 static void __init cpu9krea_board_init(void)
@@ -359,7 +358,7 @@ static void __init cpu9krea_board_init(void)
        /* Ethernet */
        at91_add_device_eth(&cpu9krea_macb_data);
        /* MMC */
-       at91_add_device_mmc(0, &cpu9krea_mmc_data);
+       at91_add_device_mci(0, &cpu9krea_mci0_data);
        /* I2C */
        at91_add_device_i2c(cpu9krea_i2c_devices,
                ARRAY_SIZE(cpu9krea_i2c_devices));
index 2e6d043..2cbd1a2 100644 (file)
@@ -78,11 +78,12 @@ static struct at91_udc_data __initdata cpuat91_udc_data = {
        .pullup_pin     = AT91_PIN_PC14,
 };
 
-static struct at91_mmc_data __initdata cpuat91_mmc_data = {
-       .det_pin        = AT91_PIN_PC2,
-       .wire4          = 1,
-       .wp_pin         = -EINVAL,
-       .vcc_pin        = -EINVAL,
+static struct mci_platform_data __initdata cpuat91_mci0_data = {
+       .slot[0] = {
+               .bus_width      = 4,
+               .detect_pin     = AT91_PIN_PC2,
+               .wp_pin         = -EINVAL,
+       },
 };
 
 static struct physmap_flash_data cpuat91_flash_data = {
@@ -168,7 +169,7 @@ static void __init cpuat91_board_init(void)
        /* USB Device */
        at91_add_device_udc(&cpuat91_udc_data);
        /* MMC */
-       at91_add_device_mmc(0, &cpuat91_mmc_data);
+       at91_add_device_mci(0, &cpuat91_mci0_data);
        /* I2C */
        at91_add_device_i2c(NULL, 0);
        /* Platform devices */
index 32396bb..3e37437 100644 (file)
@@ -87,12 +87,12 @@ static struct at91_cf_data __initdata csb337_cf_data = {
        .rst_pin        = AT91_PIN_PD2,
 };
 
-static struct at91_mmc_data __initdata csb337_mmc_data = {
-       .det_pin        = AT91_PIN_PD5,
-       .slot_b         = 0,
-       .wire4          = 1,
-       .wp_pin         = AT91_PIN_PD6,
-       .vcc_pin        = -EINVAL,
+static struct mci_platform_data __initdata csb337_mci0_data = {
+       .slot[0] = {
+               .bus_width      = 4,
+               .detect_pin     = AT91_PIN_PD5,
+               .wp_pin         = AT91_PIN_PD6,
+       },
 };
 
 static struct spi_board_info csb337_spi_devices[] = {
@@ -238,7 +238,7 @@ static void __init csb337_board_init(void)
        /* SPI */
        at91_add_device_spi(csb337_spi_devices, ARRAY_SIZE(csb337_spi_devices));
        /* MMC */
-       at91_add_device_mmc(0, &csb337_mmc_data);
+       at91_add_device_mci(0, &csb337_mci0_data);
        /* NOR flash */
        platform_device_register(&csb_flash);
        /* LEDs */
index d1e1f3f..0cfac16 100644 (file)
@@ -70,12 +70,12 @@ static struct at91_cf_data __initdata eb9200_cf_data = {
        .rst_pin        = AT91_PIN_PC5,
 };
 
-static struct at91_mmc_data __initdata eb9200_mmc_data = {
-       .slot_b         = 0,
-       .wire4          = 1,
-       .det_pin        = -EINVAL,
-       .wp_pin         = -EINVAL,
-       .vcc_pin        = -EINVAL,
+static struct mci_platform_data __initdata eb9200_mci0_data = {
+       .slot[0] = {
+               .bus_width      = 4,
+               .detect_pin     = -EINVAL,
+               .wp_pin         = -EINVAL,
+       },
 };
 
 static struct i2c_board_info __initdata eb9200_i2c_devices[] = {
@@ -113,7 +113,7 @@ 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 */
-       at91_add_device_mmc(0, &eb9200_mmc_data);
+       at91_add_device_mci(0, &eb9200_mci0_data);
 }
 
 MACHINE_START(ATEB9200, "Embest ATEB9200")
index 192ec76..3d931ff 100644 (file)
@@ -64,12 +64,12 @@ static struct at91_usbh_data __initdata ecb_at91usbh_data = {
        .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
-static struct at91_mmc_data __initdata ecb_at91mmc_data = {
-       .slot_b         = 0,
-       .wire4          = 1,
-       .det_pin        = -EINVAL,
-       .wp_pin         = -EINVAL,
-       .vcc_pin        = -EINVAL,
+static struct mci_platform_data __initdata ecbat91_mci0_data = {
+       .slot[0] = {
+               .bus_width      = 4,
+               .detect_pin     = -EINVAL,
+               .wp_pin         = -EINVAL,
+       },
 };
 
 
@@ -170,7 +170,7 @@ static void __init ecb_at91board_init(void)
        at91_add_device_i2c(NULL, 0);
 
        /* MMC */
-       at91_add_device_mmc(0, &ecb_at91mmc_data);
+       at91_add_device_mci(0, &ecbat91_mci0_data);
 
        /* SPI */
        at91_add_device_spi(ecb_at91spi_devices, ARRAY_SIZE(ecb_at91spi_devices));
index d2d4580..d93658a 100644 (file)
@@ -56,12 +56,12 @@ static struct at91_udc_data __initdata eco920_udc_data = {
        .pullup_pin     = AT91_PIN_PB13,
 };
 
-static struct at91_mmc_data __initdata eco920_mmc_data = {
-       .slot_b         = 0,
-       .wire4          = 0,
-       .det_pin        = -EINVAL,
-       .wp_pin         = -EINVAL,
-       .vcc_pin        = -EINVAL,
+static struct mci_platform_data __initdata eco920_mci0_data = {
+       .slot[0] = {
+               .bus_width      = 1,
+               .detect_pin     = -EINVAL,
+               .wp_pin         = -EINVAL,
+       },
 };
 
 static struct physmap_flash_data eco920_flash_data = {
@@ -120,7 +120,7 @@ static void __init eco920_board_init(void)
        at91_add_device_usbh(&eco920_usbh_data);
        at91_add_device_udc(&eco920_udc_data);
 
-       at91_add_device_mmc(0, &eco920_mmc_data);
+       at91_add_device_mci(0, &eco920_mci0_data);
        platform_device_register(&eco920_flash);
 
        at91_ramc_write(0, AT91_SMC_CSR(7),     AT91_SMC_RWHOLD_(1)
index 6cc83a8..fa98aba 100644 (file)
@@ -75,12 +75,12 @@ static struct spi_board_info flexibity_spi_devices[] = {
 };
 
 /* MCI (SD/MMC) */
-static struct at91_mmc_data __initdata flexibity_mmc_data = {
-       .slot_b         = 0,
-       .wire4          = 1,
-       .det_pin        = AT91_PIN_PC9,
-       .wp_pin         = AT91_PIN_PC4,
-       .vcc_pin        = -EINVAL,
+static struct mci_platform_data __initdata flexibity_mci0_data = {
+       .slot[0] = {
+               .bus_width      = 4,
+               .detect_pin     = AT91_PIN_PC9,
+               .wp_pin         = AT91_PIN_PC4,
+       },
 };
 
 /* LEDs */
@@ -152,7 +152,7 @@ static void __init flexibity_board_init(void)
        at91_add_device_spi(flexibity_spi_devices,
                ARRAY_SIZE(flexibity_spi_devices));
        /* MMC */
-       at91_add_device_mmc(0, &flexibity_mmc_data);
+       at91_add_device_mci(0, &flexibity_mci0_data);
        /* LEDs */
        at91_gpio_leds(flexibity_leds, ARRAY_SIZE(flexibity_leds));
 }
index 69ab124..6e47071 100644 (file)
@@ -86,7 +86,7 @@ static struct at91_udc_data __initdata foxg20_udc_data = {
  * SPI devices.
  */
 static struct spi_board_info foxg20_spi_devices[] = {
-#if !defined(CONFIG_MMC_AT91)
+#if !IS_ENABLED(CONFIG_MMC_ATMELMCI)
        {
                .modalias       = "mtd_dataflash",
                .chip_select    = 1,
@@ -109,12 +109,12 @@ static struct macb_platform_data __initdata foxg20_macb_data = {
  * MCI (SD/MMC)
  * det_pin, wp_pin and vcc_pin are not connected
  */
-static struct at91_mmc_data __initdata foxg20_mmc_data = {
-       .slot_b         = 1,
-       .wire4          = 1,
-       .det_pin        = -EINVAL,
-       .wp_pin         = -EINVAL,
-       .vcc_pin        = -EINVAL,
+static struct mci_platform_data __initdata foxg20_mci0_data = {
+       .slot[1] = {
+               .bus_width      = 4,
+               .detect_pin     = -EINVAL,
+               .wp_pin         = -EINVAL,
+       },
 };
 
 
@@ -247,7 +247,7 @@ static void __init foxg20_board_init(void)
        /* Ethernet */
        at91_add_device_eth(&foxg20_macb_data);
        /* MMC */
-       at91_add_device_mmc(0, &foxg20_mmc_data);
+       at91_add_device_mci(0, &foxg20_mci0_data);
        /* I2C */
        at91_add_device_i2c(foxg20_i2c_devices, ARRAY_SIZE(foxg20_i2c_devices));
        /* LEDs */
index 00d6007..abe9fed 100644 (file)
@@ -69,12 +69,12 @@ static struct at91_udc_data __initdata kb9202_udc_data = {
        .pullup_pin     = AT91_PIN_PB22,
 };
 
-static struct at91_mmc_data __initdata kb9202_mmc_data = {
-       .det_pin        = AT91_PIN_PB2,
-       .slot_b         = 0,
-       .wire4          = 1,
-       .wp_pin         = -EINVAL,
-       .vcc_pin        = -EINVAL,
+static struct mci_platform_data __initdata kb9202_mci0_data = {
+       .slot[0] = {
+               .bus_width      = 4,
+               .detect_pin     = AT91_PIN_PB2,
+               .wp_pin         = -EINVAL,
+       },
 };
 
 static struct mtd_partition __initdata kb9202_nand_partition[] = {
@@ -136,7 +136,7 @@ static void __init kb9202_board_init(void)
        /* USB Device */
        at91_add_device_udc(&kb9202_udc_data);
        /* MMC */
-       at91_add_device_mmc(0, &kb9202_mmc_data);
+       at91_add_device_mci(0, &kb9202_mci0_data);
        /* I2C */
        at91_add_device_i2c(NULL, 0);
        /* SPI */
index 18103c5..9cda3fd 100644 (file)
@@ -138,11 +138,12 @@ static struct spi_board_info neocore926_spi_devices[] = {
 /*
  * MCI (SD/MMC)
  */
-static struct at91_mmc_data __initdata neocore926_mmc_data = {
-       .wire4          = 1,
-       .det_pin        = AT91_PIN_PE18,
-       .wp_pin         = AT91_PIN_PE19,
-       .vcc_pin        = -EINVAL,
+static struct mci_platform_data __initdata neocore926_mci0_data = {
+       .slot[0] = {
+               .bus_width      = 4,
+               .detect_pin     = AT91_PIN_PE18,
+               .wp_pin         = AT91_PIN_PE19,
+       },
 };
 
 
@@ -354,7 +355,7 @@ static void __init neocore926_board_init(void)
        neocore926_add_device_ts();
 
        /* MMC */
-       at91_add_device_mmc(1, &neocore926_mmc_data);
+       at91_add_device_mci(0, &neocore926_mci0_data);
 
        /* Ethernet */
        at91_add_device_eth(&neocore926_macb_data);
index 1270655..f83e1de 100644 (file)
@@ -62,12 +62,12 @@ static struct at91_usbh_data __initdata picotux200_usbh_data = {
        .overcurrent_pin= {-EINVAL, -EINVAL},
 };
 
-static struct at91_mmc_data __initdata picotux200_mmc_data = {
-       .det_pin        = AT91_PIN_PB27,
-       .slot_b         = 0,
-       .wire4          = 1,
-       .wp_pin         = AT91_PIN_PA17,
-       .vcc_pin        = -EINVAL,
+static struct mci_platform_data __initdata picotux200_mci0_data = {
+       .slot[0] = {
+               .bus_width      = 4,
+               .detect_pin     = AT91_PIN_PB27,
+               .wp_pin         = AT91_PIN_PA17,
+       },
 };
 
 #define PICOTUX200_FLASH_BASE  AT91_CHIPSELECT_0
@@ -112,7 +112,7 @@ 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 optionally use SPI signaling (CS3). */
-       at91_add_device_mmc(0, &picotux200_mmc_data);
+       at91_add_device_mci(0, &picotux200_mci0_data);
        /* NOR Flash */
        platform_device_register(&picotux200_flash);
 }
index bf351e2..799f214 100644 (file)
@@ -156,12 +156,12 @@ static void __init ek_add_device_nand(void)
 /*
  * MCI (SD/MMC)
  */
-static struct at91_mmc_data __initdata ek_mmc_data = {
-       .slot_b         = 0,
-       .wire4          = 1,
-       .det_pin        = -EINVAL,
-       .wp_pin         = -EINVAL,
-       .vcc_pin        = -EINVAL,
+static struct mci_platform_data __initdata ek_mci0_data = {
+       .slot[0] = {
+               .bus_width      = 4,
+               .detect_pin     = -EINVAL,
+               .wp_pin         = -EINVAL,
+       },
 };
 
 /*
@@ -245,7 +245,7 @@ static void __init ek_board_init(void)
        /* Ethernet */
        at91_add_device_eth(&ek_macb_data);
        /* MMC */
-       at91_add_device_mmc(0, &ek_mmc_data);
+       at91_add_device_mci(0, &ek_mci0_data);
        /* Push Buttons */
        ek_add_device_buttons();
        /* LEDs */
index 2526ad7..66338e7 100644 (file)
@@ -77,12 +77,12 @@ static struct at91_cf_data __initdata dk_cf_data = {
 };
 
 #ifndef CONFIG_MTD_AT91_DATAFLASH_CARD
-static struct at91_mmc_data __initdata dk_mmc_data = {
-       .slot_b         = 0,
-       .wire4          = 1,
-       .det_pin        = -EINVAL,
-       .wp_pin         = -EINVAL,
-       .vcc_pin        = -EINVAL,
+static struct mci_platform_data __initdata dk_mci0_data = {
+       .slot[0] = {
+               .bus_width      = 4,
+               .detect_pin     = -EINVAL,
+               .wp_pin         = -EINVAL,
+       },
 };
 #endif
 
@@ -205,7 +205,7 @@ static void __init dk_board_init(void)
 #else
        /* MMC */
        at91_set_gpio_output(AT91_PIN_PB7, 1);  /* this MMC card slot can optionally use SPI signaling (CS3). */
-       at91_add_device_mmc(0, &dk_mmc_data);
+       at91_add_device_mci(0, &dk_mci0_data);
 #endif
        /* NAND */
        at91_add_device_nand(&dk_nand_data);
index 06f2ce5..5d1b572 100644 (file)
@@ -70,12 +70,12 @@ static struct at91_udc_data __initdata ek_udc_data = {
 };
 
 #ifndef CONFIG_MTD_AT91_DATAFLASH_CARD
-static struct at91_mmc_data __initdata ek_mmc_data = {
-       .det_pin        = AT91_PIN_PB27,
-       .slot_b         = 0,
-       .wire4          = 1,
-       .wp_pin         = AT91_PIN_PA17,
-       .vcc_pin        = -EINVAL,
+static struct mci_platform_data __initdata ek_mci0_data = {
+       .slot[0] = {
+               .bus_width      = 4,
+               .detect_pin     = AT91_PIN_PB27,
+               .wp_pin         = AT91_PIN_PA17,
+       }
 };
 #endif
 
@@ -174,7 +174,7 @@ static void __init ek_board_init(void)
 #else
        /* MMC */
        at91_set_gpio_output(AT91_PIN_PB22, 1); /* this MMC card slot can optionally use SPI signaling (CS3). */
-       at91_add_device_mmc(0, &ek_mmc_data);
+       at91_add_device_mci(0, &ek_mci0_data);
 #endif
        /* NOR Flash */
        platform_device_register(&ek_flash);
index 93b8e3a..a0ecf04 100644 (file)
@@ -58,11 +58,12 @@ static struct at91_usbh_data rsi_ews_usbh_data __initdata = {
 /*
  * SD/MC
  */
-static struct at91_mmc_data rsi_ews_mmc_data __initdata = {
-       .slot_b         = 0,
-       .wire4          = 1,
-       .det_pin        = AT91_PIN_PB27,
-       .wp_pin         = AT91_PIN_PB29,
+static struct mci_platform_data __initdata rsi_ews_mci0_data = {
+       .slot[0] = {
+               .bus_width      = 4,
+               .detect_pin     = AT91_PIN_PB27,
+               .wp_pin         = AT91_PIN_PB29,
+       },
 };
 
 /*
@@ -212,7 +213,7 @@ static void __init rsi_ews_board_init(void)
        at91_add_device_spi(rsi_ews_spi_devices,
                        ARRAY_SIZE(rsi_ews_spi_devices));
        /* MMC */
-       at91_add_device_mmc(0, &rsi_ews_mmc_data);
+       at91_add_device_mci(0, &rsi_ews_mci0_data);
        /* NOR Flash */
        platform_device_register(&rsiews_nor_flash);
        /* LEDs */
index 46e1eb5..c5f01ac 100644 (file)
@@ -73,7 +73,7 @@ static struct at91_udc_data __initdata ek_udc_data = {
  * SPI devices.
  */
 static struct spi_board_info ek_spi_devices[] = {
-#if !defined(CONFIG_MMC_AT91)
+#if !IS_ENABLED(CONFIG_MMC_ATMELMCI)
        {       /* DataFlash chip */
                .modalias       = "mtd_dataflash",
                .chip_select    = 1,
@@ -158,12 +158,12 @@ static void __init ek_add_device_nand(void)
 /*
  * MCI (SD/MMC)
  */
-static struct at91_mmc_data __initdata ek_mmc_data = {
-       .slot_b         = 1,
-       .wire4          = 1,
-       .det_pin        = AT91_PIN_PC8,
-       .wp_pin         = AT91_PIN_PC4,
-       .vcc_pin        = -EINVAL,
+static struct mci_platform_data __initdata ek_mci0_data = {
+       .slot[1] = {
+               .bus_width      = 4,
+               .detect_pin     = AT91_PIN_PC8,
+               .wp_pin         = AT91_PIN_PC4,
+       },
 };
 
 /*
@@ -209,7 +209,7 @@ static void __init ek_board_init(void)
        /* Ethernet */
        at91_add_device_eth(&ek_macb_data);
        /* MMC */
-       at91_add_device_mmc(0, &ek_mmc_data);
+       at91_add_device_mci(0, &ek_mci0_data);
        /* I2C */
        at91_add_device_i2c(NULL, 0);
        /* LEDs */
index 889c1bf..8cd6e67 100644 (file)
@@ -108,7 +108,7 @@ static void __init at73c213_set_clk(struct at73c213_board_info *info) {}
  * SPI devices.
  */
 static struct spi_board_info ek_spi_devices[] = {
-#if !defined(CONFIG_MMC_AT91)
+#if !IS_ENABLED(CONFIG_MMC_ATMELMCI)
        {       /* DataFlash chip */
                .modalias       = "mtd_dataflash",
                .chip_select    = 1,
@@ -211,12 +211,12 @@ static void __init ek_add_device_nand(void)
 /*
  * MCI (SD/MMC)
  */
-static struct at91_mmc_data __initdata ek_mmc_data = {
-       .slot_b         = 1,
-       .wire4          = 1,
-       .det_pin        = -EINVAL,
-       .wp_pin         = -EINVAL,
-       .vcc_pin        = -EINVAL,
+static struct mci_platform_data __initdata ek_mci0_data = {
+       .slot[1] = {
+               .bus_width      = 4,
+               .detect_pin     = -EINVAL,
+               .wp_pin         = -EINVAL,
+       },
 };
 
 
@@ -329,7 +329,7 @@ static void __init ek_board_init(void)
        /* Ethernet */
        at91_add_device_eth(&ek_macb_data);
        /* MMC */
-       at91_add_device_mmc(0, &ek_mmc_data);
+       at91_add_device_mci(0, &ek_mci0_data);
        /* I2C */
        at91_add_device_i2c(ek_i2c_devices, ARRAY_SIZE(ek_i2c_devices));
        /* SSC (to AT73C213) */
index 802d494..27b3af1 100644 (file)
@@ -340,11 +340,12 @@ static struct spi_board_info ek_spi_devices[] = {
  * MCI (SD/MMC)
  * det_pin, wp_pin and vcc_pin are not connected
  */
-static struct at91_mmc_data __initdata ek_mmc_data = {
-       .wire4          = 1,
-       .det_pin        = -EINVAL,
-       .wp_pin         = -EINVAL,
-       .vcc_pin        = -EINVAL,
+static struct mci_platform_data __initdata mci0_data = {
+       .slot[0] = {
+               .bus_width      = 4,
+               .detect_pin     = -EINVAL,
+               .wp_pin         = -EINVAL,
+       },
 };
 
 #endif /* CONFIG_SPI_ATMEL_* */
@@ -595,7 +596,7 @@ static void __init ek_board_init(void)
        at91_add_device_ssc(AT91SAM9261_ID_SSC1, ATMEL_SSC_TX);
 #else
        /* MMC */
-       at91_add_device_mmc(0, &ek_mmc_data);
+       at91_add_device_mci(0, &mci0_data);
 #endif
        /* LCD Controller */
        at91_add_device_lcdc(&ek_lcdc_data);
index 82adf58..073e174 100644 (file)
@@ -141,11 +141,12 @@ static struct spi_board_info ek_spi_devices[] = {
 /*
  * MCI (SD/MMC)
  */
-static struct at91_mmc_data __initdata ek_mmc_data = {
-       .wire4          = 1,
-       .det_pin        = AT91_PIN_PE18,
-       .wp_pin         = AT91_PIN_PE19,
-       .vcc_pin        = -EINVAL,
+static struct mci_platform_data __initdata mci1_data = {
+       .slot[0] = {
+               .bus_width      = 4,
+               .detect_pin     = AT91_PIN_PE18,
+               .wp_pin         = AT91_PIN_PE19,
+       },
 };
 
 
@@ -420,7 +421,7 @@ static void __init ek_board_init(void)
        /* Touchscreen */
        ek_add_device_ts();
        /* MMC */
-       at91_add_device_mmc(1, &ek_mmc_data);
+       at91_add_device_mci(1, &mci1_data);
        /* Ethernet */
        at91_add_device_eth(&ek_macb_data);
        /* NAND */
index 4ea4ee0..3ab2b86 100644 (file)
@@ -92,7 +92,7 @@ static struct at91_udc_data __initdata ek_udc_data = {
  * SPI devices.
  */
 static struct spi_board_info ek_spi_devices[] = {
-#if !(defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_AT91))
+#if !IS_ENABLED(CONFIG_MMC_ATMELMCI)
        {       /* DataFlash chip */
                .modalias       = "mtd_dataflash",
                .chip_select    = 1,
@@ -199,7 +199,6 @@ static void __init ek_add_device_nand(void)
  * MCI (SD/MMC)
  * wp_pin and vcc_pin are not connected
  */
-#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE)
 static struct mci_platform_data __initdata ek_mmc_data = {
        .slot[1] = {
                .bus_width      = 4,
@@ -208,28 +207,15 @@ static struct mci_platform_data __initdata ek_mmc_data = {
        },
 
 };
-#else
-static struct at91_mmc_data __initdata ek_mmc_data = {
-       .slot_b         = 1,    /* Only one slot so use slot B */
-       .wire4          = 1,
-       .det_pin        = AT91_PIN_PC9,
-       .wp_pin         = -EINVAL,
-       .vcc_pin        = -EINVAL,
-};
-#endif
 
 static void __init ek_add_device_mmc(void)
 {
-#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE)
        if (ek_have_2mmc()) {
                ek_mmc_data.slot[0].bus_width = 4;
                ek_mmc_data.slot[0].detect_pin = AT91_PIN_PC2;
                ek_mmc_data.slot[0].wp_pin = -1;
        }
        at91_add_device_mci(0, &ek_mmc_data);
-#else
-       at91_add_device_mmc(0, &ek_mmc_data);
-#endif
 }
 
 /*
index e7dc3ea..fb89ea9 100644 (file)
@@ -56,11 +56,12 @@ static struct usba_platform_data __initdata ek_usba_udc_data = {
 /*
  * MCI (SD/MMC)
  */
-static struct at91_mmc_data __initdata ek_mmc_data = {
-       .wire4          = 1,
-       .det_pin        = AT91_PIN_PA15,
-       .wp_pin         = -EINVAL,
-       .vcc_pin        = -EINVAL,
+static struct mci_platform_data __initdata mci0_data = {
+       .slot[0] = {
+               .bus_width      = 4,
+               .detect_pin     = AT91_PIN_PA15,
+               .wp_pin         = -EINVAL,
+       },
 };
 
 
@@ -303,7 +304,7 @@ static void __init ek_board_init(void)
        /* SPI */
        at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices));
        /* MMC */
-       at91_add_device_mmc(0, &ek_mmc_data);
+       at91_add_device_mci(0, &mci0_data);
        /* LCD Controller */
        at91_add_device_lcdc(&ek_lcdc_data);
        /* AC97 */
index 29eae16..c3fb31d 100644 (file)
@@ -83,7 +83,6 @@ static void __init add_device_nand(void)
  * MCI (SD/MMC)
  * det_pin, wp_pin and vcc_pin are not connected
  */
-#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE)
 static struct mci_platform_data __initdata mmc_data = {
        .slot[0] = {
                .bus_width      = 4,
@@ -91,15 +90,6 @@ static struct mci_platform_data __initdata mmc_data = {
                .wp_pin         = -1,
        },
 };
-#else
-static struct at91_mmc_data __initdata mmc_data = {
-       .slot_b         = 0,
-       .wire4          = 1,
-       .det_pin        = -EINVAL,
-       .wp_pin         = -EINVAL,
-       .vcc_pin        = -EINVAL,
-};
-#endif
 
 
 /*
@@ -223,11 +213,7 @@ void __init stamp9g20_board_init(void)
        /* NAND */
        add_device_nand();
        /* MMC */
-#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE)
        at91_add_device_mci(0, &mmc_data);
-#else
-       at91_add_device_mmc(0, &mmc_data);
-#endif
        /* W1 */
        add_w1();
 }
index c1476b9..6ea069b 100644 (file)
@@ -109,14 +109,12 @@ static struct mmc_spi_platform_data at91_mmc_spi_pdata = {
  * SPI devices.
  */
 static struct spi_board_info usb_a9263_spi_devices[] = {
-#if !defined(CONFIG_MMC_AT91)
        {       /* DataFlash chip */
                .modalias       = "mtd_dataflash",
                .chip_select    = 0,
                .max_speed_hz   = 15 * 1000 * 1000,
                .bus_num        = 0,
        }
-#endif
 };
 
 static struct spi_board_info usb_a9g20_spi_devices[] = {
index 9fd57bc..f162fdf 100644 (file)
@@ -119,11 +119,12 @@ static struct at91_udc_data __initdata yl9200_udc_data = {
 /*
  * MMC
  */
-static struct at91_mmc_data __initdata yl9200_mmc_data = {
-       .det_pin        = AT91_PIN_PB9,
-       .wire4          = 1,
-       .wp_pin         = -EINVAL,
-       .vcc_pin        = -EINVAL,
+static struct mci_platform_data __initdata yl9200_mci0_data = {
+       .slot[0] = {
+               .bus_width      = 4,
+               .detect_pin     = AT91_PIN_PB9,
+               .wp_pin         = -EINVAL,
+       },
 };
 
 /*
@@ -565,7 +566,7 @@ static void __init yl9200_board_init(void)
        /* I2C */
        at91_add_device_i2c(yl9200_i2c_devices, ARRAY_SIZE(yl9200_i2c_devices));
        /* MMC */
-       at91_add_device_mmc(0, &yl9200_mmc_data);
+       at91_add_device_mci(0, &yl9200_mci0_data);
        /* NAND */
        at91_add_device_nand(&yl9200_nand_data);
        /* NOR Flash */
index 31bb7e5..0d93407 100644 (file)
@@ -406,46 +406,6 @@ config MTD_NAND_ATMEL
        help
          Enables support for NAND Flash / Smart Media Card interface
          on Atmel AT91 and AVR32 processors.
-choice
-       prompt "ECC management for NAND Flash / SmartMedia on AT91 / AVR32"
-       depends on MTD_NAND_ATMEL
-
-config MTD_NAND_ATMEL_ECC_HW
-       bool "Hardware ECC"
-       depends on ARCH_AT91SAM9263 || ARCH_AT91SAM9260 || AVR32
-       help
-         Use hardware ECC instead of software ECC when the chip
-         supports it.
-
-         The hardware ECC controller is capable of single bit error
-         correction and 2-bit random detection per page.
-
-         NB : hardware and software ECC schemes are incompatible.
-         If you switch from one to another, you'll have to erase your
-         mtd partition.
-
-         If unsure, say Y
-
-config MTD_NAND_ATMEL_ECC_SOFT
-       bool "Software ECC"
-       help
-         Use software ECC.
-
-         NB : hardware and software ECC schemes are incompatible.
-         If you switch from one to another, you'll have to erase your
-         mtd partition.
-
-config MTD_NAND_ATMEL_ECC_NONE
-       bool "No ECC (testing only, DANGEROUS)"
-       depends on DEBUG_KERNEL
-       help
-         No ECC will be used.
-         It's not a good idea and it should be reserved for testing
-         purpose only.
-
-         If unsure, say N
-
-endchoice
 
 config MTD_NAND_PXA3xx
        tristate "Support for NAND flash devices on PXA3xx"