| # 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 |