# Copyright 2008 Openmoko, Inc.
# Copyright 2008 Simtec Electronics
#	Ben Dooks <ben@simtec.co.uk>
#
# Licensed under GPLv2

config PLAT_S3C64XX
	bool
	depends on ARCH_S3C64XX
	default y
	select CPU_V6
	select PLAT_S3C
	select ARM_VIC
	select NO_IOPORT
	select ARCH_REQUIRE_GPIOLIB
	select S3C_GPIO_TRACK
	select S3C_GPIO_PULL_UPDOWN
	select S3C_GPIO_CFG_S3C24XX
	select S3C_GPIO_CFG_S3C64XX
	select S3C_DEV_NAND
	select USB_ARCH_HAS_OHCI
	help
	  Base platform code for any Samsung S3C64XX device

if PLAT_S3C64XX

# Configuration options shared by all S3C64XX implementations

config CPU_S3C6400_INIT
	bool
	help
	  Common initialisation code for the S3C6400 that is shared
	  by other CPUs in the series, such as the S3C6410.

config CPU_S3C6400_CLOCK
	bool
	help
	  Common clock support code for the S3C6400 that is shared
	  by other CPUs in the series, such as the S3C6410.

config S3C64XX_DMA
	bool "S3C64XX DMA"
	select S3C_DMA

# platform specific device setup

config S3C64XX_SETUP_I2C0
	bool
	default y
	help
	  Common setup code for i2c bus 0.

	  Note, currently since i2c0 is always compiled, this setup helper
	  is always compiled with it.

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

config S3C64XX_SETUP_FB_24BPP
	bool
	help
	  Common setup code for S3C64XX with an 24bpp RGB display helper.

config S3C64XX_SETUP_SDHCI_GPIO
	bool
	help
	  Common setup code for S3C64XX SDHCI GPIO configurations

endif
