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
22
23#define SINK_TX_NG TYPEC_CC_RP_1_5
24#define SINK_TX_OK TYPEC_CC_RP_3_0
25
26enum typec_cc_polarity {
27 TYPEC_POLARITY_CC1,
28 TYPEC_POLARITY_CC2,
29};
30
31
32#define PD_T_TCPC_TX_TIMEOUT 100
33#define PD_ROLE_SWAP_TIMEOUT (MSEC_PER_SEC * 10)
34#define PD_PPS_CTRL_TIMEOUT (MSEC_PER_SEC * 10)
35
36enum tcpm_transmit_status {
37 TCPC_TX_SUCCESS = 0,
38 TCPC_TX_DISCARDED = 1,
39 TCPC_TX_FAILED = 2,
40};
41
42enum tcpm_transmit_type {
43 TCPC_TX_SOP = 0,
44 TCPC_TX_SOP_PRIME = 1,
45 TCPC_TX_SOP_PRIME_PRIME = 2,
46 TCPC_TX_SOP_DEBUG_PRIME = 3,
47 TCPC_TX_SOP_DEBUG_PRIME_PRIME = 4,
48 TCPC_TX_HARD_RESET = 5,
49 TCPC_TX_CABLE_RESET = 6,
50 TCPC_TX_BIST_MODE_2 = 7
51};
52
53
54#define TCPC_MUX_USB_ENABLED BIT(0)
55#define TCPC_MUX_DP_ENABLED BIT(1)
56#define TCPC_MUX_POLARITY_INVERTED BIT(2)
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116struct tcpc_dev {
117 struct fwnode_handle *fwnode;
118
119 int (*init)(struct tcpc_dev *dev);
120 int (*get_vbus)(struct tcpc_dev *dev);
121 int (*get_current_limit)(struct tcpc_dev *dev);
122 int (*set_cc)(struct tcpc_dev *dev, enum typec_cc_status cc);
123 int (*get_cc)(struct tcpc_dev *dev, enum typec_cc_status *cc1,
124 enum typec_cc_status *cc2);
125 int (*set_polarity)(struct tcpc_dev *dev,
126 enum typec_cc_polarity polarity);
127 int (*set_vconn)(struct tcpc_dev *dev, bool on);
128 int (*set_vbus)(struct tcpc_dev *dev, bool on, bool charge);
129 int (*set_current_limit)(struct tcpc_dev *dev, u32 max_ma, u32 mv);
130 int (*set_pd_rx)(struct tcpc_dev *dev, bool on);
131 int (*set_roles)(struct tcpc_dev *dev, bool attached,
132 enum typec_role role, enum typec_data_role data);
133 int (*start_toggling)(struct tcpc_dev *dev,
134 enum typec_port_type port_type,
135 enum typec_cc_status cc);
136 int (*try_role)(struct tcpc_dev *dev, int role);
137 int (*pd_transmit)(struct tcpc_dev *dev, enum tcpm_transmit_type type,
138 const struct pd_message *msg, unsigned int negotiated_rev);
139 int (*set_bist_data)(struct tcpc_dev *dev, bool on);
140 int (*enable_frs)(struct tcpc_dev *dev, bool enable);
141 void (*frs_sourcing_vbus)(struct tcpc_dev *dev);
142 int (*enable_auto_vbus_discharge)(struct tcpc_dev *dev, bool enable);
143 int (*set_auto_vbus_discharge_threshold)(struct tcpc_dev *dev, enum typec_pwr_opmode mode,
144 bool pps_active, u32 requested_vbus_voltage);
145 bool (*is_vbus_vsafe0v)(struct tcpc_dev *dev);
146 void (*set_partner_usb_comm_capable)(struct tcpc_dev *dev, bool enable);
147};
148
149struct tcpm_port;
150
151struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc);
152void tcpm_unregister_port(struct tcpm_port *port);
153
154void tcpm_vbus_change(struct tcpm_port *port);
155void tcpm_cc_change(struct tcpm_port *port);
156void tcpm_sink_frs(struct tcpm_port *port);
157void tcpm_sourcing_vbus(struct tcpm_port *port);
158void tcpm_pd_receive(struct tcpm_port *port,
159 const struct pd_message *msg);
160void tcpm_pd_transmit_complete(struct tcpm_port *port,
161 enum tcpm_transmit_status status);
162void tcpm_pd_hard_reset(struct tcpm_port *port);
163void tcpm_tcpc_reset(struct tcpm_port *port);
164
165#endif
166