# 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_ACPI
	tristate "ChromeOS specific ACPI extensions"
	depends on ACPI
	help
	  This driver provides the firmware interface for the services
	  exported through the ChromeOS interfaces when using ChromeOS
	  ACPI firmware.

	  If you have an ACPI-compatible Chromebook, say Y or M here.
	  The module will be called chromeos_acpi.

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
	tristate "ChromeOS Embedded Controller"
	select CROS_EC_PROTO
	depends on X86 || ARM || ARM64 || COMPILE_TEST
	help
	  If you say Y here you get support for the ChromeOS Embedded
	  Controller (EC) providing keyboard, battery and power services.
	  You also need to enable the driver for the bus you are using. The
	  protocol for talking to the EC is defined by the bus driver.

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

config CROS_EC_I2C
	tristate "ChromeOS Embedded Controller (I2C)"
	depends on 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 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 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 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_UART
	tristate "ChromeOS Embedded Controller (UART)"
	depends on CROS_EC && ACPI && SERIAL_DEV_BUS
	help
	  If you say Y here, you get support for talking to the ChromeOS EC
	  through a UART, using a byte-level protocol.

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

config CROS_EC_LPC
	tristate "ChromeOS Embedded Controller (LPC)"
	depends on CROS_EC && ACPI && (X86 || COMPILE_TEST)
	depends on HAS_IOPORT
	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 || CROS_EC || MFD_CROS_EC_DEV)
	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_CHARDEV
	tristate "ChromeOS EC miscdevice"
	depends on MFD_CROS_EC_DEV
	default MFD_CROS_EC_DEV
	help
	  This driver adds file operations support to talk with the
	  ChromeOS EC from userspace via a character device.

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

config CROS_EC_LIGHTBAR
	tristate "Chromebook Pixel's lightbar support"
	depends on MFD_CROS_EC_DEV
	default MFD_CROS_EC_DEV
	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_DEV && OF
	default MFD_CROS_EC_DEV
	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_DEV && DEBUG_FS
	default MFD_CROS_EC_DEV
	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_SENSORHUB
	tristate "ChromeOS EC MEMS Sensor Hub"
	depends on MFD_CROS_EC_DEV
	default MFD_CROS_EC_DEV
	help
	  Allow loading IIO sensors. This driver is loaded by MFD and will in
	  turn query the EC and register the sensors.
	  It also spreads the sensor data coming from the EC to the IIO sensor
	  object.

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

config CROS_EC_SYSFS
	tristate "ChromeOS EC control and information through sysfs"
	depends on MFD_CROS_EC_DEV && SYSFS
	default MFD_CROS_EC_DEV
	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_EC_TYPEC
	tristate "ChromeOS EC Type-C Connector Control"
	depends on MFD_CROS_EC_DEV && TYPEC
	depends on CROS_USBPD_NOTIFY
	depends on USB_ROLE_SWITCH
	default MFD_CROS_EC_DEV
	help
	  If you say Y here, you get support for accessing Type C connector
	  information from the Chrome OS EC.

	  To compile this driver as a module, choose M here: the module will be
	  called cros-ec-typec.

config CROS_HPS_I2C
	tristate "ChromeOS HPS device"
	depends on HID && I2C && PM
	help
	  Say Y here if you want to enable support for the ChromeOS
	  human presence sensor (HPS), attached via I2C. The driver supports a
	  sensor connected to the I2C bus and exposes it as a character device.
	  To save power, the sensor is automatically powered down when no
	  clients are accessing it.

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.

config CROS_USBPD_NOTIFY
	tristate "ChromeOS Type-C power delivery event notifier"
	depends on MFD_CROS_EC_DEV
	default MFD_CROS_EC_DEV
	help
	  If you say Y here, you get support for Type-C PD event notifications
	  from the ChromeOS EC. On ACPI platorms this driver will bind to the
	  GOOG0003 ACPI device, and on platforms which don't have this device it
	  will get initialized on ECs which support the feature
	  EC_FEATURE_USB_PD.

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

config CHROMEOS_PRIVACY_SCREEN
	tristate "ChromeOS Privacy Screen support"
	depends on ACPI
	depends on DRM
	select DRM_PRIVACY_SCREEN
	help
	  This driver provides the support needed for the in-built electronic
	  privacy screen that is present on some ChromeOS devices. When enabled,
	  this should probably always be built into the kernel to avoid or
	  minimize drm probe deferral.

config CROS_TYPEC_SWITCH
	tristate "ChromeOS EC Type-C Switch Control"
	depends on MFD_CROS_EC_DEV && TYPEC && ACPI
	default MFD_CROS_EC_DEV
	help
	  If you say Y here, you get support for configuring the ChromeOS EC Type-C
	  muxes and retimers.

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

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

# Kunit test cases
config CROS_KUNIT_EC_PROTO_TEST
	tristate "Kunit tests for ChromeOS EC protocol" if !KUNIT_ALL_TESTS
	depends on KUNIT && CROS_EC
	default KUNIT_ALL_TESTS
	select CROS_EC_PROTO
	help
	  Kunit tests for ChromeOS EC protocol.

endif # CHROMEOS_PLATFORMS
