if ARCH_AT91

config HAVE_AT91_UTMI
	bool

config HAVE_AT91_USB_CLK
	bool

config HAVE_AT91_DBGU0
	bool

config HAVE_AT91_DBGU1
	bool

config HAVE_AT91_DBGU2
	bool

config AT91_USE_OLD_CLK
	bool

config COMMON_CLK_AT91
	bool
	default USE_OF && !AT91_USE_OLD_CLK
	select COMMON_CLK

config OLD_CLK_AT91
	bool
	default AT91_USE_OLD_CLK

config OLD_IRQ_AT91
	bool
	select MULTI_IRQ_HANDLER
	select SPARSE_IRQ

config HAVE_AT91_SMD
	bool

config HAVE_AT91_H32MX
	bool

config SOC_AT91SAM9
	bool
	select ATMEL_AIC_IRQ if !OLD_IRQ_AT91
	select CPU_ARM926T
	select GENERIC_CLOCKEVENTS
	select MEMORY if USE_OF
	select ATMEL_SDRAMC if USE_OF

config SOC_SAMA5
	bool
	select ATMEL_AIC5_IRQ
	select CPU_V7
	select GENERIC_CLOCKEVENTS
	select USE_OF
	select MEMORY
	select ATMEL_SDRAMC

menu "Atmel AT91 System-on-Chip"

choice

	prompt "Core type"

config SOC_SAM_V4_V5
	bool "ARM9 AT91SAM9/AT91RM9200"
	help
	  Select this if you are using one of Atmel's AT91SAM9 or
	  AT91RM9200 SoC.

config SOC_SAM_V7
	bool "Cortex A5"
	help
	  Select this if you are using one of Atmel's SAMA5D3 SoC.

endchoice

comment "Atmel AT91 Processor"

if SOC_SAM_V7
config SOC_SAMA5D3
	bool "SAMA5D3 family"
	select SOC_SAMA5
	select HAVE_FB_ATMEL
	select HAVE_AT91_DBGU1
	select HAVE_AT91_UTMI
	select HAVE_AT91_SMD
	select HAVE_AT91_USB_CLK
	help
	  Select this if you are using one of Atmel's SAMA5D3 family SoC.
	  This support covers SAMA5D31, SAMA5D33, SAMA5D34, SAMA5D35, SAMA5D36.

config SOC_SAMA5D4
	bool "SAMA5D4 family"
	select SOC_SAMA5
	select HAVE_AT91_DBGU2
	select CLKSRC_MMIO
	select CACHE_L2X0
	select CACHE_PL310
	select HAVE_FB_ATMEL
	select HAVE_AT91_UTMI
	select HAVE_AT91_SMD
	select HAVE_AT91_USB_CLK
	select HAVE_AT91_H32MX
	help
	  Select this if you are using one of Atmel's SAMA5D4 family SoC.
endif

if SOC_SAM_V4_V5
config SOC_AT91RM9200
	bool "AT91RM9200"
	select ATMEL_AIC_IRQ if !OLD_IRQ_AT91
	select CPU_ARM920T
	select GENERIC_CLOCKEVENTS
	select HAVE_AT91_DBGU0
	select HAVE_AT91_USB_CLK

config SOC_AT91SAM9260
	bool "AT91SAM9260, AT91SAM9XE or AT91SAM9G20"
	select HAVE_AT91_DBGU0
	select SOC_AT91SAM9
	select HAVE_AT91_USB_CLK
	help
	  Select this if you are using one of Atmel's AT91SAM9260, AT91SAM9XE
	  or AT91SAM9G20 SoC.

config SOC_AT91SAM9261
	bool "AT91SAM9261 or AT91SAM9G10"
	select HAVE_AT91_DBGU0
	select HAVE_FB_ATMEL
	select SOC_AT91SAM9
	select HAVE_AT91_USB_CLK
	help
	  Select this if you are using one of Atmel's AT91SAM9261 or AT91SAM9G10 SoC.

config SOC_AT91SAM9263
	bool "AT91SAM9263"
	select HAVE_AT91_DBGU1
	select HAVE_FB_ATMEL
	select SOC_AT91SAM9
	select HAVE_AT91_USB_CLK

