# arch/arm/plat-samsung/Kconfig
#
# Copyright 2009 Simtec Electronics
#
# Licensed under GPLv2

config PLAT_SAMSUNG
	bool
	depends on PLAT_S3C24XX || ARCH_S3C64XX || PLAT_S5P || ARCH_EXYNOS
	default y
	select GENERIC_IRQ_CHIP
	select NO_IOPORT
	help
	  Base platform code for all Samsung SoC based systems

config PLAT_S5P
	bool
	depends on (ARCH_S5P64X0 || ARCH_S5PC100 || ARCH_S5PV210)
	default y
	select ARCH_REQUIRE_GPIOLIB
	select ARM_VIC
	select NO_IOPORT
	select PLAT_SAMSUNG
	select S3C_GPIO_TRACK
	select S5P_GPIO_DRVSTR
	select SAMSUNG_CLKSRC if !COMMON_CLK
	select SAMSUNG_GPIOLIB_4BIT
	select SAMSUNG_IRQ_VIC_TIMER
	help
	  Base platform code for Samsung's S5P series SoC.

if PLAT_SAMSUNG

# boot configurations

comment "Boot options"

config S3C_BOOT_ERROR_RESET
	bool "S3C Reboot on decompression error"
	help
	  Say y here to use the watchdog to reset the system if the
	  kernel decompressor detects an error during decompression.

config S3C_BOOT_UART_FORCE_FIFO
       bool "Force UART FIFO on during boot process"
       default y
       help
         Say Y here to force the UART FIFOs on during the kernel
	 uncompressor


config S3C_LOWLEVEL_UART_PORT
	int "S3C UART to use for low-level messages"
	default 0
	help
	  Choice of which UART port to use for the low-level messages,
	  such as the `Uncompressing...` at start time. The value of
	  this configuration should be between zero and two. The port
	  must have been initialised by the boot-loader before use.

config SAMSUNG_ATAGS
	def_bool n
	depends on !ARCH_MULTIPLATFORM
	depends on ATAGS
	help
	   This option enables ATAGS based boot support code for
	   Samsung platforms, including static platform devices, legacy
	   clock, timer and interrupt initialization, etc.

	   Platforms that support only DT based boot need not to select
	   this option.

if SAMSUNG_ATAGS

# timer options

config SAMSUNG_HRT
	bool
	select SAMSUNG_DEV_PWM
	help
	  Use the High Resolution timer support

# clock options

config SAMSUNG_CLOCK
	bool
	default y if !COMMON_CLK

config SAMSUNG_CLKSRC
	bool
	help
	  Select the clock code for the clksrc implementation
	  used by newer systems such as the S3C64XX.

config S5P_CLOCK
	def_bool (ARCH_S5P64X0 || ARCH_S5PC100 || ARCH_S5PV210)
	help
	  Support common clock part for ARCH_S5P and ARCH_EXYNOS SoCs

# options for IRQ support

config SAMSUNG_IRQ_VIC_TIMER
       bool
       help
         Internal configuration to build the VIC timer interrupt code.

config S5P_IRQ
	def_bool (ARCH_S5P64X0 || ARCH_S5PC100 || ARCH_S5PV210)
	help
	  Support common interrupt part for ARCH_S5P SoCs

config S5P_EXT_INT
	bool
	help
	  Use the external interrupts (other than GPIO interrupts.)
	  Note: Do not choose this for S5P6440 and S5P6450.

config S5P_GPIO_INT
	bool
	help
	  Common code for the GPIO interrupts (other than external interrupts.)

# options for gpio configuration support

config SAMSUNG_GPIOLIB_4BIT
	bool
	help
	  GPIOlib file contains the 4 bit modification functions for gpio
	  configuration. GPIOlib shall be compiled only for S3C64XX and S5P
	  series of processors.

config S5P_GPIO_DRVSTR
	bool
	help
	  Internal configuration to get and set correct GPIO driver strength
	  helper

config SAMSUNG_GPIO_EXTRA
	int "Number of additional GPIO pins"
	default 128 if SAMSUNG_GPIO_EXTRA128
	default 64 if SAMSUNG_GPIO_EXTRA64
	default 0
	help
	  Use additional GPIO space in addition to the GPIO's the SOC
	  provides. This allows expanding the GPIO space for use with
	  GPIO expanders.

config SAMSUNG_GPIO_EXTRA64
	bool

config SAMSUNG_GPIO_EXTRA128
	bool

config S3C_GPIO_SPACE
	int "Space between gpio banks"
	default 0
	help
	  Add a number of spare GPIO entries between each bank for debugging
	  purposes. This allows any problems where an counter overflows from
	  one bank to another to be caught, at the expense of using a little
	  more memory.

