if ARCH_MX3

# ARCH_MX31 and ARCH_MX35 are left for compatibility
# Some usages assume that having one of them implies not having (e.g.) ARCH_MX2.
# To easily distinguish good and reviewed from unreviewed usages new (and IMHO
# more sensible) names are used: SOC_IMX31 and SOC_IMX35
config ARCH_MX31
	bool

config ARCH_MX35
	bool

config SOC_IMX31
	bool
	select IMX_HAVE_PLATFORM_MXC_RNGA
	select ARCH_MXC_AUDMUX_V2
	select ARCH_MX31
	select MXC_AVIC

config SOC_IMX35
	bool
	select ARCH_MXC_IOMUX_V3
	select ARCH_MXC_AUDMUX_V2
	select HAVE_EPIT
	select ARCH_MX35
	select MXC_AVIC

comment "MX3 platforms:"

config MACH_MX31ADS
	bool "Support MX31ADS platforms"
	select SOC_IMX31
	select IMX_HAVE_PLATFORM_IMX_I2C
	select IMX_HAVE_PLATFORM_IMX_SSI
	select IMX_HAVE_PLATFORM_IMX_UART
	default y
	help
	  Include support for MX31ADS platform. This includes specific
	  configurations for the board and its peripherals.

config MACH_MX31ADS_WM1133_EV1
	bool "Support Wolfson Microelectronics 1133-EV1 module"
	depends on MACH_MX31ADS
	depends on MFD_WM8350_I2C
	depends on REGULATOR_WM8350
	select MFD_WM8350_CONFIG_MODE_0
	select MFD_WM8352_CONFIG_MODE_0
	help
	  Include support for the Wolfson Microelectronics 1133-EV1 PMU
	  and audio module for the MX31ADS platform.

config MACH_PCM037
	bool "Support Phytec pcm037 (i.MX31) platforms"
	select SOC_IMX31
	select IMX_HAVE_PLATFORM_FSL_USB2_UDC
	select IMX_HAVE_PLATFORM_IMX2_WDT
	select IMX_HAVE_PLATFORM_IMX_I2C
	select IMX_HAVE_PLATFORM_IMX_UART
	select IMX_HAVE_PLATFORM_MXC_EHCI
	select IMX_HAVE_PLATFORM_MXC_MMC
	select IMX_HAVE_PLATFORM_MXC_NAND
	select IMX_HAVE_PLATFORM_MXC_W1
	select MXC_ULPI if USB_ULPI
	help
	  Include support for Phytec pcm037 platform. This includes
	  specific configurations for the board and its peripherals.

config MACH_PCM037_EET
	bool "Support pcm037 EET board extensions"
	depends on MACH_PCM037
	select IMX_HAVE_PLATFORM_SPI_IMX
	help
	  Add support for PCM037 EET baseboard extensions. If you are using the
	  OLED display with EET, use "video=mx3fb:CMEL-OLED" kernel
	  command-line parameter.

config MACH_MX31LITE
	bool "Support MX31 LITEKIT (LogicPD)"
	select SOC_IMX31
	select MXC_ULPI if USB_ULPI
	select IMX_HAVE_PLATFORM_IMX2_WDT
	select IMX_HAVE_PLATFORM_IMX_UART
	select IMX_HAVE_PLATFORM_MXC_EHCI
	select IMX_HAVE_PLATFORM_MXC_MMC
	select IMX_HAVE_PLATFORM_MXC_NAND
	select IMX_HAVE_PLATFORM_SPI_IMX
	help
	  Include support for MX31 LITEKIT platform. This includes specific
	  configurations for the board and its peripherals.

config MACH_MX31_3DS
	bool "Support MX31PDK (3DS)"
	select SOC_IMX31
	select MXC_DEBUG_BOARD
	select IMX_HAVE_PLATFORM_FSL_USB2_UDC
	select IMX_HAVE_PLATFORM_IMX2_WDT
	select IMX_HAVE_PLATFORM_IMX_KEYPAD
	select IMX_HAVE_PLATFORM_IMX_UART
	select IMX_HAVE_PLATFORM_MXC_EHCI
	select IMX_HAVE_PLATFORM_MXC_NAND
	select IMX_HAVE_PLATFORM_SPI_IMX
	select MXC_ULPI if USB_ULPI
	help
	  Include support for MX31PDK (3DS) platform. This includes specific
	  configurations for the board and its peripherals.

config MACH_MX31_3DS_MXC_NAND_USE_BBT
	bool "Make the MXC NAND driver use the in flash Bad Block Table"
	depends on MACH_MX31_3DS
	depends on MTD_NAND_MXC
	help
	  Enable this if you want that the MXC NAND driver uses the in flash
	  Bad Block Table to know what blocks are bad instead of scanning the
	  entire flash looking for bad block markers.

