# arch/arm/plat-s3c24xx/Kconfig
#
# Copyright 2007 Simtec Electronics
#
# Licensed under GPLv2

config PLAT_S3C24XX
	bool
	depends on ARCH_S3C2410 || ARCH_S3C24A0
	default y
	select NO_IOPORT
	select ARCH_REQUIRE_GPIOLIB
	select S3C_DEVICE_NAND
	help
	  Base platform code for any Samsung S3C24XX device

if PLAT_S3C24XX

# code that is shared between a number of the s3c24xx implementations

config S3C2410_CLOCK
	bool
	help
	  Clock code for the S3C2410, and similar processors which
	  is currently includes the S3C2410, S3C2440, S3C2442.

config S3C24XX_DCLK
	bool
	help
	  Clock code for supporting DCLK/CLKOUT on S3C24XX architectures

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 S3C24XX_PWM
	bool "PWM device support"
	select HAVE_PWM
	help
	  Support for exporting the PWM timer blocks via the pwm device
	  system.


# gpio configurations

config S3C24XX_GPIO_EXTRA
	int
	default 128 if S3C24XX_GPIO_EXTRA128
	default 64 if S3C24XX_GPIO_EXTRA64
	default 0

config S3C24XX_GPIO_EXTRA64
	bool
	help
	  Add an extra 64 gpio numbers to the available GPIO pool. This is
	  available for boards that need extra gpios for external devices.

config S3C24XX_GPIO_EXTRA128
	bool
	help
	  Add an extra 128 gpio numbers to the available GPIO pool. This is
	  available for boards that need extra gpios for external devices.

config PM_SIMTEC
	bool
	help
	  Common power management code for systems that are
	  compatible with the Simtec style of power management

config S3C2410_DMA
	bool "S3C2410 DMA support"
	depends on ARCH_S3C2410
	select S3C_DMA
	help
	  S3C2410 DMA support. This is needed for drivers like sound which
	  use the S3C2410's DMA system to move data to and from the
	  peripheral blocks.

config S3C2410_DMA_DEBUG
	bool "S3C2410 DMA support debug"
	depends on ARCH_S3C2410 && S3C2410_DMA
	help
	  Enable debugging output for the DMA code. This option sends info
	  to the kernel log, at priority KERN_DEBUG.

config S3C24XX_ADC
	bool "ADC common driver support"
	help
	  Core support for the ADC block found in the S3C24XX SoC systems
	  for drivers such as the touchscreen and hwmon to use to share
	  this resource.

# SPI default pin configuration code

config S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13
	bool
	help
	  SPI GPIO configuration code for BUS0 when connected to
	  GPE11, GPE12 and GPE13.

config S3C24XX_SPI_BUS1_GPG5_GPG6_GPG7
	bool
	help
	  SPI GPIO configuration code for BUS 1 when connected to
	  GPG5, GPG6 and GPG7.

config S3C24XX_SPI_BUS1_GPD8_GPD9_GPD10
	bool
	help
	  SPI GPIO configuration code for BUS 1 when connected to
	  GPD8, GPD9 and GPD10.

# common code for s3c24xx based machines, such as the SMDKs.

# cpu frequency items common between s3c2410 and s3c2440/s3c2442

config S3C2410_IOTIMING
	bool
	depends on CPU_FREQ_S3C24XX
	help
	  Internal node to select io timing code that is common to the s3c2410
	  and s3c2440/s3c2442 cpu frequency support.

config S3C2410_CPUFREQ_UTILS
	bool
	depends on CPU_FREQ_S3C24XX
	help
	  Internal node to select timing code that is common to the s3c2410
	  and s3c2440/s3c244 cpu frequency support.

# cpu frequency support common to s3c2412, s3c2413 and s3c2442

config S3C2412_IOTIMING
	bool
	depends on CPU_FREQ_S3C24XX && (CPU_S3C2412 || CPU_S3C2443)
	help
	  Intel node to select io timing code that is common to the s3c2412
	  and the s3c2443.

config MACH_SMDK
	bool
	help
	  Common machine code for SMDK2410 and SMDK2440

endif
