# 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 CHROMEOS_OF_HW_PROBER
	tristate "ChromeOS Device Tree Hardware Prober"
	depends on OF
	depends on I2C
	select OF_DYNAMIC
	default OF
	help
	  This option enables the device tree hardware prober for ChromeOS
	  devices. The driver will probe the correct component variant in
	  devices that have multiple drop-in options for one component.

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
	tristate
	help
	  ChromeOS EC communication protocol helpers.

config CROS_KBD_LED_BACKLIGHT
	tristate "Backlight LED support for Chrome OS keyboards"
	depends on LEDS_CLASS
	depends on MFD_CROS_EC_DEV || (MFD_CROS_EC_DEV=n && 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_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_ALTMODES
	bool
	help
	  Selectable symbol to enable altmodes.

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
	select CROS_EC_TYPEC_ALTMODES if TYPEC_DP_ALTMODE
	select CROS_EC_TYPEC_ALTMODES if TYPEC_TBT_ALTMODE
	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 platforms 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
