]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
Merge branch 'imx/for-2.6.36' of git://git.pengutronix.de/git/ukl/linux-2.6 into...
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Wed, 30 Jun 2010 10:16:24 +0000 (12:16 +0200)
committerUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Mon, 26 Jul 2010 12:27:25 +0000 (14:27 +0200)
There are some more conflicts than detected by git, namely support for
the newly added cpuimx machines needed to be converted to dynamic device
registration.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Conflicts:
arch/arm/mach-imx/Makefile
arch/arm/mach-imx/devices.c
arch/arm/mach-imx/devices.h
arch/arm/mach-imx/eukrea_mbimx27-baseboard.c
arch/arm/mach-mx2/Kconfig
arch/arm/mach-mx25/Makefile
arch/arm/mach-mx25/devices.c
arch/arm/plat-mxc/include/mach/mx25.h
arch/arm/plat-mxc/include/mach/mxc_nand.h

31 files changed:
1  2 
arch/arm/mach-imx/Kconfig
arch/arm/mach-imx/Makefile
arch/arm/mach-imx/clock-imx27.c
arch/arm/mach-imx/devices.c
arch/arm/mach-imx/devices.h
arch/arm/mach-imx/eukrea_mbimx27-baseboard.c
arch/arm/mach-imx/mach-cpuimx27.c
arch/arm/mach-imx/mach-pca100.c
arch/arm/mach-imx/pm-imx27.c
arch/arm/mach-mx25/Kconfig
arch/arm/mach-mx25/Makefile
arch/arm/mach-mx25/devices.c
arch/arm/mach-mx25/devices.h
arch/arm/mach-mx25/eukrea_mbimxsd-baseboard.c
arch/arm/mach-mx25/mach-cpuimx25.c
arch/arm/mach-mx25/mach-mx25_3ds.c
arch/arm/mach-mx3/Kconfig
arch/arm/mach-mx3/Makefile
arch/arm/mach-mx3/eukrea_mbimxsd-baseboard.c
arch/arm/mach-mx3/mach-cpuimx35.c
arch/arm/mach-mx3/mach-mx31_3ds.c
arch/arm/mach-mx3/mach-mx31lilly.c
arch/arm/mach-mx3/mach-pcm037.c
arch/arm/mach-mx3/mach-pcm043.c
arch/arm/mach-mx5/devices.c
arch/arm/plat-mxc/Kconfig
arch/arm/plat-mxc/audmux-v2.c
arch/arm/plat-mxc/ehci.c
arch/arm/plat-mxc/include/mach/mx25.h
arch/arm/plat-mxc/include/mach/mxc_nand.h
drivers/mmc/host/mxcmmc.c

Simple merge
index 27d496c3e5cba296e551af77d71e6fc6ce5a465b,86b53e6bc94e11d6f6d98d2e6903664b3e876fd3..46a9fdfbbd157101e22fbd19e1edb6d2c2d893af
@@@ -4,14 -4,24 +4,24 @@@
  
  # Object file lists.
  
- obj-y :=  devices.o serial.o
+ obj-y :=  devices.o
  
- obj-$(CONFIG_MACH_MX21) += clock_imx21.o mm-imx21.o
+ obj-$(CONFIG_IMX_HAVE_DMA_V1) += dma-v1.o
  
- obj-$(CONFIG_MACH_MX27) += cpu_imx27.o pm-imx27.o
- obj-$(CONFIG_MACH_MX27) += clock_imx27.o mm-imx27.o
+ obj-$(CONFIG_ARCH_MX1) += clock-imx1.o mm-imx1.o
+ obj-$(CONFIG_MACH_MX21) += clock-imx21.o mm-imx21.o
 -obj-$(CONFIG_MACH_MX27) += cpu-imx27.o
++obj-$(CONFIG_MACH_MX27) += cpu-imx27.o pm-imx27.o
+ obj-$(CONFIG_MACH_MX27) += clock-imx27.o mm-imx27.o
+ # Support for CMOS sensor interface
+ obj-$(CONFIG_MX1_VIDEO)       += mx1-camera-fiq.o mx1-camera-fiq-ksym.o
+ obj-$(CONFIG_ARCH_MX1ADS) += mach-mx1ads.o
+ obj-$(CONFIG_MACH_SCB9328) += mach-scb9328.o
  
  obj-$(CONFIG_MACH_MX21ADS) += mach-mx21ads.o
  obj-$(CONFIG_MACH_MX27ADS) += mach-mx27ads.o
  obj-$(CONFIG_MACH_PCM038) += mach-pcm038.o
  obj-$(CONFIG_MACH_PCM970_BASEBOARD) += pcm970-baseboard.o
Simple merge
index 28caa21cb56eb9c97d56e0cd0c1ca4606a6f3b29,9510687c4be3205df5533f68db2272257be36fbc..9c271a752b84da4e0380bf9fed2c86a5658a9640
  
  #include "devices.h"
  