config S3C_GPIO_TRACK
	bool
	help
	  Internal configuration option to enable the s3c specific gpio
	  chip tracking if the platform requires it.

# uart options

config S5P_DEV_UART
	def_bool y
	depends on (ARCH_S5P64X0 || ARCH_S5PC100 || ARCH_S5PV210)

# ADC driver

config S3C_ADC
	bool "ADC common driver support"
	help
	  Core support for the ADC block found in the Samsung SoC systems
	  for drivers such as the touchscreen and hwmon to use to share
	  this resource.

# device definitions to compile in

config S3C_DEV_HSMMC
	bool
	help
	  Compile in platform device definitions for HSMMC code

config S3C_DEV_HSMMC1
	bool
	help
	  Compile in platform device definitions for HSMMC channel 1

config S3C_DEV_HSMMC2
	bool
	help
	  Compile in platform device definitions for HSMMC channel 2

config S3C_DEV_HSMMC3
	bool
	help
	  Compile in platform device definitions for HSMMC channel 3

config S3C_DEV_HWMON
	bool
	help
	    Compile in platform device definitions for HWMON

config S3C_DEV_I2C1
	bool
	help
	  Compile in platform device definitions for I2C channel 1

config S3C_DEV_I2C2
	bool
	help
	  Compile in platform device definitions for I2C channel 2

config S3C_DEV_I2C3
	bool
	help
	  Compile in platform device definition for I2C controller 3

config S3C_DEV_I2C4
	bool
	help
	  Compile in platform device definition for I2C controller 4

config S3C_DEV_I2C5
	bool
	help
	  Compile in platform device definition for I2C controller 5

config S3C_DEV_I2C6
	bool
	help
	  Compile in platform device definition for I2C controller 6

config S3C_DEV_I2C7
	bool
	help
	  Compile in platform device definition for I2C controller 7

config S3C_DEV_FB
	bool
	help
	  Compile in platform device definition for framebuffer

config S3C_DEV_USB_HOST
	bool
	help
	  Compile in platform device definition for USB host.

config S3C_DEV_USB_HSOTG
	bool
	help
	  Compile in platform device definition for USB high-speed OtG

config S3C_DEV_WDT
	bool
	default y if ARCH_S3C24XX
	help
	  Complie in platform device definition for Watchdog Timer

config S3C_DEV_NAND
	bool
	help
	  Compile in platform device definition for NAND controller

config S3C_DEV_ONENAND
	bool
	help
	  Compile in platform device definition for OneNAND controller

config S3C_DEV_RTC
	bool
	help
	  Complie in platform device definition for RTC

config SAMSUNG_DEV_ADC
	bool
	help
	  Compile in platform device definition for ADC controller

config SAMSUNG_DEV_IDE
	bool
	help
	  Compile in platform device definitions for IDE

config S3C64XX_DEV_SPI0
	bool
	help
	  Compile in platform device definitions for S3C64XX's type
	  SPI controller 0

config S3C64XX_DEV_SPI1
	bool
	help
	  Compile in platform device definitions for S3C64XX's type
	  SPI controller 1

config S3C64XX_DEV_SPI2
	bool
	help
	  Compile in platform device definitions for S3C64XX's type
	  SPI controller 2

config SAMSUNG_DEV_TS
	bool
	help
	    Common in platform device definitions for touchscreen device

config SAMSUNG_DEV_KEYPAD
	bool
	help
	  Compile in platform device definitions for keypad

config SAMSUNG_DEV_PWM
	bool
	default y if ARCH_S3C24XX
	help
	  Compile in platform device definition for PWM Timer

config SAMSUNG_DEV_BACKLIGHT
	bool
	depends on SAMSUNG_DEV_PWM
	help
	  Compile in platform device definition LCD backlight with PWM Timer

config S5P_DEV_CSIS0
	bool
	help
	  Compile in platform device definitions for MIPI-CSIS channel 0

config S5P_DEV_CSIS1
	bool
	help
	  Compile in platform device definitions for MIPI-CSIS channel 1

config S5P_DEV_FIMC0
	bool
	help
	  Compile in platform device definitions for FIMC controller 0

config S5P_DEV_FIMC1
	bool
	help
	  Compile in platform device definitions for FIMC controller 1

config S5P_DEV_FIMC2
	bool
	help
	  Compile in platform device definitions for FIMC controller 2

config S5P_DEV_FIMC3
	bool
	help
	  Compile in platform device definitions for FIMC controller 3

config S5P_DEV_FIMD0
	bool
	help
	  Compile in platform device definitions for FIMD controller 0

config S5P_DEV_G2D
	bool
	help
	  Compile in platform device definitions for G2D device

