# 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
	help
	  Base platform code for Samsung's S5P series SoC.

config SAMSUNG_PM
	bool
	depends on PM && (PLAT_S3C24XX || ARCH_S3C64XX || ARCH_S5P64X0 || S5P_PM)
	default y
	help
	  Base platform power management code for samsung code

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

# 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 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 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 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 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
