# 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 if ARM64 || X86
	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
