# 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_HUB
	tristate "Surface System Aggregator Module Subsystem Device Hubs"
	depends on SURFACE_AGGREGATOR
	depends on SURFACE_AGGREGATOR_BUS
	help
	  Device-hub drivers for Surface System Aggregator Module (SSAM) subsystem
	  devices.

	  Provides subsystem hub drivers which manage client devices on various
	  SSAM subsystems. In some subsystems, notably the BAS subsystem managing
	  devices contained in the base of the Surface Book 3 and the KIP subsystem
	  managing type-cover devices in the Surface Pro 8 and Surface Pro X,
	  devices can be (hot-)removed. Hub devices and drivers are required to
	  manage these subdevices.

	  Devices managed via these hubs are:
	  - Battery/AC devices (Surface Book 3).
	  - HID input devices (7th-generation and later models with detachable
	    input devices).

	  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 mentioned above will not be instantiated
	  and thus any functionality provided by them will be missing, even when
	  drivers for these devices are present. This module only provides the
	  respective subsystem hubs. Both drivers and device specification (e.g.
	  via the Surface Aggregator Registry) for these devices still need to be
	  selected via other options.

config SURFACE_AGGREGATOR_REGISTRY
	tristate "Surface System Aggregator Module Device Registry"
	depends on SURFACE_AGGREGATOR
	depends on SURFACE_AGGREGATOR_BUS
	help
	  Device-registry 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 and managed via this registry.

	  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_AGGREGATOR_TABLET_SWITCH
	tristate "Surface Aggregator Generic Tablet-Mode Switch Driver"
	depends on SURFACE_AGGREGATOR
	depends on SURFACE_AGGREGATOR_BUS
	depends on INPUT
	help
	  Provides a tablet-mode switch input device on Microsoft Surface models
	  using the KIP subsystem for detachable keyboards (e.g. keyboard covers)
	  or the POS subsystem for device/screen posture changes.

	  The KIP subsystem is used on newer Surface generations to handle
	  detachable input peripherals, specifically the keyboard cover (containing
	  keyboard and touchpad) on the Surface Pro 8 and Surface Pro X. The POS
	  subsystem is used for device posture change notifications on the Surface
	  Laptop Studio. This module provides a driver to let user-space know when
	  the device should be considered in tablet-mode due to the keyboard cover
	  being detached or folded back (essentially signaling when the keyboard is
	  not available for input). It does so by creating a tablet-mode switch
	  input device, sending the standard SW_TABLET_MODE event on mode change.

	  Select M or Y here, if you want to provide tablet-mode switch input
	  events on the Surface Pro 8, Surface Pro X, and Surface Laptop Studio.

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
