diff options
Diffstat (limited to 'zephyr/emul/tcpc/emul_tcpci_partner_drp.c')
-rw-r--r-- | zephyr/emul/tcpc/emul_tcpci_partner_drp.c | 18 |
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); |