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

menuconfig CHROME_PLATFORMS
	bool "Platform support for Chrome hardware"
	depends on X86 || ARM
	---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 CROS_EC_CHARDEV
        tristate "Chrome OS Embedded Controller userspace device interface"
        depends on CROS_EC_PROTO
        ---help---
          This driver adds support to talk with the ChromeOS EC from userspace.

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

config CROS_EC_LPC
        tristate "ChromeOS Embedded Controller (LPC)"
        depends on MFD_CROS_EC && CROS_EC_PROTO && (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_PROTO
        bool
        help
          ChromeOS EC communication protocol helpers.

endif # CHROMEOS_PLATFORMS
