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