# 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
	depends on !CPU_BIG_ENDIAN || 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
	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
