# Copyright 2007 Simtec Electronics
#
# Licensed under GPLv2

config CPU_S3C2410
	bool
	depends on ARCH_S3C2410
	select CPU_ARM920T
	select S3C_GPIO_PULL_UP
	select S3C2410_CLOCK
	select S3C2410_GPIO
	select CPU_LLSERIAL_S3C2410
	select S3C2410_PM if PM
	select S3C2410_CPUFREQ if CPU_FREQ_S3C24XX
	help
	  Support for S3C2410 and S3C2410A family from the S3C24XX line
	  of Samsung Mobile CPUs.

config CPU_S3C2410_DMA
	bool
	depends on S3C2410_DMA && (CPU_S3C2410 || CPU_S3C2442)
	default y if CPU_S3C2410 || CPU_S3C2442
	help
	  DMA device selection for S3C2410 and compatible CPUs

config S3C2410_PM
	bool
	help
	  Power Management code common to S3C2410 and better

config S3C2410_GPIO
	bool
	help
	  GPIO code for S3C2410 and similar processors

config SIMTEC_NOR
	bool
	help
	  Internal node to specify machine has simtec NOR mapping

config MACH_BAST_IDE
	bool
	select HAVE_PATA_PLATFORM
	help
	  Internal node for machines with an BAST style IDE
	  interface

# cpu frequency scaling support

config S3C2410_CPUFREQ
	bool
	depends on CPU_FREQ_S3C24XX && CPU_S3C2410
	select S3C2410_CPUFREQ_UTILS
	help
	  CPU Frequency scaling support for S3C2410

config S3C2410_PLLTABLE
	bool
	depends on S3C2410_CPUFREQ && CPU_FREQ_S3C24XX_PLL
	default y
	help
	  Select the PLL table for the S3C2410

menu "S3C2410 Machines"

config ARCH_SMDK2410
	bool "SMDK2410/A9M2410"
	select CPU_S3C2410
	select MACH_SMDK
	help
	   Say Y here if you are using the SMDK2410 or the derived module A9M2410
           <http://www.fsforth.de>

config ARCH_H1940
	bool "IPAQ H1940"
	select CPU_S3C2410
	select PM_H1940 if PM
	select S3C_DEV_USB_HOST
	select S3C_DEV_NAND
	select S3C2410_SETUP_TS
	help
	  Say Y here if you are using the HP IPAQ H1940

config H1940BT
        tristate "Control the state of H1940 bluetooth chip"
        depends on ARCH_H1940
        select RFKILL
        help
          This is a simple driver that is able to control
          the state of built in bluetooth chip on h1940.

config PM_H1940
	bool
	help
	  Internal node for H1940 and related PM

config MACH_N30
	bool "Acer N30 family"
	select CPU_S3C2410
	select MACH_N35
	select S3C_DEV_USB_HOST
	select S3C_DEV_NAND
	help
	  Say Y here if you want suppt for the Acer N30, Acer N35,
	  Navman PiN570, Yakumo AlphaX or Airis NC05 PDAs.

config MACH_N35
	bool
	help
	  Internal node in order to enable support for Acer N35 if Acer N30 is
	  selected.

config ARCH_BAST
	bool "Simtec Electronics BAST (EB2410ITX)"
	select CPU_S3C2410
	select S3C2410_IOTIMING if S3C2410_CPUFREQ
	select PM_SIMTEC if PM
	select SIMTEC_NOR
	select MACH_BAST_IDE
	select S3C24XX_DCLK
	select ISA
	select S3C_DEV_HWMON
	select S3C_DEV_USB_HOST
	select S3C_DEV_NAND
	help
	  Say Y here if you are using the Simtec Electronics EB2410ITX
	  development board (also known as BAST)

config MACH_OTOM
 	bool "NexVision OTOM Board"
 	select CPU_S3C2410
	select S3C_DEV_USB_HOST
	select S3C_DEV_NAND
	help
 	  Say Y here if you are using the Nex Vision OTOM board

config MACH_AML_M5900
	bool "AML M5900 Series"
	select CPU_S3C2410
	select PM_SIMTEC if PM
	select S3C_DEV_USB_HOST
	help
	   Say Y here if you are using the American Microsystems M5900 Series
           <http://www.amltd.com>

config BAST_PC104_IRQ
	bool "BAST PC104 IRQ support"
	depends on ARCH_BAST
	default y
	help
	  Say Y	here to enable the PC104 IRQ routing on the
	  Simtec BAST (EB2410ITX)

config MACH_TCT_HAMMER
	bool "TCT Hammer Board"
	select CPU_S3C2410
	select S3C_DEV_USB_HOST
	help
	   Say Y here if you are using the TinCanTools Hammer Board
           <http://www.tincantools.com>

config MACH_VR1000
	bool "Thorcom VR1000"
	select PM_SIMTEC if PM
	select S3C24XX_DCLK
	select SIMTEC_NOR
	select MACH_BAST_IDE
	select CPU_S3C2410
	select S3C_DEV_USB_HOST
	help
	  Say Y here if you are using the Thorcom VR1000 board.

config MACH_QT2410
	bool "QT2410"
	select CPU_S3C2410
	select S3C_DEV_USB_HOST
	select S3C_DEV_NAND
	help
	   Say Y here if you are using the Armzone QT2410

endmenu
