OSDN Git Service

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
@@@ -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
  
  #include "devices.h"
  
+ #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
 +
  /*
-  * 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
- /*
   * General Purpose Timer
   * - i.MX21: 3 timers
   * - i.MX27: 6 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
@@@ -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
  #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 */
  #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)
@@@ -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 afc17ce,0000000..afc17ce
mode 100644,000000..100644
--- /dev/null
@@@ -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
@@@ -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
  #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 e0f0dfd,0000000..f07b1f9
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 4796484,0000000..d39f9cc
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
@@@ -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);
@@@ -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
@@@ -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 6785978,0000000..368a603
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 55caa5c,0000000..4f6146d
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
  
  #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
  #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