xref: /aosp_15_r20/external/coreboot/src/include/acpi/acpigen_usb.h (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #ifndef ACPI_ACPIGEN_USB_H
4 #define ACPI_ACPIGEN_USB_H
5 
6 #include <acpi/acpi_pld.h>
7 
8 enum usb_typec_power_role {
9 	TYPEC_POWER_ROLE_SOURCE,
10 	TYPEC_POWER_ROLE_SINK,
11 	TYPEC_POWER_ROLE_DUAL,
12 };
13 
14 enum usb_typec_try_power_role {
15 	TYPEC_TRY_POWER_ROLE_NONE,
16 	TYPEC_TRY_POWER_ROLE_SINK,
17 	TYPEC_TRY_POWER_ROLE_SOURCE,
18 };
19 
20 enum usb_typec_data_role {
21 	TYPEC_DATA_ROLE_DFP,
22 	TYPEC_DATA_ROLE_UFP,
23 	TYPEC_DATA_ROLE_DUAL,
24 };
25 
26 /**
27  * Configuration required to write out a Type-C Connector ACPI object.
28  *
29  * @power_role: DUAL if device supports being both a source and a sink, otherwise choose
30  *	the device's default power role
31  * @try_power_role: SINK if device supports Try.SNK, SOURCE if device supports Try.SRC,
32  *	otherwise choose NONE
33  * @data_role: Choose DUAL if device can alternate between UFP (host) & DFP (device),
34  *	otherwise specify UFP or DFP.
35  * @usb2_port: Reference to the ACPI device that represents the USB2 signals
36  * @usb3_port: Reference to the ACPI device that represents the USB3 signals
37  * @usb4_port: Reference to the ACPI device that represents the USB4 signals
38  * @orientation_switch: Reference to the ACPI device that controls the switching of
39  *	the orientation/polarity for Data and SBU lines.
40  * @usb_role_switch: Reference to the ACPI device that can select the USB role,
41  *	host or device, for the USB port
42  * @mode_switch: Reference to the ACPI device that controls routing of data lines to
43  *	various endpoints (xHCI, DP, etc.) on the SoC.
44  * @retimer_switch: Reference to the ACPI device that controls the configuration
45  * of the retimer in the Type C signal chain.
46  * @pld: Reference to PLD information.
47  */
48 struct typec_connector_class_config {
49 	enum usb_typec_power_role power_role;
50 	enum usb_typec_try_power_role try_power_role;
51 	enum usb_typec_data_role data_role;
52 	const struct device *usb2_port;
53 	const struct device *usb3_port;
54 	const struct device *usb4_port;
55 	const struct device *orientation_switch;
56 	const struct device *usb_role_switch;
57 	const struct device *mode_switch;
58 	const struct device *retimer_switch;
59 	const struct acpi_pld *pld;
60 };
61 
62 typedef void (*add_custom_dsd_property_cb)(struct acpi_dp *dsd, int port_number);
63 
64 void acpigen_write_typec_connector(const struct typec_connector_class_config *config,
65 				   int port_number,
66 				   add_custom_dsd_property_cb add_custom_dsd_property);
67 
68 #endif /* ACPI_ACPIGEN_USB_H */
69