config ARCH_OMAP
	bool

if ARCH_OMAP

menu "TI OMAP Common Features"

config ARCH_OMAP_OTG
	bool

comment "OMAP Feature Selections"

config OMAP_DEBUG_DEVICES
	bool
	help
	  For debug cards on TI reference boards.

config OMAP_DEBUG_LEDS
	def_bool y if NEW_LEDS
	depends on OMAP_DEBUG_DEVICES
	select LEDS_CLASS

config POWER_AVS_OMAP
	bool "AVS(Adaptive Voltage Scaling) support for OMAP IP versions 1&2"
	depends on POWER_AVS && (ARCH_OMAP3 || ARCH_OMAP4) && PM
	select POWER_SUPPLY
	help
	  Say Y to enable AVS(Adaptive Voltage Scaling)
	  support on OMAP containing the version 1 or
	  version 2 of the SmartReflex IP.
	  V1 is the 65nm version used in OMAP3430.
	  V2 is the update for the 45nm version of the IP used in OMAP3630
	  and OMAP4430

	  Please note, that by default SmartReflex is only
	  initialized and not enabled. To enable the automatic voltage
	  compensation for vdd mpu and vdd core from user space,
	  user must write 1 to
		/debug/smartreflex/sr_<X>/autocomp,
	  where X is mpu_iva or core for OMAP3.
	  Optionally autocompensation can be enabled in the kernel
	  by default during system init via the enable_on_init flag
	  which an be passed as platform data to the smartreflex driver.

config POWER_AVS_OMAP_CLASS3
	bool "Class 3 mode of Smartreflex Implementation"
	depends on POWER_AVS_OMAP && TWL4030_CORE
	help
	  Say Y to enable Class 3 implementation of Smartreflex

	  Class 3 implementation of Smartreflex employs continuous hardware
	  voltage calibration.

config OMAP_RESET_CLOCKS
	bool "Reset unused clocks during boot"
	depends on ARCH_OMAP
	help
	  Say Y if you want to reset unused clocks during boot.
	  This option saves power, but assumes all drivers are
	  using the clock framework. Broken drivers that do not
	  yet use clock framework may not work with this option.
	  If you are booting from another operating system, you
	  probably do not want this option enabled until your
	  device drivers work properly.

config OMAP_MPU_TIMER
	bool "Use mpu timer"
	depends on ARCH_OMAP1
	help
	  Select this option if you want to use the OMAP mpu timer. This
	  timer provides more intra-tick resolution than the 32KHz timer,
	  but consumes more power.

config OMAP_32K_TIMER
	bool "Use 32KHz timer"
	depends on ARCH_OMAP16XX || ARCH_OMAP2PLUS
	default y if (ARCH_OMAP16XX || ARCH_OMAP2PLUS)
	help
	  Select this option if you want to enable the OMAP 32KHz timer.
	  This timer saves power compared to the OMAP_MPU_TIMER, and has
	  support for no tick during idle. The 32KHz timer provides less
	  intra-tick resolution than OMAP_MPU_TIMER. The 32KHz timer is
	  currently only available for OMAP16XX, 24XX, 34XX, OMAP4/5 and DRA7XX.

	  On OMAP2PLUS this value is only used for CONFIG_HZ and
	  CLOCK_TICK_RATE compile time calculation.
	  The actual timer selection is done in the board file
	  through the (DT_)MACHINE_START structure.


config OMAP3_L2_AUX_SECURE_SAVE_RESTORE
	bool "OMAP3 HS/EMU save and restore for L2 AUX control register"
	depends on ARCH_OMAP3 && PM
	default n
	help
	  Without this option, L2 Auxiliary control register contents are
	  lost during off-mode entry on HS/EMU devices. This feature
	  requires support from PPA / boot-loader in HS/EMU devices, which
	  currently does not exist by default.

config OMAP3_L2_AUX_SECURE_SERVICE_SET_ID
	int "Service ID for the support routine to set L2 AUX control"
	depends on OMAP3_L2_AUX_SECURE_SAVE_RESTORE
	default 43
	help
	  PPA routine service ID for setting L2 auxiliary control register.

config OMAP_DM_TIMER
	bool "Use dual-mode timer"
	depends on ARCH_OMAP16XX || ARCH_OMAP2PLUS
	help
	 Select this option if you want to use OMAP Dual-Mode timers.

config OMAP_SERIAL_WAKE
	bool "Enable wake-up events for serial ports"
	depends on ARCH_OMAP1 && OMAP_MUX
	default y
	help
	  Select this option if you want to have your system wake up
	  to data on the serial RX line. This allows you to wake the
	  system from serial console.

choice
	prompt "OMAP PM layer selection"
	depends on ARCH_OMAP
	default OMAP_PM_NOOP

config OMAP_PM_NOOP
	bool "No-op/debug PM layer"

endchoice

endmenu

endif
