xref: /openbmc/linux/drivers/platform/surface/Kconfig (revision 4a0a1436)
1# SPDX-License-Identifier: GPL-2.0-only
2#
3# Microsoft Surface Platform-Specific Drivers
4#
5
6menuconfig 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
17if SURFACE_PLATFORMS
18
19config 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
31config SURFACE_3_BUTTON
32	tristate "Power/home/volume buttons driver for Microsoft Surface 3 tablet"
33	depends on ACPI
34	depends on KEYBOARD_GPIO && I2C
35	help
36	  This driver handles the power/home/volume buttons on the Microsoft Surface 3 tablet.
37
38config SURFACE_3_POWER_OPREGION
39	tristate "Surface 3 battery platform operation region support"
40	depends on ACPI
41	depends on I2C
42	help
43	  This driver provides support for ACPI operation
44	  region of the Surface 3 battery platform driver.
45
46config SURFACE_ACPI_NOTIFY
47	tristate "Surface ACPI Notify Driver"
48	depends on SURFACE_AGGREGATOR
49	help
50	  Surface ACPI Notify (SAN) driver for Microsoft Surface devices.
51
52	  This driver provides support for the ACPI interface (called SAN) of
53	  the Surface System Aggregator Module (SSAM) EC. This interface is used
54	  on 5th- and 6th-generation Microsoft Surface devices (including
55	  Surface Pro 5 and 6, Surface Book 2, Surface Laptops 1 and 2, and in
56	  reduced functionality on the Surface Laptop 3) to execute SSAM
57	  requests directly from ACPI code, as well as receive SSAM events and
58	  turn them into ACPI notifications. It essentially acts as a
59	  translation layer between the SSAM controller and ACPI.
60
61	  Specifically, this driver may be needed for battery status reporting,
62	  thermal sensor access, and real-time clock information, depending on
63	  the Surface device in question.
64
65config SURFACE_AGGREGATOR_CDEV
66	tristate "Surface System Aggregator Module User-Space Interface"
67	depends on SURFACE_AGGREGATOR
68	help
69	  Provides a misc-device interface to the Surface System Aggregator
70	  Module (SSAM) controller.
71
72	  This option provides a module (called surface_aggregator_cdev), that,
73	  when loaded, will add a client device (and its respective driver) to
74	  the SSAM controller. Said client device manages a misc-device
75	  interface (/dev/surface/aggregator), which can be used by user-space
76	  tools to directly communicate with the SSAM EC by sending requests and
77	  receiving the corresponding responses.
78
79	  The provided interface is intended for debugging and development only,
80	  and should not be used otherwise.
81
82config SURFACE_AGGREGATOR_REGISTRY
83	tristate "Surface System Aggregator Module Device Registry"
84	depends on SURFACE_AGGREGATOR
85	depends on SURFACE_AGGREGATOR_BUS
86	help
87	  Device-registry and device-hubs for Surface System Aggregator Module
88	  (SSAM) devices.
89
90	  Provides a module and driver which act as a device-registry for SSAM
91	  client devices that cannot be detected automatically, e.g. via ACPI.
92	  Such devices are instead provided via this registry and attached via
93	  device hubs, also provided in this module.
94
95	  Devices provided via this registry are:
96	  - Platform profile (performance-/cooling-mode) device (5th- and later
97	    generations).
98	  - Battery/AC devices (7th-generation).
99	  - HID input devices (7th-generation).
100
101	  Select M (recommended) or Y here if you want support for the above
102	  mentioned devices on the corresponding Surface models. Without this
103	  module, the respective devices will not be instantiated and thus any
104	  functionality provided by them will be missing, even when drivers for
105	  these devices are present. In other words, this module only provides
106	  the respective client devices. Drivers for these devices still need to
107	  be selected via the other options.
108
109config SURFACE_DTX
110	tristate "Surface DTX (Detachment System) Driver"
111	depends on SURFACE_AGGREGATOR
112	depends on INPUT
113	help
114	  Driver for the Surface Book clipboard detachment system (DTX).
115
116	  On the Surface Book series devices, the display part containing the
117	  CPU (called the clipboard) can be detached from the base (containing a
118	  battery, the keyboard, and, optionally, a discrete GPU) by (if
119	  necessary) unlocking and opening the latch connecting both parts.
120
121	  This driver provides a user-space interface that can influence the
122	  behavior of this process, which includes the option to abort it in
123	  case the base is still in use or speed it up in case it is not.
124
125	  Note that this module can be built without support for the Surface
126	  Aggregator Bus (i.e. CONFIG_SURFACE_AGGREGATOR_BUS=n). In that case,
127	  some devices, specifically the Surface Book 3, will not be supported.
128
129config SURFACE_GPE
130	tristate "Surface GPE/Lid Support Driver"
131	depends on ACPI
132	depends on DMI
133	help
134	  This driver marks the GPEs related to the ACPI lid device found on
135	  Microsoft Surface devices as wakeup sources and prepares them
136	  accordingly. It is required on those devices to allow wake-ups from
137	  suspend by opening the lid.
138
139config SURFACE_HOTPLUG
140	tristate "Surface Hot-Plug Driver"
141	depends on ACPI
142	depends on GPIOLIB
143	help
144	  Driver for out-of-band hot-plug event signaling on Microsoft Surface
145	  devices with hot-pluggable PCIe cards.
146
147	  This driver is used on Surface Book (2 and 3) devices with a
148	  hot-pluggable discrete GPU (dGPU). When not in use, the dGPU on those
149	  devices can enter D3cold, which prevents in-band (standard) PCIe
150	  hot-plug signaling. Thus, without this driver, detaching the base
151	  containing the dGPU will not correctly update the state of the
152	  corresponding PCIe device if it is in D3cold. This driver adds support
153	  for out-of-band hot-plug notifications, ensuring that the device state
154	  is properly updated even when the device in question is in D3cold.
155
156	  Select M or Y here, if you want to (fully) support hot-plugging of
157	  dGPU devices on the Surface Book 2 and/or 3 during D3cold.
158
159config SURFACE_PLATFORM_PROFILE
160	tristate "Surface Platform Profile Driver"
161	depends on ACPI
162	depends on SURFACE_AGGREGATOR_REGISTRY
163	select ACPI_PLATFORM_PROFILE
164	help
165	  Provides support for the ACPI platform profile on 5th- and later
166	  generation Microsoft Surface devices.
167
168	  More specifically, this driver provides ACPI platform profile support
169	  on Microsoft Surface devices with a Surface System Aggregator Module
170	  (SSAM) connected via the Surface Serial Hub (SSH / SAM-over-SSH). In
171	  other words, this driver provides platform profile support on the
172	  Surface Pro 5, Surface Book 2, Surface Laptop, Surface Laptop Go and
173	  later. On those devices, the platform profile can significantly
174	  influence cooling behavior, e.g. setting it to 'quiet' (default) or
175	  'low-power' can significantly limit performance of the discrete GPU on
176	  Surface Books, while in turn leading to lower power consumption and/or
177	  less fan noise.
178
179	  Select M or Y here, if you want to include ACPI platform profile
180	  support on the above mentioned devices.
181
182config SURFACE_PRO3_BUTTON
183	tristate "Power/home/volume buttons driver for Microsoft Surface Pro 3/4 tablet"
184	depends on ACPI
185	depends on INPUT
186	help
187	  This driver handles the power/home/volume buttons on the Microsoft Surface Pro 3/4 tablet.
188
189source "drivers/platform/surface/aggregator/Kconfig"
190
191endif # SURFACE_PLATFORMS
192