Zephyr Project API  3.2.0
A Scalable Open Source RTOS
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#ifndef ZEPHYR_INCLUDE_DRIVERS_USBC_USBC_TCPC_H_
16#define ZEPHYR_INCLUDE_DRIVERS_USBC_USBC_TCPC_H_
17
25#include <zephyr/types.h>
26#include <zephyr/device.h>
27
28#include "usbc_tc.h"
29#include "usbc_pd.h"
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
77};
78
95};
96
109
110 union {
115 };
116};
117
118typedef int (*tcpc_vbus_cb_t)(const struct device *dev, int *vbus_meas);
119typedef int (*tcpc_discharge_vbus_cb_t)(const struct device *dev, bool enable);
120typedef int (*tcpc_vconn_control_cb_t)(const struct device *dev, bool enable);
121typedef void (*tcpc_alert_handler_cb_t)(const struct device *dev, void *data,
122 enum tcpc_alert alert);
123
124__subsystem struct tcpc_driver_api {
125 int (*init)(const struct device *dev);
126 int (*get_cc)(const struct device *dev, enum tc_cc_voltage_state *cc1,
127 enum tc_cc_voltage_state *cc2);
128 void (*set_vbus_measure_cb)(const struct device *dev, tcpc_vbus_cb_t vbus_cb);
129 void (*set_discharge_vbus_cb)(const struct device *dev,
130 tcpc_discharge_vbus_cb_t discharge_vbus_cb);
131 bool (*check_vbus_level)(const struct device *dev, enum tc_vbus_level level);
132 int (*get_vbus)(const struct device *dev, int *vbus_meas);
133 int (*select_rp_value)(const struct device *dev, enum tc_rp_value rp);
134 int (*get_rp_value)(const struct device *dev, enum tc_rp_value *rp);
135 int (*set_cc)(const struct device *dev, enum tc_cc_pull pull);
136 void (*set_vconn_cb)(const struct device *dev, tcpc_vconn_control_cb_t vconn_cb);
137 int (*set_vconn)(const struct device *dev, bool enable);
138 int (*set_roles)(const struct device *dev, enum tc_power_role power_role,
139 enum tc_data_role data_role);
140 int (*receive_data)(const struct device *dev, struct pd_msg *msg);
141 bool (*is_rx_pending_msg)(const struct device *dev, enum pd_packet_type *type);
142 int (*set_rx_enable)(const struct device *dev, bool enable);
143 int (*set_cc_polarity)(const struct device *dev, enum tc_cc_polarity polarity);
144 int (*transmit_data)(const struct device *dev, struct pd_msg *msg);
145 int (*dump_std_reg)(const struct device *dev);
146 void (*alert_handler_cb)(const struct device *dev, void *data, enum tcpc_alert alert);
147 int (*get_status_register)(const struct device *dev, enum tcpc_status_reg reg,
148 int32_t *status);
149 int (*clear_status_register)(const struct device *dev, enum tcpc_status_reg reg,
150 uint32_t mask);
151 int (*mask_status_register)(const struct device *dev, enum tcpc_status_reg reg,
152 uint32_t mask);
153 int (*set_discharge_vbus)(const struct device *dev, bool enable);
154 int (*enable_auto_discharge_disconnect)(const struct device *dev, bool enable);
155 int (*set_debug_accessory)(const struct device *dev, bool enable);
156 int (*set_debug_detach)(const struct device *dev);
157 int (*set_drp_toggle)(const struct device *dev, bool enable);
158 bool (*get_snk_ctrl)(const struct device *dev);
159 bool (*get_src_ctrl)(const struct device *dev);
160 int (*get_chip_info)(const struct device *dev, struct tcpc_chip_info *chip_info);
161 int (*set_low_power_mode)(const struct device *dev, bool enable);
162 int (*sop_prime_enable)(const struct device *dev, bool enable);
163 int (*set_bist_test_mode)(const struct device *dev, bool enable);
165 void *data);
166};
167
171static inline int tcpc_is_cc_rp(enum tc_cc_voltage_state cc)
172{
173 return (cc == TC_CC_VOLT_RP_DEF) || (cc == TC_CC_VOLT_RP_1A5) ||
175}
176
180static inline int tcpc_is_cc_open(enum tc_cc_voltage_state cc1,
181 enum tc_cc_voltage_state cc2)
182{
183 return cc1 == TC_CC_VOLT_OPEN && cc2 == TC_CC_VOLT_OPEN;
184}
185
190 enum tc_cc_voltage_state cc2)
191{
192 return cc1 == TC_CC_VOLT_RD && cc2 == TC_CC_VOLT_RD;
193}
194
199 enum tc_cc_voltage_state cc2)
200{
201 return tcpc_is_cc_rp(cc1) && tcpc_is_cc_rp(cc2);
202}
203
207static inline int tcpc_is_cc_audio_acc(enum tc_cc_voltage_state cc1,
208 enum tc_cc_voltage_state cc2)
209{
210 return cc1 == TC_CC_VOLT_RA && cc2 == TC_CC_VOLT_RA;
211}
212
217 enum tc_cc_voltage_state cc2)
218{
219 return cc1 == TC_CC_VOLT_RD || cc2 == TC_CC_VOLT_RD;
220}
221
226 enum tc_cc_voltage_state cc2)
227{
228 return tcpc_is_cc_at_least_one_rd(cc1, cc2) && cc1 != cc2;
229}
230
239static inline int tcpc_init(const struct device *dev)
240{
241 const struct tcpc_driver_api *api =
242 (const struct tcpc_driver_api *)dev->api;
243
244 __ASSERT(api->init != NULL,
245 "Callback pointer should not be NULL");
246
247 return api->init(dev);
248}
249
261static inline int tcpc_get_cc(const struct device *dev,
262 enum tc_cc_voltage_state *cc1,
263 enum tc_cc_voltage_state *cc2)
264{
265 const struct tcpc_driver_api *api =
266 (const struct tcpc_driver_api *)dev->api;
267
268 if (api->get_cc == NULL) {
269 return -ENOSYS;
270 }
271
272 return api->get_cc(dev, cc1, cc2);
273}
274
287static inline void tcpc_set_vbus_measure_cb(const struct device *dev,
288 tcpc_vbus_cb_t vbus_cb)
289{
290 const struct tcpc_driver_api *api =
291 (const struct tcpc_driver_api *)dev->api;
292
293 __ASSERT(api->set_vbus_measure_cb != NULL,
294 "Callback pointer should not be NULL");
295
296 api->set_vbus_measure_cb(dev, vbus_cb);
297}
298
310static inline void tcpc_set_discharge_vbus_cb(const struct device *dev,
311 tcpc_discharge_vbus_cb_t discharge_vbus_cb)
312{
313 const struct tcpc_driver_api *api =
314 (const struct tcpc_driver_api *)dev->api;
315
316 __ASSERT(api->set_discharge_vbus_cb != NULL,
317 "Callback pointer should not be NULL");
318
319 api->set_discharge_vbus_cb(dev, discharge_vbus_cb);
320}
321
331static inline bool tcpc_check_vbus_level(const struct device *dev,
332 enum tc_vbus_level level)
333{
334 const struct tcpc_driver_api *api =
335 (const struct tcpc_driver_api *)dev->api;
336
337 __ASSERT(api->check_vbus_level != NULL,
338 "Callback pointer should not be NULL");
339
340 return api->check_vbus_level(dev, level);
341}
342
357static inline int tcpc_get_vbus(const struct device *dev, int *vbus_meas)
358{
359 const struct tcpc_driver_api *api =
360 (const struct tcpc_driver_api *)dev->api;
361
362 __ASSERT(api->get_vbus != NULL,
363 "Callback pointer should not be NULL");
364
365 return api->get_vbus(dev, vbus_meas);
366}
367
378static inline int tcpc_select_rp_value(const struct device *dev, enum tc_rp_value rp)
379{
380 const struct tcpc_driver_api *api =
381 (const struct tcpc_driver_api *)dev->api;
382
383 if (api->select_rp_value == NULL) {
384 return -ENOSYS;
385 }
386
387 return api->select_rp_value(dev, rp);
388}
389
400static inline int tcpc_get_rp_value(const struct device *dev, enum tc_rp_value *rp)
401{
402 const struct tcpc_driver_api *api =
403 (const struct tcpc_driver_api *)dev->api;
404
405 if (api->get_rp_value == NULL) {
406 return -ENOSYS;
407 }
408
409 return api->get_rp_value(dev, rp);
410}
411
421static inline int tcpc_set_cc(const struct device *dev, enum tc_cc_pull pull)
422{
423 const struct tcpc_driver_api *api =
424 (const struct tcpc_driver_api *)dev->api;
425
426 __ASSERT(api->set_cc != NULL,
427 "Callback pointer should not be NULL");
428
429 return api->set_cc(dev, pull);
430}
431
442static inline void tcpc_set_vconn_cb(const struct device *dev,
444{
445 const struct tcpc_driver_api *api =
446 (const struct tcpc_driver_api *)dev->api;
447
448 __ASSERT(api->set_vconn_cb != NULL,
449 "Callback pointer should not be NULL");
450
451 return api->set_vconn_cb(dev, vconn_cb);
452}
453
467static inline int tcpc_set_vconn(const struct device *dev, bool enable)
468{
469 const struct tcpc_driver_api *api =
470 (const struct tcpc_driver_api *)dev->api;
471
472 if (api->set_vconn == NULL) {
473 return -ENOSYS;
474 }
475
476 return api->set_vconn(dev, enable);
477}
478
492static inline int tcpc_set_roles(const struct device *dev,
493 enum tc_power_role power_role,
494 enum tc_data_role data_role)
495{
496 const struct tcpc_driver_api *api =
497 (const struct tcpc_driver_api *)dev->api;
498
499 if (api->set_roles == NULL) {
500 return -ENOSYS;
501 }
502
503 return api->set_roles(dev, power_role, data_role);
504}
505
516static inline bool tcpc_is_rx_pending_msg(const struct device *dev,
517 enum pd_packet_type *type)
518{
519 const struct tcpc_driver_api *api =
520 (const struct tcpc_driver_api *)dev->api;
521
522 if (api->is_rx_pending_msg == NULL) {
523 return -ENOSYS;
524 }
525
526 return api->is_rx_pending_msg(dev, type);
527}
528
540static inline int tcpc_receive_data(const struct device *dev,
541 struct pd_msg *buf)
542{
543 const struct tcpc_driver_api *api =
544 (const struct tcpc_driver_api *)dev->api;
545
546 if (api->receive_data == NULL) {
547 return -ENOSYS;
548 }
549
550 return api->receive_data(dev, buf);
551}
552
564static inline int tcpc_set_rx_enable(const struct device *dev, bool enable)
565{
566 const struct tcpc_driver_api *api =
567 (const struct tcpc_driver_api *)dev->api;
568
569 if (api->set_rx_enable == NULL) {
570 return -ENOSYS;
571 }
572
573 return api->set_rx_enable(dev, enable);
574}
575
585static inline int tcpc_set_cc_polarity(const struct device *dev,
586 enum tc_cc_polarity polarity)
587{
588 const struct tcpc_driver_api *api =
589 (const struct tcpc_driver_api *)dev->api;
590
591 __ASSERT(api->set_cc_polarity != NULL,
592 "Callback pointer should not be NULL");
593
594 return api->set_cc_polarity(dev, polarity);
595}
596
607static inline int tcpc_transmit_data(const struct device *dev,
608 struct pd_msg *msg)
609{
610 const struct tcpc_driver_api *api =
611 (const struct tcpc_driver_api *)dev->api;
612
613 if (api->transmit_data == NULL) {
614 return -ENOSYS;
615 }
616
617 return api->transmit_data(dev, msg);
618}
619
629static inline int tcpc_dump_std_reg(const struct device *dev)
630{
631 const struct tcpc_driver_api *api =
632 (const struct tcpc_driver_api *)dev->api;
633
634 if (api->dump_std_reg == NULL) {
635 return -ENOSYS;
636 }
637
638 return api->dump_std_reg(dev);
639}
640
654static inline int tcpc_set_alert_handler_cb(const struct device *dev,
656 void *data)
657{
658 const struct tcpc_driver_api *api =
659 (const struct tcpc_driver_api *)dev->api;
660
661 __ASSERT(api->set_alert_handler_cb != NULL,
662 "Callback pointer should not be NULL");
663
664 return api->set_alert_handler_cb(dev, handler, data);
665}
666
678static inline int tcpc_get_status_register(const struct device *dev,
679 enum tcpc_status_reg reg,
680 int32_t *status)
681{
682 const struct tcpc_driver_api *api =
683 (const struct tcpc_driver_api *)dev->api;
684
685 if (api->get_status_register == NULL) {
686 return -ENOSYS;
687 }
688
689 return api->get_status_register(dev, reg, status);
690}
691
704static inline int tcpc_clear_status_register(const struct device *dev,
705 enum tcpc_status_reg reg,
706 uint32_t mask)
707{
708 const struct tcpc_driver_api *api =
709 (const struct tcpc_driver_api *)dev->api;
710
711 if (api->clear_status_register == NULL) {
712 return -ENOSYS;
713 }
714
715 return api->clear_status_register(dev, reg, mask);
716}
717
730static inline int tcpc_mask_status_register(const struct device *dev,
731 enum tcpc_status_reg reg,
732 uint32_t mask)
733{
734 const struct tcpc_driver_api *api =
735 (const struct tcpc_driver_api *)dev->api;
736
737 if (api->mask_status_register == NULL) {
738 return -ENOSYS;
739 }
740
741 return api->mask_status_register(dev, reg, mask);
742}
743
756static inline int tcpc_set_discharge_vbus(const struct device *dev, bool enable)
757{
758 const struct tcpc_driver_api *api =
759 (const struct tcpc_driver_api *)dev->api;
760
761 if (api->set_discharge_vbus == NULL) {
762 return -ENOSYS;
763 }
764
765 return api->set_discharge_vbus(dev, enable);
766}
767
781 const struct device *dev, bool enable)
782{
783 const struct tcpc_driver_api *api =
784 (const struct tcpc_driver_api *)dev->api;
785
786 if (api->enable_auto_discharge_disconnect == NULL) {
787 return -ENOSYS;
788 }
789
790 return api->enable_auto_discharge_disconnect(dev, enable);
791}
792
803static inline int tcpc_set_debug_accessory(const struct device *dev,
804 bool enable)
805{
806 const struct tcpc_driver_api *api =
807 (const struct tcpc_driver_api *)dev->api;
808
809 if (api->set_debug_accessory == NULL) {
810 return -ENOSYS;
811 }
812
813 return api->set_debug_accessory(dev, enable);
814}
815
825static inline int tcpc_set_debug_detach(const struct device *dev)
826{
827 const struct tcpc_driver_api *api =
828 (const struct tcpc_driver_api *)dev->api;
829
830 if (api->set_debug_detach == NULL) {
831 return -ENOSYS;
832 }
833
834 return api->set_debug_detach(dev);
835}
836
847static inline int tcpc_set_drp_toggle(const struct device *dev, bool enable)
848{
849 const struct tcpc_driver_api *api =
850 (const struct tcpc_driver_api *)dev->api;
851
852 if (api->set_drp_toggle == NULL) {
853 return -ENOSYS;
854 }
855
856 return api->set_drp_toggle(dev, enable);
857}
858
868static inline bool tcpc_get_snk_ctrl(const struct device *dev)
869{
870 const struct tcpc_driver_api *api =
871 (const struct tcpc_driver_api *)dev->api;
872
873 if (api->get_snk_ctrl == NULL) {
874 return -ENOSYS;
875 }
876
877 return api->get_snk_ctrl(dev);
878}
879
889static inline bool tcpc_get_src_ctrl(const struct device *dev)
890{
891 const struct tcpc_driver_api *api =
892 (const struct tcpc_driver_api *)dev->api;
893
894 if (api->get_src_ctrl == NULL) {
895 return -ENOSYS;
896 }
897
898 return api->get_src_ctrl(dev);
899}
900
912static inline int tcpc_set_bist_test_mode(const struct device *dev,
913 bool enable)
914{
915 const struct tcpc_driver_api *api =
916 (const struct tcpc_driver_api *)dev->api;
917
918 if (api->set_bist_test_mode == NULL) {
919 return -ENOSYS;
920 }
921
922 return api->set_bist_test_mode(dev, enable);
923}
924
935static inline int tcpc_get_chip_info(const struct device *dev,
936 struct tcpc_chip_info *chip_info)
937{
938 const struct tcpc_driver_api *api =
939 (const struct tcpc_driver_api *)dev->api;
940
941 if (api->get_chip_info == NULL) {
942 return -ENOSYS;
943 }
944
945 return api->get_chip_info(dev, chip_info);
946}
947
958static inline int tcpc_set_low_power_mode(const struct device *dev,
959 bool enable)
960{
961 const struct tcpc_driver_api *api =
962 (const struct tcpc_driver_api *)dev->api;
963
964 if (api->set_low_power_mode == NULL) {
965 return -ENOSYS;
966 }
967
968 return api->set_low_power_mode(dev, enable);
969}
970
981static inline int tcpc_sop_prime_enable(const struct device *dev,
982 bool enable)
983{
984 const struct tcpc_driver_api *api =
985 (const struct tcpc_driver_api *)dev->api;
986
987 if (api->sop_prime_enable == NULL) {
988 return -ENOSYS;
989 }
990
991 return api->sop_prime_enable(dev, enable);
992}
993
998#ifdef __cplusplus
999}
1000#endif
1001
1002#endif /* ZEPHYR_INCLUDE_DRIVERS_USBC_USBC_TCPC_H_ */
irp cc
Definition: asm-macro-32-bit-gnu.h:10
static __pinned_data struct init_record * rp
Definition: main.c:137
#define ENOSYS
Definition: errno.h:83
pd_packet_type
Power Delivery packet type See USB Type-C Port Controller Interface Specification,...
Definition: usbc_pd.h:660
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:704
static int tcpc_set_debug_accessory(const struct device *dev, bool enable)
Manual control of TCPC DebugAccessory control.
Definition: usbc_tcpc.h:803
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:198
static bool tcpc_check_vbus_level(const struct device *dev, enum tc_vbus_level level)
Checks if VBUS is at a particular level.
Definition: usbc_tcpc.h:331
static int tcpc_set_discharge_vbus(const struct device *dev, bool enable)
Enables discharge TypeC VBUS on Source / Sink disconnect and power role swap.
Definition: usbc_tcpc.h:756
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:730
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:180
static bool tcpc_get_src_ctrl(const struct device *dev)
Queries the current sourcing state of the TCPC.
Definition: usbc_tcpc.h:889
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:207
static bool tcpc_is_rx_pending_msg(const struct device *dev, enum pd_packet_type *type)
Tests if a received Power Delivery message is pending.
Definition: usbc_tcpc.h:516
static int tcpc_set_vconn(const struct device *dev, bool enable)
Enables or disables VCONN.
Definition: usbc_tcpc.h:467
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:400
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:378
static int tcpc_get_status_register(const struct device *dev, enum tcpc_status_reg reg, int32_t *status)
Gets a status register.
Definition: usbc_tcpc.h:678
tcpc_alert
TCPC Alert bits.
Definition: usbc_tcpc.h:38
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:585
void(* tcpc_alert_handler_cb_t)(const struct device *dev, void *data, enum tcpc_alert alert)
Definition: usbc_tcpc.h:121
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:261
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:171
static int tcpc_get_vbus(const struct device *dev, int *vbus_meas)
Reads and returns VBUS measured in mV.
Definition: usbc_tcpc.h:357
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:654
static void tcpc_set_discharge_vbus_cb(const struct device *dev, tcpc_discharge_vbus_cb_t discharge_vbus_cb)
Sets a callback that can discharge VBUS if the TCPC is unable to or the system is configured in a way...
Definition: usbc_tcpc.h:310
static int tcpc_receive_data(const struct device *dev, struct pd_msg *buf)
Retrieves the Power Delivery message from the TCPC.
Definition: usbc_tcpc.h:540
int(* tcpc_vconn_control_cb_t)(const struct device *dev, bool enable)
Definition: usbc_tcpc.h:120
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:935
static int tcpc_transmit_data(const struct device *dev, struct pd_msg *msg)
Transmits a Power Delivery message.
Definition: usbc_tcpc.h:607
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:492
static int tcpc_set_rx_enable(const struct device *dev, bool enable)
Enables the reception of SOP* message types.
Definition: usbc_tcpc.h:564
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:225
static int tcpc_dump_std_reg(const struct device *dev)
Dump a set of TCPC registers.
Definition: usbc_tcpc.h:629
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:958
static int tcpc_enable_auto_discharge_disconnect(const struct device *dev, bool enable)
TCPC automatically discharge TypeC VBUS on Source / Sink disconnect an power role swap.
Definition: usbc_tcpc.h:780
static int tcpc_set_drp_toggle(const struct device *dev, bool enable)
Enable TCPC auto dual role toggle.
Definition: usbc_tcpc.h:847
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:189
static bool tcpc_get_snk_ctrl(const struct device *dev)
Queries the current sinking state of the TCPC.
Definition: usbc_tcpc.h:868
static void tcpc_set_vconn_cb(const struct device *dev, tcpc_vconn_control_cb_t vconn_cb)
Sets a callback that can enable or disable VCONN if the TCPC is unable to or the system is configured...
Definition: usbc_tcpc.h:442
static int tcpc_set_debug_detach(const struct device *dev)
Detach from a debug connection.
Definition: usbc_tcpc.h:825
static int tcpc_sop_prime_enable(const struct device *dev, bool enable)
Enables the reception of SOP Prime messages.
Definition: usbc_tcpc.h:981
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:216
static int tcpc_init(const struct device *dev)
Initializes the TCPC.
Definition: usbc_tcpc.h:239
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:421
static int tcpc_set_bist_test_mode(const struct device *dev, bool enable)
Controls the BIST Mode of the TCPC. It disables RX alerts while the mode is active.
Definition: usbc_tcpc.h:912
static void tcpc_set_vbus_measure_cb(const struct device *dev, tcpc_vbus_cb_t vbus_cb)
Sets a callback that can measure the value of VBUS if the TCPC is unable to or the system is configur...
Definition: usbc_tcpc.h:287
int(* tcpc_discharge_vbus_cb_t)(const struct device *dev, bool enable)
Definition: usbc_tcpc.h:119
int(* tcpc_vbus_cb_t)(const struct device *dev, int *vbus_meas)
Definition: usbc_tcpc.h:118
tcpc_status_reg
TCPC Status register.
Definition: usbc_tcpc.h:82
@ TCPC_ALERT_EXTENDED_STATUS
Definition: usbc_tcpc.h:69
@ TCPC_ALERT_TRANSMIT_MSG_DISCARDED
Definition: usbc_tcpc.h:53
@ TCPC_ALERT_CC_STATUS
Definition: usbc_tcpc.h:40
@ TCPC_ALERT_EXTENDED
Definition: usbc_tcpc.h:74
@ TCPC_ALERT_BEGINNING_MSG_STATUS
Definition: usbc_tcpc.h:67
@ TCPC_ALERT_MSG_STATUS
Definition: usbc_tcpc.h:44
@ TCPC_ALERT_HARD_RESET_RECEIVED
Definition: usbc_tcpc.h:46
@ TCPC_ALERT_TRANSMIT_MSG_SUCCESS
Definition: usbc_tcpc.h:55
@ TCPC_ALERT_VBUS_ALARM_HI
Definition: usbc_tcpc.h:57
@ TCPC_ALERT_VBUS_SNK_DISCONNECT
Definition: usbc_tcpc.h:65
@ TCPC_ALERT_POWER_STATUS
Definition: usbc_tcpc.h:42
@ TCPC_ALERT_VBUS_ALARM_LO
Definition: usbc_tcpc.h:59
@ TCPC_ALERT_VENDOR_DEFINED
Definition: usbc_tcpc.h:76
@ TCPC_ALERT_FAULT_STATUS
Definition: usbc_tcpc.h:61
@ TCPC_ALERT_TRANSMIT_MSG_FAILED
Definition: usbc_tcpc.h:48
@ TCPC_ALERT_RX_BUFFER_OVERFLOW
Definition: usbc_tcpc.h:63
@ TCPC_FAULT_STATUS
Definition: usbc_tcpc.h:88
@ TCPC_VENDOR_DEFINED_STATUS
Definition: usbc_tcpc.h:94
@ TCPC_EXTENDED_ALERT_STATUS
Definition: usbc_tcpc.h:92
@ TCPC_POWER_STATUS
Definition: usbc_tcpc.h:86
@ TCPC_CC_STATUS
Definition: usbc_tcpc.h:84
@ TCPC_EXTENDED_STATUS
Definition: usbc_tcpc.h:90
tc_vbus_level
VBUS level voltages.
Definition: usbc_tc.h:326
tc_cc_pull
CC pull resistors.
Definition: usbc_tc.h:352
tc_rp_value
Pull-Up resistor values.
Definition: usbc_tc.h:338
tc_cc_voltage_state
CC Voltage status.
Definition: usbc_tc.h:308
tc_data_role
Power Delivery Data Role.
Definition: usbc_tc.h:378
tc_power_role
Power Delivery Power Role.
Definition: usbc_tc.h:368
tc_cc_polarity
Polarity of the CC lines.
Definition: usbc_tc.h:390
@ TC_CC_VOLT_RP_DEF
Definition: usbc_tc.h:316
@ TC_CC_VOLT_RA
Definition: usbc_tc.h:312
@ TC_CC_VOLT_OPEN
Definition: usbc_tc.h:310
@ TC_CC_VOLT_RD
Definition: usbc_tc.h:314
@ TC_CC_VOLT_RP_3A0
Definition: usbc_tc.h:320
@ TC_CC_VOLT_RP_1A5
Definition: usbc_tc.h:318
#define bool
Definition: stdbool.h:13
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
__INT32_TYPE__ int32_t
Definition: stdint.h:74
__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:435
const void * api
Definition: device.h:441
Power Delivery message.
Definition: usbc_pd.h:822
TCPC Chip Information.
Definition: usbc_tcpc.h:100
uint16_t product_id
Definition: usbc_tcpc.h:104
uint8_t min_req_fw_version_string[8]
Definition: usbc_tcpc.h:112
uint64_t fw_verion_number
Definition: usbc_tcpc.h:108
uint64_t min_req_fw_version_number
Definition: usbc_tcpc.h:114
uint16_t device_id
Definition: usbc_tcpc.h:106
uint16_t vendor_id
Definition: usbc_tcpc.h:102
Definition: usbc_tcpc.h:124
int(* init)(const struct device *dev)
Definition: usbc_tcpc.h:125
int(* set_debug_accessory)(const struct device *dev, bool enable)
Definition: usbc_tcpc.h:155
int(* dump_std_reg)(const struct device *dev)
Definition: usbc_tcpc.h:145
int(* select_rp_value)(const struct device *dev, enum tc_rp_value rp)
Definition: usbc_tcpc.h:133
void(* alert_handler_cb)(const struct device *dev, void *data, enum tcpc_alert alert)
Definition: usbc_tcpc.h:146
int(* set_rx_enable)(const struct device *dev, bool enable)
Definition: usbc_tcpc.h:142
int(* set_cc)(const struct device *dev, enum tc_cc_pull pull)
Definition: usbc_tcpc.h:135
int(* set_roles)(const struct device *dev, enum tc_power_role power_role, enum tc_data_role data_role)
Definition: usbc_tcpc.h:138
int(* sop_prime_enable)(const struct device *dev, bool enable)
Definition: usbc_tcpc.h:162
int(* clear_status_register)(const struct device *dev, enum tcpc_status_reg reg, uint32_t mask)
Definition: usbc_tcpc.h:149
bool(* get_snk_ctrl)(const struct device *dev)
Definition: usbc_tcpc.h:158
int(* enable_auto_discharge_disconnect)(const struct device *dev, bool enable)
Definition: usbc_tcpc.h:154
int(* set_discharge_vbus)(const struct device *dev, bool enable)
Definition: usbc_tcpc.h:153
bool(* is_rx_pending_msg)(const struct device *dev, enum pd_packet_type *type)
Definition: usbc_tcpc.h:141
int(* receive_data)(const struct device *dev, struct pd_msg *msg)
Definition: usbc_tcpc.h:140
int(* set_vconn)(const struct device *dev, bool enable)
Definition: usbc_tcpc.h:137
void(* set_discharge_vbus_cb)(const struct device *dev, tcpc_discharge_vbus_cb_t discharge_vbus_cb)
Definition: usbc_tcpc.h:129
int(* set_cc_polarity)(const struct device *dev, enum tc_cc_polarity polarity)
Definition: usbc_tcpc.h:143
int(* get_chip_info)(const struct device *dev, struct tcpc_chip_info *chip_info)
Definition: usbc_tcpc.h:160
bool(* get_src_ctrl)(const struct device *dev)
Definition: usbc_tcpc.h:159
int(* get_status_register)(const struct device *dev, enum tcpc_status_reg reg, int32_t *status)
Definition: usbc_tcpc.h:147
void(* set_vbus_measure_cb)(const struct device *dev, tcpc_vbus_cb_t vbus_cb)
Definition: usbc_tcpc.h:128
int(* transmit_data)(const struct device *dev, struct pd_msg *msg)
Definition: usbc_tcpc.h:144
int(* set_low_power_mode)(const struct device *dev, bool enable)
Definition: usbc_tcpc.h:161
int(* mask_status_register)(const struct device *dev, enum tcpc_status_reg reg, uint32_t mask)
Definition: usbc_tcpc.h:151
int(* set_debug_detach)(const struct device *dev)
Definition: usbc_tcpc.h:156
int(* get_rp_value)(const struct device *dev, enum tc_rp_value *rp)
Definition: usbc_tcpc.h:134
void(* set_vconn_cb)(const struct device *dev, tcpc_vconn_control_cb_t vconn_cb)
Definition: usbc_tcpc.h:136
int(* get_vbus)(const struct device *dev, int *vbus_meas)
Definition: usbc_tcpc.h:132
int(* set_alert_handler_cb)(const struct device *dev, tcpc_alert_handler_cb_t handler, void *data)
Definition: usbc_tcpc.h:164
int(* get_cc)(const struct device *dev, enum tc_cc_voltage_state *cc1, enum tc_cc_voltage_state *cc2)
Definition: usbc_tcpc.h:126
int(* set_drp_toggle)(const struct device *dev, bool enable)
Definition: usbc_tcpc.h:157
bool(* check_vbus_level)(const struct device *dev, enum tc_vbus_level level)
Definition: usbc_tcpc.h:131
int(* set_bist_test_mode)(const struct device *dev, bool enable)
Definition: usbc_tcpc.h:163
static fdata_t data[2]
Definition: test_fifo_contexts.c:15
static void msg(uint64_t c64)
Definition: main.c:17
static void handler(struct k_timer *timer)
Definition: main.c:19
USBC Power Delivery API used for USBC drivers.
USBC Type-C Cable and Connector API used for USBC drivers.