# Copyright 2008 Openmoko, Inc.
# Copyright 2008 Simtec Electronics
#
# Licensed under GPLv2

# Configuration options for the S3C6410 CPU

config CPU_S3C6410
	bool
	select CPU_S3C6400_INIT
	select CPU_S3C6400_CLOCK
	help
	  Enable S3C6410 CPU support

config S3C6410_SETUP_SDHCI
	bool
	select S3C64XX_SETUP_SDHCI_GPIO
	help
	  Internal helper functions for S3C6410 based SDHCI systems

config MACH_ANW6410
	bool "A&W6410"
	select CPU_S3C6410
	select S3C_DEV_FB
	select S3C64XX_SETUP_FB_24BPP
	help
	  Machine support for the A&W6410

config MACH_SMDK6410
	bool "SMDK6410"
	select CPU_S3C6410
	select S3C_DEV_HSMMC
	select S3C_DEV_HSMMC1
	select S3C_DEV_I2C1
	select S3C_DEV_FB
	select S3C_DEV_USB_HOST
	select S3C_DEV_USB_HSOTG
	select S3C6410_SETUP_SDHCI
	select S3C64XX_SETUP_I2C1
	select S3C64XX_SETUP_FB_24BPP
	help
	  Machine support for the Samsung SMDK6410

# At least some of the SMDK6410s were shipped with the card detect
# for the MMC/SD slots connected to the same input. This means that
# either the boards need to be altered to have channel0 to an alternate
# configuration or that only one slot can be used.

choice
	prompt "SMDK6410 MMC/SD slot setup"
	depends on MACH_SMDK6410

config SMDK6410_SD_CH0
	bool "Use channel 0 only"
	depends on MACH_SMDK6410
	help
          Select CON7 (channel 0) as the MMC/SD slot, as
	  at least some SMDK6410 boards come with the
	  resistors fitted so that the card detects for
	  channels 0 and 1 are the same.
       
config SMDK6410_SD_CH1
	bool "Use channel 1 only"
	depends on MACH_SMDK6410
	help
          Select CON6 (channel 1) as the MMC/SD slot, as
	  at least some SMDK6410 boards come with the
	  resistors fitted so that the card detects for
	  channels 0 and 1 are the same.

endchoice

config SMDK6410_WM1190_EV1
	bool "Support Wolfson Microelectronics 1190-EV1 PMIC card"
	depends on MACH_SMDK6410
	select REGULATOR
	select REGULATOR_WM8350
	select S3C24XX_GPIO_EXTRA64
	select MFD_WM8350_I2C
	select MFD_WM8350_CONFIG_MODE_0
	select MFD_WM8350_CONFIG_MODE_3
	select MFD_WM8352_CONFIG_MODE_0
	help
	  The Wolfson Microelectronics 1190-EV1 is a WM835x based PMIC
	  and audio daughtercard for the Samsung SMDK6410 reference
	  platform.  Enabling this option will build support for this
	  module into the kernel.  The presence of the module will be
	  detected at runtime so the the resulting kernel can be used
	  with or without the 1190-EV1 fitted.

config MACH_NCP
	bool "NCP"
	select CPU_S3C6410
	select S3C_DEV_I2C1
	select S3C_DEV_HSMMC1
	select S3C64XX_SETUP_I2C1
	help
          Machine support for the Samsung NCP

config MACH_HMT
	bool "Airgoo HMT"
	select CPU_S3C6410
	select S3C_DEV_FB
	select S3C_DEV_NAND
	select S3C_DEV_USB_HOST
	select S3C64XX_SETUP_FB_24BPP
	select HAVE_PWM
	help
	  Machine support for the Airgoo HMT
