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

menuconfig CHROME_PLATFORMS
	bool "Platform support for Chrome hardware"
	---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