config S5P_DEV_I2C_HDMIPHY
	bool
	help
	  Compile in platform device definitions for I2C HDMIPHY controller

config S5P_DEV_JPEG
	bool
	help
	  Compile in platform device definitions for JPEG codec

config S5P_DEV_ONENAND
	bool
	help
	  Compile in platform device definition for OneNAND controller

config S5P_DEV_TV
	bool
	help
	  Compile in platform device definition for TV interface

config S5P_DEV_USB_EHCI
	bool
	help
	  Compile in platform device definition for USB EHCI

config S3C24XX_PWM
	bool "PWM device support"
	select PWM
	select PWM_SAMSUNG
	help
	  Support for exporting the PWM timer blocks via the pwm device
	  system

config S5P_SETUP_MIPIPHY
	bool
	help
	  Compile in common setup code for MIPI-CSIS and MIPI-DSIM devices

config S3C_SETUP_CAMIF
	bool
	help
	  Compile in common setup code for S3C CAMIF devices

# DMA

config S3C_DMA
	bool
	help
	  Internal configuration for S3C DMA core

config S5P_IRQ_PM
	bool
	default y if S5P_PM
	help
	  Legacy IRQ power management for S5P platforms

config SAMSUNG_PM_GPIO
	bool
	default y if GPIO_SAMSUNG && PM
	help
	  Include legacy GPIO power management code for platforms not using
	  pinctrl-samsung driver.

endif

config SAMSUNG_DMADEV
	bool
	select ARM_AMBA
	select DMADEVICES
	select PL330_DMA if (ARCH_EXYNOS5 || ARCH_EXYNOS4 || CPU_S5PV210 || CPU_S5PC100 || \
					CPU_S5P6450 || CPU_S5P6440)
	help
	  Use DMA device engine for PL330 DMAC.

config S5P_DEV_MFC
	bool
	help
	  Compile in setup memory (init) code for MFC

comment "Power management"

config SAMSUNG_PM_DEBUG
	bool "S3C2410 PM Suspend debug"
	depends on PM
	select DEBUG_LL
	help
	  Say Y here if you want verbose debugging from the PM Suspend and
	  Resume code. See <file:Documentation/arm/Samsung-S3C24XX/Suspend.txt>
	  for more information.

config S3C_PM_DEBUG_LED_SMDK
       bool "SMDK LED suspend/resume debugging"
       depends on PM && (MACH_SMDK6410)
       help
         Say Y here to enable the use of the SMDK LEDs on the baseboard
	 for debugging of the state of the suspend and resume process.

	 Note, this currently only works for S3C64XX based SMDK boards.

config SAMSUNG_PM_CHECK
	bool "S3C2410 PM Suspend Memory CRC"
	depends on PM && CRC32
	help
	  Enable the PM code's memory area checksum over sleep. This option
	  will generate CRCs of all blocks of memory, and store them before
	  going to sleep. The blocks are then checked on resume for any
	  errors.

	  Note, this can take several seconds depending on memory size
	  and CPU speed.

	  See <file:Documentation/arm/Samsung-S3C24XX/Suspend.txt>

config SAMSUNG_PM_CHECK_CHUNKSIZE
	int "S3C2410 PM Suspend CRC Chunksize (KiB)"
	depends on PM && SAMSUNG_PM_CHECK
	default 64
	help
	  Set the chunksize in Kilobytes of the CRC for checking memory
	  corruption over suspend and resume. A smaller value will mean that
	  the CRC data block will take more memory, but wil identify any
	  faults with better precision.

	  See <file:Documentation/arm/Samsung-S3C24XX/Suspend.txt>

config SAMSUNG_WAKEMASK
	bool
	depends on PM
	help
	  Compile support for wakeup-mask controls found on the S3C6400
	  and above. This code allows a set of interrupt to wakeup-mask
	  mappings. See <plat/wakeup-mask.h>

config SAMSUNG_WDT_RESET
	bool
	help
	  Compile support for system restart by triggering watchdog reset.
	  Used on SoCs that do not provide dedicated reset control.

config S5P_PM
	bool
	help
	  Common code for power management support on S5P and newer SoCs
	  Note: Do not select this for S5P6440 and S5P6450.

config S5P_SLEEP
	bool
	help
	  Internal config node to apply common S5P sleep management code.
	  Can be selected by S5P and newer SoCs with similar sleep procedure.

config DEBUG_S3C_UART
	depends on PLAT_SAMSUNG
	int
	default "0" if DEBUG_S3C_UART0
	default "1" if DEBUG_S3C_UART1
	default "2" if DEBUG_S3C_UART2
	default "3" if DEBUG_S3C_UART3

endif