- /*
-  * SPI master controller
-  *
-  * - i.MX1: 2 channel (slighly different register setting)
-  * - i.MX21: 2 channel
-  * - i.MX27: 3 channel
-  */
- #define DEFINE_IMX_SPI_DEVICE(n, baseaddr, irq)                                       \
-       static struct resource mxc_spi_resources ## n[] = {                     \
-               {                                                               \
-                       .start = baseaddr,                                      \
-                       .end = baseaddr + SZ_4K - 1,                            \
-                       .flags = IORESOURCE_MEM,                                \
-               }, {                                                            \
-                       .start = irq,                                           \
-                       .end = irq,                                             \
-                       .flags = IORESOURCE_IRQ,                                \
-               },                                                              \
-       };                                                                      \
-                                                                               \
-       struct platform_device mxc_spi_device ## n = {                          \
-               .name = "spi_imx",                                              \
-               .id = n,                                                        \
-               .num_resources = ARRAY_SIZE(mxc_spi_resources ## n),            \
-               .resource = mxc_spi_resources ## n,                             \
-       }
- DEFINE_IMX_SPI_DEVICE(0, MX2x_CSPI1_BASE_ADDR, MX2x_INT_CSPI1);
- DEFINE_IMX_SPI_DEVICE(1, MX2x_CSPI2_BASE_ADDR, MX2x_INT_CSPI2);
- #ifdef CONFIG_MACH_MX27
- DEFINE_IMX_SPI_DEVICE(2, MX27_CSPI3_BASE_ADDR, MX27_INT_CSPI3);
- #endif
+ #if defined(CONFIG_ARCH_MX1)
+ static struct resource imx1_camera_resources[] = {
+       {
+               .start  = 0x00224000,
+               .end    = 0x00224010,
+               .flags  = IORESOURCE_MEM,
+       }, {
+               .start  = MX1_CSI_INT,
+               .end    = MX1_CSI_INT,
+               .flags  = IORESOURCE_IRQ,
+       },
+ };
+ static u64 imx1_camera_dmamask = DMA_BIT_MASK(32);
+ struct platform_device imx1_camera_device = {
+       .name           = "mx1-camera",
+       .id             = 0, /* This is used to put cameras on this interface */
+       .dev            = {
+               .dma_mask = &imx1_camera_dmamask,
+               .coherent_dma_mask = DMA_BIT_MASK(32),
+       },
+       .resource       = imx1_camera_resources,
+       .num_resources  = ARRAY_SIZE(imx1_camera_resources),
+ };
+ static struct resource imx_rtc_resources[] = {
+       {
+               .start  = 0x00204000,
+               .end    = 0x00204024,
+               .flags  = IORESOURCE_MEM,
+       }, {
+               .start  = MX1_RTC_INT,
+               .end    = MX1_RTC_INT,
+               .flags  = IORESOURCE_IRQ,
+       }, {
+               .start  = MX1_RTC_SAMINT,
+               .end    = MX1_RTC_SAMINT,
+               .flags  = IORESOURCE_IRQ,
+       },
+ };
+ struct platform_device imx_rtc_device = {
+       .name           = "rtc-imx",
+       .id             = 0,
+       .resource       = imx_rtc_resources,
+       .num_resources  = ARRAY_SIZE(imx_rtc_resources),
+ };
+ static struct resource imx_wdt_resources[] = {
+       {
+               .start  = 0x00201000,
+               .end    = 0x00201008,
+               .flags  = IORESOURCE_MEM,
+       }, {
+               .start  = MX1_WDT_INT,
+               .end    = MX1_WDT_INT,
+               .flags  = IORESOURCE_IRQ,
+       },
+ };
+ struct platform_device imx_wdt_device = {
+       .name           = "imx-wdt",
+       .id             = 0,
+       .resource       = imx_wdt_resources,
+       .num_resources  = ARRAY_SIZE(imx_wdt_resources),
+ };
+ static struct resource imx_usb_resources[] = {
+       {
+               .start  = 0x00212000,
+               .end    = 0x00212148,
+               .flags  = IORESOURCE_MEM,
+       }, {
+               .start  = MX1_USBD_INT0,
+               .end    = MX1_USBD_INT0,
+               .flags  = IORESOURCE_IRQ,
+       }, {
+               .start  = MX1_USBD_INT1,
+               .end    = MX1_USBD_INT1,
+               .flags  = IORESOURCE_IRQ,
+       }, {
+               .start  = MX1_USBD_INT2,
+               .end    = MX1_USBD_INT2,
+               .flags  = IORESOURCE_IRQ,
+       }, {
+               .start  = MX1_USBD_INT3,
+               .end    = MX1_USBD_INT3,
+               .flags  = IORESOURCE_IRQ,
+       }, {
+               .start  = MX1_USBD_INT4,
+               .end    = MX1_USBD_INT4,
+               .flags  = IORESOURCE_IRQ,
+       }, {
+               .start  = MX1_USBD_INT5,
+               .end    = MX1_USBD_INT5,
+               .flags  = IORESOURCE_IRQ,
+       }, {
+               .start  = MX1_USBD_INT6,
+               .end    = MX1_USBD_INT6,
+               .flags  = IORESOURCE_IRQ,
+       },
+ };
+ struct platform_device imx_usb_device = {
+       .name           = "imx_udc",
+       .id             = 0,
+       .num_resources  = ARRAY_SIZE(imx_usb_resources),
+       .resource       = imx_usb_resources,
+ };
+ /* GPIO port description */
+ static struct mxc_gpio_port imx_gpio_ports[] = {
+       {
+               .chip.label = "gpio-0",
+               .base = (void __iomem *)MX1_IO_ADDRESS(MX1_GPIO_BASE_ADDR),
+               .irq = MX1_GPIO_INT_PORTA,
+               .virtual_irq_start = MXC_GPIO_IRQ_START,
+       }, {
+               .chip.label = "gpio-1",
+               .base = (void __iomem *)MX1_IO_ADDRESS(MX1_GPIO_BASE_ADDR + 0x100),
+               .irq = MX1_GPIO_INT_PORTB,
+               .virtual_irq_start = MXC_GPIO_IRQ_START + 32,
+       }, {
+               .chip.label = "gpio-2",
+               .base = (void __iomem *)MX1_IO_ADDRESS(MX1_GPIO_BASE_ADDR + 0x200),
+               .irq = MX1_GPIO_INT_PORTC,
+               .virtual_irq_start = MXC_GPIO_IRQ_START + 64,
+       }, {
+               .chip.label = "gpio-3",
+               .base = (void __iomem *)MX1_IO_ADDRESS(MX1_GPIO_BASE_ADDR + 0x300),
+               .irq = MX1_GPIO_INT_PORTD,
+               .virtual_irq_start = MXC_GPIO_IRQ_START + 96,
+       }
+ };
+ int __init imx1_register_gpios(void)
+ {
+       return mxc_gpio_init(imx_gpio_ports, ARRAY_SIZE(imx_gpio_ports));
+ }
+ #endif
+ #if defined(CONFIG_MACH_MX21) || defined(CONFIG_MACH_MX27)
++
 +#ifdef CONFIG_MACH_MX27
 +static struct resource mx27_camera_resources[] = {
 +      {
 +             .start = MX27_CSI_BASE_ADDR,
 +             .end = MX27_CSI_BASE_ADDR + 0x1f,
 +             .flags = IORESOURCE_MEM,
 +      }, {
 +             .start = MX27_EMMA_PRP_BASE_ADDR,
 +             .end = MX27_EMMA_PRP_BASE_ADDR + 0x1f,
 +             .flags = IORESOURCE_MEM,
 +      }, {
 +             .start = MX27_INT_CSI,
 +             .end = MX27_INT_CSI,
 +             .flags = IORESOURCE_IRQ,
 +      },{
 +             .start = MX27_INT_EMMAPRP,
 +             .end = MX27_INT_EMMAPRP,
 +             .flags = IORESOURCE_IRQ,
 +      },
 +};
 +struct platform_device mx27_camera_device = {
 +      .name = "mx2-camera",
 +      .id = 0,
 +      .num_resources = ARRAY_SIZE(mx27_camera_resources),
 +      .resource = mx27_camera_resources,
 +      .dev = {
 +              .coherent_dma_mask = 0xffffffff,
 +      },
 +};
 +#endif
 +
  /*
   * General Purpose Timer
   * - i.MX21: 3 timers
@@@ -531,22 -554,4 +586,24 @@@ struct platform_device mx21_usbhc_devic
        .resource       = mx21_usbhc_resources,
  };
  #endif
 +
 +static struct resource imx_kpp_resources[] = {
 +      {
 +              .start  = MX2x_KPP_BASE_ADDR,
 +              .end    = MX2x_KPP_BASE_ADDR + 0xf,
 +              .flags  = IORESOURCE_MEM
 +      }, {
 +              .start  = MX2x_INT_KPP,
 +              .end    = MX2x_INT_KPP,
 +              .flags  = IORESOURCE_IRQ,
 +      },
 +};
 +
 +struct platform_device imx_kpp_device = {
 +      .name = "imx-keypad",
 +      .id = -1,
 +      .num_resources = ARRAY_SIZE(imx_kpp_resources),
 +      .resource = imx_kpp_resources,
 +};
++
+ #endif
index aefc87a7609e7018882d42da5015f4786b6b611f,109f26cd3b1b012b8665e8a078279f871ea84a1f..efd4527506a5e661da74c95e9d756c0674ca3d33
@@@ -36,9 -27,4 +28,5 @@@ extern struct platform_device mxc_usbh2
  extern struct platform_device mx21_usbhc_device;
  extern struct platform_device imx_ssi_device0;
  extern struct platform_device imx_ssi_device1;
 +extern struct platform_device imx_kpp_device;
+ #endif
index d66a6c439583364b187d2406edc9e4ec076493cb,1fb34f375b22ca8c088319b3c0bfec2e896b9730..27e7226ec9d4d98019d8c6c83106c2b4d0acab5f
  #include <mach/imxfb.h>
  #include <mach/hardware.h>
  #include <mach/mmc.h>
- #include <mach/imx-uart.h>
 +#include <mach/spi.h>
 +#include <mach/ssi.h>
 +#include <mach/audmux.h>
  
+ #include "devices-imx27.h"
  #include "devices.h"
  
  static int eukrea_mbimx27_pins[] = {
@@@ -206,60 -153,11 +206,52 @@@ static struct imx_fb_platform_data eukr
        .dmacr          = 0x00040060,
  };
  
- static struct imxuart_platform_data uart_pdata[] = {
-       {
-               .flags = IMXUART_HAVE_RTSCTS,
-       },
-       {
-               .flags = IMXUART_HAVE_RTSCTS,
-       },
-       {
-               .flags = IMXUART_HAVE_RTSCTS,
-       },
 +static void eukrea_mbimx27_bl_set_intensity(int intensity)
 +{
 +      if (intensity)
 +              gpio_direction_output(GPIO_PORTE | 5, 1);
 +      else
 +              gpio_direction_output(GPIO_PORTE | 5, 0);
 +}
 +
 +static struct generic_bl_info eukrea_mbimx27_bl_info = {
 +      .name                   = "eukrea_mbimx27-bl",
 +      .max_intensity          = 0xff,
 +      .default_intensity      = 0xff,
 +      .set_bl_intensity       = eukrea_mbimx27_bl_set_intensity,
 +};
 +
 +static struct platform_device eukrea_mbimx27_bl_dev = {
 +      .name                   = "generic-bl",
 +      .id                     = 1,
 +      .dev = {
 +              .platform_data  = &eukrea_mbimx27_bl_info,
 +      },
 +};
 +
 +static void eukrea_mbimx27_lcd_power_set(struct plat_lcd_data *pd,
 +                                 unsigned int power)
 +{
 +      if (power)
 +              gpio_direction_output(GPIO_PORTA | 25, 1);
 +      else
 +              gpio_direction_output(GPIO_PORTA | 25, 0);
 +}
 +
 +static struct plat_lcd_data eukrea_mbimx27_lcd_power_data = {
 +      .set_power              = eukrea_mbimx27_lcd_power_set,
 +};
 +
 +static struct platform_device eukrea_mbimx27_lcd_powerdev = {
 +      .name                   = "platform-lcd",
 +      .dev.platform_data      = &eukrea_mbimx27_lcd_power_data,
 +};
 +
+ static const struct imxuart_platform_data uart_pdata __initconst = {
+       .flags = IMXUART_HAVE_RTSCTS,
  };
  
 -#if defined(CONFIG_TOUCHSCREEN_ADS7846)
 +#if defined(CONFIG_TOUCHSCREEN_ADS7846) \
        || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
  
  #define ADS7846_PENDOWN (GPIO_PORTD | 25)
@@@ -297,15 -194,9 +289,15 @@@ static struct spi_board_info eukrea_mbi
        },
  };
  
 +static struct i2c_board_info eukrea_mbimx27_i2c_devices[] = {
 +      {
 +              I2C_BOARD_INFO("tlv320aic23", 0x1a),
 +      },
 +};
 +
  static int eukrea_mbimx27_spi_cs[] = {GPIO_PORTD | 28};
  
- static struct spi_imx_master eukrea_mbimx27_spi_0_data = {
+ static const struct spi_imx_master eukrea_mbimx27_spi0_data __initconst = {
        .chipselect     = eukrea_mbimx27_spi_cs,
        .num_chipselect = ARRAY_SIZE(eukrea_mbimx27_spi_cs),
  };
@@@ -334,52 -217,21 +326,52 @@@ void __init eukrea_mbimx27_baseboard_in
        mxc_gpio_setup_multiple_pins(eukrea_mbimx27_pins,
                ARRAY_SIZE(eukrea_mbimx27_pins), "MBIMX27");
  
-       mxc_register_device(&mxc_uart_device1, &uart_pdata[0]);
-       mxc_register_device(&mxc_uart_device2, &uart_pdata[1]);
 +#if defined(CONFIG_SND_SOC_EUKREA_TLV320) \
 +      || defined(CONFIG_SND_SOC_EUKREA_TLV320_MODULE)
 +      /* SSI unit master I2S codec connected to SSI_PINS_4*/
 +      mxc_audmux_v1_configure_port(MX27_AUDMUX_HPCR1_SSI0,
 +                      MXC_AUDMUX_V1_PCR_SYN |
 +                      MXC_AUDMUX_V1_PCR_TFSDIR |
 +                      MXC_AUDMUX_V1_PCR_TCLKDIR |
 +                      MXC_AUDMUX_V1_PCR_RFSDIR |
 +                      MXC_AUDMUX_V1_PCR_RCLKDIR |
 +                      MXC_AUDMUX_V1_PCR_TFCSEL(MX27_AUDMUX_HPCR3_SSI_PINS_4) |
 +                      MXC_AUDMUX_V1_PCR_RFCSEL(MX27_AUDMUX_HPCR3_SSI_PINS_4) |
 +                      MXC_AUDMUX_V1_PCR_RXDSEL(MX27_AUDMUX_HPCR3_SSI_PINS_4)
 +      );
 +      mxc_audmux_v1_configure_port(MX27_AUDMUX_HPCR3_SSI_PINS_4,
 +                      MXC_AUDMUX_V1_PCR_SYN |
 +                      MXC_AUDMUX_V1_PCR_RXDSEL(MX27_AUDMUX_HPCR1_SSI0)
 +      );
 +#endif
 +
-       mxc_register_device(&mxc_uart_device3, &uart_pdata[2]);
+       imx27_add_imx_uart1(&uart_pdata);
+       imx27_add_imx_uart2(&uart_pdata);
 +#if !defined(MACH_EUKREA_CPUIMX27_USEUART4)
++      imx27_add_imx_uart3(&uart_pdata);
 +#endif
  
        mxc_register_device(&mxc_fb_device, &eukrea_mbimx27_fb_data);
 -      mxc_register_device(&mxc_sdhc_device0, NULL);
 +      mxc_register_device(&mxc_sdhc_device0, &sdhc_pdata);
  
 -#if defined(CONFIG_TOUCHSCREEN_ADS7846)
 +      i2c_register_board_info(0, eukrea_mbimx27_i2c_devices,
 +                              ARRAY_SIZE(eukrea_mbimx27_i2c_devices));
 +
 +      mxc_register_device(&imx_ssi_device0, &eukrea_mbimx27_ssi_pdata);
 +
 +#if defined(CONFIG_TOUCHSCREEN_ADS7846) \
        || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
 -      /* SPI and ADS7846 Touchscreen controler init */
 -      mxc_gpio_mode(GPIO_PORTD | 28 | GPIO_GPIO | GPIO_OUT);
 +      /* ADS7846 Touchscreen controller init */
        mxc_gpio_mode(GPIO_PORTD | 25 | GPIO_GPIO | GPIO_IN);