config SOC_AT91SAM9RL
	bool "AT91SAM9RL"
	select HAVE_AT91_DBGU0
	select HAVE_FB_ATMEL
	select SOC_AT91SAM9
	select HAVE_AT91_UTMI

config SOC_AT91SAM9G45
	bool "AT91SAM9G45 or AT91SAM9M10 families"
	select HAVE_AT91_DBGU1
	select HAVE_FB_ATMEL
	select SOC_AT91SAM9
	select HAVE_AT91_UTMI
	select HAVE_AT91_USB_CLK
	help
	  Select this if you are using one of Atmel's AT91SAM9G45 family SoC.
	  This support covers AT91SAM9G45, AT91SAM9G46, AT91SAM9M10 and AT91SAM9M11.

config SOC_AT91SAM9X5
	bool "AT91SAM9x5 family"
	select HAVE_AT91_DBGU0
	select HAVE_FB_ATMEL
	select SOC_AT91SAM9
	select HAVE_AT91_UTMI
	select HAVE_AT91_SMD
	select HAVE_AT91_USB_CLK
	help
	  Select this if you are using one of Atmel's AT91SAM9x5 family SoC.
	  This means that your SAM9 name finishes with a '5' (except if it is
	  AT91SAM9G45!).
	  This support covers AT91SAM9G15, AT91SAM9G25, AT91SAM9X25, AT91SAM9G35
	  and AT91SAM9X35.

config SOC_AT91SAM9N12
	bool "AT91SAM9N12 family"
	select HAVE_AT91_DBGU0
	select HAVE_FB_ATMEL
	select SOC_AT91SAM9
	select HAVE_AT91_USB_CLK
	help
	  Select this if you are using Atmel's AT91SAM9N12 SoC.

# ----------------------------------------------------------
endif # SOC_SAM_V4_V5


if SOC_SAM_V4_V5
source arch/arm/mach-at91/Kconfig.non_dt
endif

comment "Generic Board Type"

config MACH_AT91RM9200_DT
	bool "Atmel AT91RM9200 Evaluation Kits with device-tree support"
	depends on SOC_AT91RM9200
	select USE_OF
	help
	  Select this if you want to experiment device-tree with
	  an Atmel RM9200 Evaluation Kit.

config MACH_AT91SAM9_DT
	bool "Atmel AT91SAM Evaluation Kits with device-tree support"
	depends on SOC_AT91SAM9
	select USE_OF
	help
	  Select this if you want to experiment device-tree with
	  an Atmel Evaluation Kit.

config MACH_SAMA5_DT
	bool "Atmel SAMA5 Evaluation Kits with device-tree support"
	depends on SOC_SAMA5
	select USE_OF
	select PHYLIB if NETDEVICES
	help
	  Select this if you want to experiment device-tree with
	  an Atmel Evaluation Kit.

# ----------------------------------------------------------

comment "AT91 Feature Selections"

config AT91_SLOW_CLOCK
	bool "Suspend-to-RAM disables main oscillator"
	depends on SUSPEND
	help
	  Select this if you want Suspend-to-RAM to save the most power
	  possible (without powering off the CPU) by disabling the PLLs
	  and main oscillator so that only the 32 KiHz clock is available.

	  When only that slow-clock is available, some peripherals lose
	  functionality.  Many can't issue wakeup events unless faster
	  clocks are available.  Some lose their operating state and
	  need to be completely re-initialized.

config AT91_TIMER_HZ
       int "Kernel HZ (jiffies per second)"
       range 32 1024
       depends on ARCH_AT91
       default "128" if ARCH_AT91RM9200
       default "100"
       help
	  On AT91rm9200 chips where you're using a system clock derived
	  from the 32768 Hz hardware clock, this tick rate should divide
	  it exactly: use a power-of-two value, such as 128 or 256, to
	  reduce timing errors caused by rounding.

	  On AT91sam926x chips, or otherwise when using a higher precision
	  system clock (of at least several MHz), rounding is less of a
	  problem so it can be safer to use a decimal values like 100.

endmenu

endif
