# SPDX-License-Identifier: GPL-2.0-only
#
# Microsoft Surface Platform-Specific Drivers
#

menuconfig SURFACE_PLATFORMS
	bool "Microsoft Surface Platform-Specific Device Drivers"
	depends on ACPI
	default y
	help
	  Say Y here to get to see options for platform-specific device drivers
	  for Microsoft Surface devices. This option alone does not add any
	  kernel code.

	  If you say N, all options in this submenu will be skipped and disabled.

if SURFACE_PLATFORMS

config SURFACE3_WMI
	tristate "Surface 3 WMI Driver"
	depends on ACPI_WMI
	depends on DMI
	depends on INPUT
	depends on SPI
	help
	  Say Y here if you have a Surface 3.

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

config SURFACE_3_BUTTON
	tristate "Power/home/volume buttons driver for Microsoft Surface 3 tablet"
	depends on KEYBOARD_GPIO && I2C
	help
	  This driver handles the power/home/volume buttons on the Microsoft Surface 3 tablet.

config SURFACE_3_POWER_OPREGION
	tristate "Surface 3 battery platform operation region support"
	depends on I2C
	help
	  This driver provides support for ACPI operation
	  region of the Surface 3 battery platform driver.

config SURFACE_ACPI_NOTIFY
	tristate "Surface ACPI Notify Driver"
	depends on SURFACE_AGGREGATOR
	help
	  Surface ACPI Notify (SAN) driver for Microsoft Surface devices.

	  This driver provides support for the ACPI interface (called SAN) of
	  the Surface System Aggregator Module (SSAM) EC. This interface is used
	  on 5th- and 6th-generation Microsoft Surface devices (including
	  Surface Pro 5 and 6, Surface Book 2, Surface Laptops 1 and 2, and in
	  reduced functionality on the Surface Laptop 3) to execute SSAM
	  requests directly from ACPI code, as well as receive SSAM events and
	  turn them into ACPI notifications. It essentially acts as a
	  translation layer between the SSAM controller and ACPI.

	  Specifically, this driver may be needed for battery status reporting,
	  thermal sensor access, and real-time clock information, depending on
	  the Surface device in question.

config SURFACE_AGGREGATOR_CDEV
	tristate "Surface System Aggregator Module User-Space Interface"
	depends on SURFACE_AGGREGATOR
	help
	  Provides a misc-device interface to the Surface System Aggregator
	  Module (SSAM) controller.

	  This option provides a module (called surface_aggregator_cdev), that,
	  when loaded, will add a client device (and its respective driver) to
	  the SSAM controller. Said client device manages a misc-device
	  interface (/dev/surface/aggregator), which can be used by user-space
	  tools to directly communicate with the SSAM EC by sending requests and
	  receiving the corresponding responses.

	  The provided interface is intended for debugging and development only,
	  and should not be used otherwise.

config SURFACE_GPE
	tristate "Surface GPE/Lid Support Driver"
	depends on DMI
	help
	  This driver marks the GPEs related to the ACPI lid device found on
	  Microsoft Surface devices as wakeup sources and prepares them
	  accordingly. It is required on those devices to allow wake-ups from
	  suspend by opening the lid.

config SURFACE_PRO3_BUTTON
	tristate "Power/home/volume buttons driver for Microsoft Surface Pro 3/4 tablet"
	depends on INPUT
	help
	  This driver handles the power/home/volume buttons on the Microsoft Surface Pro 3/4 tablet.

source "drivers/platform/surface/aggregator/Kconfig"

endif # SURFACE_PLATFORMS