-       mxc_register_device(&mxc_spi_device0, &eukrea_mbimx27_spi_0_data);
 +      ads7846_dev_init();
 +#endif
 +
 +#if defined(CONFIG_SPI_IMX) || defined(CONFIG_SPI_IMX_MODULE)
 +      /* SPI_CS0 init */
 +      mxc_gpio_mode(GPIO_PORTD | 28 | GPIO_GPIO | GPIO_OUT);
+       imx27_add_spi_imx0(&eukrea_mbimx27_spi0_data);
        spi_register_board_info(eukrea_mbimx27_spi_board_info,
                        ARRAY_SIZE(eukrea_mbimx27_spi_board_info));
 -      ads7846_dev_init();
  #endif
  
        /* Leds configuration */
index 55291787d5d1dd684becfd4118e9d0630bf0575c,09cc0c5c251352b3ffeeac14747144bbdd9be93a..2a135449e52c9dc1000e6da50368463ac5f0a241
  #include <mach/board-eukrea_cpuimx27.h>
  #include <mach/common.h>
  #include <mach/hardware.h>
- #include <mach/i2c.h>
  #include <mach/iomux-mx27.h>
- #include <mach/imx-uart.h>
  #include <mach/mxc_nand.h>
 +#include <mach/mxc_ehci.h>
 +#include <mach/ulpi.h>
  
+ #include "devices-imx27.h"
  #include "devices.h"
  
  static int eukrea_cpuimx27_pins[] = {
@@@ -162,11 -123,9 +158,11 @@@ cpuimx27_nand_board_info __initconst = 
  static struct platform_device *platform_devices[] __initdata = {
        &eukrea_cpuimx27_nor_mtd_device,
        &mxc_fec_device,
 +      &mxc_wdt,
 +      &mxc_w1_master_device,
  };
  
- static struct imxi2c_platform_data eukrea_cpuimx27_i2c_1_data = {
+ static const struct imxi2c_platform_data cpuimx27_i2c1_data __initconst = {
        .bitrate = 100000,
  };
  
@@@ -271,10 -197,8 +266,10 @@@ static void __init eukrea_cpuimx27_init
  #if defined(CONFIG_MACH_EUKREA_CPUIMX27_USESDHC2)
        /* SDHC2 can be used for Wifi */
        mxc_register_device(&mxc_sdhc_device1, NULL);
 +#endif
 +#if defined(MACH_EUKREA_CPUIMX27_USEUART4)
        /* in which case UART4 is also used for Bluetooth */
-       mxc_register_device(&mxc_uart_device3, &uart_pdata[1]);
+       imx27_add_imx_uart3(&uart_pdata);
  #endif
  
  #if defined(CONFIG_SERIAL_8250) || defined(CONFIG_SERIAL_8250_MODULE)
index 2164b7f96ef202aaaab2c78a3a76e4f542a1a60b,ff3cf1ef31b48bcc9f49fc7807fb203d7733bc25..6c92deaf468f6677559655fe366fba8aad97006c
@@@ -49,8 -44,8 +44,9 @@@
  #include <mach/mmc.h>
  #include <mach/mxc_ehci.h>
  #include <mach/ulpi.h>
 +#include <mach/imxfb.h>
  
+ #include "devices-imx27.h"
  #include "devices.h"
  
  #define OTG_PHY_CS_GPIO (GPIO_PORTB + 23)
@@@ -136,37 -127,9 +132,37 @@@ static int pca100_pins[] = 
        PD23_AF_USBH2_DATA2,
        PD24_AF_USBH2_DATA1,
        PD26_AF_USBH2_DATA5,
 +      /* display */
 +      PA5_PF_LSCLK,
 +      PA6_PF_LD0,
 +      PA7_PF_LD1,
 +      PA8_PF_LD2,
 +      PA9_PF_LD3,
 +      PA10_PF_LD4,
 +      PA11_PF_LD5,
 +      PA12_PF_LD6,
 +      PA13_PF_LD7,
 +      PA14_PF_LD8,
 +      PA15_PF_LD9,
 +      PA16_PF_LD10,
 +      PA17_PF_LD11,
 +      PA18_PF_LD12,
 +      PA19_PF_LD13,
 +      PA20_PF_LD14,
 +      PA21_PF_LD15,
 +      PA22_PF_LD16,
 +      PA23_PF_LD17,
 +      PA26_PF_PS,
 +      PA28_PF_HSYNC,
 +      PA29_PF_VSYNC,
 +      PA31_PF_OE_ACD,
 +      /* free GPIO */
 +      GPIO_PORTC | 31 | GPIO_GPIO | GPIO_IN, /* GPIO0_IRQ */
 +      GPIO_PORTC | 25 | GPIO_GPIO | GPIO_IN, /* GPIO1_IRQ */
 +      GPIO_PORTE | 5 | GPIO_GPIO | GPIO_IN, /* GPIO2_IRQ */
  };
  
- static struct imxuart_platform_data uart_pdata = {
+ static const struct imxuart_platform_data uart_pdata __initconst = {
        .flags = IMXUART_HAVE_RTSCTS,
  };
  
@@@ -222,9 -186,9 +219,9 @@@ static struct spi_board_info pca100_spi
        },
  };
  
 -static int pca100_spi_cs[] = {GPIO_PORTD + 28, GPIO_PORTD + 27};
 +static int pca100_spi_cs[] = {SPI1_SS0, SPI1_SS1};
  
