# SPDX-License-Identifier: GPL-2.0-only
#
# For a description of the syntax of this configuration file,
# see Documentation/kbuild/kconfig-language.rst.
#

menuconfig CZNIC_PLATFORMS
	bool "Platform support for CZ.NIC's Turris hardware"
	help
	  Say Y here to be able to choose driver support for CZ.NIC's Turris
	  devices. This option alone does not add any kernel code.

if CZNIC_PLATFORMS

config TURRIS_OMNIA_MCU
	tristate "Turris Omnia MCU driver"
	depends on MACH_ARMADA_38X || COMPILE_TEST
	depends on I2C
	help
	  Say Y here to add support for the features implemented by the
	  microcontroller on the CZ.NIC's Turris Omnia SOHO router.
	  This option only enables the core part of the driver. Specific
	  features can be enabled by subsequent config options.
	  To compile this driver as a module, choose M here; the module will be
	  called turris-omnia-mcu.

if TURRIS_OMNIA_MCU

config TURRIS_OMNIA_MCU_GPIO
	bool "Turris Omnia MCU GPIOs"
	default y
	depends on GPIOLIB
	depends on OF
	select GPIOLIB_IRQCHIP
	help
	  Say Y here to add support for controlling MCU GPIO pins and receiving
	  MCU interrupts on CZ.NIC's Turris Omnia.
	  This enables you to
	  - get front button press events (the front button can be configured
	    either to generate press events to the CPU or to change front LEDs
	    panel brightness),
	  - enable / disable USB port voltage regulators and to detect USB
	    overcurrent,
	  - detect MiniPCIe / mSATA card presence in MiniPCIe port 0,
	  - configure resets of various peripherals on board revisions 32+,
	  - enable / disable the VHV voltage regulator to the SOC in order to be
	    able to program SOC's OTP on board revisions 32+,
	  - get input from the LED output pins of the WAN ethernet PHY, LAN
	    switch and MiniPCIe ports.

config TURRIS_OMNIA_MCU_SYSOFF_WAKEUP
	bool "Turris Omnia MCU system off and RTC wakeup"
	default y
	depends on RTC_CLASS
	help
	  Say Y here to add support for CZ.NIC's Turris Omnia board poweroff
	  into true low power mode (with voltage regulators disabled) and the
	  ability to configure wake up from this mode (via rtcwake).

config TURRIS_OMNIA_MCU_WATCHDOG
	bool "Turris Omnia MCU watchdog"
	default y
	depends on WATCHDOG
	select WATCHDOG_CORE
	help
	  Say Y here to add support for watchdog provided by CZ.NIC's Turris
	  Omnia MCU.

config TURRIS_OMNIA_MCU_TRNG
	bool "Turris Omnia MCU true random number generator"
	default y
	depends on TURRIS_OMNIA_MCU_GPIO
	depends on HW_RANDOM=y || HW_RANDOM=TURRIS_OMNIA_MCU
	help
	  Say Y here to add support for the true random number generator
	  provided by CZ.NIC's Turris Omnia MCU.

endif # TURRIS_OMNIA_MCU

endif # CZNIC_PLATFORMS
