1
2
3
4
5
6#ifndef __LINUX_USB_TCPM_H
7#define __LINUX_USB_TCPM_H
8
9#include <linux/bitops.h>
10#include <linux/usb/typec.h>
11#include "pd.h"
12
13enum typec_cc_status {
14 TYPEC_CC_OPEN,
15 TYPEC_CC_RA,
16 TYPEC_CC_RD,
17 TYPEC_CC_RP_DEF,
18 TYPEC_CC_RP_1_5,
19 TYPEC_CC_RP_3_0,
20};
21
22enum typec_cc_polarity {
23 TYPEC_POLARITY_CC1,
24 TYPEC_POLARITY_CC2,
25};
26
27
28#define PD_T_TCPC_TX_TIMEOUT 100
29#define PD_ROLE_SWAP_TIMEOUT (MSEC_PER_SEC * 10)
30#define PD_PPS_CTRL_TIMEOUT (MSEC_PER_SEC * 10)
31
32enum tcpm_transmit_status {
33 TCPC_TX_SUCCESS = 0,
34 TCPC_TX_DISCARDED = 1,
35 TCPC_TX_FAILED = 2,
36};
37
38enum tcpm_transmit_type {
39 TCPC_TX_SOP = 0,
40 TCPC_TX_SOP_PRIME = 1,
41 TCPC_TX_SOP_PRIME_PRIME = 2,
42 TCPC_TX_SOP_DEBUG_PRIME = 3,
43 TCPC_TX_SOP_DEBUG_PRIME_PRIME = 4,
44 TCPC_TX_HARD_RESET = 5,
45 TCPC_TX_CABLE_RESET = 6,
46 TCPC_TX_BIST_MODE_2 = 7
47};
48
49
50#define TCPC_MUX_USB_ENABLED BIT(0)
51#define TCPC_MUX_DP_ENABLED BIT(1)
52#define TCPC_MUX_POLARITY_INVERTED BIT(2)
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83struct tcpc_dev {
84 struct fwnode_handle *fwnode;
85
86 int (*init)(struct tcpc_dev *dev);
87 int (*get_vbus)(struct tcpc_dev *dev);
88 int (*get_current_limit)(struct tcpc_dev *dev);
89 int (*set_cc)(struct tcpc_dev *dev, enum typec_cc_status cc);
90 int (*get_cc)(struct tcpc_dev *dev, enum typec_cc_status *cc1,
91 enum typec_cc_status *cc2);
92 int (*set_polarity)(struct tcpc_dev *dev,
93 enum typec_cc_polarity polarity);
94 int (*set_vconn)(struct tcpc_dev *dev, bool on);
95 int (*set_vbus)(struct tcpc_dev *dev, bool on, bool charge);
96 int (*set_current_limit)(struct tcpc_dev *dev, u32 max_ma, u32 mv);
97 int (*set_pd_rx)(struct tcpc_dev *dev, bool on);
98 int (*set_roles)(struct tcpc_dev *dev, bool attached,
99 enum typec_role role, enum typec_data_role data);
100 int (*start_toggling)(struct tcpc_dev *dev,
101 enum typec_port_type port_type,
102 enum typec_cc_status cc);
103 int (*try_role)(struct tcpc_dev *dev, int role);
104 int (*pd_transmit)(struct tcpc_dev *dev, enum tcpm_transmit_type type,
105 const struct pd_message *msg);
106};
107
108struct tcpm_port;
109
110struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc);
111void tcpm_unregister_port(struct tcpm_port *port);
112
113void tcpm_vbus_change(struct tcpm_port *port);
114void tcpm_cc_change(struct tcpm_port *port);
115void tcpm_pd_receive(struct tcpm_port *port,
116 const struct pd_message *msg);
117void tcpm_pd_transmit_complete(struct tcpm_port *port,
118 enum tcpm_transmit_status status);
119void tcpm_pd_hard_reset(struct tcpm_port *port);
120void tcpm_tcpc_reset(struct tcpm_port *port);
121
122#endif
123