# Copyright 2007 Simtec Electronics
#
# Licensed under GPLv2

config CPU_S3C2440
	bool
	depends on ARCH_S3C2410
	select CPU_ARM920T
	select S3C_GPIO_PULL_UP
	select S3C2410_CLOCK
	select S3C2410_PM if PM
	select S3C2410_GPIO
	select S3C2440_DMA if S3C2410_DMA
	select CPU_S3C244X
	select CPU_LLSERIAL_S3C2440
	help
	  Support for S3C2440 Samsung Mobile CPU based systems.

config CPU_S3C2442
	bool
	depends on ARCH_S3C2410
	select CPU_ARM920T
	select S3C2410_CLOCK
	select S3C2410_GPIO
	select S3C2410_PM if PM
	select CPU_S3C244X
	select CPU_LLSERIAL_S3C2440
	help
	  Support for S3C2442 Samsung Mobile CPU based systems.

config CPU_S3C244X
	bool
	depends on ARCH_S3C2410 && (CPU_S3C2440 || CPU_S3C2442)
	help
	  Support for S3C2440 and S3C2442 Samsung Mobile CPU based systems.



config S3C2440_CPUFREQ
	bool "S3C2440/S3C2442 CPU Frequency scaling support"
	depends on CPU_FREQ_S3C24XX && (CPU_S3C2440 || CPU_S3C2442)
	select S3C2410_CPUFREQ_UTILS
	default y
	help
	  CPU Frequency scaling support for S3C2440 and S3C2442 SoC CPUs.

config S3C2440_XTAL_12000000
	bool
	help
	  Indicate that the build needs to support 12MHz system
	  crystal.

config S3C2440_XTAL_16934400
	bool
	help
	  Indicate that the build needs to support 16.9344MHz system
	  crystal.

config S3C2440_PLL_12000000
	bool
	depends on S3C2440_CPUFREQ && S3C2440_XTAL_12000000
	default y if CPU_FREQ_S3C24XX_PLL
	help
	  PLL tables for S3C2440 or S3C2442 CPUs with 12MHz crystals.

config S3C2440_PLL_16934400
	bool
	depends on S3C2440_CPUFREQ && S3C2440_XTAL_16934400
	default y if CPU_FREQ_S3C24XX_PLL
	help
	  PLL tables for S3C2440 or S3C2442 CPUs with 16.934MHz crystals.

config S3C2440_DMA
	bool
	depends on ARCH_S3C2410 && CPU_S3C24405B
	help
	  Support for S3C2440 specific DMA code5A

menu "S3C2440 and S3C2442 Machines"

config MACH_ANUBIS
	bool "Simtec Electronics ANUBIS"
	select CPU_S3C2440
	select S3C24XX_DCLK
	select PM_SIMTEC if PM
	select HAVE_PATA_PLATFORM
	select S3C24XX_GPIO_EXTRA64
	select S3C2440_XTAL_12000000
	select S3C_DEV_USB_HOST
	help
	  Say Y here if you are using the Simtec Electronics ANUBIS
	  development system

config MACH_NEO1973_GTA02
	bool "Openmoko GTA02 / Freerunner phone"
	select CPU_S3C2442
	select MFD_PCF50633
	select PCF50633_GPIO
	select I2C
	select POWER_SUPPLY
	select MACH_NEO1973
	select S3C2410_PWM
	help
	   Say Y here if you are using the Openmoko GTA02 / Freerunner GSM Phone

config MACH_OSIRIS
	bool "Simtec IM2440D20 (OSIRIS) module"
	select CPU_S3C2440
	select S3C24XX_DCLK
	select PM_SIMTEC if PM
	select S3C24XX_GPIO_EXTRA128
	select S3C2440_XTAL_12000000
	select S3C2410_IOTIMING if S3C2440_CPUFREQ
	select S3C_DEV_USB_HOST
	select S3C_DEV_NAND
	help
	  Say Y here if you are using the Simtec IM2440D20 module, also
	  known as the Osiris.

config MACH_OSIRIS_DVS
	tristate "Simtec IM2440D20 (OSIRIS) Dynamic Voltage Scaling driver"
	depends on MACH_OSIRIS
	select TPS65010
	help
	  Say Y/M here if you want to have dynamic voltage scaling support
	  on the Simtec IM2440D20 (OSIRIS) module via the TPS65011.

	  The DVS driver alters the voltage supplied to the ARM core
	  depending on the frequency it is running at. The driver itself
	  does not do any of the frequency alteration, which is left up
	  to the cpufreq driver.

config MACH_RX3715
	bool "HP iPAQ rx3715"
	select CPU_S3C2440
	select S3C2440_XTAL_16934400
	select PM_H1940 if PM
	select S3C_DEV_NAND
	help
	  Say Y here if you are using the HP iPAQ rx3715.

config ARCH_S3C2440
	bool "SMDK2440"
	select CPU_S3C2440
	select S3C2440_XTAL_16934400
	select MACH_SMDK
	select S3C_DEV_USB_HOST
	select S3C_DEV_NAND
	help
	  Say Y here if you are using the SMDK2440.

config MACH_NEXCODER_2440
 	bool "NexVision NEXCODER 2440 Light Board"
 	select CPU_S3C2440
	select S3C2440_XTAL_12000000
	select S3C_DEV_USB_HOST
	select S3C_DEV_NAND
	help
 	  Say Y here if you are using the Nex Vision NEXCODER 2440 Light Board

config SMDK2440_CPU2440
	bool "SMDK2440 with S3C2440 CPU module"
	default y if ARCH_S3C2440
	select S3C2440_XTAL_16934400
	select CPU_S3C2440

config SMDK2440_CPU2442
	bool "SMDM2440 with S3C2442 CPU module"
	select CPU_S3C2442

config MACH_AT2440EVB
	bool "Avantech AT2440EVB development board"
	select CPU_S3C2440
	select S3C_DEV_USB_HOST
	select S3C_DEV_NAND
	help
	  Say Y here if you are using the AT2440EVB development board

config MACH_MINI2440
	bool "MINI2440 development board"
	select CPU_S3C2440
	select EEPROM_AT24
	select LEDS_TRIGGER_BACKLIGHT
	select SND_S3C24XX_SOC_S3C24XX_UDA134X
	select S3C_DEV_NAND
	select S3C_DEV_USB_HOST
	help
	  Say Y here to select support for the MINI2440. Is a 10cm x 10cm board
	  available via various sources. It can come with a 3.5" or 7" touch LCD.

config MACH_RX1950
	bool "HP iPAQ rx1950"
	select CPU_S3C2442
	select S3C24XX_DCLK
	select PM_H1940 if PM
	select I2C
	select S3C2410_PWM
	select S3C_DEV_NAND
	select S3C2410_IOTIMING if S3C2440_CPUFREQ
	select S3C2440_XTAL_16934400
	help
	   Say Y here if you're using HP iPAQ rx1950

endmenu
