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