| 1 | # SPDX-License-Identifier: GPL-2.0-only |
| 2 | # |
| 3 | # Microsoft Surface Platform-Specific Drivers |
| 4 | # |
| 5 | |
| 6 | menuconfig SURFACE_PLATFORMS |
| 7 | bool "Microsoft Surface Platform-Specific Device Drivers" |
| 8 | depends on ARM64 || X86 || COMPILE_TEST |
| 9 | default y if ARM64 || X86 |
| 10 | help |
| 11 | Say Y here to get to see options for platform-specific device drivers |
| 12 | for Microsoft Surface devices. This option alone does not add any |
| 13 | kernel code. |
| 14 | |
| 15 | If you say N, all options in this submenu will be skipped and disabled. |
| 16 | |
| 17 | if SURFACE_PLATFORMS |
| 18 | |
| 19 | config SURFACE3_WMI |
| 20 | tristate "Surface 3 WMI Driver" |
| 21 | depends on ACPI_WMI |
| 22 | depends on DMI |
| 23 | depends on INPUT |
| 24 | depends on SPI |
| 25 | help |
| 26 | Say Y here if you have a Surface 3. |
| 27 | |
| 28 | To compile this driver as a module, choose M here: the module will |
| 29 | be called surface3-wmi. |
| 30 | |
| 31 | config SURFACE_3_POWER_OPREGION |
| 32 | tristate "Surface 3 battery platform operation region support" |
| 33 | depends on ACPI |
| 34 | depends on I2C |
| 35 | help |
| 36 | This driver provides support for ACPI operation |
| 37 | region of the Surface 3 battery platform driver. |
| 38 | |
| 39 | config SURFACE_ACPI_NOTIFY |
| 40 | tristate "Surface ACPI Notify Driver" |
| 41 | depends on SURFACE_AGGREGATOR |
| 42 | help |
| 43 | Surface ACPI Notify (SAN) driver for Microsoft Surface devices. |
| 44 | |
| 45 | This driver provides support for the ACPI interface (called SAN) of |
| 46 | the Surface System Aggregator Module (SSAM) EC. This interface is used |
| 47 | on 5th- and 6th-generation Microsoft Surface devices (including |
| 48 | Surface Pro 5 and 6, Surface Book 2, Surface Laptops 1 and 2, and in |
| 49 | reduced functionality on the Surface Laptop 3) to execute SSAM |
| 50 | requests directly from ACPI code, as well as receive SSAM events and |
| 51 | turn them into ACPI notifications. It essentially acts as a |
| 52 | translation layer between the SSAM controller and ACPI. |
| 53 | |
| 54 | Specifically, this driver may be needed for battery status reporting, |
| 55 | thermal sensor access, and real-time clock information, depending on |
| 56 | the Surface device in question. |
| 57 | |
| 58 | config SURFACE_AGGREGATOR_CDEV |
| 59 | tristate "Surface System Aggregator Module User-Space Interface" |
| 60 | depends on SURFACE_AGGREGATOR |
| 61 | help |
| 62 | Provides a misc-device interface to the Surface System Aggregator |
| 63 | Module (SSAM) controller. |
| 64 | |
| 65 | This option provides a module (called surface_aggregator_cdev), that, |
| 66 | when loaded, will add a client device (and its respective driver) to |
| 67 | the SSAM controller. Said client device manages a misc-device |
| 68 | interface (/dev/surface/aggregator), which can be used by user-space |
| 69 | tools to directly communicate with the SSAM EC by sending requests and |
| 70 | receiving the corresponding responses. |
| 71 | |
| 72 | The provided interface is intended for debugging and development only, |
| 73 | and should not be used otherwise. |
| 74 | |
| 75 | config SURFACE_AGGREGATOR_HUB |
| 76 | tristate "Surface System Aggregator Module Subsystem Device Hubs" |
| 77 | depends on SURFACE_AGGREGATOR |
| 78 | depends on SURFACE_AGGREGATOR_BUS |
| 79 | help |
| 80 | Device-hub drivers for Surface System Aggregator Module (SSAM) subsystem |
| 81 | devices. |
| 82 | |
| 83 | Provides subsystem hub drivers which manage client devices on various |
| 84 | SSAM subsystems. In some subsystems, notably the BAS subsystem managing |
| 85 | devices contained in the base of the Surface Book 3 and the KIP subsystem |
| 86 | managing type-cover devices in the Surface Pro 8 and Surface Pro X, |
| 87 | devices can be (hot-)removed. Hub devices and drivers are required to |
| 88 | manage these subdevices. |
| 89 | |
| 90 | Devices managed via these hubs are: |
| 91 | - Battery/AC devices (Surface Book 3). |
| 92 | - HID input devices (7th-generation and later models with detachable |
| 93 | input devices). |
| 94 | |
| 95 | Select M (recommended) or Y here if you want support for the above |
| 96 | mentioned devices on the corresponding Surface models. Without this |
| 97 | module, the respective devices mentioned above will not be instantiated |
| 98 | and thus any functionality provided by them will be missing, even when |
| 99 | drivers for these devices are present. This module only provides the |
| 100 | respective subsystem hubs. Both drivers and device specification (e.g. |
| 101 | via the Surface Aggregator Registry) for these devices still need to be |
| 102 | selected via other options. |
| 103 | |
| 104 | config SURFACE_AGGREGATOR_REGISTRY |
| 105 | tristate "Surface System Aggregator Module Device Registry" |
| 106 | depends on SURFACE_AGGREGATOR |
| 107 | depends on SURFACE_AGGREGATOR_BUS |
| 108 | help |
| 109 | Device-registry for Surface System Aggregator Module (SSAM) devices. |
| 110 | |
| 111 | Provides a module and driver which act as a device-registry for SSAM |
| 112 | client devices that cannot be detected automatically, e.g. via ACPI. |
| 113 | Such devices are instead provided and managed via this registry. |
| 114 | |
| 115 | Devices provided via this registry are: |
| 116 | - Platform profile (performance-/cooling-mode) device (5th- and later |
| 117 | generations). |
| 118 | - Battery/AC devices (7th-generation). |
| 119 | - HID input devices (7th-generation). |
| 120 | |
| 121 | Select M (recommended) or Y here if you want support for the above |
| 122 | mentioned devices on the corresponding Surface models. Without this |
| 123 | module, the respective devices will not be instantiated and thus any |
| 124 | functionality provided by them will be missing, even when drivers for |
| 125 | these devices are present. In other words, this module only provides |
| 126 | the respective client devices. Drivers for these devices still need to |
| 127 | be selected via the other options. |
| 128 | |
| 129 | config SURFACE_AGGREGATOR_TABLET_SWITCH |
| 130 | tristate "Surface Aggregator Generic Tablet-Mode Switch Driver" |
| 131 | depends on SURFACE_AGGREGATOR |
| 132 | depends on SURFACE_AGGREGATOR_BUS |
| 133 | depends on INPUT |
| 134 | help |
| 135 | Provides a tablet-mode switch input device on Microsoft Surface models |
| 136 | using the KIP subsystem for detachable keyboards (e.g. keyboard covers) |
| 137 | or the POS subsystem for device/screen posture changes. |
| 138 | |
| 139 | The KIP subsystem is used on newer Surface generations to handle |
| 140 | detachable input peripherals, specifically the keyboard cover (containing |
| 141 | keyboard and touchpad) on the Surface Pro 8 and Surface Pro X. The POS |
| 142 | subsystem is used for device posture change notifications on the Surface |
| 143 | Laptop Studio. This module provides a driver to let user-space know when |
| 144 | the device should be considered in tablet-mode due to the keyboard cover |
| 145 | being detached or folded back (essentially signaling when the keyboard is |
| 146 | not available for input). It does so by creating a tablet-mode switch |
| 147 | input device, sending the standard SW_TABLET_MODE event on mode change. |
| 148 | |
| 149 | Select M or Y here, if you want to provide tablet-mode switch input |
| 150 | events on the Surface Pro 8, Surface Pro X, and Surface Laptop Studio. |
| 151 | |
| 152 | config SURFACE_DTX |
| 153 | tristate "Surface DTX (Detachment System) Driver" |
| 154 | depends on SURFACE_AGGREGATOR |
| 155 | depends on INPUT |
| 156 | help |
| 157 | Driver for the Surface Book clipboard detachment system (DTX). |
| 158 | |
| 159 | On the Surface Book series devices, the display part containing the |
| 160 | CPU (called the clipboard) can be detached from the base (containing a |
| 161 | battery, the keyboard, and, optionally, a discrete GPU) by (if |
| 162 | necessary) unlocking and opening the latch connecting both parts. |
| 163 | |
| 164 | This driver provides a user-space interface that can influence the |
| 165 | behavior of this process, which includes the option to abort it in |
| 166 | case the base is still in use or speed it up in case it is not. |
| 167 | |
| 168 | Note that this module can be built without support for the Surface |
| 169 | Aggregator Bus (i.e. CONFIG_SURFACE_AGGREGATOR_BUS=n). In that case, |
| 170 | some devices, specifically the Surface Book 3, will not be supported. |
| 171 | |
| 172 | config SURFACE_GPE |
| 173 | tristate "Surface GPE/Lid Support Driver" |
| 174 | depends on ACPI |
| 175 | depends on DMI |
| 176 | help |
| 177 | This driver marks the GPEs related to the ACPI lid device found on |
| 178 | Microsoft Surface devices as wakeup sources and prepares them |
| 179 | accordingly. It is required on those devices to allow wake-ups from |
| 180 | suspend by opening the lid. |
| 181 | |
| 182 | config SURFACE_HOTPLUG |
| 183 | tristate "Surface Hot-Plug Driver" |
| 184 | depends on ACPI |
| 185 | depends on GPIOLIB |
| 186 | help |
| 187 | Driver for out-of-band hot-plug event signaling on Microsoft Surface |
| 188 | devices with hot-pluggable PCIe cards. |
| 189 | |
| 190 | This driver is used on Surface Book (2 and 3) devices with a |
| 191 | hot-pluggable discrete GPU (dGPU). When not in use, the dGPU on those |
| 192 | devices can enter D3cold, which prevents in-band (standard) PCIe |
| 193 | hot-plug signaling. Thus, without this driver, detaching the base |
| 194 | containing the dGPU will not correctly update the state of the |
| 195 | corresponding PCIe device if it is in D3cold. This driver adds support |
| 196 | for out-of-band hot-plug notifications, ensuring that the device state |
| 197 | is properly updated even when the device in question is in D3cold. |
| 198 | |
| 199 | Select M or Y here, if you want to (fully) support hot-plugging of |
| 200 | dGPU devices on the Surface Book 2 and/or 3 during D3cold. |
| 201 | |
| 202 | config SURFACE_PLATFORM_PROFILE |
| 203 | tristate "Surface Platform Profile Driver" |
| 204 | depends on ACPI |
| 205 | depends on SURFACE_AGGREGATOR_REGISTRY |
| 206 | select ACPI_PLATFORM_PROFILE |
| 207 | help |
| 208 | Provides support for the ACPI platform profile on 5th- and later |
| 209 | generation Microsoft Surface devices. |
| 210 | |
| 211 | More specifically, this driver provides ACPI platform profile support |
| 212 | on Microsoft Surface devices with a Surface System Aggregator Module |
| 213 | (SSAM) connected via the Surface Serial Hub (SSH / SAM-over-SSH). In |
| 214 | other words, this driver provides platform profile support on the |
| 215 | Surface Pro 5, Surface Book 2, Surface Laptop, Surface Laptop Go and |
| 216 | later. On those devices, the platform profile can significantly |
| 217 | influence cooling behavior, e.g. setting it to 'quiet' (default) or |
| 218 | 'low-power' can significantly limit performance of the discrete GPU on |
| 219 | Surface Books, while in turn leading to lower power consumption and/or |
| 220 | less fan noise. |
| 221 | |
| 222 | Select M or Y here, if you want to include ACPI platform profile |
| 223 | support on the above mentioned devices. |
| 224 | |
| 225 | config SURFACE_PRO3_BUTTON |
| 226 | tristate "Power/home/volume buttons driver for Microsoft Surface Pro 3/4 tablet" |
| 227 | depends on ACPI |
| 228 | depends on INPUT |
| 229 | help |
| 230 | This driver handles the power/home/volume buttons on the Microsoft Surface Pro 3/4 tablet. |
| 231 | |
| 232 | source "drivers/platform/surface/aggregator/Kconfig" |
| 233 | |
| 234 | endif # SURFACE_PLATFORMS |