1# SPDX-License-Identifier: GPL-2.0-only
2#
3# Platform support for Chrome OS hardware (Chromebooks and Chromeboxes)
4#
5
6menuconfig CHROME_PLATFORMS
7	bool "Platform support for Chrome hardware"
8	depends on X86 || ARM || ARM64 || COMPILE_TEST
9	help
10	  Say Y here to get to see options for platform support for
11	  various Chromebooks and Chromeboxes. This option alone does
12	  not add any kernel code.
13
14	  If you say N, all options in this submenu will be skipped and disabled.
15
16if CHROME_PLATFORMS
17
18config CHROMEOS_ACPI
19	tristate "ChromeOS specific ACPI extensions"
20	depends on ACPI
21	help
22	  This driver provides the firmware interface for the services
23	  exported through the ChromeOS interfaces when using ChromeOS
24	  ACPI firmware.
25
26	  If you have an ACPI-compatible Chromebook, say Y or M here.
27	  The module will be called chromeos_acpi.
28
29config CHROMEOS_LAPTOP
30	tristate "Chrome OS Laptop"
31	depends on I2C && DMI && X86
32	help
33	  This driver instantiates i2c and smbus devices such as
34	  light sensors and touchpads.
35
36	  If you have a supported Chromebook, choose Y or M here.
37	  The module will be called chromeos_laptop.
38
39config CHROMEOS_PSTORE
40	tristate "Chrome OS pstore support"
41	depends on X86
42	help
43	  This module instantiates the persistent storage on x86 ChromeOS
44	  devices. It can be used to store away console logs and crash
45	  information across reboots.
46
47	  The range of memory used is 0xf00000-0x1000000, traditionally
48	  the memory used to back VGA controller memory.
49
50	  If you have a supported Chromebook, choose Y or M here.
51	  The module will be called chromeos_pstore.
52
53config CHROMEOS_TBMC
54	tristate "ChromeOS Tablet Switch Controller"
55	depends on ACPI
56	depends on INPUT
57	help
58	  This option adds a driver for the tablet switch on
59	  select Chrome OS systems.
60
61	  To compile this driver as a module, choose M here: the
62	  module will be called chromeos_tbmc.
63
64config CROS_EC
65	tristate "ChromeOS Embedded Controller"
66	select CROS_EC_PROTO
67	depends on X86 || ARM || ARM64 || COMPILE_TEST
68	help
69	  If you say Y here you get support for the ChromeOS Embedded
70	  Controller (EC) providing keyboard, battery and power services.
71	  You also need to enable the driver for the bus you are using. The
72	  protocol for talking to the EC is defined by the bus driver.
73
74	  To compile this driver as a module, choose M here: the
75	  module will be called cros_ec.
76
77config CROS_EC_I2C
78	tristate "ChromeOS Embedded Controller (I2C)"
79	depends on CROS_EC && I2C
80
81	help
82	  If you say Y here, you get support for talking to the ChromeOS
83	  EC through an I2C bus. This uses a simple byte-level protocol with
84	  a checksum. Failing accesses will be retried three times to
85	  improve reliability.
86
87config CROS_EC_RPMSG
88	tristate "ChromeOS Embedded Controller (rpmsg)"
89	depends on CROS_EC && RPMSG && OF
90	help
91	  If you say Y here, you get support for talking to the ChromeOS EC
92	  through rpmsg. This uses a simple byte-level protocol with a
93	  checksum. Also since there's no addition EC-to-host interrupt, this
94	  use a byte in message to distinguish host event from host command.
95
96	  To compile this driver as a module, choose M here: the
97	  module will be called cros_ec_rpmsg.
98
99config CROS_EC_ISHTP
100	tristate "ChromeOS Embedded Controller (ISHTP)"
101	depends on CROS_EC
102	depends on INTEL_ISH_HID
103	help
104	  If you say Y here, you get support for talking to the ChromeOS EC
105	  firmware running on Intel Integrated Sensor Hub (ISH), using the
106	  ISH Transport protocol (ISH-TP). This uses a simple byte-level
107	  protocol with a checksum.
108
109	  To compile this driver as a module, choose M here: the
110	  module will be called cros_ec_ishtp.
111
112config CROS_EC_SPI
113	tristate "ChromeOS Embedded Controller (SPI)"
114	depends on CROS_EC && SPI
115
116	help
117	  If you say Y here, you get support for talking to the ChromeOS EC
118	  through a SPI bus, using a byte-level protocol. Since the EC's
119	  response time cannot be guaranteed, we support ignoring
120	  'pre-amble' bytes before the response actually starts.
121
122config CROS_EC_UART
123	tristate "ChromeOS Embedded Controller (UART)"
124	depends on CROS_EC && ACPI && SERIAL_DEV_BUS
125	help
126	  If you say Y here, you get support for talking to the ChromeOS EC
127	  through a UART, using a byte-level protocol.
128
129	  To compile this driver as a module, choose M here: the
130	  module will be called cros_ec_uart.
131
132config CROS_EC_LPC
133	tristate "ChromeOS Embedded Controller (LPC)"
134	depends on CROS_EC && ACPI && (X86 || COMPILE_TEST)
135	help
136	  If you say Y here, you get support for talking to the ChromeOS EC
137	  over an LPC bus, including the LPC Microchip EC (MEC) variant.
138	  This uses a simple byte-level protocol with a checksum. This is
139	  used for userspace access only. The kernel typically has its own
140	  communication methods.
141
142	  To compile this driver as a module, choose M here: the
143	  module will be called cros_ec_lpcs.
144
145config CROS_EC_PROTO
146	bool
147	help
148	  ChromeOS EC communication protocol helpers.
149
150config CROS_KBD_LED_BACKLIGHT
151	tristate "Backlight LED support for Chrome OS keyboards"
152	depends on LEDS_CLASS && (ACPI || CROS_EC)
153	help
154	  This option enables support for the keyboard backlight LEDs on
155	  select Chrome OS systems.
156
157	  To compile this driver as a module, choose M here: the
158	  module will be called cros_kbd_led_backlight.
159
160config CROS_EC_CHARDEV
161	tristate "ChromeOS EC miscdevice"
162	depends on MFD_CROS_EC_DEV
163	default MFD_CROS_EC_DEV
164	help
165	  This driver adds file operations support to talk with the
166	  ChromeOS EC from userspace via a character device.
167
168	  To compile this driver as a module, choose M here: the
169	  module will be called cros_ec_chardev.
170
171config CROS_EC_LIGHTBAR
172	tristate "Chromebook Pixel's lightbar support"
173	depends on MFD_CROS_EC_DEV
174	default MFD_CROS_EC_DEV
175	help
176	  This option exposes the Chromebook Pixel's lightbar to
177	  userspace.
178
179	  To compile this driver as a module, choose M here: the
180	  module will be called cros_ec_lightbar.
181
182config CROS_EC_VBC
183	tristate "ChromeOS EC vboot context support"
184	depends on MFD_CROS_EC_DEV && OF
185	default MFD_CROS_EC_DEV
186	help
187	  This option exposes the ChromeOS EC vboot context nvram to
188	  userspace.
189
190	  To compile this driver as a module, choose M here: the
191	  module will be called cros_ec_vbc.
192
193config CROS_EC_DEBUGFS
194	tristate "Export ChromeOS EC internals in DebugFS"
195	depends on MFD_CROS_EC_DEV && DEBUG_FS
196	default MFD_CROS_EC_DEV
197	help
198	  This option exposes the ChromeOS EC device internals to
199	  userspace.
200
201	  To compile this driver as a module, choose M here: the
202	  module will be called cros_ec_debugfs.
203
204config CROS_EC_SENSORHUB
205	tristate "ChromeOS EC MEMS Sensor Hub"
206	depends on MFD_CROS_EC_DEV
207	default MFD_CROS_EC_DEV
208	help
209	  Allow loading IIO sensors. This driver is loaded by MFD and will in
210	  turn query the EC and register the sensors.
211	  It also spreads the sensor data coming from the EC to the IIO sensor
212	  object.
213
214	  To compile this driver as a module, choose M here: the
215	  module will be called cros_ec_sensorhub.
216
217config CROS_EC_SYSFS
218	tristate "ChromeOS EC control and information through sysfs"
219	depends on MFD_CROS_EC_DEV && SYSFS
220	default MFD_CROS_EC_DEV
221	help
222	  This option exposes some sysfs attributes to control and get
223	  information from ChromeOS EC.
224
225	  To compile this driver as a module, choose M here: the
226	  module will be called cros_ec_sysfs.
227
228config CROS_EC_TYPEC
229	tristate "ChromeOS EC Type-C Connector Control"
230	depends on MFD_CROS_EC_DEV && TYPEC
231	depends on CROS_USBPD_NOTIFY
232	depends on USB_ROLE_SWITCH
233	default MFD_CROS_EC_DEV
234	help
235	  If you say Y here, you get support for accessing Type C connector
236	  information from the Chrome OS EC.
237
238	  To compile this driver as a module, choose M here: the module will be
239	  called cros-ec-typec.
240
241config CROS_HPS_I2C
242	tristate "ChromeOS HPS device"
243	depends on HID && I2C && PM
244	help
245	  Say Y here if you want to enable support for the ChromeOS
246	  human presence sensor (HPS), attached via I2C. The driver supports a
247	  sensor connected to the I2C bus and exposes it as a character device.
248	  To save power, the sensor is automatically powered down when no
249	  clients are accessing it.
250
251config CROS_USBPD_LOGGER
252	tristate "Logging driver for USB PD charger"
253	depends on CHARGER_CROS_USBPD
254	default y
255	select RTC_LIB
256	help
257	  This option enables support for logging event data for the USB PD charger
258	  available in the Embedded Controller on ChromeOS systems.
259
260	  To compile this driver as a module, choose M here: the
261	  module will be called cros_usbpd_logger.
262
263config CROS_USBPD_NOTIFY
264	tristate "ChromeOS Type-C power delivery event notifier"
265	depends on MFD_CROS_EC_DEV
266	default MFD_CROS_EC_DEV
267	help
268	  If you say Y here, you get support for Type-C PD event notifications
269	  from the ChromeOS EC. On ACPI platorms this driver will bind to the
270	  GOOG0003 ACPI device, and on platforms which don't have this device it
271	  will get initialized on ECs which support the feature
272	  EC_FEATURE_USB_PD.
273
274	  To compile this driver as a module, choose M here: the
275	  module will be called cros_usbpd_notify.
276
277config CHROMEOS_PRIVACY_SCREEN
278	tristate "ChromeOS Privacy Screen support"
279	depends on ACPI
280	depends on DRM
281	select DRM_PRIVACY_SCREEN
282	help
283	  This driver provides the support needed for the in-built electronic
284	  privacy screen that is present on some ChromeOS devices. When enabled,
285	  this should probably always be built into the kernel to avoid or
286	  minimize drm probe deferral.
287
288config CROS_TYPEC_SWITCH
289	tristate "ChromeOS EC Type-C Switch Control"
290	depends on MFD_CROS_EC_DEV && TYPEC && ACPI
291	default MFD_CROS_EC_DEV
292	help
293	  If you say Y here, you get support for configuring the ChromeOS EC Type-C
294	  muxes and retimers.
295
296	  To compile this driver as a module, choose M here: the module will be
297	  called cros_typec_switch.
298
299source "drivers/platform/chrome/wilco_ec/Kconfig"
300
301# Kunit test cases
302config CROS_KUNIT
303	tristate "Kunit tests for ChromeOS" if !KUNIT_ALL_TESTS
304	depends on KUNIT && CROS_EC
305	default KUNIT_ALL_TESTS
306	select CROS_EC_PROTO
307	help
308	  ChromeOS Kunit tests.
309
310endif # CHROMEOS_PLATFORMS
311