#
# OMAP Architecture specific features
#
# (C) Copyright 2008
# Texas Instruments, <www.ti.com>
# Nishanth Menon <x0nishan@ti.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of
# the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
# MA 02111-1307 USA

menu "OMAP Features"
	depends on ARCH_OMAP

config MACH_OMAP
	bool

choice
	prompt "Select OMAP Variant"

config ARCH_OMAP3
	bool "OMAP3"
	select CPU_V7
	select GENERIC_GPIO
	select ARCH_HAS_LOWLEVEL_INIT
	select OMAP_CLOCK_SOURCE_S32K
	help
	  Say Y here if you are using Texas Instrument's OMAP343x based platform

config ARCH_OMAP4
	bool "OMAP4"
	select CPU_V7
	select GENERIC_GPIO
	select OMAP_CLOCK_SOURCE_S32K
	help
	  Say Y here if you are using Texas Instrument's OMAP4 based platform

endchoice

### Generic Clock configurations to be enabled by Mach - invisible to enable.
config OMAP_CLOCK_UART
	bool
config OMAP_CLOCK_UART2
	bool
config OMAP_CLOCK_UART3
	bool
config OMAP_CLOCK_I2C
	bool

# Blind enable all possible clocks.. think twice before you do this.
config OMAP_CLOCK_ALL
	bool

config OMAP_CLOCK_SOURCE_S32K
	bool

config OMAP3_CLOCK_CONFIG
	prompt "Clock Configuration"
	bool
	depends on ARCH_OMAP3
	default y
	help
	  Say Y here if you like to have OMAP3 Clock configuration done.

config OMAP3_COPY_CLOCK_SRAM
	prompt "SRAM copy of Clock code"
	bool
	depends on OMAP3_CLOCK_CONFIG
	default y
	help
	  Say Y here if you like to have initial OMAP3 Clock configuration done from SRAM.

config OMAP_GPMC
	prompt "Support for GPMC configuration"
	bool
	depends on  (ARCH_OMAP2 || ARCH_OMAP3 || ARCH_OMAP4)
	default y
	help
	  Enable this if you use Texas Instrument's General purpose Memory
	  Controller(GPMC). GPMC allows you to configure devices such as NOR,
	  NAND, OneNAND etc.

config OMAP_BUILD_IFT
	prompt "build ift binary"
	bool

config ARCH_TEXT_BASE
	hex
	default 0x80e80000 if MACH_OMAP343xSDP
	default 0x80e80000 if MACH_BEAGLE

config BOARDINFO
	default "Texas Instrument's SDP343x" if MACH_OMAP343xSDP
	default "Texas Instrument's Beagle" if MACH_BEAGLE
	default "Texas Instrument's OMAP3EVM" if MACH_OMAP3EVM
	default "Texas Instrument's Panda" if MACH_PANDA
	default "Phytec phyCORE pcm049" if MACH_PCM049

choice
	prompt "Select OMAP board"

config MACH_OMAP343xSDP
	bool "Texas Instrument's SDP343x"
	select MACH_HAS_LOWLEVEL_INIT
	select OMAP_CLOCK_ALL
	select HAS_OMAP_NAND
	depends on ARCH_OMAP3
	help
	  Say Y here if you are using SDP343x platform

config MACH_BEAGLE
	bool "Texas Instrument's Beagle Board"
	select MACH_HAS_LOWLEVEL_INIT
	select OMAP_CLOCK_ALL
	select HAVE_NOSHELL
	select HAS_OMAP_NAND
	depends on ARCH_OMAP3
	  help
	  Say Y here if you are using Beagle Board

config MACH_OMAP3EVM
	bool "Texas Instrument's OMAP3 EVM"
	select MACH_HAS_LOWLEVEL_INIT
	select OMAP_CLOCK_ALL
	select HAS_OMAP_NAND
	depends on ARCH_OMAP3
	  help
	  Say Y here if you are using OMAP3EVM

config MACH_PANDA
	bool "Texas Instrument's Panda Board"
	select HAVE_MMU
	select HAVE_NOSHELL
	select MACH_HAS_LOWLEVEL_INIT
	help
	  Say Y here if you are using OMAP4 Panda board

config MACH_PCM049
	bool "Phytec phyCORE pcm049"
	select HAVE_MMU
	select HAVE_NOSHELL
	depends on ARCH_OMAP4
	select MACH_HAS_LOWLEVEL_INIT
	help
	  Say Y here if you are using Phytecs phyCORE pcm049 board
	  based on OMAP4

endchoice

if MACH_OMAP3EVM
	choice
	prompt "Select UART"

	config OMAP3EVM_UART1
		bool "Use UART1"
		depends on MACH_OMAP3EVM
		help
		  Say Y here if you would like to use UART1 as console.

	config OMAP3EVM_UART3
		bool "Use UART3"
		depends on MACH_OMAP3EVM
		help
		  Say Y here if you would like to use UART3 as console.
	endchoice
endif

config MACH_OMAP_ADVANCED_MUX
	bool "Enable advanced pin muxing"
	depends on MACH_OMAP343xSDP
	default n
	help
	  Say Y here if you would like to have complete pin muxing to be
	  done at boot time

config HAS_OMAP_NAND
	bool

endmenu
