# arch/arm/mach-s5pv210/Kconfig
#
# Copyright (c) 2010 Samsung Electronics Co., Ltd.
#		http://www.samsung.com/
#
# Licensed under GPLv2

# Configuration options for the S5PV210/S5PC110

if ARCH_S5PV210

config CPU_S5PV210
	bool
	select PLAT_S5P
	select S3C_PL330_DMA
	select S5P_EXT_INT
	help
	  Enable S5PV210 CPU support

config S5PV210_SETUP_I2C1
	bool
	help
	  Common setup code for i2c bus 1.

config S5PV210_SETUP_I2C2
	bool
	help
	  Common setup code for i2c bus 2.

config S5PV210_SETUP_IDE
	bool
	help
	  Common setup code for S5PV210 IDE GPIO configurations

config S5PV210_SETUP_FB_24BPP
	bool
	help
          Common setup code for S5PV210 with an 24bpp RGB display helper.

config S5PV210_SETUP_KEYPAD
	bool
	help
	  Common setup code for keypad.

config S5PV210_SETUP_SDHCI
        bool
        select S5PV210_SETUP_SDHCI_GPIO
        help
          Internal helper functions for S5PV210 based SDHCI systems

config S5PV210_SETUP_SDHCI_GPIO
	bool
	help
	  Common setup code for SDHCI gpio.

menu "S5PC110 Machines"

config MACH_AQUILA
	bool "Aquila"
	select CPU_S5PV210
	select ARCH_SPARSEMEM_ENABLE
	select S5PV210_SETUP_FB_24BPP
	select S5PV210_SETUP_SDHCI
	select S3C_DEV_FB
	select S5PC110_DEV_ONENAND
	select S3C_DEV_HSMMC
	select S3C_DEV_HSMMC1
	select S3C_DEV_HSMMC2
	help
	  Machine support for the Samsung Aquila target based on S5PC110 SoC

config MACH_GONI
	bool "GONI"
	select CPU_S5PV210
	select ARCH_SPARSEMEM_ENABLE
	select S5PV210_SETUP_FB_24BPP
	select S5PV210_SETUP_SDHCI
	select S3C_DEV_FB
	select S5PC110_DEV_ONENAND
	select S3C_DEV_HSMMC
	select S3C_DEV_HSMMC1
	select S3C_DEV_HSMMC2
	help
	  Machine support for Samsung GONI board
	  S5PC110(MCP) is one of package option of S5PV210

config MACH_SMDKC110
	bool "SMDKC110"
	select CPU_S5PV210
	select ARCH_SPARSEMEM_ENABLE
	select S3C_DEV_I2C1
	select S3C_DEV_I2C2
	select SAMSUNG_DEV_IDE
	select S3C_DEV_RTC
	select S3C_DEV_WDT
	select HAVE_S3C_RTC
	select HAVE_S3C2410_WATCHDOG
	select S5PV210_SETUP_I2C1
	select S5PV210_SETUP_I2C2
	select S5PV210_SETUP_IDE
	help
	  Machine support for Samsung SMDKC110
	  S5PC110(MCP) is one of package option of S5PV210

endmenu

config S5PC110_DEV_ONENAND
	bool
	help
	  Compile in platform device definition for OneNAND1 controller

menu "S5PV210 Machines"

config MACH_SMDKV210
	bool "SMDKV210"
	select CPU_S5PV210
	select ARCH_SPARSEMEM_ENABLE
	select SAMSUNG_DEV_ADC
	select S3C_DEV_HSMMC
	select S3C_DEV_HSMMC1
	select S3C_DEV_HSMMC2
	select S3C_DEV_HSMMC3
	select S3C_DEV_I2C1
	select S3C_DEV_I2C2
	select SAMSUNG_DEV_IDE
	select SAMSUNG_DEV_KEYPAD
	select SAMSUNG_DEV_TS
	select S3C_DEV_RTC
	select S3C_DEV_WDT
	select HAVE_S3C_RTC
	select HAVE_S3C2410_WATCHDOG
	select S5PV210_SETUP_I2C1
	select S5PV210_SETUP_I2C2
	select S5PV210_SETUP_IDE
	select S5PV210_SETUP_KEYPAD
	select S5PV210_SETUP_SDHCI
	help
	  Machine support for Samsung SMDKV210

endmenu

endif
