summaryrefslogtreecommitdiff
path: root/zephyr/emul/tcpc/emul_tcpci_partner_drp.c
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/emul/tcpc/emul_tcpci_partner_drp.c')
-rw-r--r--zephyr/emul/tcpc/emul_tcpci_partner_drp.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/zephyr/emul/tcpc/emul_tcpci_partner_drp.c b/zephyr/emul/tcpc/emul_tcpci_partner_drp.c
index 08a20c7cfc..59e35a829f 100644
--- a/zephyr/emul/tcpc/emul_tcpci_partner_drp.c
+++ b/zephyr/emul/tcpc/emul_tcpci_partner_drp.c
@@ -274,11 +274,21 @@ int tcpci_drp_emul_connect_to_tcpci(struct tcpci_drp_emul_data *data,
/** Check description in emul_tcpci_partner_drp.h */
void tcpci_drp_emul_init(struct tcpci_drp_emul *emul, enum pd_rev_type rev)
{
+ /* By default init as sink */
+ tcpci_drp_emul_init_with_pd_role(emul, rev, PD_ROLE_SINK);
+}
+
+/** Check description in emul_tcpci_partner_drp.h */
+void tcpci_drp_emul_init_with_pd_role(struct tcpci_drp_emul *emul,
+ enum pd_rev_type rev,
+ enum pd_power_role power_role)
+{
tcpci_partner_init(&emul->common_data, tcpci_drp_emul_hard_reset, emul);
- /* By default init as sink */
- emul->common_data.data_role = PD_ROLE_DFP;
- emul->common_data.power_role = PD_ROLE_SINK;
+ emul->common_data.power_role = power_role;
+ emul->common_data.data_role =
+ (power_role == PD_ROLE_SINK) ? PD_ROLE_UFP : PD_ROLE_DFP;
+
emul->common_data.rev = rev;
emul->ops.transmit = tcpci_drp_emul_transmit_op;
@@ -286,7 +296,7 @@ void tcpci_drp_emul_init(struct tcpci_drp_emul *emul, enum pd_rev_type rev)
emul->ops.control_change = NULL;
emul->ops.disconnect = tcpci_drp_emul_disconnect_op;
- emul->data.sink = true;
+ emul->data.sink = power_role == PD_ROLE_SINK;
emul->data.in_pwr_swap = false;
tcpci_src_emul_init_data(&emul->src_data, &emul->common_data);
tcpci_snk_emul_init_data(&emul->snk_data);