| # SPDX-License-Identifier: GPL-2.0+ | |
| # Copyright (C) 2019-2021 Maximilian Luz <luzmaximilian@gmail.com> | |
| menuconfig SURFACE_AGGREGATOR | |
| tristate "Microsoft Surface System Aggregator Module Subsystem and Drivers" | |
| depends on SERIAL_DEV_BUS | |
| depends on ACPI | |
| select CRC_CCITT | |
| help | |
| The Surface System Aggregator Module (Surface SAM or SSAM) is an | |
| embedded controller (EC) found on 5th- and later-generation Microsoft | |
| Surface devices (i.e. Surface Pro 5, Surface Book 2, Surface Laptop, | |
| and newer, with exception of Surface Go series devices). | |
| Depending on the device in question, this EC provides varying | |
| functionality, including: | |
| - EC access from ACPI via Surface ACPI Notify (5th- and 6th-generation) | |
| - battery status information (all devices) | |
| - thermal sensor access (all devices) | |
| - performance mode / cooling mode control (all devices) | |
| - clipboard detachment system control (Surface Book 2 and 3) | |
| - HID / keyboard input (Surface Laptops, Surface Book 3) | |
| This option controls whether the Surface SAM subsystem core will be | |
| built. This includes a driver for the Surface Serial Hub (SSH), which | |
| is the device responsible for the communication with the EC, and a | |
| basic kernel interface exposing the EC functionality to other client | |
| drivers, i.e. allowing them to make requests to the EC and receive | |
| events from it. Selecting this option alone will not provide any | |
| client drivers and therefore no functionality beyond the in-kernel | |
| interface. Said functionality is the responsibility of the respective | |
| client drivers. | |
| Note: While 4th-generation Surface devices also make use of a SAM EC, | |
| due to a difference in the communication interface of the controller, | |
| only 5th and later generations are currently supported. Specifically, | |
| devices using SAM-over-SSH are supported, whereas devices using | |
| SAM-over-HID, which is used on the 4th generation, are currently not | |
| supported. | |
| Choose m if you want to build the SAM subsystem core and SSH driver as | |
| module, y if you want to build it into the kernel and n if you don't | |
| want it at all. | |
| config SURFACE_AGGREGATOR_BUS | |
| bool "Surface System Aggregator Module Bus" | |
| depends on SURFACE_AGGREGATOR | |
| default y | |
| help | |
| Expands the Surface System Aggregator Module (SSAM) core driver by | |
| providing a dedicated bus and client-device type. | |
| This bus and device type are intended to provide and simplify support | |
| for non-platform and non-ACPI SSAM devices, i.e. SSAM devices that are | |
| not auto-detectable via the conventional means (e.g. ACPI). | |
| config SURFACE_AGGREGATOR_ERROR_INJECTION | |
| bool "Surface System Aggregator Module Error Injection Capabilities" | |
| depends on SURFACE_AGGREGATOR | |
| depends on FUNCTION_ERROR_INJECTION | |
| help | |
| Provides error-injection capabilities for the Surface System | |
| Aggregator Module subsystem and Surface Serial Hub driver. | |
| Specifically, exports error injection hooks to be used with the | |
| kernel's function error injection capabilities to simulate underlying | |
| transport and communication problems, such as invalid data sent to or | |
| received from the EC, dropped data, and communication timeouts. | |
| Intended for development and debugging. |