# Copyright 2007 Simtec Electronics
#
# Licensed under GPLv2

config CPU_S3C2410
	bool
	depends on ARCH_S3C2410
	select CPU_ARM920T
	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
	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 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 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_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
