• Maximilian Luz's avatar
    platform/surface: Add DTX driver · 1d609992
    Maximilian Luz authored
    The Microsoft Surface Book series devices consist of a so-called
    clipboard part (containing the CPU, touchscreen, and primary battery)
    and a base part (containing keyboard, secondary battery, and optional
    discrete GPU). These parts can be separated, i.e. the clipboard can be
    detached and used as tablet.
    
    This detachment process is initiated by pressing a button. On the
    Surface Book 2 and 3 (targeted with this commit), the Surface Aggregator
    Module (i.e. the embedded controller on those devices) attempts to send
    a notification to any listening client driver and waits for further
    instructions (i.e. whether the detachment process should continue or be
    aborted). If it does not receive a response in a certain time-frame, the
    detachment process (by default) continues and the clipboard can be
    physically separated. In other words, (by default and) without a driver,
    the detachment process takes about 10 seconds to complete.
    
    This commit introduces a driver for this detachment system (called DTX).
    This driver allows a user-space daemon to control and influence the
    detachment behavior. Specifically, it forwards any detachment requests
    to user-space, allows user-space to make such requests itself, and
    allows handling of those requests. Requests can be handled by either
    aborting, continuing/allowing, or delaying (i.e. resetting the timeout
    via a heartbeat commend). The user-space API is implemented via the
    /dev/surface/dtx miscdevice.
    
    In addition, user-space can change the default behavior on timeout from
    allowing detachment to disallowing it, which is useful if the (optional)
    discrete GPU is in use.
    
    Furthermore, this driver allows user-space to receive notifications
    about the state of the base, specifically when it is physically removed
    (as opposed to detachment requested), in what manner it is connected
    (i.e. in reverse-/tent-/studio- or laptop-mode), and what type of base
    is connected. Based on this information, the driver also provides a
    simple tablet-mode switch (aliasing all modes without keyboard access,
    i.e. tablet-mode and studio-mode to its reported tablet-mode).
    
    An implementation of such a user-space daemon, allowing configuration of
    detachment behavior via scripts (e.g. safely unmounting USB devices
    connected to the base before continuing) can be found at [1].
    
    [1]: https://github.com/linux-surface/surface-dtx-daemonSigned-off-by: default avatarMaximilian Luz <luzmaximilian@gmail.com>
    Link: https://lore.kernel.org/r/20210308184819.437438-2-luzmaximilian@gmail.comSigned-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    1d609992
Makefile 806 Bytes