#
# Platform support for Chrome OS hardware (Chromebooks and Chromeboxes)
#

menuconfig CHROME_PLATFORMS
	bool "Platform support for Chrome hardware"
	depends on X86 || ARM || ARM64 || COMPILE_TEST
	---help---
	  Say Y here to get to see options for platform support for
	  various Chromebooks and Chromeboxes. This option alone does
	  not add any kernel code.

	  If you say N, all options in this submenu will be skipped and disabled.

if CHROME_PLATFORMS

config CHROMEOS_LAPTOP
	tristate "Chrome OS Laptop"
	depends on I2C && DMI && X86
	---help---
	  This driver instantiates i2c and smbus devices such as
	  light sensors and touchpads.

	  If you have a supported Chromebook, choose Y or M here.
	  The module will be called chromeos_laptop.

config CHROMEOS_PSTORE
	tristate "Chrome OS pstore support"
	depends on X86
	---help---
	  This module instantiates the persistent storage on x86 ChromeOS
	  devices. It can be used to store away console logs and crash
	  information across reboots.

	  The range of memory used is 0xf00000-0x1000000, traditionally
	  the memory used to back VGA controller memory.

	  If you have a supported Chromebook, choose Y or M here.
	  The module will be called chromeos_pstore.

config CHROMEOS_TBMC
	tristate "ChromeOS Tablet Switch Controller"
	depends on ACPI
	depends on INPUT
	help
	  This option adds a driver for the tablet switch on
	  select Chrome OS systems.

	  To compile this driver as a module, choose M here: the
	  module will be called chromeos_tbmc.

config CROS_EC_CTL
        tristate

config CROS_EC_I2C
	tristate "ChromeOS Embedded Controller (I2C)"
	depends on MFD_CROS_EC && I2C

	help
	  If you say Y here, you get support for talking to the ChromeOS
	  EC through an I2C bus. This uses a simple byte-level protocol with
	  a checksum. Failing accesses will be retried three times to
	  improve reliability.

config CROS_EC_SPI
	tristate "ChromeOS Embedded Controller (SPI)"
	depends on MFD_CROS_EC && SPI

	---help---
	  If you say Y here, you get support for talking to the ChromeOS EC
	  through a SPI bus, using a byte-level protocol. Since the EC's
	  response time cannot be guaranteed, we support ignoring
	  'pre-amble' bytes before the response actually starts.

config CROS_EC_LPC
        tristate "ChromeOS Embedded Controller (LPC)"
        depends on MFD_CROS_EC && ACPI && (X86 || COMPILE_TEST)
        help
          If you say Y here, you get support for talking to the ChromeOS EC
          over an LPC bus. This uses a simple byte-level protocol with a
          checksum. This is used for userspace access only. The kernel
          typically has its own communication methods.

          To compile this driver as a module, choose M here: the
          module will be called cros_ec_lpc.

config CROS_EC_LPC_MEC
	bool "ChromeOS Embedded Controller LPC Microchip EC (MEC) variant"
	depends on CROS_EC_LPC
	default n
	help
	  If you say Y here, a variant LPC protocol for the Microchip EC
	  will be used. Note that this variant is not backward compatible
	  with non-Microchip ECs.

	  If you have a ChromeOS Embedded Controller Microchip EC variant
	  choose Y here.

config CROS_EC_PROTO
        bool
        help
          ChromeOS EC communication protocol helpers.

config CROS_KBD_LED_BACKLIGHT
	tristate "Backlight LED support for Chrome OS keyboards"
	depends on LEDS_CLASS && ACPI
	help
	  This option enables support for the keyboard backlight LEDs on
	  select Chrome OS systems.

	  To compile this driver as a module, choose M here: the
	  module will be called cros_kbd_led_backlight.

endif # CHROMEOS_PLATFORMS
