0001 # SPDX-License-Identifier: GPL-2.0-only
0002 #
0003 # Microsoft Surface Platform-Specific Drivers
0004 #
0005
0006 menuconfig SURFACE_PLATFORMS
0007 bool "Microsoft Surface Platform-Specific Device Drivers"
0008 depends on ARM64 || X86 || COMPILE_TEST
0009 default y
0010 help
0011 Say Y here to get to see options for platform-specific device drivers
0012 for Microsoft Surface devices. This option alone does not add any
0013 kernel code.
0014
0015 If you say N, all options in this submenu will be skipped and disabled.
0016
0017 if SURFACE_PLATFORMS
0018
0019 config SURFACE3_WMI
0020 tristate "Surface 3 WMI Driver"
0021 depends on ACPI_WMI
0022 depends on DMI
0023 depends on INPUT
0024 depends on SPI
0025 help
0026 Say Y here if you have a Surface 3.
0027
0028 To compile this driver as a module, choose M here: the module will
0029 be called surface3-wmi.
0030
0031 config SURFACE_3_POWER_OPREGION
0032 tristate "Surface 3 battery platform operation region support"
0033 depends on ACPI
0034 depends on I2C
0035 help
0036 This driver provides support for ACPI operation
0037 region of the Surface 3 battery platform driver.
0038
0039 config SURFACE_ACPI_NOTIFY
0040 tristate "Surface ACPI Notify Driver"
0041 depends on SURFACE_AGGREGATOR
0042 help
0043 Surface ACPI Notify (SAN) driver for Microsoft Surface devices.
0044
0045 This driver provides support for the ACPI interface (called SAN) of
0046 the Surface System Aggregator Module (SSAM) EC. This interface is used
0047 on 5th- and 6th-generation Microsoft Surface devices (including
0048 Surface Pro 5 and 6, Surface Book 2, Surface Laptops 1 and 2, and in
0049 reduced functionality on the Surface Laptop 3) to execute SSAM
0050 requests directly from ACPI code, as well as receive SSAM events and
0051 turn them into ACPI notifications. It essentially acts as a
0052 translation layer between the SSAM controller and ACPI.
0053
0054 Specifically, this driver may be needed for battery status reporting,
0055 thermal sensor access, and real-time clock information, depending on
0056 the Surface device in question.
0057
0058 config SURFACE_AGGREGATOR_CDEV
0059 tristate "Surface System Aggregator Module User-Space Interface"
0060 depends on SURFACE_AGGREGATOR
0061 help
0062 Provides a misc-device interface to the Surface System Aggregator
0063 Module (SSAM) controller.
0064
0065 This option provides a module (called surface_aggregator_cdev), that,
0066 when loaded, will add a client device (and its respective driver) to
0067 the SSAM controller. Said client device manages a misc-device
0068 interface (/dev/surface/aggregator), which can be used by user-space
0069 tools to directly communicate with the SSAM EC by sending requests and
0070 receiving the corresponding responses.
0071
0072 The provided interface is intended for debugging and development only,
0073 and should not be used otherwise.
0074
0075 config SURFACE_AGGREGATOR_HUB
0076 tristate "Surface System Aggregator Module Subsystem Device Hubs"
0077 depends on SURFACE_AGGREGATOR
0078 depends on SURFACE_AGGREGATOR_BUS
0079 help
0080 Device-hub drivers for Surface System Aggregator Module (SSAM) subsystem
0081 devices.
0082
0083 Provides subsystem hub drivers which manage client devices on various
0084 SSAM subsystems. In some subsystems, notably the BAS subsystem managing
0085 devices contained in the base of the Surface Book 3 and the KIP subsystem
0086 managing type-cover devices in the Surface Pro 8 and Surface Pro X,
0087 devices can be (hot-)removed. Hub devices and drivers are required to
0088 manage these subdevices.
0089
0090 Devices managed via these hubs are:
0091 - Battery/AC devices (Surface Book 3).
0092 - HID input devices (7th-generation and later models with detachable
0093 input devices).
0094
0095 Select M (recommended) or Y here if you want support for the above
0096 mentioned devices on the corresponding Surface models. Without this
0097 module, the respective devices mentioned above will not be instantiated
0098 and thus any functionality provided by them will be missing, even when
0099 drivers for these devices are present. This module only provides the
0100 respective subsystem hubs. Both drivers and device specification (e.g.
0101 via the Surface Aggregator Registry) for these devices still need to be
0102 selected via other options.
0103
0104 config SURFACE_AGGREGATOR_REGISTRY
0105 tristate "Surface System Aggregator Module Device Registry"
0106 depends on SURFACE_AGGREGATOR
0107 depends on SURFACE_AGGREGATOR_BUS
0108 help
0109 Device-registry for Surface System Aggregator Module (SSAM) devices.
0110
0111 Provides a module and driver which act as a device-registry for SSAM
0112 client devices that cannot be detected automatically, e.g. via ACPI.
0113 Such devices are instead provided and managed via this registry.
0114
0115 Devices provided via this registry are:
0116 - Platform profile (performance-/cooling-mode) device (5th- and later
0117 generations).
0118 - Battery/AC devices (7th-generation).
0119 - HID input devices (7th-generation).
0120
0121 Select M (recommended) or Y here if you want support for the above
0122 mentioned devices on the corresponding Surface models. Without this
0123 module, the respective devices will not be instantiated and thus any
0124 functionality provided by them will be missing, even when drivers for
0125 these devices are present. In other words, this module only provides
0126 the respective client devices. Drivers for these devices still need to
0127 be selected via the other options.
0128
0129 config SURFACE_AGGREGATOR_TABLET_SWITCH
0130 tristate "Surface Aggregator Generic Tablet-Mode Switch Driver"
0131 depends on SURFACE_AGGREGATOR
0132 depends on SURFACE_AGGREGATOR_BUS
0133 depends on INPUT
0134 help
0135 Provides a tablet-mode switch input device on Microsoft Surface models
0136 using the KIP subsystem for detachable keyboards (e.g. keyboard covers)
0137 or the POS subsystem for device/screen posture changes.
0138
0139 The KIP subsystem is used on newer Surface generations to handle
0140 detachable input peripherals, specifically the keyboard cover (containing
0141 keyboard and touchpad) on the Surface Pro 8 and Surface Pro X. The POS
0142 subsystem is used for device posture change notifications on the Surface
0143 Laptop Studio. This module provides a driver to let user-space know when
0144 the device should be considered in tablet-mode due to the keyboard cover
0145 being detached or folded back (essentially signaling when the keyboard is
0146 not available for input). It does so by creating a tablet-mode switch
0147 input device, sending the standard SW_TABLET_MODE event on mode change.
0148
0149 Select M or Y here, if you want to provide tablet-mode switch input
0150 events on the Surface Pro 8, Surface Pro X, and Surface Laptop Studio.
0151
0152 config SURFACE_DTX
0153 tristate "Surface DTX (Detachment System) Driver"
0154 depends on SURFACE_AGGREGATOR
0155 depends on INPUT
0156 help
0157 Driver for the Surface Book clipboard detachment system (DTX).
0158
0159 On the Surface Book series devices, the display part containing the
0160 CPU (called the clipboard) can be detached from the base (containing a
0161 battery, the keyboard, and, optionally, a discrete GPU) by (if
0162 necessary) unlocking and opening the latch connecting both parts.
0163
0164 This driver provides a user-space interface that can influence the
0165 behavior of this process, which includes the option to abort it in
0166 case the base is still in use or speed it up in case it is not.
0167
0168 Note that this module can be built without support for the Surface
0169 Aggregator Bus (i.e. CONFIG_SURFACE_AGGREGATOR_BUS=n). In that case,
0170 some devices, specifically the Surface Book 3, will not be supported.
0171
0172 config SURFACE_GPE
0173 tristate "Surface GPE/Lid Support Driver"
0174 depends on ACPI
0175 depends on DMI
0176 help
0177 This driver marks the GPEs related to the ACPI lid device found on
0178 Microsoft Surface devices as wakeup sources and prepares them
0179 accordingly. It is required on those devices to allow wake-ups from
0180 suspend by opening the lid.
0181
0182 config SURFACE_HOTPLUG
0183 tristate "Surface Hot-Plug Driver"
0184 depends on ACPI
0185 depends on GPIOLIB
0186 help
0187 Driver for out-of-band hot-plug event signaling on Microsoft Surface
0188 devices with hot-pluggable PCIe cards.
0189
0190 This driver is used on Surface Book (2 and 3) devices with a
0191 hot-pluggable discrete GPU (dGPU). When not in use, the dGPU on those
0192 devices can enter D3cold, which prevents in-band (standard) PCIe
0193 hot-plug signaling. Thus, without this driver, detaching the base
0194 containing the dGPU will not correctly update the state of the
0195 corresponding PCIe device if it is in D3cold. This driver adds support
0196 for out-of-band hot-plug notifications, ensuring that the device state
0197 is properly updated even when the device in question is in D3cold.
0198
0199 Select M or Y here, if you want to (fully) support hot-plugging of
0200 dGPU devices on the Surface Book 2 and/or 3 during D3cold.
0201
0202 config SURFACE_PLATFORM_PROFILE
0203 tristate "Surface Platform Profile Driver"
0204 depends on ACPI
0205 depends on SURFACE_AGGREGATOR_REGISTRY
0206 select ACPI_PLATFORM_PROFILE
0207 help
0208 Provides support for the ACPI platform profile on 5th- and later
0209 generation Microsoft Surface devices.
0210
0211 More specifically, this driver provides ACPI platform profile support
0212 on Microsoft Surface devices with a Surface System Aggregator Module
0213 (SSAM) connected via the Surface Serial Hub (SSH / SAM-over-SSH). In
0214 other words, this driver provides platform profile support on the
0215 Surface Pro 5, Surface Book 2, Surface Laptop, Surface Laptop Go and
0216 later. On those devices, the platform profile can significantly
0217 influence cooling behavior, e.g. setting it to 'quiet' (default) or
0218 'low-power' can significantly limit performance of the discrete GPU on
0219 Surface Books, while in turn leading to lower power consumption and/or
0220 less fan noise.
0221
0222 Select M or Y here, if you want to include ACPI platform profile
0223 support on the above mentioned devices.
0224
0225 config SURFACE_PRO3_BUTTON
0226 tristate "Power/home/volume buttons driver for Microsoft Surface Pro 3/4 tablet"
0227 depends on ACPI
0228 depends on INPUT
0229 help
0230 This driver handles the power/home/volume buttons on the Microsoft Surface Pro 3/4 tablet.
0231
0232 source "drivers/platform/surface/aggregator/Kconfig"
0233
0234 endif # SURFACE_PLATFORMS