• Maximilian Luz's avatar
    platform/surface: Add Surface ACPI Notify driver · fc00bc8a
    Maximilian Luz authored
    The Surface ACPI Notify (SAN) device provides an ACPI interface to the
    Surface Aggregator EC, specifically the Surface Serial Hub interface.
    This interface allows EC requests to be made from ACPI code and can
    convert a subset of EC events back to ACPI notifications.
    
    Specifically, this interface provides a GenericSerialBus operation
    region ACPI code can execute a request by writing the request command
    data and payload to this operation region and reading back the
    corresponding response via a write-then-read operation. Furthermore,
    this interface provides a _DSM method to be called when certain events
    from the EC have been received, essentially turning them into ACPI
    notifications.
    
    The driver provided in this commit essentially takes care of translating
    the request data written to the operation region, executing the request,
    waiting for it to finish, and finally writing and translating back the
    response (if the request has one). Furthermore, this driver takes care
    of enabling the events handled via ACPI _DSM calls. Lastly, this driver
    also exposes an interface providing discrete GPU (dGPU) power-on
    notifications on the Surface Book 2, which are also received via the
    operation region interface (but not handled by the SAN driver directly),
    making them accessible to other drivers (such as a dGPU hot-plug driver
    that may be added later on).
    
    On 5th and 6th generation Surface devices (Surface Pro 5/2017, Pro 6,
    Book 2, Laptop 1 and 2), the SAN interface provides full battery and
    thermal subsystem access, as well as other EC based functionality. On
    those models, battery and thermal sensor devices are implemented as
    standard ACPI devices of that type, however, forward ACPI calls to the
    corresponding Surface Aggregator EC request via the SAN interface and
    receive corresponding notifications (e.g. battery information change)
    from it. This interface is therefore required to provide said
    functionality on those devices.
    Signed-off-by: default avatarMaximilian Luz <luzmaximilian@gmail.com>
    Reviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20201221183959.1186143-10-luzmaximilian@gmail.comSigned-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    fc00bc8a
Makefile 566 Bytes