config MACH_MX31MOBOARD
	bool "Support mx31moboard platforms (EPFL Mobots group)"
	select SOC_IMX31
	select IMX_HAVE_PLATFORM_FSL_USB2_UDC
	select IMX_HAVE_PLATFORM_IMX_I2C
	select IMX_HAVE_PLATFORM_IMX_UART
	select IMX_HAVE_PLATFORM_MXC_EHCI
	select IMX_HAVE_PLATFORM_MXC_MMC
	select IMX_HAVE_PLATFORM_SPI_IMX
	select MXC_ULPI if USB_ULPI
	help
	  Include support for mx31moboard platform. This includes specific
	  configurations for the board and its peripherals.

config MACH_MX31LILLY
	bool "Support MX31 LILLY-1131 platforms (INCO startec)"
	select SOC_IMX31
	select IMX_HAVE_PLATFORM_IMX_UART
	select IMX_HAVE_PLATFORM_MXC_EHCI
	select IMX_HAVE_PLATFORM_MXC_MMC
	select IMX_HAVE_PLATFORM_SPI_IMX
	select MXC_ULPI if USB_ULPI
	help
	  Include support for mx31 based LILLY1131 modules. This includes
	  specific configurations for the board and its peripherals.

config MACH_QONG
	bool "Support Dave/DENX QongEVB-LITE platform"
	select SOC_IMX31
	select IMX_HAVE_PLATFORM_IMX_UART
	help
	  Include support for Dave/DENX QongEVB-LITE platform. This includes
	  specific configurations for the board and its peripherals.

config MACH_PCM043
	bool "Support Phytec pcm043 (i.MX35) platforms"
	select SOC_IMX35
	select IMX_HAVE_PLATFORM_FLEXCAN
	select IMX_HAVE_PLATFORM_FSL_USB2_UDC
	select IMX_HAVE_PLATFORM_IMX2_WDT
	select IMX_HAVE_PLATFORM_IMX_I2C
	select IMX_HAVE_PLATFORM_IMX_SSI
	select IMX_HAVE_PLATFORM_IMX_UART
	select IMX_HAVE_PLATFORM_MXC_EHCI
	select IMX_HAVE_PLATFORM_MXC_NAND
	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX
	select MXC_ULPI if USB_ULPI
	help
	  Include support for Phytec pcm043 platform. This includes
	  specific configurations for the board and its peripherals.

config MACH_ARMADILLO5X0
	bool "Support Atmark Armadillo-500 Development Base Board"
	select SOC_IMX31
	select IMX_HAVE_PLATFORM_IMX_I2C
	select IMX_HAVE_PLATFORM_IMX_UART
	select IMX_HAVE_PLATFORM_MXC_EHCI
	select IMX_HAVE_PLATFORM_MXC_MMC
	select IMX_HAVE_PLATFORM_MXC_NAND
	select MXC_ULPI if USB_ULPI
	help
	  Include support for Atmark Armadillo-500 platform. This includes
	  specific configurations for the board and its peripherals.

config MACH_MX35_3DS
	bool "Support MX35PDK platform"
	select SOC_IMX35
	select MXC_DEBUG_BOARD
	select IMX_HAVE_PLATFORM_FSL_USB2_UDC
	select IMX_HAVE_PLATFORM_IMX2_WDT
	select IMX_HAVE_PLATFORM_IMX_UART
	select IMX_HAVE_PLATFORM_MXC_EHCI
	select IMX_HAVE_PLATFORM_MXC_NAND
	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX
	help
	  Include support for MX35PDK platform. This includes specific
	  configurations for the board and its peripherals.

config MACH_KZM_ARM11_01
	bool "Support KZM-ARM11-01(Kyoto Microcomputer)"
	select SOC_IMX31
	select IMX_HAVE_PLATFORM_IMX_UART
	help
	  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 SOC_IMX35
	select IMX_HAVE_PLATFORM_FLEXCAN
	select IMX_HAVE_PLATFORM_FSL_USB2_UDC
	select IMX_HAVE_PLATFORM_IMX2_WDT
	select IMX_HAVE_PLATFORM_IMX_I2C
	select IMX_HAVE_PLATFORM_IMX_UART
	select IMX_HAVE_PLATFORM_MXC_EHCI
	select IMX_HAVE_PLATFORM_MXC_NAND
	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX
	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_MBIMXSD35_BASEBOARD

config MACH_EUKREA_MBIMXSD35_BASEBOARD
	bool "Eukrea MBIMXSD development board"
	select IMX_HAVE_PLATFORM_IMX_SSI
	help
	  This adds board specific devices that can be found on Eukrea's
	  MBIMXSD evaluation board.

endchoice

endif
