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

menuconfig SURFACE_PLATFORMS
	bool "Microsoft Surface Platform-Specific Device Drivers"
	depends on ARM64 || X86 || COMPILE_TEST
	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_POWER_OPREGION
	tristate "Surface 3 battery platform operation region support"
	depends on ACPI
	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_AGGREGATOR_REGISTRY
	tristate "Surface System Aggregator Module Device Registry"
	depends on SURFACE_AGGREGATOR
	depends on SURFACE_AGGREGATOR_BUS
	help
	  Device-registry and device-hubs for Surface System Aggregator Module
	  (SSAM) devices.

	  Provides a module and driver which act as a device-registry for SSAM
	  client devices that cannot be detected automatically, e.g. via ACPI.
	  Such devices are instead provided via this registry and attached via
	  device hubs, also provided in this module.

	  Devices provided via this registry are:
	  - Platform profile (performance-/cooling-mode) device (5th- and later
	    generations).
	  - Battery/AC devices (7th-generation).
	  - HID input devices (7th-generation).

	  Select M (recommended) or Y here if you want support for the above
	  mentioned devices on the corresponding Surface models. Without this
	  module, the respective devices will not be instantiated and thus any
	  functionality provided by them will be missing, even when drivers for
	  these devices are present. In other words, this module only provides
	  the respective client devices. Drivers for these devices still need to
	  be selected via the other options.

config SURFACE_DTX
	tristate "Surface DTX (Detachment System) Driver"
	depends on SURFACE_AGGREGATOR
	depends on INPUT
	help
	  Driver for the Surface Book clipboard detachment system (DTX).

	  On the Surface Book series devices, the display part containing the
	  CPU (called the clipboard) can be detached from the base (containing a
	  battery, the keyboard, and, optionally, a discrete GPU) by (if
	  necessary) unlocking and opening the latch connecting both parts.

	  This driver provides a user-space interface that can influence the
	  behavior of this process, which includes the option to abort it in
	  case the base is still in use or speed it up in case it is not.

	  Note that this module can be built without support for the Surface
	  Aggregator Bus (i.e. CONFIG_SURFACE_AGGREGATOR_BUS=n). In that case,
	  some devices, specifically the Surface Book 3, will not be supported.

config SURFACE_GPE
	tristate "Surface GPE/Lid Support Driver"
	depends on ACPI
	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_HOTPLUG
	tristate "Surface Hot-Plug Driver"
	depends on ACPI
	depends on GPIOLIB
	help
	  Driver for out-of-band hot-plug event signaling on Microsoft Surface
	  devices with hot-pluggable PCIe cards.

	  This driver is used on Surface Book (2 and 3) devices with a
	  hot-pluggable discrete GPU (dGPU). When not in use, the dGPU on those
	  devices can enter D3cold, which prevents in-band (standard) PCIe
	  hot-plug signaling. Thus, without this driver, detaching the base
	  containing the dGPU will not correctly update the state of the
	  corresponding PCIe device if it is in D3cold. This driver adds support
	  for out-of-band hot-plug notifications, ensuring that the device state
	  is properly updated even when the device in question is in D3cold.

	  Select M or Y here, if you want to (fully) support hot-plugging of
	  dGPU devices on the Surface Book 2 and/or 3 during D3cold.

config SURFACE_PLATFORM_PROFILE
	tristate "Surface Platform Profile Driver"
	depends on ACPI
	depends on SURFACE_AGGREGATOR_REGISTRY
	select ACPI_PLATFORM_PROFILE
	help
	  Provides support for the ACPI platform profile on 5th- and later
	  generation Microsoft Surface devices.

	  More specifically, this driver provides ACPI platform profile support
	  on Microsoft Surface devices with a Surface System Aggregator Module
	  (SSAM) connected via the Surface Serial Hub (SSH / SAM-over-SSH). In
	  other words, this driver provides platform profile support on the
	  Surface Pro 5, Surface Book 2, Surface Laptop, Surface Laptop Go and
	  later. On those devices, the platform profile can significantly
	  influence cooling behavior, e.g. setting it to 'quiet' (default) or
	  'low-power' can significantly limit performance of the discrete GPU on
	  Surface Books, while in turn leading to lower power consumption and/or
	  less fan noise.

	  Select M or Y here, if you want to include ACPI platform profile
	  support on the above mentioned devices.

config SURFACE_PRO3_BUTTON
	tristate "Power/home/volume buttons driver for Microsoft Surface Pro 3/4 tablet"
	depends on ACPI
	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
