Back to home page

OSCL-LXR

 
 

    


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