Zephyr Project API 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
usbc_tcpc.h
Go to the documentation of this file.
1/*
2 * Copyright 2022 The Chromium OS Authors
3 * SPDX-License-Identifier: Apache-2.0
4 */
5
15
16#ifndef ZEPHYR_INCLUDE_DRIVERS_USB_C_USBC_TCPC_H_
17#define ZEPHYR_INCLUDE_DRIVERS_USB_C_USBC_TCPC_H_
18
27
28#include <zephyr/types.h>
29#include <zephyr/device.h>
30#include <errno.h>
31
32#include "usbc_tc.h"
33#include "usbc_pd.h"
34
35#ifdef __cplusplus
36extern "C" {
37#endif
38
82
102
124
136typedef int (*tcpc_vconn_control_cb_t)(const struct device *tcpc_dev, const struct device *usbc_dev,
137 enum tc_cc_polarity pol, bool enable);
138
150typedef int (*tcpc_vconn_discharge_cb_t)(const struct device *tcpc_dev,
151 const struct device *usbc_dev, enum tc_cc_polarity pol,
152 bool enable);
153
161typedef void (*tcpc_alert_handler_cb_t)(const struct device *dev, void *data,
162 enum tcpc_alert alert);
163
169
175typedef int (*tcpc_api_init_t)(const struct device *dev);
176
182typedef int (*tcpc_api_get_cc_t)(const struct device *dev, enum tc_cc_voltage_state *cc1,
183 enum tc_cc_voltage_state *cc2);
184
190typedef int (*tcpc_api_select_rp_value_t)(const struct device *dev, enum tc_rp_value rp);
191
197typedef int (*tcpc_api_get_rp_value_t)(const struct device *dev, enum tc_rp_value *rp);
198
204typedef int (*tcpc_api_set_cc_t)(const struct device *dev, enum tc_cc_pull pull);
205
211typedef void (*tcpc_api_set_vconn_discharge_cb_t)(const struct device *dev,
213 const struct device *usbc_dev);
214
220typedef void (*tcpc_api_set_vconn_cb_t)(const struct device *dev, tcpc_vconn_control_cb_t vconn_cb,
221 const struct device *usbc_dev);
222
228typedef int (*tcpc_api_vconn_discharge_t)(const struct device *dev, bool enable);
229
235typedef int (*tcpc_api_set_vconn_t)(const struct device *dev, bool enable);
236
242typedef int (*tcpc_api_set_roles_t)(const struct device *dev, enum tc_power_role power_role,
243 enum tc_data_role data_role);
244
250typedef int (*tcpc_api_get_rx_pending_msg_t)(const struct device *dev, struct pd_msg *msg);
251
257typedef int (*tcpc_api_set_rx_enable_t)(const struct device *dev, bool enable);
258
264typedef int (*tcpc_api_set_cc_polarity_t)(const struct device *dev, enum tc_cc_polarity polarity);
265
271typedef int (*tcpc_api_transmit_data_t)(const struct device *dev, struct pd_msg *msg);
272
278typedef int (*tcpc_api_dump_std_reg_t)(const struct device *dev);
279
285typedef int (*tcpc_api_get_status_register_t)(const struct device *dev, enum tcpc_status_reg reg,
286 uint32_t *status);
287
293typedef int (*tcpc_api_clear_status_register_t)(const struct device *dev, enum tcpc_status_reg reg,
294 uint32_t mask);
295
301typedef int (*tcpc_api_mask_status_register_t)(const struct device *dev, enum tcpc_status_reg reg,
302 uint32_t mask);
303
309typedef int (*tcpc_api_set_debug_accessory_t)(const struct device *dev, bool enable);
310
316typedef int (*tcpc_api_set_debug_detach_t)(const struct device *dev);
317
323typedef int (*tcpc_api_set_drp_toggle_t)(const struct device *dev, bool enable);
324
330typedef int (*tcpc_api_get_snk_ctrl_t)(const struct device *dev);
331
337typedef int (*tcpc_api_set_snk_ctrl_t)(const struct device *dev, bool enable);
338
344typedef int (*tcpc_api_get_src_ctrl_t)(const struct device *dev);
345
351typedef int (*tcpc_api_set_src_ctrl_t)(const struct device *dev, bool enable);
352
358typedef int (*tcpc_api_get_chip_info_t)(const struct device *dev, struct tcpc_chip_info *chip_info);
359
365typedef int (*tcpc_api_set_low_power_mode_t)(const struct device *dev, bool enable);
366
372typedef int (*tcpc_api_sop_prime_enable_t)(const struct device *dev, bool enable);
373
379typedef int (*tcpc_api_set_bist_test_mode_t)(const struct device *dev, bool enable);
380
386typedef int (*tcpc_api_set_alert_handler_cb_t)(const struct device *dev,
387 tcpc_alert_handler_cb_t handler, void *data);
388
454
456
460static inline int tcpc_is_cc_rp(enum tc_cc_voltage_state cc)
461{
462 return (cc == TC_CC_VOLT_RP_DEF) || (cc == TC_CC_VOLT_RP_1A5) || (cc == TC_CC_VOLT_RP_3A0);
463}
464
468static inline int tcpc_is_cc_open(enum tc_cc_voltage_state cc1, enum tc_cc_voltage_state cc2)
469{
470 return (cc1 < TC_CC_VOLT_RD) && (cc2 < TC_CC_VOLT_RD);
471}
472
477{
478 return cc1 == TC_CC_VOLT_RD && cc2 == TC_CC_VOLT_RD;
479}
480
485{
486 return tcpc_is_cc_rp(cc1) && tcpc_is_cc_rp(cc2);
487}
488
493{
494 return cc1 == TC_CC_VOLT_RA && cc2 == TC_CC_VOLT_RA;
495}
496
501 enum tc_cc_voltage_state cc2)
502{
503 return cc1 == TC_CC_VOLT_RD || cc2 == TC_CC_VOLT_RD;
504}
505
510{
511 return tcpc_is_cc_at_least_one_rd(cc1, cc2) && cc1 != cc2;
512}
513
523static inline int tcpc_init(const struct device *dev)
524{
525 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
526
527 __ASSERT(api->init != NULL, "Callback pointer should not be NULL");
528
529 return api->init(dev);
530}
531
543static inline int tcpc_get_cc(const struct device *dev, enum tc_cc_voltage_state *cc1,
544 enum tc_cc_voltage_state *cc2)
545{
546 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
547
548 if (api->get_cc == NULL) {
549 return -ENOSYS;
550 }
551
552 return api->get_cc(dev, cc1, cc2);
553}
554
565static inline int tcpc_select_rp_value(const struct device *dev, enum tc_rp_value rp)
566{
567 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
568
569 if (api->select_rp_value == NULL) {
570 return -ENOSYS;
571 }
572
573 return api->select_rp_value(dev, rp);
574}
575
586static inline int tcpc_get_rp_value(const struct device *dev, enum tc_rp_value *rp)
587{
588 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
589
590 if (api->get_rp_value == NULL) {
591 return -ENOSYS;
592 }
593
594 return api->get_rp_value(dev, rp);
595}
596
606static inline int tcpc_set_cc(const struct device *dev, enum tc_cc_pull pull)
607{
608 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
609
610 __ASSERT(api->set_cc != NULL, "Callback pointer should not be NULL");
611
612 return api->set_cc(dev, pull);
613}
614
626static inline void tcpc_set_vconn_cb(const struct device *dev, tcpc_vconn_control_cb_t vconn_cb,
627 const struct device *usbc_dev)
628{
629 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
630
631 __ASSERT(api->set_vconn_cb != NULL, "Callback pointer should not be NULL");
632
633 api->set_vconn_cb(dev, vconn_cb, usbc_dev);
634}
635
647static inline void tcpc_set_vconn_discharge_cb(const struct device *dev,
649 const struct device *usbc_dev)
650{
651 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
652
653 __ASSERT(api->set_vconn_discharge_cb != NULL, "Callback pointer should not be NULL");
654
655 api->set_vconn_discharge_cb(dev, cb, usbc_dev);
656}
657
671static inline int tcpc_vconn_discharge(const struct device *dev, bool enable)
672{
673 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
674
675 if (api->vconn_discharge == NULL) {
676 return -ENOSYS;
677 }
678
679 return api->vconn_discharge(dev, enable);
680}
681
695static inline int tcpc_set_vconn(const struct device *dev, bool enable)
696{
697 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
698
699 if (api->set_vconn == NULL) {
700 return -ENOSYS;
701 }
702
703 return api->set_vconn(dev, enable);
704}
705
719static inline int tcpc_set_roles(const struct device *dev, enum tc_power_role power_role,
720 enum tc_data_role data_role)
721{
722 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
723
724 if (api->set_roles == NULL) {
725 return -ENOSYS;
726 }
727
728 return api->set_roles(dev, power_role, data_role);
729}
730
744static inline int tcpc_get_rx_pending_msg(const struct device *dev, struct pd_msg *buf)
745{
746 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
747
748 __ASSERT(api->get_rx_pending_msg != NULL, "Callback pointer should not be NULL");
749
750 return api->get_rx_pending_msg(dev, buf);
751}
752
764static inline int tcpc_set_rx_enable(const struct device *dev, bool enable)
765{
766 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
767
768 if (api->set_rx_enable == NULL) {
769 return -ENOSYS;
770 }
771
772 return api->set_rx_enable(dev, enable);
773}
774
784static inline int tcpc_set_cc_polarity(const struct device *dev, enum tc_cc_polarity polarity)
785{
786 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
787
788 __ASSERT(api->set_cc_polarity != NULL, "Callback pointer should not be NULL");
789
790 return api->set_cc_polarity(dev, polarity);
791}
792
803static inline int tcpc_transmit_data(const struct device *dev, struct pd_msg *msg)
804{
805 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
806
807 if (api->transmit_data == NULL) {
808 return -ENOSYS;
809 }
810
811 return api->transmit_data(dev, msg);
812}
813
823static inline int tcpc_dump_std_reg(const struct device *dev)
824{
825 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
826
827 if (api->dump_std_reg == NULL) {
828 return -ENOSYS;
829 }
830
831 return api->dump_std_reg(dev);
832}
833
847static inline int tcpc_set_alert_handler_cb(const struct device *dev,
848 tcpc_alert_handler_cb_t handler, void *data)
849{
850 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
851
852 __ASSERT(api->set_alert_handler_cb != NULL, "Callback pointer should not be NULL");
853
854 return api->set_alert_handler_cb(dev, handler, data);
855}
856
868static inline int tcpc_get_status_register(const struct device *dev, enum tcpc_status_reg reg,
869 uint32_t *status)
870{
871 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
872
873 if (api->get_status_register == NULL) {
874 return -ENOSYS;
875 }
876
877 return api->get_status_register(dev, reg, status);
878}
879
892static inline int tcpc_clear_status_register(const struct device *dev, enum tcpc_status_reg reg,
893 uint32_t mask)
894{
895 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
896
897 if (api->clear_status_register == NULL) {
898 return -ENOSYS;
899 }
900
901 return api->clear_status_register(dev, reg, mask);
902}
903
916static inline int tcpc_mask_status_register(const struct device *dev, enum tcpc_status_reg reg,
917 uint32_t mask)
918{
919 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
920
921 if (api->mask_status_register == NULL) {
922 return -ENOSYS;
923 }
924
925 return api->mask_status_register(dev, reg, mask);
926}
927
938static inline int tcpc_set_debug_accessory(const struct device *dev, bool enable)
939{
940 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
941
942 if (api->set_debug_accessory == NULL) {
943 return -ENOSYS;
944 }
945
946 return api->set_debug_accessory(dev, enable);
947}
948
958static inline int tcpc_set_debug_detach(const struct device *dev)
959{
960 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
961
962 if (api->set_debug_detach == NULL) {
963 return -ENOSYS;
964 }
965
966 return api->set_debug_detach(dev);
967}
968
979static inline int tcpc_set_drp_toggle(const struct device *dev, bool enable)
980{
981 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
982
983 if (api->set_drp_toggle == NULL) {
984 return -ENOSYS;
985 }
986
987 return api->set_drp_toggle(dev, enable);
988}
989
999static inline int tcpc_get_snk_ctrl(const struct device *dev)
1000{
1001 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
1002
1003 if (api->get_snk_ctrl == NULL) {
1004 return -ENOSYS;
1005 }
1006
1007 return api->get_snk_ctrl(dev);
1008}
1009
1018static inline int tcpc_set_snk_ctrl(const struct device *dev, bool enable)
1019{
1020 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
1021
1022 if (api->set_snk_ctrl == NULL) {
1023 return -ENOSYS;
1024 }
1025
1026 return api->set_snk_ctrl(dev, enable);
1027}
1028
1038static inline int tcpc_get_src_ctrl(const struct device *dev)
1039{
1040 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
1041
1042 if (api->get_src_ctrl == NULL) {
1043 return -ENOSYS;
1044 }
1045
1046 return api->get_src_ctrl(dev);
1047}
1048
1057static inline int tcpc_set_src_ctrl(const struct device *dev, bool enable)
1058{
1059 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
1060
1061 if (api->set_src_ctrl == NULL) {
1062 return -ENOSYS;
1063 }
1064
1065 return api->set_src_ctrl(dev, enable);
1066}
1067
1079static inline int tcpc_set_bist_test_mode(const struct device *dev, bool enable)
1080{
1081 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
1082
1083 if (api->set_bist_test_mode == NULL) {
1084 return -ENOSYS;
1085 }
1086
1087 return api->set_bist_test_mode(dev, enable);
1088}
1089
1100static inline int tcpc_get_chip_info(const struct device *dev, struct tcpc_chip_info *chip_info)
1101{
1102 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
1103
1104 if (api->get_chip_info == NULL) {
1105 return -ENOSYS;
1106 }
1107
1108 return api->get_chip_info(dev, chip_info);
1109}
1110
1121static inline int tcpc_set_low_power_mode(const struct device *dev, bool enable)
1122{
1123 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
1124
1125 if (api->set_low_power_mode == NULL) {
1126 return -ENOSYS;
1127 }
1128
1129 return api->set_low_power_mode(dev, enable);
1130}
1131
1143static inline int tcpc_sop_prime_enable(const struct device *dev, bool enable)
1144{
1145 const struct tcpc_driver_api *api = DEVICE_API_GET(tcpc, dev);
1146
1147 if (api->sop_prime_enable == NULL) {
1148 return -ENOSYS;
1149 }
1150
1151 return api->sop_prime_enable(dev, enable);
1152}
1153
1157
1158#ifdef __cplusplus
1159}
1160#endif
1161
1162#endif /* ZEPHYR_INCLUDE_DRIVERS_USB_C_USBC_TCPC_H_ */
irp cc
Definition asm-macro-32-bit-gnu.h:13
#define DEVICE_API_GET(_class, _dev)
Expands to the pointer of a device's API for a given class.
Definition device.h:1449
System error numbers.
#define ENOSYS
Function not implemented.
Definition errno.h:83
static int tcpc_clear_status_register(const struct device *dev, enum tcpc_status_reg reg, uint32_t mask)
Clears a TCPC status register.
Definition usbc_tcpc.h:892
static int tcpc_set_debug_accessory(const struct device *dev, bool enable)
Manual control of TCPC DebugAccessory control.
Definition usbc_tcpc.h:938
int(* tcpc_api_get_status_register_t)(const struct device *dev, enum tcpc_status_reg reg, uint32_t *status)
Callback API to get a status register.
Definition usbc_tcpc.h:285
static int tcpc_is_cc_src_dbg_acc(enum tc_cc_voltage_state cc1, enum tc_cc_voltage_state cc2)
Returns true if we detect the port partner is a src debug accessory.
Definition usbc_tcpc.h:484
static int tcpc_get_src_ctrl(const struct device *dev)
Queries the current sourcing state of the TCPC.
Definition usbc_tcpc.h:1038
int(* tcpc_vconn_control_cb_t)(const struct device *tcpc_dev, const struct device *usbc_dev, enum tc_cc_polarity pol, bool enable)
Callback type for VCONN control.
Definition usbc_tcpc.h:136
static int tcpc_get_snk_ctrl(const struct device *dev)
Queries the current sinking state of the TCPC.
Definition usbc_tcpc.h:999
static int tcpc_mask_status_register(const struct device *dev, enum tcpc_status_reg reg, uint32_t mask)
Sets the mask of a TCPC status register.
Definition usbc_tcpc.h:916
static int tcpc_is_cc_open(enum tc_cc_voltage_state cc1, enum tc_cc_voltage_state cc2)
Returns true if both CC lines are completely open.
Definition usbc_tcpc.h:468
static int tcpc_is_cc_audio_acc(enum tc_cc_voltage_state cc1, enum tc_cc_voltage_state cc2)
Returns true if the port partner is an audio accessory.
Definition usbc_tcpc.h:492
static void tcpc_set_vconn_cb(const struct device *dev, tcpc_vconn_control_cb_t vconn_cb, const struct device *usbc_dev)
Sets a callback that can enable or disable VCONN if the TCPC is unable to or the system is configured...
Definition usbc_tcpc.h:626
int(* tcpc_api_sop_prime_enable_t)(const struct device *dev, bool enable)
Callback API to enable or disable SOP' / SOP'' reception.
Definition usbc_tcpc.h:372
int(* tcpc_api_set_debug_accessory_t)(const struct device *dev, bool enable)
Callback API to enable or disable debug accessory control.
Definition usbc_tcpc.h:309
static int tcpc_set_vconn(const struct device *dev, bool enable)
Enables or disables VCONN.
Definition usbc_tcpc.h:695
static int tcpc_get_rp_value(const struct device *dev, enum tc_rp_value *rp)
Gets the value of the CC pull up resistor used when operating as a Source.
Definition usbc_tcpc.h:586
void(* tcpc_api_set_vconn_cb_t)(const struct device *dev, tcpc_vconn_control_cb_t vconn_cb, const struct device *usbc_dev)
Callback API to register the VCONN control application callback.
Definition usbc_tcpc.h:220
int(* tcpc_api_get_src_ctrl_t)(const struct device *dev)
Callback API to query VBUS source control state.
Definition usbc_tcpc.h:344
static int tcpc_get_rx_pending_msg(const struct device *dev, struct pd_msg *buf)
Retrieves the Power Delivery message from the TCPC.
Definition usbc_tcpc.h:744
static int tcpc_vconn_discharge(const struct device *dev, bool enable)
Discharges VCONN.
Definition usbc_tcpc.h:671
static int tcpc_select_rp_value(const struct device *dev, enum tc_rp_value rp)
Sets the value of CC pull up resistor used when operating as a Source.
Definition usbc_tcpc.h:565
int(* tcpc_api_get_cc_t)(const struct device *dev, enum tc_cc_voltage_state *cc1, enum tc_cc_voltage_state *cc2)
Callback API to read CC line status.
Definition usbc_tcpc.h:182
tcpc_alert
TCPC Alert bits.
Definition usbc_tcpc.h:42
int(* tcpc_api_set_debug_detach_t)(const struct device *dev)
Callback API to detach from a debug connection.
Definition usbc_tcpc.h:316
int(* tcpc_vconn_discharge_cb_t)(const struct device *tcpc_dev, const struct device *usbc_dev, enum tc_cc_polarity pol, bool enable)
Callback type for discharging VCONN.
Definition usbc_tcpc.h:150
int(* tcpc_api_set_alert_handler_cb_t)(const struct device *dev, tcpc_alert_handler_cb_t handler, void *data)
Callback API to register the alert application callback.
Definition usbc_tcpc.h:386
static int tcpc_set_cc_polarity(const struct device *dev, enum tc_cc_polarity polarity)
Sets the polarity of the CC lines.
Definition usbc_tcpc.h:784
int(* tcpc_api_set_drp_toggle_t)(const struct device *dev, bool enable)
Callback API to enable or disable DRP toggle.
Definition usbc_tcpc.h:323
void(* tcpc_alert_handler_cb_t)(const struct device *dev, void *data, enum tcpc_alert alert)
Callback type for handling TCPC alert events.
Definition usbc_tcpc.h:161
static int tcpc_get_cc(const struct device *dev, enum tc_cc_voltage_state *cc1, enum tc_cc_voltage_state *cc2)
Reads the status of the CC lines.
Definition usbc_tcpc.h:543
static int tcpc_is_cc_rp(enum tc_cc_voltage_state cc)
Returns whether the sink has detected a Rp resistor on the other side.
Definition usbc_tcpc.h:460
static void tcpc_set_vconn_discharge_cb(const struct device *dev, tcpc_vconn_discharge_cb_t cb, const struct device *usbc_dev)
Sets a callback that can enable or discharge VCONN if the TCPC is unable to or the system is configur...
Definition usbc_tcpc.h:647
static int tcpc_set_alert_handler_cb(const struct device *dev, tcpc_alert_handler_cb_t handler, void *data)
Sets the alert function that's called when an interrupt is triggered due to an alert bit.
Definition usbc_tcpc.h:847
static int tcpc_set_snk_ctrl(const struct device *dev, bool enable)
Set the VBUS sinking state of the TCPC.
Definition usbc_tcpc.h:1018
int(* tcpc_api_set_rx_enable_t)(const struct device *dev, bool enable)
Callback API to enable or disable SOP* RX.
Definition usbc_tcpc.h:257
int(* tcpc_api_set_src_ctrl_t)(const struct device *dev, bool enable)
Callback API to enable or disable VBUS sourcing.
Definition usbc_tcpc.h:351
int(* tcpc_api_clear_status_register_t)(const struct device *dev, enum tcpc_status_reg reg, uint32_t mask)
Callback API to clear bits in a status register.
Definition usbc_tcpc.h:293
static int tcpc_get_chip_info(const struct device *dev, struct tcpc_chip_info *chip_info)
Gets the TCPC firmware version.
Definition usbc_tcpc.h:1100
static int tcpc_transmit_data(const struct device *dev, struct pd_msg *msg)
Transmits a Power Delivery message.
Definition usbc_tcpc.h:803
static int tcpc_set_roles(const struct device *dev, enum tc_power_role power_role, enum tc_data_role data_role)
Sets the Power and Data Role of the PD message header.
Definition usbc_tcpc.h:719
static int tcpc_set_src_ctrl(const struct device *dev, bool enable)
Set the VBUS sourcing state of the TCPC.
Definition usbc_tcpc.h:1057
static int tcpc_set_rx_enable(const struct device *dev, bool enable)
Enables the reception of SOP* message types.
Definition usbc_tcpc.h:764
static int tcpc_is_cc_only_one_rd(enum tc_cc_voltage_state cc1, enum tc_cc_voltage_state cc2)
Returns true if the port partner is presenting Rd on only one CC line.
Definition usbc_tcpc.h:509
static int tcpc_dump_std_reg(const struct device *dev)
Dump a set of TCPC registers.
Definition usbc_tcpc.h:823
static int tcpc_set_low_power_mode(const struct device *dev, bool enable)
Instructs the TCPC to enter or exit low power mode.
Definition usbc_tcpc.h:1121
int(* tcpc_api_dump_std_reg_t)(const struct device *dev)
Callback API to dump standard TCPC registers.
Definition usbc_tcpc.h:278
static int tcpc_set_drp_toggle(const struct device *dev, bool enable)
Enable TCPC auto dual role toggle.
Definition usbc_tcpc.h:979
static int tcpc_is_cc_snk_dbg_acc(enum tc_cc_voltage_state cc1, enum tc_cc_voltage_state cc2)
Returns true if we detect the port partner is a snk debug accessory.
Definition usbc_tcpc.h:476
int(* tcpc_api_mask_status_register_t)(const struct device *dev, enum tcpc_status_reg reg, uint32_t mask)
Callback API to mask or unmask status register bits.
Definition usbc_tcpc.h:301
int(* tcpc_api_set_cc_polarity_t)(const struct device *dev, enum tc_cc_polarity polarity)
Callback API to set CC polarity.
Definition usbc_tcpc.h:264
static int tcpc_set_debug_detach(const struct device *dev)
Detach from a debug connection.
Definition usbc_tcpc.h:958
int(* tcpc_api_set_snk_ctrl_t)(const struct device *dev, bool enable)
Callback API to enable or disable VBUS sinking.
Definition usbc_tcpc.h:337
int(* tcpc_api_get_rx_pending_msg_t)(const struct device *dev, struct pd_msg *msg)
Callback API to get a pending RX message or query RX status.
Definition usbc_tcpc.h:250
static int tcpc_sop_prime_enable(const struct device *dev, bool enable)
Enables the reception of SOP Prime and optionally SOP Double Prime messages.
Definition usbc_tcpc.h:1143
int(* tcpc_api_transmit_data_t)(const struct device *dev, struct pd_msg *msg)
Callback API to transmit a PD message.
Definition usbc_tcpc.h:271
static int tcpc_is_cc_at_least_one_rd(enum tc_cc_voltage_state cc1, enum tc_cc_voltage_state cc2)
Returns true if the port partner is presenting at least one Rd.
Definition usbc_tcpc.h:500
int(* tcpc_api_vconn_discharge_t)(const struct device *dev, bool enable)
Callback API to enable or disable VCONN discharge.
Definition usbc_tcpc.h:228
int(* tcpc_api_get_snk_ctrl_t)(const struct device *dev)
Callback API to query VBUS sink control state.
Definition usbc_tcpc.h:330
static int tcpc_init(const struct device *dev)
Initializes the TCPC.
Definition usbc_tcpc.h:523
int(* tcpc_api_set_cc_t)(const struct device *dev, enum tc_cc_pull pull)
Callback API to set CC pull and role.
Definition usbc_tcpc.h:204
static int tcpc_set_cc(const struct device *dev, enum tc_cc_pull pull)
Sets the CC pull resistor and sets the role as either Source or Sink.
Definition usbc_tcpc.h:606
int(* tcpc_api_get_chip_info_t)(const struct device *dev, struct tcpc_chip_info *chip_info)
Callback API to read TCPC chip information.
Definition usbc_tcpc.h:358
static int tcpc_set_bist_test_mode(const struct device *dev, bool enable)
Controls the BIST Mode of the TCPC.
Definition usbc_tcpc.h:1079
static int tcpc_get_status_register(const struct device *dev, enum tcpc_status_reg reg, uint32_t *status)
Gets a status register.
Definition usbc_tcpc.h:868
int(* tcpc_api_get_rp_value_t)(const struct device *dev, enum tc_rp_value *rp)
Callback API to get source Rp value.
Definition usbc_tcpc.h:197
void(* tcpc_api_set_vconn_discharge_cb_t)(const struct device *dev, tcpc_vconn_discharge_cb_t cb, const struct device *usbc_dev)
Callback API to register the VCONN discharge application callback.
Definition usbc_tcpc.h:211
int(* tcpc_api_set_roles_t)(const struct device *dev, enum tc_power_role power_role, enum tc_data_role data_role)
Callback API to set power and data roles for PD message header.
Definition usbc_tcpc.h:242
int(* tcpc_api_init_t)(const struct device *dev)
@def_driverbackendgroup{USB Type-C Port Controller,usb_type_c_port_controller_api}
Definition usbc_tcpc.h:175
int(* tcpc_api_set_low_power_mode_t)(const struct device *dev, bool enable)
Callback API to enter or exit low power mode.
Definition usbc_tcpc.h:365
int(* tcpc_api_select_rp_value_t)(const struct device *dev, enum tc_rp_value rp)
Callback API to set source Rp value.
Definition usbc_tcpc.h:190
int(* tcpc_api_set_bist_test_mode_t)(const struct device *dev, bool enable)
Callback API to enable or disable BIST test mode.
Definition usbc_tcpc.h:379
int(* tcpc_api_set_vconn_t)(const struct device *dev, bool enable)
Callback API to enable or disable VCONN.
Definition usbc_tcpc.h:235
tcpc_status_reg
TCPC Status register.
Definition usbc_tcpc.h:86
@ TCPC_ALERT_EXTENDED_STATUS
Extended status changed.
Definition usbc_tcpc.h:73
@ TCPC_ALERT_TRANSMIT_MSG_DISCARDED
Reset or SOP* message transmission not sent due to an incoming receive message.
Definition usbc_tcpc.h:57
@ TCPC_ALERT_CC_STATUS
CC status changed.
Definition usbc_tcpc.h:44
@ TCPC_ALERT_EXTENDED
An extended interrupt event has occurred.
Definition usbc_tcpc.h:78
@ TCPC_ALERT_BEGINNING_MSG_STATUS
Receive buffer register changed.
Definition usbc_tcpc.h:71
@ TCPC_ALERT_MSG_STATUS
Receive Buffer register changed.
Definition usbc_tcpc.h:48
@ TCPC_ALERT_HARD_RESET_RECEIVED
Received Hard Reset message.
Definition usbc_tcpc.h:50
@ TCPC_ALERT_TRANSMIT_MSG_SUCCESS
Reset or SOP* message transmission successful.
Definition usbc_tcpc.h:59
@ TCPC_ALERT_VBUS_ALARM_HI
A high-voltage alarm has occurred.
Definition usbc_tcpc.h:61
@ TCPC_ALERT_VBUS_SNK_DISCONNECT
The TCPC in Attached.SNK state has detected a sink disconnect.
Definition usbc_tcpc.h:69
@ TCPC_ALERT_POWER_STATUS
Power status changed.
Definition usbc_tcpc.h:46
@ TCPC_ALERT_VBUS_ALARM_LO
A low-voltage alarm has occurred.
Definition usbc_tcpc.h:63
@ TCPC_ALERT_VENDOR_DEFINED
A vendor defined alert has been detected.
Definition usbc_tcpc.h:80
@ TCPC_ALERT_FAULT_STATUS
A fault has occurred.
Definition usbc_tcpc.h:65
@ TCPC_ALERT_TRANSMIT_MSG_FAILED
SOP* message transmission not successful.
Definition usbc_tcpc.h:52
@ TCPC_ALERT_RX_BUFFER_OVERFLOW
TCPC RX buffer has overflowed.
Definition usbc_tcpc.h:67
@ TCPC_FAULT_STATUS
The Fault Status register.
Definition usbc_tcpc.h:94
@ TCPC_ALERT_STATUS
The Alert register.
Definition usbc_tcpc.h:88
@ TCPC_VENDOR_DEFINED_STATUS
The Vendor Defined Status register.
Definition usbc_tcpc.h:100
@ TCPC_EXTENDED_ALERT_STATUS
The Extended Alert Status register.
Definition usbc_tcpc.h:98
@ TCPC_POWER_STATUS
The Power Status register.
Definition usbc_tcpc.h:92
@ TCPC_CC_STATUS
The CC Status register.
Definition usbc_tcpc.h:90
@ TCPC_EXTENDED_STATUS
The Extended Status register.
Definition usbc_tcpc.h:96
tc_cc_pull
CC pull resistors.
Definition usbc_tc.h:369
tc_rp_value
Pull-Up resistor values.
Definition usbc_tc.h:355
tc_cc_voltage_state
CC Voltage status.
Definition usbc_tc.h:325
tc_data_role
Power Delivery Data Role.
Definition usbc_tc.h:423
tc_power_role
Power Delivery Power Role.
Definition usbc_tc.h:413
tc_cc_polarity
Polarity of the CC lines.
Definition usbc_tc.h:435
@ TC_CC_VOLT_RP_DEF
Port partner is applying Rp (0.5A).
Definition usbc_tc.h:333
@ TC_CC_VOLT_RA
Port partner is applying Ra.
Definition usbc_tc.h:329
@ TC_CC_VOLT_RD
Port partner is applying Rd.
Definition usbc_tc.h:331
@ TC_CC_VOLT_RP_3A0
Port partner is applying Rp (3.0A).
Definition usbc_tc.h:337
@ TC_CC_VOLT_RP_1A5
Port partner is applying Rp (1.5A).
Definition usbc_tc.h:335
#define NULL
Definition iar_missing_defs.h:20
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT64_TYPE__ uint64_t
Definition stdint.h:91
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
void * data
Address of the device instance private data.
Definition device.h:523
Power Delivery message.
Definition usbc_pd.h:1052
TCPC Chip Information.
Definition usbc_tcpc.h:106
uint16_t product_id
Product Id.
Definition usbc_tcpc.h:110
uint8_t min_req_fw_version_string[8]
Minimum Required firmware version string.
Definition usbc_tcpc.h:119
uint64_t fw_version_number
Firmware version number.
Definition usbc_tcpc.h:114
uint64_t min_req_fw_version_number
Minimum Required firmware version number.
Definition usbc_tcpc.h:121
uint16_t device_id
Device Id.
Definition usbc_tcpc.h:112
uint16_t vendor_id
Vendor Id.
Definition usbc_tcpc.h:108
@driver_ops{USB Type-C Port Controller}
Definition usbc_tcpc.h:392
tcpc_api_set_vconn_cb_t set_vconn_cb
@driver_ops_mandatory Sets a callback that can enable or disable VCONN if the TCPC is unable to or ...
Definition usbc_tcpc.h:406
tcpc_api_set_cc_polarity_t set_cc_polarity
@driver_ops_mandatory Sets the polarity of the CC lines.
Definition usbc_tcpc.h:418
tcpc_api_dump_std_reg_t dump_std_reg
@driver_ops_optional Dump a set of TCPC registers.
Definition usbc_tcpc.h:422
tcpc_api_get_rx_pending_msg_t get_rx_pending_msg
@driver_ops_mandatory Retrieves the Power Delivery message from the TCPC.
Definition usbc_tcpc.h:414
tcpc_api_set_low_power_mode_t set_low_power_mode
@driver_ops_optional Instructs the TCPC to enter or exit low power mode.
Definition usbc_tcpc.h:446
tcpc_api_set_drp_toggle_t set_drp_toggle
@driver_ops_optional Enable TCPC auto dual role toggle.
Definition usbc_tcpc.h:434
tcpc_api_select_rp_value_t select_rp_value
@driver_ops_optional Sets the value of CC pull up resistor used when operating as a Source.
Definition usbc_tcpc.h:398
tcpc_api_get_rp_value_t get_rp_value
@driver_ops_optional Gets the value of the CC pull up resistor used when operating as a Source.
Definition usbc_tcpc.h:400
tcpc_api_set_vconn_t set_vconn
@driver_ops_optional Enables or disables VCONN.
Definition usbc_tcpc.h:410
tcpc_api_set_cc_t set_cc
@driver_ops_mandatory Sets the CC pull resistor and sets the role as either Source or Sink.
Definition usbc_tcpc.h:402
tcpc_api_get_snk_ctrl_t get_snk_ctrl
@driver_ops_optional Queries the current sinking state of the TCPC.
Definition usbc_tcpc.h:436
tcpc_api_set_src_ctrl_t set_src_ctrl
@driver_ops_optional Set the VBUS sourcing state of the TCPC.
Definition usbc_tcpc.h:442
tcpc_api_get_chip_info_t get_chip_info
@driver_ops_optional Gets the TCPC firmware version.
Definition usbc_tcpc.h:444
tcpc_api_set_debug_detach_t set_debug_detach
@driver_ops_optional Detach from a debug connection.
Definition usbc_tcpc.h:432
tcpc_api_get_src_ctrl_t get_src_ctrl
@driver_ops_optional Queries the current sourcing state of the TCPC.
Definition usbc_tcpc.h:440
tcpc_api_set_alert_handler_cb_t set_alert_handler_cb
@driver_ops_mandatory Sets the alert function that's called when an interrupt is triggered due to a...
Definition usbc_tcpc.h:452
tcpc_api_sop_prime_enable_t sop_prime_enable
@driver_ops_optional Enables the reception of SOP Prime and optionally SOP Double Prime messages.
Definition usbc_tcpc.h:448
tcpc_api_transmit_data_t transmit_data
@driver_ops_optional Transmits a Power Delivery message.
Definition usbc_tcpc.h:420
tcpc_api_set_debug_accessory_t set_debug_accessory
@driver_ops_optional Manual control of TCPC DebugAccessory control.
Definition usbc_tcpc.h:430
tcpc_api_get_status_register_t get_status_register
@driver_ops_optional Gets a status register.
Definition usbc_tcpc.h:424
tcpc_api_set_bist_test_mode_t set_bist_test_mode
@driver_ops_optional Controls the BIST Mode of the TCPC.
Definition usbc_tcpc.h:450
tcpc_api_set_rx_enable_t set_rx_enable
@driver_ops_optional Enables the reception of SOP* message types.
Definition usbc_tcpc.h:416
tcpc_api_set_snk_ctrl_t set_snk_ctrl
@driver_ops_optional Set the VBUS sinking state of the TCPC.
Definition usbc_tcpc.h:438
tcpc_api_mask_status_register_t mask_status_register
@driver_ops_optional Sets the mask of a TCPC status register.
Definition usbc_tcpc.h:428
tcpc_api_vconn_discharge_t vconn_discharge
@driver_ops_optional Discharges VCONN.
Definition usbc_tcpc.h:408
tcpc_api_init_t init
@driver_ops_mandatory Initializes the TCPC.
Definition usbc_tcpc.h:394
tcpc_api_set_roles_t set_roles
@driver_ops_optional Sets the Power and Data Role of the PD message header.
Definition usbc_tcpc.h:412
tcpc_api_clear_status_register_t clear_status_register
@driver_ops_optional Clears a TCPC status register.
Definition usbc_tcpc.h:426
tcpc_api_set_vconn_discharge_cb_t set_vconn_discharge_cb
@driver_ops_mandatory Sets a callback that can enable or discharge VCONN if the TCPC is unable to o...
Definition usbc_tcpc.h:404
tcpc_api_get_cc_t get_cc
@driver_ops_optional Reads the status of the CC lines.
Definition usbc_tcpc.h:396
USB-C Power Delivery API used for USB-C drivers.
USB Type-C Cable and Connector API used for USB-C drivers.