Merge tag 'drm-msm-fixes-2022-08-27' of https://gitlab.freedesktop.org/drm/msm into...
[platform/kernel/linux-starfive.git] / drivers / platform / surface / Kconfig
1 # SPDX-License-Identifier: GPL-2.0-only
2 #
3 # Microsoft Surface Platform-Specific Drivers
4 #
5
6 menuconfig SURFACE_PLATFORMS
7         bool "Microsoft Surface Platform-Specific Device Drivers"
8         depends on ARM64 || X86 || COMPILE_TEST
9         default y
10         help
11           Say Y here to get to see options for platform-specific device drivers
12           for Microsoft Surface devices. This option alone does not add any
13           kernel code.
14
15           If you say N, all options in this submenu will be skipped and disabled.
16
17 if SURFACE_PLATFORMS
18
19 config SURFACE3_WMI
20         tristate "Surface 3 WMI Driver"
21         depends on ACPI_WMI
22         depends on DMI
23         depends on INPUT
24         depends on SPI
25         help
26           Say Y here if you have a Surface 3.
27
28           To compile this driver as a module, choose M here: the module will
29           be called surface3-wmi.
30
31 config SURFACE_3_POWER_OPREGION
32         tristate "Surface 3 battery platform operation region support"
33         depends on ACPI
34         depends on I2C
35         help
36           This driver provides support for ACPI operation
37           region of the Surface 3 battery platform driver.
38
39 config SURFACE_ACPI_NOTIFY
40         tristate "Surface ACPI Notify Driver"
41         depends on SURFACE_AGGREGATOR
42         help
43           Surface ACPI Notify (SAN) driver for Microsoft Surface devices.
44
45           This driver provides support for the ACPI interface (called SAN) of
46           the Surface System Aggregator Module (SSAM) EC. This interface is used
47           on 5th- and 6th-generation Microsoft Surface devices (including
48           Surface Pro 5 and 6, Surface Book 2, Surface Laptops 1 and 2, and in
49           reduced functionality on the Surface Laptop 3) to execute SSAM
50           requests directly from ACPI code, as well as receive SSAM events and
51           turn them into ACPI notifications. It essentially acts as a
52           translation layer between the SSAM controller and ACPI.
53
54           Specifically, this driver may be needed for battery status reporting,
55           thermal sensor access, and real-time clock information, depending on
56           the Surface device in question.
57
58 config SURFACE_AGGREGATOR_CDEV
59         tristate "Surface System Aggregator Module User-Space Interface"
60         depends on SURFACE_AGGREGATOR
61         help
62           Provides a misc-device interface to the Surface System Aggregator
63           Module (SSAM) controller.
64
65           This option provides a module (called surface_aggregator_cdev), that,
66           when loaded, will add a client device (and its respective driver) to
67           the SSAM controller. Said client device manages a misc-device
68           interface (/dev/surface/aggregator), which can be used by user-space
69           tools to directly communicate with the SSAM EC by sending requests and
70           receiving the corresponding responses.
71
72           The provided interface is intended for debugging and development only,
73           and should not be used otherwise.
74
75 config SURFACE_AGGREGATOR_HUB
76         tristate "Surface System Aggregator Module Subsystem Device Hubs"
77         depends on SURFACE_AGGREGATOR
78         depends on SURFACE_AGGREGATOR_BUS
79         help
80           Device-hub drivers for Surface System Aggregator Module (SSAM) subsystem
81           devices.
82
83           Provides subsystem hub drivers which manage client devices on various
84           SSAM subsystems. In some subsystems, notably the BAS subsystem managing
85           devices contained in the base of the Surface Book 3 and the KIP subsystem
86           managing type-cover devices in the Surface Pro 8 and Surface Pro X,
87           devices can be (hot-)removed. Hub devices and drivers are required to
88           manage these subdevices.
89
90           Devices managed via these hubs are:
91           - Battery/AC devices (Surface Book 3).
92           - HID input devices (7th-generation and later models with detachable
93             input devices).
94
95           Select M (recommended) or Y here if you want support for the above
96           mentioned devices on the corresponding Surface models. Without this
97           module, the respective devices mentioned above will not be instantiated
98           and thus any functionality provided by them will be missing, even when
99           drivers for these devices are present. This module only provides the
100           respective subsystem hubs. Both drivers and device specification (e.g.
101           via the Surface Aggregator Registry) for these devices still need to be
102           selected via other options.
103
104 config SURFACE_AGGREGATOR_REGISTRY
105         tristate "Surface System Aggregator Module Device Registry"
106         depends on SURFACE_AGGREGATOR
107         depends on SURFACE_AGGREGATOR_BUS
108         help
109           Device-registry for Surface System Aggregator Module (SSAM) devices.
110
111           Provides a module and driver which act as a device-registry for SSAM
112           client devices that cannot be detected automatically, e.g. via ACPI.
113           Such devices are instead provided and managed via this registry.
114
115           Devices provided via this registry are:
116           - Platform profile (performance-/cooling-mode) device (5th- and later
117             generations).
118           - Battery/AC devices (7th-generation).
119           - HID input devices (7th-generation).
120
121           Select M (recommended) or Y here if you want support for the above
122           mentioned devices on the corresponding Surface models. Without this
123           module, the respective devices will not be instantiated and thus any
124           functionality provided by them will be missing, even when drivers for
125           these devices are present. In other words, this module only provides
126           the respective client devices. Drivers for these devices still need to
127           be selected via the other options.
128
129 config SURFACE_AGGREGATOR_TABLET_SWITCH
130         tristate "Surface Aggregator Generic Tablet-Mode Switch Driver"
131         depends on SURFACE_AGGREGATOR
132         depends on SURFACE_AGGREGATOR_BUS
133         depends on INPUT
134         help
135           Provides a tablet-mode switch input device on Microsoft Surface models
136           using the KIP subsystem for detachable keyboards (e.g. keyboard covers)
137           or the POS subsystem for device/screen posture changes.
138
139           The KIP subsystem is used on newer Surface generations to handle
140           detachable input peripherals, specifically the keyboard cover (containing
141           keyboard and touchpad) on the Surface Pro 8 and Surface Pro X. The POS
142           subsystem is used for device posture change notifications on the Surface
143           Laptop Studio. This module provides a driver to let user-space know when
144           the device should be considered in tablet-mode due to the keyboard cover
145           being detached or folded back (essentially signaling when the keyboard is
146           not available for input). It does so by creating a tablet-mode switch
147           input device, sending the standard SW_TABLET_MODE event on mode change.
148
149           Select M or Y here, if you want to provide tablet-mode switch input
150           events on the Surface Pro 8, Surface Pro X, and Surface Laptop Studio.
151
152 config SURFACE_DTX
153         tristate "Surface DTX (Detachment System) Driver"
154         depends on SURFACE_AGGREGATOR
155         depends on INPUT
156         help
157           Driver for the Surface Book clipboard detachment system (DTX).
158
159           On the Surface Book series devices, the display part containing the
160           CPU (called the clipboard) can be detached from the base (containing a
161           battery, the keyboard, and, optionally, a discrete GPU) by (if
162           necessary) unlocking and opening the latch connecting both parts.
163
164           This driver provides a user-space interface that can influence the
165           behavior of this process, which includes the option to abort it in
166           case the base is still in use or speed it up in case it is not.
167
168           Note that this module can be built without support for the Surface
169           Aggregator Bus (i.e. CONFIG_SURFACE_AGGREGATOR_BUS=n). In that case,
170           some devices, specifically the Surface Book 3, will not be supported.
171
172 config SURFACE_GPE
173         tristate "Surface GPE/Lid Support Driver"
174         depends on ACPI
175         depends on DMI
176         help
177           This driver marks the GPEs related to the ACPI lid device found on
178           Microsoft Surface devices as wakeup sources and prepares them
179           accordingly. It is required on those devices to allow wake-ups from
180           suspend by opening the lid.
181
182 config SURFACE_HOTPLUG
183         tristate "Surface Hot-Plug Driver"
184         depends on ACPI
185         depends on GPIOLIB
186         help
187           Driver for out-of-band hot-plug event signaling on Microsoft Surface
188           devices with hot-pluggable PCIe cards.
189
190           This driver is used on Surface Book (2 and 3) devices with a
191           hot-pluggable discrete GPU (dGPU). When not in use, the dGPU on those
192           devices can enter D3cold, which prevents in-band (standard) PCIe
193           hot-plug signaling. Thus, without this driver, detaching the base
194           containing the dGPU will not correctly update the state of the
195           corresponding PCIe device if it is in D3cold. This driver adds support
196           for out-of-band hot-plug notifications, ensuring that the device state
197           is properly updated even when the device in question is in D3cold.
198
199           Select M or Y here, if you want to (fully) support hot-plugging of
200           dGPU devices on the Surface Book 2 and/or 3 during D3cold.
201
202 config SURFACE_PLATFORM_PROFILE
203         tristate "Surface Platform Profile Driver"
204         depends on ACPI
205         depends on SURFACE_AGGREGATOR_REGISTRY
206         select ACPI_PLATFORM_PROFILE
207         help
208           Provides support for the ACPI platform profile on 5th- and later
209           generation Microsoft Surface devices.
210
211           More specifically, this driver provides ACPI platform profile support
212           on Microsoft Surface devices with a Surface System Aggregator Module
213           (SSAM) connected via the Surface Serial Hub (SSH / SAM-over-SSH). In
214           other words, this driver provides platform profile support on the
215           Surface Pro 5, Surface Book 2, Surface Laptop, Surface Laptop Go and
216           later. On those devices, the platform profile can significantly
217           influence cooling behavior, e.g. setting it to 'quiet' (default) or
218           'low-power' can significantly limit performance of the discrete GPU on
219           Surface Books, while in turn leading to lower power consumption and/or
220           less fan noise.
221
222           Select M or Y here, if you want to include ACPI platform profile
223           support on the above mentioned devices.
224
225 config SURFACE_PRO3_BUTTON
226         tristate "Power/home/volume buttons driver for Microsoft Surface Pro 3/4 tablet"
227         depends on ACPI
228         depends on INPUT
229         help
230           This driver handles the power/home/volume buttons on the Microsoft Surface Pro 3/4 tablet.
231
232 source "drivers/platform/surface/aggregator/Kconfig"
233
234 endif # SURFACE_PLATFORMS