- static struct spi_imx_master pca100_spi_0_data = {
+ static const struct spi_imx_master pca100_spi0_data __initconst = {
        .chipselect     = pca100_spi_cs,
        .num_chipselect = ARRAY_SIZE(pca100_spi_cs),
  };
@@@ -394,24 -317,33 +391,24 @@@ static void __init pca100_init(void
  
        mxc_register_device(&imx_ssi_device0, &pca100_ssi_pdata);
  
-       mxc_register_device(&mxc_uart_device0, &uart_pdata);
+       imx27_add_imx_uart0(&uart_pdata);
  
 -      mxc_gpio_mode(GPIO_PORTC | 29 | GPIO_GPIO | GPIO_IN);
        mxc_register_device(&mxc_sdhc_device1, &sdhc_pdata);
  
-       mxc_register_device(&imx27_nand_device, &pca100_nand_board_info);
+       imx27_add_mxc_nand(&pca100_nand_board_info);
  
        /* only the i2c master 1 is used on this CPU card */
        i2c_register_board_info(1, pca100_i2c_devices,
                                ARRAY_SIZE(pca100_i2c_devices));
  
-       mxc_register_device(&mxc_i2c_device1, &pca100_i2c_1_data);
+       imx27_add_i2c_imx1(&pca100_i2c1_data);
  
 -      mxc_gpio_mode(GPIO_PORTD | 28 | GPIO_GPIO | GPIO_OUT);
 -      mxc_gpio_mode(GPIO_PORTD | 27 | GPIO_GPIO | GPIO_OUT);
 -
 -      /* GPIO0_IRQ */
 -      mxc_gpio_mode(GPIO_PORTC | 31 | GPIO_GPIO | GPIO_IN);
 -      /* GPIO1_IRQ */
 -      mxc_gpio_mode(GPIO_PORTC | 25 | GPIO_GPIO | GPIO_IN);
 -      /* GPIO2_IRQ */
 -      mxc_gpio_mode(GPIO_PORTE | 5 | GPIO_GPIO | GPIO_IN);
 -
  #if defined(CONFIG_SPI_IMX) || defined(CONFIG_SPI_IMX_MODULE)
 +      mxc_gpio_mode(GPIO_PORTD | 28 | GPIO_GPIO | GPIO_IN);
 +      mxc_gpio_mode(GPIO_PORTD | 27 | GPIO_GPIO | GPIO_IN);
        spi_register_board_info(pca100_spi_board_info,
                                ARRAY_SIZE(pca100_spi_board_info));
-       mxc_register_device(&mxc_spi_device0, &pca100_spi_0_data);
+       imx27_add_spi_imx0(&pca100_spi_0_data);
  #endif
  
        gpio_request(OTG_PHY_CS_GPIO, "usb-otg-cs");
index afc17ce0bb54053beda95c47ea3a81c37c39fa75,0000000000000000000000000000000000000000..afc17ce0bb54053beda95c47ea3a81c37c39fa75
mode 100644,000000..100644
--- /dev/null
index 3a6668eebf9aa2f886de38369bbab4ceb890c712,febf8413100a5d6ee440ccbe0992ff3bcc8e1871..67e0b54218ae9ea89bdff476a869bfc0d731026d
@@@ -4,23 -4,7 +4,28 @@@ comment "MX25 platforms:
  
  config MACH_MX25_3DS
        bool "Support MX25PDK (3DS) Platform"
+       select IMX_HAVE_PLATFORM_IMX_UART
+       select IMX_HAVE_PLATFORM_MXC_NAND
  
 +config MACH_EUKREA_CPUIMX25
 +      bool "Support Eukrea CPUIMX25 Platform"
++      select IMX_HAVE_PLATFORM_IMX_I2C
++      select IMX_HAVE_PLATFORM_IMX_UART
++      select IMX_HAVE_PLATFORM_MXC_NAND
 +      select MXC_ULPI if USB_ULPI
 +
 +choice
 +      prompt "Baseboard"
 +      depends on MACH_EUKREA_CPUIMX25
 +      default MACH_EUKREA_MBIMXSD_BASEBOARD
 +
 +config MACH_EUKREA_MBIMXSD_BASEBOARD
 +      prompt "Eukrea MBIMXSD development board"
 +      bool
 +      help
 +        This adds board specific devices that can be found on Eukrea's
 +        MBIMXSD evaluation board.
 +
 +endchoice
 +
  endif
index 83ab5d805104cabddc449493440a8cb704c1fa9f,6db9603ad197799cb3b127abc7b6a5dc6610d326..87ffb9c2f90aaf843f5b9e66caeaf209ea2a00c4
@@@ -1,5 -1,3 +1,5 @@@
  obj-y                         := mm.o devices.o
  obj-$(CONFIG_ARCH_MX25)               += clock.o
- obj-$(CONFIG_MACH_MX25_3DS)   += mach-mx25pdk.o
+ obj-$(CONFIG_MACH_MX25_3DS)   += mach-mx25_3ds.o
 +obj-$(CONFIG_MACH_EUKREA_CPUIMX25)            += mach-cpuimx25.o
 +obj-$(CONFIG_MACH_EUKREA_MBIMXSD_BASEBOARD)   += eukrea_mbimxsd-baseboard.o
index 82d3e53f01f205fd9c327f6e0628b8522af710e6,6f98d23c82167084ce0ab8025de89362246ae920..3468eb15b2367fd1a4c197bf76d3b59af4b3372a
  #include <mach/mx25.h>
  #include <mach/irqs.h>
  
- static struct resource uart0[] = {
-       {
-               .start = 0x43f90000,
-               .end = 0x43f93fff,
-               .flags = IORESOURCE_MEM,
-       }, {
-               .start = 45,
-               .end = 45,
-               .flags = IORESOURCE_IRQ,
-       },
- };
- struct platform_device mxc_uart_device0 = {
-       .name = "imx-uart",
-       .id = 0,
-       .resource = uart0,
-       .num_resources = ARRAY_SIZE(uart0),
- };
- static struct resource uart1[] = {
-       {
-               .start = 0x43f94000,
-               .end = 0x43f97fff,
-               .flags = IORESOURCE_MEM,
-       }, {
-               .start = 32,
-               .end = 32,
-               .flags = IORESOURCE_IRQ,
-       },
- };
- struct platform_device mxc_uart_device1 = {
-       .name = "imx-uart",
-       .id = 1,
-       .resource = uart1,
-       .num_resources = ARRAY_SIZE(uart1),
- };
- static struct resource uart2[] = {
-       {
-               .start = 0x5000c000,
-               .end = 0x5000ffff,
-               .flags = IORESOURCE_MEM,
-       }, {
-               .start = 18,
-               .end = 18,
-               .flags = IORESOURCE_IRQ,
-       },
- };
- struct platform_device mxc_uart_device2 = {
-       .name = "imx-uart",
-       .id = 2,
-       .resource = uart2,
-       .num_resources = ARRAY_SIZE(uart2),
- };
- static struct resource uart3[] = {
-       {
-               .start = 0x50008000,
-               .end = 0x5000bfff,
-               .flags = IORESOURCE_MEM,
-       }, {
-               .start = 5,
-               .end = 5,
-               .flags = IORESOURCE_IRQ,
-       },
- };
- struct platform_device mxc_uart_device3 = {
-       .name = "imx-uart",
-       .id = 3,
-       .resource = uart3,
-       .num_resources = ARRAY_SIZE(uart3),
- };
- static struct resource uart4[] = {
-       {
-               .start = 0x5002c000,
-               .end = 0x5002ffff,
-               .flags = IORESOURCE_MEM,
-       }, {
-               .start = 40,
-               .end = 40,
-               .flags = IORESOURCE_IRQ,
-       },
- };
- struct platform_device mxc_uart_device4 = {
-       .name = "imx-uart",
-       .id = 4,
-       .resource = uart4,
-       .num_resources = ARRAY_SIZE(uart4),
- };
 -#define MX25_OTG_BASE_ADDR 0x53FF4000
--
  static u64 otg_dmamask = DMA_BIT_MASK(32);
  
  static struct resource mxc_otg_resources[] = {
Simple merge
index e0f0dfda4d0109669f8d6810ca62299312f51fd7,0000000000000000000000000000000000000000..f07b1f95ac7634611c48401e96aa80f24ffd3c22
mode 100644,000000..100644
--- /dev/null
@@@ -1,260 -1,0 +1,261 @@@
- static struct imxuart_platform_data uart_pdata = {
 +/*
 + * Copyright (C) 2010 Eric Benard - eric@eukrea.com
 + *
 + * Based on pcm970-baseboard.c which is :
 + * Copyright (C) 2008 Juergen Beisert (kernel@pengutronix.de)
 + *
 + * This program is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU General Public License
 + * as published by the Free Software Foundation; either version 2
 + * of the License, or (at your option) any later version.
 + * This program is distributed in the hope that it will be useful,
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 + * GNU General Public License for more details.
 + *
 + * You should have received a copy of the GNU General Public License
 + * along with this program; if not, write to the Free Software
 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 + * MA 02110-1301, USA.
 + */
 +
 +#include <linux/gpio.h>
 +#include <linux/leds.h>
 +#include <linux/platform_device.h>
 +#include <linux/gpio_keys.h>
 +#include <linux/input.h>
 +#include <video/platform_lcd.h>
 +
 +#include <mach/board-eukrea_cpuimx25.h>
 +#include <mach/hardware.h>
 +#include <mach/iomux-mx25.h>
 +#include <mach/common.h>
 +#include <asm/mach-types.h>
 +#include <asm/mach/arch.h>
 +#include <mach/mx25.h>
 +#include <mach/imx-uart.h>
 +#include <mach/imxfb.h>
 +#include <mach/ssi.h>
 +#include <mach/audmux.h>
 +
++#include "devices-imx25.h"
 +#include "devices.h"
 +
 +static struct pad_desc eukrea_mbimxsd_pads[] = {
 +      /* LCD */
 +      MX25_PAD_LD0__LD0,
 +      MX25_PAD_LD1__LD1,
 +      MX25_PAD_LD2__LD2,
 +      MX25_PAD_LD3__LD3,
 +      MX25_PAD_LD4__LD4,
 +      MX25_PAD_LD5__LD5,
 +      MX25_PAD_LD6__LD6,
 +      MX25_PAD_LD7__LD7,
 +      MX25_PAD_LD8__LD8,
 +      MX25_PAD_LD9__LD9,
 +      MX25_PAD_LD10__LD10,
 +      MX25_PAD_LD11__LD11,
 +      MX25_PAD_LD12__LD12,
 +      MX25_PAD_LD13__LD13,
 +      MX25_PAD_LD14__LD14,
 +      MX25_PAD_LD15__LD15,
 +      MX25_PAD_GPIO_E__LD16,
 +      MX25_PAD_GPIO_F__LD17,
 +      MX25_PAD_HSYNC__HSYNC,
 +      MX25_PAD_VSYNC__VSYNC,
 +      MX25_PAD_LSCLK__LSCLK,
 +      MX25_PAD_OE_ACD__OE_ACD,
 +      MX25_PAD_CONTRAST__CONTRAST,
 +      /* LCD_PWR */
 +      MX25_PAD_PWM__GPIO_1_26,
 +      /* LED */
 +      MX25_PAD_POWER_FAIL__GPIO_3_19,
 +      /* SWITCH */
 +      MX25_PAD_VSTBY_ACK__GPIO_3_18,
 +      /* UART2 */
 +      MX25_PAD_UART2_RTS__UART2_RTS,
 +      MX25_PAD_UART2_CTS__UART2_CTS,
 +      MX25_PAD_UART2_TXD__UART2_TXD,
 +      MX25_PAD_UART2_RXD__UART2_RXD,
 +      /* SD1 */
 +      MX25_PAD_SD1_CMD__SD1_CMD,
 +      MX25_PAD_SD1_CLK__SD1_CLK,
 +      MX25_PAD_SD1_DATA0__SD1_DATA0,
 +      MX25_PAD_SD1_DATA1__SD1_DATA1,
 +      MX25_PAD_SD1_DATA2__SD1_DATA2,
 +      MX25_PAD_SD1_DATA3__SD1_DATA3,
 +      /* SD1 CD */
 +      MX25_PAD_DE_B__GPIO_2_20,
 +      /* I2S */
 +      MX25_PAD_KPP_COL3__AUD5_TXFS,
 +      MX25_PAD_KPP_COL2__AUD5_TXC,
 +      MX25_PAD_KPP_COL1__AUD5_RXD,
 +      MX25_PAD_KPP_COL0__AUD5_TXD,
 +};
 +
 +#define GPIO_LED1     83
 +#define GPIO_SWITCH1  82
 +#define GPIO_SD1CD    52
 +#define GPIO_LCDPWR   26
 +
 +static struct imx_fb_videomode eukrea_mximxsd_modes[] = {
 +      {
 +              .mode   = {
 +                      .name           = "CMO-QVGA",
 +                      .refresh        = 60,
 +                      .xres           = 320,
 +                      .yres           = 240,
 +                      .pixclock       = KHZ2PICOS(6500),
 +                      .left_margin    = 30,
 +                      .right_margin   = 38,
 +                      .upper_margin   = 20,
 +                      .lower_margin   = 3,
 +                      .hsync_len      = 15,
 +                      .vsync_len      = 4,
 +              },
 +              .bpp    = 16,
 +              .pcr    = 0xCAD08B80,
 +      },
 +};
 +
 +static struct imx_fb_platform_data eukrea_mximxsd_fb_pdata = {
 +      .mode           = eukrea_mximxsd_modes,
 +      .num_modes      = ARRAY_SIZE(eukrea_mximxsd_modes),
 +      .pwmr           = 0x00A903FF,
 +      .lscr1          = 0x00120300,
 +      .dmacr          = 0x00040060,
 +};
 +
 +static void eukrea_mbimxsd_lcd_power_set(struct plat_lcd_data *pd,
 +                                 unsigned int power)
 +{
 +      if (power)
 +              gpio_direction_output(GPIO_LCDPWR, 1);
 +      else
 +              gpio_direction_output(GPIO_LCDPWR, 0);
 +}
 +
 +static struct plat_lcd_data eukrea_mbimxsd_lcd_power_data = {
 +      .set_power              = eukrea_mbimxsd_lcd_power_set,
 +};
 +
 +static struct platform_device eukrea_mbimxsd_lcd_powerdev = {
 +      .name                   = "platform-lcd",
 +      .dev.platform_data      = &eukrea_mbimxsd_lcd_power_data,
 +};
 +
 +static struct gpio_led eukrea_mbimxsd_leds[] = {
 +      {
 +              .name                   = "led1",
 +              .default_trigger        = "heartbeat",
 +              .active_low             = 1,
 +              .gpio                   = GPIO_LED1,
 +      },
 +};
 +
 +static struct gpio_led_platform_data eukrea_mbimxsd_led_info = {
 +      .leds           = eukrea_mbimxsd_leds,
 +      .num_leds       = ARRAY_SIZE(eukrea_mbimxsd_leds),
 +};
 +
 +static struct platform_device eukrea_mbimxsd_leds_gpio = {
 +      .name   = "leds-gpio",
 +      .id     = -1,
 +      .dev    = {
 +              .platform_data  = &eukrea_mbimxsd_led_info,
 +      },
 +};
 +
 +static struct gpio_keys_button eukrea_mbimxsd_gpio_buttons[] = {
 +      {
 +              .gpio           = GPIO_SWITCH1,
 +              .code           = BTN_0,
 +              .desc           = "BP1",
 +              .active_low     = 1,
 +              .wakeup         = 1,
 +      },
 +};
 +
 +static struct gpio_keys_platform_data eukrea_mbimxsd_button_data = {
 +      .buttons        = eukrea_mbimxsd_gpio_buttons,
 +      .nbuttons       = ARRAY_SIZE(eukrea_mbimxsd_gpio_buttons),
 +};
 +
 +static struct platform_device eukrea_mbimxsd_button_device = {
 +      .name           = "gpio-keys",
 +      .id             = -1,
 +      .num_resources  = 0,
 +      .dev            = {
 +              .platform_data  = &eukrea_mbimxsd_button_data,
 +      }
 +};
 +
 +static struct platform_device *platform_devices[] __initdata = {
 +      &eukrea_mbimxsd_leds_gpio,
 +      &eukrea_mbimxsd_button_device,
 +      &eukrea_mbimxsd_lcd_powerdev,
 +};
 +
-       mxc_register_device(&mxc_uart_device1, &uart_pdata);
++static const struct imxuart_platform_data uart_pdata __initconst = {
 +      .flags = IMXUART_HAVE_RTSCTS,
 +};
 +
 +static struct i2c_board_info eukrea_mbimxsd_i2c_devices[] = {
 +      {
 +              I2C_BOARD_INFO("tlv320aic23", 0x1a),
 +      },
 +};
 +
 +struct imx_ssi_platform_data eukrea_mbimxsd_ssi_pdata = {
 +      .flags = IMX_SSI_SYN | IMX_SSI_NET | IMX_SSI_USE_I2S_SLAVE,
 +};
 +
 +/*
 + * system init for baseboard usage. Will be called by cpuimx25 init.
 + *
 + * Add platform devices present on this baseboard and init
 + * them from CPU side as far as required to use them later on
 + */
 +void __init eukrea_mbimxsd_baseboard_init(void)
 +{
 +      if (mxc_iomux_v3_setup_multiple_pads(eukrea_mbimxsd_pads,
 +                      ARRAY_SIZE(eukrea_mbimxsd_pads)))
 +              printk(KERN_ERR "error setting mbimxsd pads !\n");
 +
 +#if defined(CONFIG_SND_SOC_EUKREA_TLV320)
 +      /* SSI unit master I2S codec connected to SSI_AUD5*/
 +      mxc_audmux_v2_configure_port(0,
 +                      MXC_AUDMUX_V2_PTCR_SYN |
 +                      MXC_AUDMUX_V2_PTCR_TFSDIR |
 +                      MXC_AUDMUX_V2_PTCR_TFSEL(4) |
 +                      MXC_AUDMUX_V2_PTCR_TCLKDIR |
 +                      MXC_AUDMUX_V2_PTCR_TCSEL(4),
 +                      MXC_AUDMUX_V2_PDCR_RXDSEL(4)
 +      );
 +      mxc_audmux_v2_configure_port(4,
 +                      MXC_AUDMUX_V2_PTCR_SYN,
 +                      MXC_AUDMUX_V2_PDCR_RXDSEL(0)
 +      );
 +#endif
 +
++      imx25_add_imx_uart1(&uart_pdata);
 +      mxc_register_device(&mx25_fb_device, &eukrea_mximxsd_fb_pdata);
 +      mxc_register_device(&imx_ssi_device0, &eukrea_mbimxsd_ssi_pdata);
 +
 +      gpio_request(GPIO_LED1, "LED1");
 +      gpio_direction_output(GPIO_LED1, 1);
 +      gpio_free(GPIO_LED1);
 +
 +      gpio_request(GPIO_SWITCH1, "SWITCH1");
 +      gpio_direction_input(GPIO_SWITCH1);
 +      gpio_free(GPIO_SWITCH1);
 +
 +      gpio_request(GPIO_LCDPWR, "LCDPWR");
 +      gpio_direction_output(GPIO_LCDPWR, 1);
 +      gpio_free(GPIO_SWITCH1);
 +
 +      i2c_register_board_info(0, eukrea_mbimxsd_i2c_devices,
 +                              ARRAY_SIZE(eukrea_mbimxsd_i2c_devices));
 +
 +      platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
 +}
index 4796484830a04e5189338632a2a66cf4e31c5ab6,0000000000000000000000000000000000000000..d39f9ccd4be090f3d94cae998829549d4dbacd86
mode 100644,000000..100644
--- /dev/null
@@@ -1,172 -1,0 +1,173 @@@
- #include <mach/imx-uart.h>
- #include <mach/i2c.h>
 +/*
 + * Copyright 2009 Sascha Hauer, <kernel@pengutronix.de>
 + * Copyright 2010 Eric Bénard - Eukréa Electromatique, <eric@eukrea.com>
 + *
 + * This program is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU General Public License
 + * as published by the Free Software Foundation; either version 2
 + * of the License, or (at your option) any later version.
 + * This program is distributed in the hope that it will be useful,
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 + * GNU General Public License for more details.
 + *
 + * You should have received a copy of the GNU General Public License
 + * along with this program; if not, write to the Free Software
 + * Foundation, Inc., 51 Franklin Street, Fifth Floor,
 + * Boston, MA  02110-1301, USA.
 + */
 +
 +#include <linux/types.h>
 +#include <linux/init.h>
 +#include <linux/delay.h>
 +#include <linux/clk.h>
 +#include <linux/irq.h>
 +#include <linux/gpio.h>
 +#include <linux/fec.h>
 +#include <linux/platform_device.h>
 +#include <linux/usb/otg.h>
 +#include <linux/usb/ulpi.h>
 +#include <linux/fsl_devices.h>
 +
 +#include <mach/board-eukrea_cpuimx25.h>
 +#include <mach/hardware.h>
 +#include <asm/mach-types.h>
 +#include <asm/mach/arch.h>
 +#include <asm/mach/time.h>
 +#include <asm/memory.h>
 +#include <asm/mach/map.h>
 +#include <mach/common.h>
- #include <mach/iomux-mx25.h>
 +#include <mach/mx25.h>
 +#include <mach/mxc_nand.h>
 +#include <mach/imxfb.h>
 +#include <mach/mxc_ehci.h>
 +#include <mach/ulpi.h>
++#include <mach/iomux-mx25.h>
 +
++#include "devices-imx25.h"
 +#include "devices.h"
- static struct imxuart_platform_data uart_pdata = {
 +
- static struct mxc_nand_platform_data eukrea_cpuimx25_nand_board_info = {
++static const struct imxuart_platform_data uart_pdata __initconst = {
 +      .flags = IMXUART_HAVE_RTSCTS,
 +};
 +
 +static struct pad_desc eukrea_cpuimx25_pads[] = {
 +      /* FEC - RMII */
 +      MX25_PAD_FEC_MDC__FEC_MDC,
 +      MX25_PAD_FEC_MDIO__FEC_MDIO,
 +      MX25_PAD_FEC_TDATA0__FEC_TDATA0,
 +      MX25_PAD_FEC_TDATA1__FEC_TDATA1,
 +      MX25_PAD_FEC_TX_EN__FEC_TX_EN,
 +      MX25_PAD_FEC_RDATA0__FEC_RDATA0,
 +      MX25_PAD_FEC_RDATA1__FEC_RDATA1,
 +      MX25_PAD_FEC_RX_DV__FEC_RX_DV,
 +      MX25_PAD_FEC_TX_CLK__FEC_TX_CLK,
 +      /* I2C1 */
 +      MX25_PAD_I2C1_CLK__I2C1_CLK,
 +      MX25_PAD_I2C1_DAT__I2C1_DAT,
 +};
 +
 +static struct fec_platform_data mx25_fec_pdata = {
 +      .phy    = PHY_INTERFACE_MODE_RMII,
 +};
 +
- static struct imxi2c_platform_data eukrea_cpuimx25_i2c_1_data = {
++static const struct mxc_nand_platform_data
++eukrea_cpuimx25_nand_board_info __initconst = {
 +      .width          = 1,
 +      .hw_ecc         = 1,
 +      .flash_bbt      = 1,
 +};
 +
-       mxc_register_device(&mxc_uart_device0, &uart_pdata);
-       mxc_register_device(&mxc_nand_device, &eukrea_cpuimx25_nand_board_info);
++static const struct imxi2c_platform_data
++eukrea_cpuimx25_i2c0_data __initconst = {
 +      .bitrate = 100000,
 +};
 +
 +static struct i2c_board_info eukrea_cpuimx25_i2c_devices[] = {
 +      {
 +              I2C_BOARD_INFO("pcf8563", 0x51),
 +      },
 +};
 +
 +static struct mxc_usbh_platform_data otg_pdata = {
 +      .portsc = MXC_EHCI_MODE_UTMI,
 +      .flags  = MXC_EHCI_INTERFACE_DIFF_UNI,
 +};
 +
 +static struct mxc_usbh_platform_data usbh2_pdata = {
 +      .portsc = MXC_EHCI_MODE_SERIAL,
 +      .flags  = MXC_EHCI_INTERFACE_SINGLE_UNI | MXC_EHCI_INTERNAL_PHY |
 +                MXC_EHCI_IPPUE_DOWN,
 +};
 +
 +static struct fsl_usb2_platform_data otg_device_pdata = {
 +      .operating_mode = FSL_USB2_DR_DEVICE,
 +      .phy_mode       = FSL_USB2_PHY_UTMI,
 +};
 +
 +static int otg_mode_host;
 +
 +static int __init eukrea_cpuimx25_otg_mode(char *options)
 +{
 +      if (!strcmp(options, "host"))
 +              otg_mode_host = 1;
 +      else if (!strcmp(options, "device"))
 +              otg_mode_host = 0;
 +      else
 +              pr_info("otg_mode neither \"host\" nor \"device\". "
 +                      "Defaulting to device\n");
 +      return 0;
 +}
 +__setup("otg_mode=", eukrea_cpuimx25_otg_mode);
 +
 +static void __init eukrea_cpuimx25_init(void)
 +{
 +      if (mxc_iomux_v3_setup_multiple_pads(eukrea_cpuimx25_pads,
 +                      ARRAY_SIZE(eukrea_cpuimx25_pads)))
 +              printk(KERN_ERR "error setting cpuimx25 pads !\n");
 +
-       mxc_register_device(&mxc_i2c_device0, &eukrea_cpuimx25_i2c_1_data);
++      imx25_add_imx_uart0(&uart_pdata);
++      imx25_add_mxc_nand(&eukrea_cpuimx25_nand_board_info);
 +      mxc_register_device(&mx25_rtc_device, NULL);
 +      mxc_register_device(&mx25_fec_device, &mx25_fec_pdata);
 +
 +      i2c_register_board_info(0, eukrea_cpuimx25_i2c_devices,
 +                              ARRAY_SIZE(eukrea_cpuimx25_i2c_devices));
++      imx25_add_imx_i2c0(&eukrea_cpuimx25_i2c0_data);
 +
 +#if defined(CONFIG_USB_ULPI)
 +      if (otg_mode_host) {
 +              otg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
 +                              USB_OTG_DRV_VBUS | USB_OTG_DRV_VBUS_EXT);
 +
 +              mxc_register_device(&mxc_otg, &otg_pdata);
 +      }
 +      mxc_register_device(&mxc_usbh2, &usbh2_pdata);
 +#endif
 +      if (!otg_mode_host)
 +              mxc_register_device(&otg_udc_device, &otg_device_pdata);
 +
 +#ifdef CONFIG_MACH_EUKREA_MBIMXSD_BASEBOARD
 +      eukrea_mbimxsd_baseboard_init();
 +#endif
 +}
 +
 +static void __init eukrea_cpuimx25_timer_init(void)
 +{
 +      mx25_clocks_init();
 +}
 +
 +static struct sys_timer eukrea_cpuimx25_timer = {
 +      .init   = eukrea_cpuimx25_timer_init,
 +};
 +
 +MACHINE_START(EUKREA_CPUIMX25, "Eukrea CPUIMX25")
 +      /* Maintainer: Eukrea Electromatique */
 +      .phys_io        = MX25_AIPS1_BASE_ADDR,
 +      .io_pg_offst    = ((MX25_AIPS1_BASE_ADDR_VIRT) >> 18) & 0xfffc,
 +      .boot_params    = MX25_PHYS_OFFSET + 0x100,
 +      .map_io         = mx25_map_io,
 +      .init_irq       = mx25_init_irq,
 +      .init_machine   = eukrea_cpuimx25_init,
 +      .timer          = &eukrea_cpuimx25_timer,
 +MACHINE_END
index ba3fbef1c41f85c0d778d64c892f299d48281451,978ad00b807c39ceafed212fb582ea41afd84402..62bc21f11a714aa46df5e439d4965f340d59460a
@@@ -177,12 -149,11 +184,12 @@@ static void __init mx25pdk_init(void
        mxc_iomux_v3_setup_multiple_pads(mx25pdk_pads,
                        ARRAY_SIZE(mx25pdk_pads));
  
-       mxc_register_device(&mxc_uart_device0, &uart_pdata);
+       imx25_add_imx_uart0(&uart_pdata);
        mxc_register_device(&mxc_usbh2, NULL);
-       mxc_register_device(&mxc_nand_device, &mx25pdk_nand_board_info);
+       imx25_add_mxc_nand(&mx25pdk_nand_board_info);
        mxc_register_device(&mx25_rtc_device, NULL);
        mxc_register_device(&mx25_fb_device, &mx25pdk_fb_pdata);
 +      mxc_register_device(&mxc_wdt, NULL);
  
        mx25pdk_fec_reset();
        mxc_register_device(&mx25_fec_device, &mx25_fec_pdata);
index b09e9a94adf1d43c2b0d708ab3b4866e2f51dc5e,594502a4e5741cd058ade68417fef24081c3012f..a11112afde5e5675477ce738e8a1a835cf0d4263
@@@ -125,26 -151,4 +151,29 @@@ config MACH_KZM_ARM11_0
          Include support for KZM-ARM11-01. This includes specific
          configurations for the board and its peripherals.
  
 +config MACH_EUKREA_CPUIMX35
 +      bool "Support Eukrea CPUIMX35 Platform"
 +      select ARCH_MX35
++      select IMX_HAVE_PLATFORM_IMX_UART
++      select IMX_HAVE_PLATFORM_IMX_I2C
++      select IMX_HAVE_PLATFORM_MXC_NAND
 +      select MXC_ULPI if USB_ULPI
 +      help
 +        Include support for Eukrea CPUIMX35 platform. This includes
 +        specific configurations for the board and its peripherals.
 +
 +choice
 +      prompt "Baseboard"
 +      depends on MACH_EUKREA_CPUIMX35
 +      default MACH_EUKREA_MBIMXSD_BASEBOARD
 +
 +config MACH_EUKREA_MBIMXSD_BASEBOARD
 +      prompt "Eukrea MBIMXSD development board"
 +      bool
 +      help
 +        This adds board specific devices that can be found on Eukrea's
 +        MBIMXSD evaluation board.
 +
 +endchoice
 +
  endif
index ef68ff55a7b6bc75369113de0475f6dd859f972d,2a4798d26f23b98113efcfe8c1f703fe53846530..54bc935acdc6b95cecf3452806e3e10b80a613ba
@@@ -22,7 -22,5 +22,7 @@@ obj-$(CONFIG_MACH_MX31MOBOARD)        += mach-
  obj-$(CONFIG_MACH_QONG)               += mach-qong.o
  obj-$(CONFIG_MACH_PCM043)     += mach-pcm043.o
  obj-$(CONFIG_MACH_ARMADILLO5X0) += mach-armadillo5x0.o
- obj-$(CONFIG_MACH_MX35_3DS)   += mach-mx35pdk.o
+ obj-$(CONFIG_MACH_MX35_3DS)   += mach-mx35_3ds.o
  obj-$(CONFIG_MACH_KZM_ARM11_01)       += mach-kzm_arm11_01.o
 +obj-$(CONFIG_MACH_EUKREA_CPUIMX35)    += mach-cpuimx35.o
 +obj-$(CONFIG_MACH_EUKREA_MBIMXSD_BASEBOARD)   += eukrea_mbimxsd-baseboard.o
index 678597852443de0eb456b6b708d4aad574516c3f,0000000000000000000000000000000000000000..368a603accfe87c69f7fb3df2c377993e1a7f8a7
mode 100644,000000..100644
--- /dev/null
@@@ -1,263 -1,0 +1,264 @@@
- static struct imxuart_platform_data uart_pdata = {
 +/*
 + * Copyright (C) 2010 Eric Benard - eric@eukrea.com
 + *
 + * Based on pcm970-baseboard.c which is :
 + * Copyright (C) 2008 Juergen Beisert (kernel@pengutronix.de)
 + *
 + * This program is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU General Public License
 + * as published by the Free Software Foundation; either version 2
 + * of the License, or (at your option) any later version.
 + * This program is distributed in the hope that it will be useful,
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 + * GNU General Public License for more details.
 + *
 + * You should have received a copy of the GNU General Public License
 + * along with this program; if not, write to the Free Software
 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 + * MA 02110-1301, USA.
 + */
 +
 +#include <linux/types.h>
 +#include <linux/init.h>
 +
 +#include <linux/gpio.h>
 +#include <linux/interrupt.h>
 +#include <linux/leds.h>
 +#include <linux/platform_device.h>
 +#include <linux/gpio_keys.h>
 +#include <linux/input.h>
 +#include <video/platform_lcd.h>
 +#include <linux/i2c.h>
 +
 +#include <asm/mach-types.h>
 +#include <asm/mach/arch.h>
 +#include <asm/mach/time.h>
 +#include <asm/mach/map.h>
 +
 +#include <mach/board-eukrea_cpuimx35.h>
 +#include <mach/hardware.h>
 +#include <mach/common.h>
 +#include <mach/imx-uart.h>
 +#include <mach/iomux-mx35.h>
 +#include <mach/ipu.h>
 +#include <mach/mx3fb.h>
 +#include <mach/audmux.h>
 +#include <mach/ssi.h>
 +
++#include "devices-imx35.h"
 +#include "devices.h"
 +
 +static const struct fb_videomode fb_modedb[] = {
 +      {
 +              .name           = "CMO_QVGA",
 +              .refresh        = 60,
 +              .xres           = 320,
 +              .yres           = 240,
 +              .pixclock       = KHZ2PICOS(6500),
 +              .left_margin    = 68,
 +              .right_margin   = 20,
 +              .upper_margin   = 15,
 +              .lower_margin   = 4,
 +              .hsync_len      = 30,
 +              .vsync_len      = 3,
 +              .sync           = 0,
 +              .vmode          = FB_VMODE_NONINTERLACED,
 +              .flag           = 0,
 +      },
 +};
 +
 +static struct ipu_platform_data mx3_ipu_data = {
 +      .irq_base = MXC_IPU_IRQ_START,
 +};
 +
 +static struct mx3fb_platform_data mx3fb_pdata = {
 +      .dma_dev        = &mx3_ipu.dev,
 +      .name           = "CMO_QVGA",
 +      .mode           = fb_modedb,
 +      .num_modes      = ARRAY_SIZE(fb_modedb),
 +};
 +
 +static struct pad_desc eukrea_mbimxsd_pads[] = {
 +      /* LCD */
 +      MX35_PAD_LD0__IPU_DISPB_DAT_0,
 +      MX35_PAD_LD1__IPU_DISPB_DAT_1,
 +      MX35_PAD_LD2__IPU_DISPB_DAT_2,
 +      MX35_PAD_LD3__IPU_DISPB_DAT_3,
 +      MX35_PAD_LD4__IPU_DISPB_DAT_4,
 +      MX35_PAD_LD5__IPU_DISPB_DAT_5,
 +      MX35_PAD_LD6__IPU_DISPB_DAT_6,
 +      MX35_PAD_LD7__IPU_DISPB_DAT_7,
 +      MX35_PAD_LD8__IPU_DISPB_DAT_8,
 +      MX35_PAD_LD9__IPU_DISPB_DAT_9,
 +      MX35_PAD_LD10__IPU_DISPB_DAT_10,
 +      MX35_PAD_LD11__IPU_DISPB_DAT_11,
 +      MX35_PAD_LD12__IPU_DISPB_DAT_12,
 +      MX35_PAD_LD13__IPU_DISPB_DAT_13,
 +      MX35_PAD_LD14__IPU_DISPB_DAT_14,
 +      MX35_PAD_LD15__IPU_DISPB_DAT_15,
 +      MX35_PAD_LD16__IPU_DISPB_DAT_16,
 +      MX35_PAD_LD17__IPU_DISPB_DAT_17,
 +      MX35_PAD_D3_HSYNC__IPU_DISPB_D3_HSYNC,
 +      MX35_PAD_D3_FPSHIFT__IPU_DISPB_D3_CLK,
 +      MX35_PAD_D3_DRDY__IPU_DISPB_D3_DRDY,
 +      MX35_PAD_D3_VSYNC__IPU_DISPB_D3_VSYNC,
 +      /* Backlight */
 +      MX35_PAD_CONTRAST__IPU_DISPB_CONTR,
 +      /* LCD_PWR */
 +      MX35_PAD_D3_CLS__GPIO1_4,
 +      /* LED */
 +      MX35_PAD_LD23__GPIO3_29,
 +      /* SWITCH */
 +      MX35_PAD_LD19__GPIO3_25,
 +      /* UART2 */
 +      MX35_PAD_CTS2__UART2_CTS,
 +      MX35_PAD_RTS2__UART2_RTS,
 +      MX35_PAD_TXD2__UART2_TXD_MUX,
 +      MX35_PAD_RXD2__UART2_RXD_MUX,
 +      /* I2S */
 +      MX35_PAD_STXFS4__AUDMUX_AUD4_TXFS,
 +      MX35_PAD_STXD4__AUDMUX_AUD4_TXD,
 +      MX35_PAD_SRXD4__AUDMUX_AUD4_RXD,
 +      MX35_PAD_SCK4__AUDMUX_AUD4_TXC,
 +};
 +
 +#define GPIO_LED1     (2 * 32 + 29)
 +#define GPIO_SWITCH1  (2 * 32 + 25)
 +#define GPIO_LCDPWR   (4)
 +
 +static void eukrea_mbimxsd_lcd_power_set(struct plat_lcd_data *pd,
 +                                 unsigned int power)
 +{
 +      if (power)
 +              gpio_direction_output(GPIO_LCDPWR, 1);
 +      else
 +              gpio_direction_output(GPIO_LCDPWR, 0);
 +}
 +
 +static struct plat_lcd_data eukrea_mbimxsd_lcd_power_data = {
 +      .set_power              = eukrea_mbimxsd_lcd_power_set,
 +};
 +
 +static struct platform_device eukrea_mbimxsd_lcd_powerdev = {
 +      .name                   = "platform-lcd",
 +      .dev.platform_data      = &eukrea_mbimxsd_lcd_power_data,
 +};
 +
 +static struct gpio_led eukrea_mbimxsd_leds[] = {
 +      {
 +              .name                   = "led1",
 +              .default_trigger        = "heartbeat",
 +              .active_low             = 1,
 +              .gpio                   = GPIO_LED1,
 +      },
 +};
 +
 +static struct gpio_led_platform_data eukrea_mbimxsd_led_info = {
 +      .leds           = eukrea_mbimxsd_leds,
 +      .num_leds       = ARRAY_SIZE(eukrea_mbimxsd_leds),
 +};
 +
 +static struct platform_device eukrea_mbimxsd_leds_gpio = {
 +      .name   = "leds-gpio",
 +      .id     = -1,
 +      .dev    = {
 +              .platform_data  = &eukrea_mbimxsd_led_info,
 +      },
 +};
 +
 +static struct gpio_keys_button eukrea_mbimxsd_gpio_buttons[] = {
 +      {
 +              .gpio           = GPIO_SWITCH1,
 +              .code           = BTN_0,
 +              .desc           = "BP1",
 +              .active_low     = 1,
 +              .wakeup         = 1,
 +      },
 +};
 +
 +static struct gpio_keys_platform_data eukrea_mbimxsd_button_data = {
 +      .buttons        = eukrea_mbimxsd_gpio_buttons,
 +      .nbuttons       = ARRAY_SIZE(eukrea_mbimxsd_gpio_buttons),
 +};
 +
 +static struct platform_device eukrea_mbimxsd_button_device = {
 +      .name           = "gpio-keys",
 +      .id             = -1,
 +      .num_resources  = 0,
 +      .dev            = {
 +              .platform_data  = &eukrea_mbimxsd_button_data,
 +      }
 +};
 +
 +static struct platform_device *platform_devices[] __initdata = {
 +      &eukrea_mbimxsd_leds_gpio,
 +      &eukrea_mbimxsd_button_device,
 +      &eukrea_mbimxsd_lcd_powerdev,
 +};
 +
-       mxc_register_device(&mxc_uart_device1, &uart_pdata);
++static const struct imxuart_platform_data uart_pdata __initconst = {
 +      .flags = IMXUART_HAVE_RTSCTS,
 +};
 +
 +static struct i2c_board_info eukrea_mbimxsd_i2c_devices[] = {
 +      {
 +              I2C_BOARD_INFO("tlv320aic23", 0x1a),
 +      },
 +};
 +
 +struct imx_ssi_platform_data eukrea_mbimxsd_ssi_pdata = {
 +      .flags = IMX_SSI_SYN | IMX_SSI_NET | IMX_SSI_USE_I2S_SLAVE,
 +};
 +
 +/*
 + * system init for baseboard usage. Will be called by cpuimx35 init.
 + *
 + * Add platform devices present on this baseboard and init
 + * them from CPU side as far as required to use them later on
 + */
 +void __init eukrea_mbimxsd_baseboard_init(void)
 +{
 +      if (mxc_iomux_v3_setup_multiple_pads(eukrea_mbimxsd_pads,
 +                      ARRAY_SIZE(eukrea_mbimxsd_pads)))
 +              printk(KERN_ERR "error setting mbimxsd pads !\n");
 +
 +#if defined(CONFIG_SND_SOC_EUKREA_TLV320)
 +      /* SSI unit master I2S codec connected to SSI_AUD4 */
 +      mxc_audmux_v2_configure_port(0,
 +                      MXC_AUDMUX_V2_PTCR_SYN |
 +                      MXC_AUDMUX_V2_PTCR_TFSDIR |
 +                      MXC_AUDMUX_V2_PTCR_TFSEL(3) |
 +                      MXC_AUDMUX_V2_PTCR_TCLKDIR |
 +                      MXC_AUDMUX_V2_PTCR_TCSEL(3),
 +                      MXC_AUDMUX_V2_PDCR_RXDSEL(3)
 +      );
 +      mxc_audmux_v2_configure_port(3,
 +                      MXC_AUDMUX_V2_PTCR_SYN,
 +                      MXC_AUDMUX_V2_PDCR_RXDSEL(0)
 +      );
 +#endif
 +
++      imx35_add_imx_uart1(&uart_pdata);
 +      mxc_register_device(&mx3_ipu, &mx3_ipu_data);
 +      mxc_register_device(&mx3_fb, &mx3fb_pdata);
 +
 +      mxc_register_device(&imx_ssi_device0, &eukrea_mbimxsd_ssi_pdata);
 +
 +      gpio_request(GPIO_LED1, "LED1");
 +      gpio_direction_output(GPIO_LED1, 1);
 +      gpio_free(GPIO_LED1);
 +
 +      gpio_request(GPIO_SWITCH1, "SWITCH1");
 +      gpio_direction_input(GPIO_SWITCH1);
 +      gpio_free(GPIO_SWITCH1);
 +
 +      gpio_request(GPIO_LCDPWR, "LCDPWR");
 +      gpio_direction_output(GPIO_LCDPWR, 1);
 +      gpio_free(GPIO_SWITCH1);
 +
 +      i2c_register_board_info(0, eukrea_mbimxsd_i2c_devices,
 +                              ARRAY_SIZE(eukrea_mbimxsd_i2c_devices));
 +
 +      platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
 +}
index 55caa5cb8bc70cd7d1dee2a5e53955915bd99ece,0000000000000000000000000000000000000000..4f6146d31328a019f5a1a728a4a6a00d520f7643
mode 100644,000000..100644
--- /dev/null
@@@ -1,226 -1,0 +1,227 @@@
- #include <mach/imx-uart.h>
- #include <mach/i2c.h>
 +/*
 + * Copyright (C) 2010 Eric Benard - eric@eukrea.com
 + * Copyright (C) 2009 Sascha Hauer, Pengutronix
 + *
 + * This program is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License as published by
 + * the Free Software Foundation; either version 2 of the License, or
 + * (at your option) any later version.
 + *
 + * This program is distributed in the hope that it will be useful,
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 + * GNU General Public License for more details.
 + *
 + * You should have received a copy of the GNU General Public License
 + * along with this program; if not, write to the Free Software
 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 + */
 +
 +#include <linux/types.h>
 +#include <linux/init.h>
 +
 +#include <linux/platform_device.h>
 +#include <linux/mtd/physmap.h>
 +#include <linux/memory.h>
 +#include <linux/gpio.h>
 +#include <linux/interrupt.h>
 +#include <linux/delay.h>
 +#include <linux/i2c.h>
 +#include <linux/i2c/tsc2007.h>
 +#include <linux/usb/otg.h>
 +#include <linux/usb/ulpi.h>
 +#include <linux/fsl_devices.h>
 +
 +#include <asm/mach-types.h>
 +#include <asm/mach/arch.h>
 +#include <asm/mach/time.h>
 +#include <asm/mach/map.h>
 +
 +#include <mach/board-eukrea_cpuimx35.h>
 +#include <mach/hardware.h>
 +#include <mach/common.h>
- static struct imxuart_platform_data uart_pdata = {
 +#include <mach/iomux-mx35.h>
 +#include <mach/mxc_nand.h>
 +#include <mach/mxc_ehci.h>
 +#include <mach/ulpi.h>
 +
++#include "devices-imx35.h"
 +#include "devices.h"
 +
- static struct imxi2c_platform_data eukrea_cpuimx35_i2c_1_data = {
++static const struct imxuart_platform_data uart_pdata __initconst = {
 +      .flags = IMXUART_HAVE_RTSCTS,
 +};
 +
- static struct mxc_nand_platform_data pcm037_nand_board_info = {
++static const struct imxi2c_platform_data
++eukrea_cpuimx35_i2c0_data __initconst = {
 +      .bitrate = 50000,
 +};
 +
 +#define TSC2007_IRQGPIO               (2 * 32 + 2)
 +static int ts_get_pendown_state(void)
 +{
 +      int val = 0;
 +      gpio_free(TSC2007_IRQGPIO);
 +      gpio_request(TSC2007_IRQGPIO, NULL);
 +      gpio_direction_input(TSC2007_IRQGPIO);
 +
 +      val = gpio_get_value(TSC2007_IRQGPIO);
 +
 +      gpio_free(TSC2007_IRQGPIO);
 +      gpio_request(TSC2007_IRQGPIO, NULL);
 +
 +      return val ? 0 : 1;
 +}
 +
 +static int ts_init(void)
 +{
 +      gpio_request(TSC2007_IRQGPIO, NULL);
 +      return 0;
 +}
 +
 +static struct tsc2007_platform_data tsc2007_info = {
 +      .model                  = 2007,
 +      .x_plate_ohms           = 180,
 +      .get_pendown_state      = ts_get_pendown_state,
 +      .init_platform_hw       = ts_init,
 +};
 +
 +static struct i2c_board_info eukrea_cpuimx35_i2c_devices[] = {
 +      {
 +              I2C_BOARD_INFO("pcf8563", 0x51),
 +      }, {
 +              I2C_BOARD_INFO("tsc2007", 0x48),
 +              .type           = "tsc2007",
 +              .platform_data  = &tsc2007_info,
 +              .irq            = gpio_to_irq(TSC2007_IRQGPIO),
 +      },
 +};
 +
 +static struct platform_device *devices[] __initdata = {
 +      &mxc_fec_device,
 +      &imx_wdt_device0,
 +};
 +
 +static struct pad_desc eukrea_cpuimx35_pads[] = {
 +      /* UART1 */
 +      MX35_PAD_CTS1__UART1_CTS,
 +      MX35_PAD_RTS1__UART1_RTS,
 +      MX35_PAD_TXD1__UART1_TXD_MUX,
 +      MX35_PAD_RXD1__UART1_RXD_MUX,
 +      /* FEC */
 +      MX35_PAD_FEC_TX_CLK__FEC_TX_CLK,
 +      MX35_PAD_FEC_RX_CLK__FEC_RX_CLK,
 +      MX35_PAD_FEC_RX_DV__FEC_RX_DV,
 +      MX35_PAD_FEC_COL__FEC_COL,
 +      MX35_PAD_FEC_RDATA0__FEC_RDATA_0,
 +      MX35_PAD_FEC_TDATA0__FEC_TDATA_0,
 +      MX35_PAD_FEC_TX_EN__FEC_TX_EN,
 +      MX35_PAD_FEC_MDC__FEC_MDC,
 +      MX35_PAD_FEC_MDIO__FEC_MDIO,
 +      MX35_PAD_FEC_TX_ERR__FEC_TX_ERR,
 +      MX35_PAD_FEC_RX_ERR__FEC_RX_ERR,
 +      MX35_PAD_FEC_CRS__FEC_CRS,
 +      MX35_PAD_FEC_RDATA1__FEC_RDATA_1,
 +      MX35_PAD_FEC_TDATA1__FEC_TDATA_1,
 +      MX35_PAD_FEC_RDATA2__FEC_RDATA_2,
 +      MX35_PAD_FEC_TDATA2__FEC_TDATA_2,
 +      MX35_PAD_FEC_RDATA3__FEC_RDATA_3,
 +      MX35_PAD_FEC_TDATA3__FEC_TDATA_3,
 +      /* I2C1 */
 +      MX35_PAD_I2C1_CLK__I2C1_SCL,
 +      MX35_PAD_I2C1_DAT__I2C1_SDA,
 +      /* TSC2007 IRQ */
 +      MX35_PAD_ATA_DA2__GPIO3_2,
 +};
 +
-       mxc_register_device(&mxc_uart_device0, &uart_pdata);
-       mxc_register_device(&mxc_nand_device, &pcm037_nand_board_info);
++static const struct mxc_nand_platform_data
++eukrea_cpuimx35_nand_board_info __initconst = {
 +      .width          = 1,
 +      .hw_ecc         = 1,
 +      .flash_bbt      = 1,
 +};
 +
 +static struct mxc_usbh_platform_data otg_pdata = {
 +      .portsc = MXC_EHCI_MODE_UTMI,
 +      .flags  = MXC_EHCI_INTERFACE_DIFF_UNI,
 +};
 +
 +static struct mxc_usbh_platform_data usbh1_pdata = {
 +      .portsc = MXC_EHCI_MODE_SERIAL,
 +      .flags  = MXC_EHCI_INTERFACE_SINGLE_UNI | MXC_EHCI_INTERNAL_PHY |
 +                MXC_EHCI_IPPUE_DOWN,
 +};
 +
 +static struct fsl_usb2_platform_data otg_device_pdata = {
 +      .operating_mode = FSL_USB2_DR_DEVICE,
 +      .phy_mode       = FSL_USB2_PHY_UTMI,
 +};
 +
 +static int otg_mode_host;
 +
 +static int __init eukrea_cpuimx35_otg_mode(char *options)
 +{
 +      if (!strcmp(options, "host"))
 +              otg_mode_host = 1;
 +      else if (!strcmp(options, "device"))
 +              otg_mode_host = 0;
 +      else
 +              pr_info("otg_mode neither \"host\" nor \"device\". "
 +                      "Defaulting to device\n");
 +      return 0;
 +}
 +__setup("otg_mode=", eukrea_cpuimx35_otg_mode);
 +
 +/*
 + * Board specific initialization.
 + */
 +static void __init mxc_board_init(void)
 +{
 +      mxc_iomux_v3_setup_multiple_pads(eukrea_cpuimx35_pads,
 +                      ARRAY_SIZE(eukrea_cpuimx35_pads));
 +
 +      platform_add_devices(devices, ARRAY_SIZE(devices));
 +
-       mxc_register_device(&mxc_i2c_device0, &eukrea_cpuimx35_i2c_1_data);
++      imx35_add_imx_uart0(&uart_pdata);
++      imx35_add_mxc_nand(&eukrea_cpuimx35_nand_board_info);
 +
 +      i2c_register_board_info(0, eukrea_cpuimx35_i2c_devices,
 +                      ARRAY_SIZE(eukrea_cpuimx35_i2c_devices));
++      imx35_add_imx_i2c0(&eukrea_cpuimx35_i2c0_data);
 +
 +#if defined(CONFIG_USB_ULPI)
 +      if (otg_mode_host) {
 +              otg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
 +                              USB_OTG_DRV_VBUS | USB_OTG_DRV_VBUS_EXT);
 +
 +              mxc_register_device(&mxc_otg_host, &otg_pdata);
 +      }
 +      mxc_register_device(&mxc_usbh1, &usbh1_pdata);
 +#endif
 +      if (!otg_mode_host)
 +              mxc_register_device(&mxc_otg_udc_device, &otg_device_pdata);
 +
 +#ifdef CONFIG_MACH_EUKREA_MBIMXSD_BASEBOARD
 +      eukrea_mbimxsd_baseboard_init();
 +#endif
 +}
 +
 +static void __init eukrea_cpuimx35_timer_init(void)
 +{
 +      mx35_clocks_init();
 +}
 +
 +struct sys_timer eukrea_cpuimx35_timer = {
 +      .init   = eukrea_cpuimx35_timer_init,
 +};
 +
 +MACHINE_START(EUKREA_CPUIMX35, "Eukrea CPUIMX35")
 +      /* Maintainer: Eukrea Electromatique */
 +      .phys_io        = MX35_AIPS1_BASE_ADDR,
 +      .io_pg_offst    = ((MX35_AIPS1_BASE_ADDR_VIRT) >> 18) & 0xfffc,
 +      .boot_params    = MX3x_PHYS_OFFSET + 0x100,
 +      .map_io         = mx35_map_io,
 +      .init_irq       = mx35_init_irq,
 +      .init_machine   = mxc_board_init,
 +      .timer          = &eukrea_cpuimx35_timer,
 +MACHINE_END
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 7516f2949afe9f31a801d0aef07b63bb77b97761,ca95b1ed5fea0b59018fe0532279e4cffc75d48c..2f2aad1032c120dab713731f20ff04350ea5e79a
  
  #define MX25_UART1_BASE_ADDR          0x43f90000
  #define MX25_UART2_BASE_ADDR          0x43f94000
 +#define MX25_AUDMUX_BASE_ADDR         0x43fb0000
+ #define MX25_UART3_BASE_ADDR          0x5000c000
+ #define MX25_UART4_BASE_ADDR          0x50008000
+ #define MX25_UART5_BASE_ADDR          0x5002c000
  
+ #define MX25_CSPI3_BASE_ADDR          0x50004000
+ #define MX25_CSPI2_BASE_ADDR          0x50010000
  #define MX25_FEC_BASE_ADDR            0x50038000
 +#define MX25_SSI2_BASE_ADDR           0x50014000
 +#define MX25_SSI1_BASE_ADDR           0x50034000
  #define MX25_NFC_BASE_ADDR            0xbb000000
  #define MX25_DRYICE_BASE_ADDR         0x53ffc000
  #define MX25_LCDC_BASE_ADDR           0x53fbc000
 +#define MX25_KPP_BASE_ADDR            0x43fa8000
 +#define MX25_OTG_BASE_ADDR            0x53ff4000
 +#define MX25_CSI_BASE_ADDR            0x53ff8000
  
- #define MX25_INT_SSI2 11
- #define MX25_INT_SSI1 12
- #define MX25_INT_CSI  17
- #define MX25_INT_DRYICE       25
- #define MX25_INT_NANDFC       33
- #define MX25_INT_LCDC 39
- #define MX25_INT_KPP  24
- #define MX25_INT_FEC  57
+ #define MX25_INT_CSPI3                0
+ #define MX25_INT_I2C1         3
+ #define MX25_INT_I2C2         4
+ #define MX25_INT_UART4                5
+ #define MX25_INT_I2C3         10
++#define MX25_INT_SSI2         11
++#define MX25_INT_SSI1         12
+ #define MX25_INT_CSPI2                13
+ #define MX25_INT_CSPI1                14
++#define MX25_INT_CSI          17
+ #define MX25_INT_UART3                18
++#define MX25_INT_KPP          24
+ #define MX25_INT_DRYICE               25
+ #define MX25_INT_UART2                32
+ #define MX25_INT_NANDFC               33
+ #define MX25_INT_LCDC         39
+ #define MX25_INT_UART5                40
+ #define MX25_INT_UART1                45
+ #define MX25_INT_FEC          57
  
  #if defined(IMX_NEEDS_DEPRECATED_SYMBOLS)
  #define UART1_BASE_ADDR                       MX25_UART1_BASE_ADDR
index 2d74748c5db73e38ce2e3ee7e81267ded6f63f92,28988c7365f522986c6b9d83bb5d8f45475df9ae..04c0d060d8143ae4c60d526a6198178f2e02bccb
  #ifndef __ASM_ARCH_NAND_H
  #define __ASM_ARCH_NAND_H
  
 +#include <linux/mtd/partitions.h>
 +
  struct mxc_nand_platform_data {
-       int width;      /* data bus width in bytes */
-       int hw_ecc:1;   /* 0 if supress hardware ECC */
-       int flash_bbt:1; /* set to 1 to use a flash based bbt */
+       unsigned int width;     /* data bus width in bytes */
+       unsigned int hw_ecc:1;  /* 0 if supress hardware ECC */
+       unsigned int flash_bbt:1; /* set to 1 to use a flash based bbt */
 +      struct mtd_partition *parts;    /* partition table */
 +      int nr_parts;                   /* size of parts */
  };
  #endif /* __ASM_ARCH_NAND_H */
Simple merge