• Maximilian Luz's avatar
    platform/surface: Add Surface Aggregator subsystem · c167b9c7
    Maximilian Luz authored
    Add Surface System Aggregator Module core and Surface Serial Hub driver,
    required for the embedded controller found on Microsoft Surface devices.
    
    The Surface System Aggregator Module (SSAM, SAM or Surface Aggregator)
    is an embedded controller (EC) found on 4th and later generation
    Microsoft Surface devices, with the exception of the Surface Go series.
    This EC provides various functionality, depending on the device in
    question. This can include battery status and thermal reporting (5th and
    later generations), but also HID keyboard (6th+) and touchpad input
    (7th+) on Surface Laptop and Surface Book 3 series devices.
    
    This patch provides the basic necessities for communication with the SAM
    EC on 5th and later generation devices. On these devices, the EC
    provides an interface that acts as serial device, called the Surface
    Serial Hub (SSH). 4th generation devices, on which the EC interface is
    provided via an HID-over-I2C device, are not supported by this patch.
    
    Specifically, this patch adds a driver for the SSH device (device HID
    MSHW0084 in ACPI), as well as a controller structure and associated API.
    This represents the functional core of the Surface Aggregator kernel
    subsystem, introduced with this patch, and will be expanded upon in
    subsequent commits.
    
    The SSH driver acts as the main attachment point for this subsystem and
    sets-up and manages the controller structure. The controller in turn
    provides a basic communication interface, allowing to send requests from
    host to EC and receiving the corresponding responses, as well as
    managing and receiving events, sent from EC to host. It is structured
    into multiple layers, with the top layer presenting the API used by
    other kernel drivers and the lower layers modeled after the serial
    protocol used for communication.
    
    Said other drivers are then responsible for providing the (Surface model
    specific) functionality accessible through the EC (e.g. battery status
    reporting, thermal information, ...) via said controller structure and
    API, and will be added in future commits.
    Signed-off-by: default avatarMaximilian Luz <luzmaximilian@gmail.com>
    Link: https://lore.kernel.org/r/20201221183959.1186143-2-luzmaximilian@gmail.comSigned-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    c167b9c7
controller.c 74.2 KB