xref: /openbmc/linux/Documentation/driver-api/surface_aggregator/clients/san.rst (revision d0034a7a4ac7fae708146ac0059b9c47a1543f0d)
1*fc00bc8aSMaximilian Luz.. SPDX-License-Identifier: GPL-2.0+
2*fc00bc8aSMaximilian Luz
3*fc00bc8aSMaximilian Luz.. |san_client_link| replace:: :c:func:`san_client_link`
4*fc00bc8aSMaximilian Luz.. |san_dgpu_notifier_register| replace:: :c:func:`san_dgpu_notifier_register`
5*fc00bc8aSMaximilian Luz.. |san_dgpu_notifier_unregister| replace:: :c:func:`san_dgpu_notifier_unregister`
6*fc00bc8aSMaximilian Luz
7*fc00bc8aSMaximilian Luz===================
8*fc00bc8aSMaximilian LuzSurface ACPI Notify
9*fc00bc8aSMaximilian Luz===================
10*fc00bc8aSMaximilian Luz
11*fc00bc8aSMaximilian LuzThe Surface ACPI Notify (SAN) device provides the bridge between ACPI and
12*fc00bc8aSMaximilian LuzSAM controller. Specifically, ACPI code can execute requests and handle
13*fc00bc8aSMaximilian Luzbattery and thermal events via this interface. In addition to this, events
14*fc00bc8aSMaximilian Luzrelating to the discrete GPU (dGPU) of the Surface Book 2 can be sent from
15*fc00bc8aSMaximilian LuzACPI code (note: the Surface Book 3 uses a different method for this). The
16*fc00bc8aSMaximilian Luzonly currently known event sent via this interface is a dGPU power-on
17*fc00bc8aSMaximilian Luznotification. While this driver handles the former part internally, it only
18*fc00bc8aSMaximilian Luzrelays the dGPU events to any other driver interested via its public API and
19*fc00bc8aSMaximilian Luzdoes not handle them.
20*fc00bc8aSMaximilian Luz
21*fc00bc8aSMaximilian LuzThe public interface of this driver is split into two parts: Client
22*fc00bc8aSMaximilian Luzregistration and notifier-block registration.
23*fc00bc8aSMaximilian Luz
24*fc00bc8aSMaximilian LuzA client to the SAN interface can be linked as consumer to the SAN device
25*fc00bc8aSMaximilian Luzvia |san_client_link|. This can be used to ensure that the a client
26*fc00bc8aSMaximilian Luzreceiving dGPU events does not miss any events due to the SAN interface not
27*fc00bc8aSMaximilian Luzbeing set up as this forces the client driver to unbind once the SAN driver
28*fc00bc8aSMaximilian Luzis unbound.
29*fc00bc8aSMaximilian Luz
30*fc00bc8aSMaximilian LuzNotifier-blocks can be registered by any device for as long as the module is
31*fc00bc8aSMaximilian Luzloaded, regardless of being linked as client or not. Registration is done
32*fc00bc8aSMaximilian Luzwith |san_dgpu_notifier_register|. If the notifier is not needed any more, it
33*fc00bc8aSMaximilian Luzshould be unregistered via |san_dgpu_notifier_unregister|.
34*fc00bc8aSMaximilian Luz
35*fc00bc8aSMaximilian LuzConsult the API documentation below for more details.
36*fc00bc8aSMaximilian Luz
37*fc00bc8aSMaximilian Luz
38*fc00bc8aSMaximilian LuzAPI Documentation
39*fc00bc8aSMaximilian Luz=================
40*fc00bc8aSMaximilian Luz
41*fc00bc8aSMaximilian Luz.. kernel-doc:: include/linux/surface_acpi_notify.h
42*fc00bc8aSMaximilian Luz
43*fc00bc8aSMaximilian Luz.. kernel-doc:: drivers/platform/surface/surface_acpi_notify.c
44*fc00bc8aSMaximilian Luz    :export:
45