# SPDX-License-Identifier: GPL-2.0-only
#
# 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_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_RPMSG
	tristate "ChromeOS Embedded Controller (rpmsg)"
	depends on MFD_CROS_EC && RPMSG && OF
	help
	  If you say Y here, you get support for talking to the ChromeOS EC
	  through rpmsg. This uses a simple byte-level protocol with a
	  checksum. Also since there's no addition EC-to-host interrupt, this
	  use a byte in message to distinguish host event from host command.

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

config CROS_EC_ISHTP
	tristate "ChromeOS Embedded Controller (ISHTP)"
	depends on MFD_CROS_EC
	depends on INTEL_ISH_HID
	help
	  If you say Y here, you get support for talking to the ChromeOS EC
	  firmware running on Intel Integrated Sensor Hub (ISH), using the
	  ISH Transport protocol (ISH-TP). This uses a simple byte-level
	  protocol with a checksum.

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

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, including the LPC Microchip EC (MEC) variant.
	  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_lpcs.

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.

config CROS_EC_LIGHTBAR
	tristate "Chromebook Pixel's lightbar support"
	depends on MFD_CROS_EC_CHARDEV
	default MFD_CROS_EC_CHARDEV
	help
	  This option exposes the Chromebook Pixel's lightbar to
	  userspace.

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

config CROS_EC_VBC
	tristate "ChromeOS EC vboot context support"
	depends on MFD_CROS_EC_CHARDEV && OF
	default MFD_CROS_EC_CHARDEV
	help
	  This option exposes the ChromeOS EC vboot context nvram to
	  userspace.

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

config CROS_EC_DEBUGFS
	tristate "Export ChromeOS EC internals in DebugFS"
	depends on MFD_CROS_EC_CHARDEV && DEBUG_FS
	default MFD_CROS_EC_CHARDEV
	help
	  This option exposes the ChromeOS EC device internals to
	  userspace.

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

config CROS_EC_SYSFS
	tristate "ChromeOS EC control and information through sysfs"
	depends on MFD_CROS_EC_CHARDEV && SYSFS
	default MFD_CROS_EC_CHARDEV
	help
	  This option exposes some sysfs attributes to control and get
	  information from ChromeOS EC.

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

config CROS_USBPD_LOGGER
	tristate "Logging driver for USB PD charger"
	depends on CHARGER_CROS_USBPD
	default y
	select RTC_LIB
	help
	  This option enables support for logging event data for the USB PD charger
	  available in the Embedded Controller on ChromeOS systems.

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

source "drivers/platform/chrome/wilco_ec/Kconfig"

endif # CHROMEOS_PLATFORMS
