xref: /openbmc/linux/drivers/usb/typec/tcpm/tcpm.c (revision 7c59dace)
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright 2015-2017 Google, Inc
4  *
5  * USB Power Delivery protocol stack.
6  */
7 
8 #include <linux/completion.h>
9 #include <linux/debugfs.h>
10 #include <linux/device.h>
11 #include <linux/jiffies.h>
12 #include <linux/kernel.h>
13 #include <linux/module.h>
14 #include <linux/mutex.h>
15 #include <linux/power_supply.h>
16 #include <linux/proc_fs.h>
17 #include <linux/property.h>
18 #include <linux/sched/clock.h>
19 #include <linux/seq_file.h>
20 #include <linux/slab.h>
21 #include <linux/spinlock.h>
22 #include <linux/usb.h>
23 #include <linux/usb/pd.h>
24 #include <linux/usb/pd_ado.h>
25 #include <linux/usb/pd_bdo.h>
26 #include <linux/usb/pd_ext_sdb.h>
27 #include <linux/usb/pd_vdo.h>
28 #include <linux/usb/role.h>
29 #include <linux/usb/tcpm.h>
30 #include <linux/usb/typec_altmode.h>
31 #include <linux/workqueue.h>
32 
33 #define FOREACH_STATE(S)			\
34 	S(INVALID_STATE),			\
35 	S(TOGGLING),			\
36 	S(SRC_UNATTACHED),			\
37 	S(SRC_ATTACH_WAIT),			\
38 	S(SRC_ATTACHED),			\
39 	S(SRC_STARTUP),				\
40 	S(SRC_SEND_CAPABILITIES),		\
41 	S(SRC_SEND_CAPABILITIES_TIMEOUT),	\
42 	S(SRC_NEGOTIATE_CAPABILITIES),		\
43 	S(SRC_TRANSITION_SUPPLY),		\
44 	S(SRC_READY),				\
45 	S(SRC_WAIT_NEW_CAPABILITIES),		\
46 						\
47 	S(SNK_UNATTACHED),			\
48 	S(SNK_ATTACH_WAIT),			\
49 	S(SNK_DEBOUNCED),			\
50 	S(SNK_ATTACHED),			\
51 	S(SNK_STARTUP),				\
52 	S(SNK_DISCOVERY),			\
53 	S(SNK_DISCOVERY_DEBOUNCE),		\
54 	S(SNK_DISCOVERY_DEBOUNCE_DONE),		\
55 	S(SNK_WAIT_CAPABILITIES),		\
56 	S(SNK_NEGOTIATE_CAPABILITIES),		\
57 	S(SNK_NEGOTIATE_PPS_CAPABILITIES),	\
58 	S(SNK_TRANSITION_SINK),			\
59 	S(SNK_TRANSITION_SINK_VBUS),		\
60 	S(SNK_READY),				\
61 						\
62 	S(ACC_UNATTACHED),			\
63 	S(DEBUG_ACC_ATTACHED),			\
64 	S(AUDIO_ACC_ATTACHED),			\
65 	S(AUDIO_ACC_DEBOUNCE),			\
66 						\
67 	S(HARD_RESET_SEND),			\
68 	S(HARD_RESET_START),			\
69 	S(SRC_HARD_RESET_VBUS_OFF),		\
70 	S(SRC_HARD_RESET_VBUS_ON),		\
71 	S(SNK_HARD_RESET_SINK_OFF),		\
72 	S(SNK_HARD_RESET_WAIT_VBUS),		\
73 	S(SNK_HARD_RESET_SINK_ON),		\
74 						\
75 	S(SOFT_RESET),				\
76 	S(SOFT_RESET_SEND),			\
77 						\
78 	S(DR_SWAP_ACCEPT),			\
79 	S(DR_SWAP_SEND),			\
80 	S(DR_SWAP_SEND_TIMEOUT),		\
81 	S(DR_SWAP_CANCEL),			\
82 	S(DR_SWAP_CHANGE_DR),			\
83 						\
84 	S(PR_SWAP_ACCEPT),			\
85 	S(PR_SWAP_SEND),			\
86 	S(PR_SWAP_SEND_TIMEOUT),		\
87 	S(PR_SWAP_CANCEL),			\
88 	S(PR_SWAP_START),			\
89 	S(PR_SWAP_SRC_SNK_TRANSITION_OFF),	\
90 	S(PR_SWAP_SRC_SNK_SOURCE_OFF),		\
91 	S(PR_SWAP_SRC_SNK_SOURCE_OFF_CC_DEBOUNCED), \
92 	S(PR_SWAP_SRC_SNK_SINK_ON),		\
93 	S(PR_SWAP_SNK_SRC_SINK_OFF),		\
94 	S(PR_SWAP_SNK_SRC_SOURCE_ON),		\
95 	S(PR_SWAP_SNK_SRC_SOURCE_ON_VBUS_RAMPED_UP),    \
96 						\
97 	S(VCONN_SWAP_ACCEPT),			\
98 	S(VCONN_SWAP_SEND),			\
99 	S(VCONN_SWAP_SEND_TIMEOUT),		\
100 	S(VCONN_SWAP_CANCEL),			\
101 	S(VCONN_SWAP_START),			\
102 	S(VCONN_SWAP_WAIT_FOR_VCONN),		\
103 	S(VCONN_SWAP_TURN_ON_VCONN),		\
104 	S(VCONN_SWAP_TURN_OFF_VCONN),		\
105 						\
106 	S(SNK_TRY),				\
107 	S(SNK_TRY_WAIT),			\
108 	S(SNK_TRY_WAIT_DEBOUNCE),               \
109 	S(SNK_TRY_WAIT_DEBOUNCE_CHECK_VBUS),    \
110 	S(SRC_TRYWAIT),				\
111 	S(SRC_TRYWAIT_DEBOUNCE),		\
112 	S(SRC_TRYWAIT_UNATTACHED),		\
113 						\
114 	S(SRC_TRY),				\
115 	S(SRC_TRY_WAIT),                        \
116 	S(SRC_TRY_DEBOUNCE),			\
117 	S(SNK_TRYWAIT),				\
118 	S(SNK_TRYWAIT_DEBOUNCE),		\
119 	S(SNK_TRYWAIT_VBUS),			\
120 	S(BIST_RX),				\
121 						\
122 	S(GET_STATUS_SEND),			\
123 	S(GET_STATUS_SEND_TIMEOUT),		\
124 	S(GET_PPS_STATUS_SEND),			\
125 	S(GET_PPS_STATUS_SEND_TIMEOUT),		\
126 						\
127 	S(ERROR_RECOVERY),			\
128 	S(PORT_RESET),				\
129 	S(PORT_RESET_WAIT_OFF)
130 
131 #define GENERATE_ENUM(e)	e
132 #define GENERATE_STRING(s)	#s
133 
134 enum tcpm_state {
135 	FOREACH_STATE(GENERATE_ENUM)
136 };
137 
138 static const char * const tcpm_states[] = {
139 	FOREACH_STATE(GENERATE_STRING)
140 };
141 
142 enum vdm_states {
143 	VDM_STATE_ERR_BUSY = -3,
144 	VDM_STATE_ERR_SEND = -2,
145 	VDM_STATE_ERR_TMOUT = -1,
146 	VDM_STATE_DONE = 0,
147 	/* Anything >0 represents an active state */
148 	VDM_STATE_READY = 1,
149 	VDM_STATE_BUSY = 2,
150 	VDM_STATE_WAIT_RSP_BUSY = 3,
151 };
152 
153 enum pd_msg_request {
154 	PD_MSG_NONE = 0,
155 	PD_MSG_CTRL_REJECT,
156 	PD_MSG_CTRL_WAIT,
157 	PD_MSG_CTRL_NOT_SUPP,
158 	PD_MSG_DATA_SINK_CAP,
159 	PD_MSG_DATA_SOURCE_CAP,
160 };
161 
162 /* Events from low level driver */
163 
164 #define TCPM_CC_EVENT		BIT(0)
165 #define TCPM_VBUS_EVENT		BIT(1)
166 #define TCPM_RESET_EVENT	BIT(2)
167 
168 #define LOG_BUFFER_ENTRIES	1024
169 #define LOG_BUFFER_ENTRY_SIZE	128
170 
171 /* Alternate mode support */
172 
173 #define SVID_DISCOVERY_MAX	16
174 #define ALTMODE_DISCOVERY_MAX	(SVID_DISCOVERY_MAX * MODE_DISCOVERY_MAX)
175 
176 struct pd_mode_data {
177 	int svid_index;		/* current SVID index		*/
178 	int nsvids;
179 	u16 svids[SVID_DISCOVERY_MAX];
180 	int altmodes;		/* number of alternate modes	*/
181 	struct typec_altmode_desc altmode_desc[ALTMODE_DISCOVERY_MAX];
182 };
183 
184 struct pd_pps_data {
185 	u32 min_volt;
186 	u32 max_volt;
187 	u32 max_curr;
188 	u32 out_volt;
189 	u32 op_curr;
190 	bool supported;
191 	bool active;
192 };
193 
194 struct tcpm_port {
195 	struct device *dev;
196 
197 	struct mutex lock;		/* tcpm state machine lock */
198 	struct workqueue_struct *wq;
199 
200 	struct typec_capability typec_caps;
201 	struct typec_port *typec_port;
202 
203 	struct tcpc_dev	*tcpc;
204 	struct usb_role_switch *role_sw;
205 
206 	enum typec_role vconn_role;
207 	enum typec_role pwr_role;
208 	enum typec_data_role data_role;
209 	enum typec_pwr_opmode pwr_opmode;
210 
211 	struct usb_pd_identity partner_ident;
212 	struct typec_partner_desc partner_desc;
213 	struct typec_partner *partner;
214 
215 	enum typec_cc_status cc_req;
216 
217 	enum typec_cc_status cc1;
218 	enum typec_cc_status cc2;
219 	enum typec_cc_polarity polarity;
220 
221 	bool attached;
222 	bool connected;
223 	enum typec_port_type port_type;
224 	bool vbus_present;
225 	bool vbus_never_low;
226 	bool vbus_source;
227 	bool vbus_charge;
228 
229 	bool send_discover;
230 	bool op_vsafe5v;
231 
232 	int try_role;
233 	int try_snk_count;
234 	int try_src_count;
235 
236 	enum pd_msg_request queued_message;
237 
238 	enum tcpm_state enter_state;
239 	enum tcpm_state prev_state;
240 	enum tcpm_state state;
241 	enum tcpm_state delayed_state;
242 	unsigned long delayed_runtime;
243 	unsigned long delay_ms;
244 
245 	spinlock_t pd_event_lock;
246 	u32 pd_events;
247 
248 	struct work_struct event_work;
249 	struct delayed_work state_machine;
250 	struct delayed_work vdm_state_machine;
251 	bool state_machine_running;
252 
253 	struct completion tx_complete;
254 	enum tcpm_transmit_status tx_status;
255 
256 	struct mutex swap_lock;		/* swap command lock */
257 	bool swap_pending;
258 	bool non_pd_role_swap;
259 	struct completion swap_complete;
260 	int swap_status;
261 
262 	unsigned int negotiated_rev;
263 	unsigned int message_id;
264 	unsigned int caps_count;
265 	unsigned int hard_reset_count;
266 	bool pd_capable;
267 	bool explicit_contract;
268 	unsigned int rx_msgid;
269 
270 	/* Partner capabilities/requests */
271 	u32 sink_request;
272 	u32 source_caps[PDO_MAX_OBJECTS];
273 	unsigned int nr_source_caps;
274 	u32 sink_caps[PDO_MAX_OBJECTS];
275 	unsigned int nr_sink_caps;
276 
277 	/* Local capabilities */
278 	u32 src_pdo[PDO_MAX_OBJECTS];
279 	unsigned int nr_src_pdo;
280 	u32 snk_pdo[PDO_MAX_OBJECTS];
281 	unsigned int nr_snk_pdo;
282 	u32 snk_vdo[VDO_MAX_OBJECTS];
283 	unsigned int nr_snk_vdo;
284 
285 	unsigned int operating_snk_mw;
286 	bool update_sink_caps;
287 
288 	/* Requested current / voltage */
289 	u32 current_limit;
290 	u32 supply_voltage;
291 
292 	/* Used to export TA voltage and current */
293 	struct power_supply *psy;
294 	struct power_supply_desc psy_desc;
295 	enum power_supply_usb_type usb_type;
296 
297 	u32 bist_request;
298 
299 	/* PD state for Vendor Defined Messages */
300 	enum vdm_states vdm_state;
301 	u32 vdm_retries;
302 	/* next Vendor Defined Message to send */
303 	u32 vdo_data[VDO_MAX_SIZE];
304 	u8 vdo_count;
305 	/* VDO to retry if UFP responder replied busy */
306 	u32 vdo_retry;
307 
308 	/* PPS */
309 	struct pd_pps_data pps_data;
310 	struct completion pps_complete;
311 	bool pps_pending;
312 	int pps_status;
313 
314 	/* Alternate mode data */
315 	struct pd_mode_data mode_data;
316 	struct typec_altmode *partner_altmode[ALTMODE_DISCOVERY_MAX];
317 	struct typec_altmode *port_altmode[ALTMODE_DISCOVERY_MAX];
318 
319 	/* Deadline in jiffies to exit src_try_wait state */
320 	unsigned long max_wait;
321 
322 	/* port belongs to a self powered device */
323 	bool self_powered;
324 
325 #ifdef CONFIG_DEBUG_FS
326 	struct dentry *dentry;
327 	struct mutex logbuffer_lock;	/* log buffer access lock */
328 	int logbuffer_head;
329 	int logbuffer_tail;
330 	u8 *logbuffer[LOG_BUFFER_ENTRIES];
331 #endif
332 };
333 
334 struct pd_rx_event {
335 	struct work_struct work;
336 	struct tcpm_port *port;
337 	struct pd_message msg;
338 };
339 
340 #define tcpm_cc_is_sink(cc) \
341 	((cc) == TYPEC_CC_RP_DEF || (cc) == TYPEC_CC_RP_1_5 || \
342 	 (cc) == TYPEC_CC_RP_3_0)
343 
344 #define tcpm_port_is_sink(port) \
345 	((tcpm_cc_is_sink((port)->cc1) && !tcpm_cc_is_sink((port)->cc2)) || \
346 	 (tcpm_cc_is_sink((port)->cc2) && !tcpm_cc_is_sink((port)->cc1)))
347 
348 #define tcpm_cc_is_source(cc) ((cc) == TYPEC_CC_RD)
349 #define tcpm_cc_is_audio(cc) ((cc) == TYPEC_CC_RA)
350 #define tcpm_cc_is_open(cc) ((cc) == TYPEC_CC_OPEN)
351 
352 #define tcpm_port_is_source(port) \
353 	((tcpm_cc_is_source((port)->cc1) && \
354 	 !tcpm_cc_is_source((port)->cc2)) || \
355 	 (tcpm_cc_is_source((port)->cc2) && \
356 	  !tcpm_cc_is_source((port)->cc1)))
357 
358 #define tcpm_port_is_debug(port) \
359 	(tcpm_cc_is_source((port)->cc1) && tcpm_cc_is_source((port)->cc2))
360 
361 #define tcpm_port_is_audio(port) \
362 	(tcpm_cc_is_audio((port)->cc1) && tcpm_cc_is_audio((port)->cc2))
363 
364 #define tcpm_port_is_audio_detached(port) \
365 	((tcpm_cc_is_audio((port)->cc1) && tcpm_cc_is_open((port)->cc2)) || \
366 	 (tcpm_cc_is_audio((port)->cc2) && tcpm_cc_is_open((port)->cc1)))
367 
368 #define tcpm_try_snk(port) \
369 	((port)->try_snk_count == 0 && (port)->try_role == TYPEC_SINK && \
370 	(port)->port_type == TYPEC_PORT_DRP)
371 
372 #define tcpm_try_src(port) \
373 	((port)->try_src_count == 0 && (port)->try_role == TYPEC_SOURCE && \
374 	(port)->port_type == TYPEC_PORT_DRP)
375 
376 #define tcpm_data_role_for_source(port) \
377 	((port)->typec_caps.data == TYPEC_PORT_UFP ? \
378 	TYPEC_DEVICE : TYPEC_HOST)
379 
380 #define tcpm_data_role_for_sink(port) \
381 	((port)->typec_caps.data == TYPEC_PORT_DFP ? \
382 	TYPEC_HOST : TYPEC_DEVICE)
383 
384 static enum tcpm_state tcpm_default_state(struct tcpm_port *port)
385 {
386 	if (port->port_type == TYPEC_PORT_DRP) {
387 		if (port->try_role == TYPEC_SINK)
388 			return SNK_UNATTACHED;
389 		else if (port->try_role == TYPEC_SOURCE)
390 			return SRC_UNATTACHED;
391 		/* Fall through to return SRC_UNATTACHED */
392 	} else if (port->port_type == TYPEC_PORT_SNK) {
393 		return SNK_UNATTACHED;
394 	}
395 	return SRC_UNATTACHED;
396 }
397 
398 static bool tcpm_port_is_disconnected(struct tcpm_port *port)
399 {
400 	return (!port->attached && port->cc1 == TYPEC_CC_OPEN &&
401 		port->cc2 == TYPEC_CC_OPEN) ||
402 	       (port->attached && ((port->polarity == TYPEC_POLARITY_CC1 &&
403 				    port->cc1 == TYPEC_CC_OPEN) ||
404 				   (port->polarity == TYPEC_POLARITY_CC2 &&
405 				    port->cc2 == TYPEC_CC_OPEN)));
406 }
407 
408 /*
409  * Logging
410  */
411 
412 #ifdef CONFIG_DEBUG_FS
413 
414 static bool tcpm_log_full(struct tcpm_port *port)
415 {
416 	return port->logbuffer_tail ==
417 		(port->logbuffer_head + 1) % LOG_BUFFER_ENTRIES;
418 }
419 
420 __printf(2, 0)
421 static void _tcpm_log(struct tcpm_port *port, const char *fmt, va_list args)
422 {
423 	char tmpbuffer[LOG_BUFFER_ENTRY_SIZE];
424 	u64 ts_nsec = local_clock();
425 	unsigned long rem_nsec;
426 
427 	mutex_lock(&port->logbuffer_lock);
428 	if (!port->logbuffer[port->logbuffer_head]) {
429 		port->logbuffer[port->logbuffer_head] =
430 				kzalloc(LOG_BUFFER_ENTRY_SIZE, GFP_KERNEL);
431 		if (!port->logbuffer[port->logbuffer_head]) {
432 			mutex_unlock(&port->logbuffer_lock);
433 			return;
434 		}
435 	}
436 
437 	vsnprintf(tmpbuffer, sizeof(tmpbuffer), fmt, args);
438 
439 	if (tcpm_log_full(port)) {
440 		port->logbuffer_head = max(port->logbuffer_head - 1, 0);
441 		strcpy(tmpbuffer, "overflow");
442 	}
443 
444 	if (port->logbuffer_head < 0 ||
445 	    port->logbuffer_head >= LOG_BUFFER_ENTRIES) {
446 		dev_warn(port->dev,
447 			 "Bad log buffer index %d\n", port->logbuffer_head);
448 		goto abort;
449 	}
450 
451 	if (!port->logbuffer[port->logbuffer_head]) {
452 		dev_warn(port->dev,
453 			 "Log buffer index %d is NULL\n", port->logbuffer_head);
454 		goto abort;
455 	}
456 
457 	rem_nsec = do_div(ts_nsec, 1000000000);
458 	scnprintf(port->logbuffer[port->logbuffer_head],
459 		  LOG_BUFFER_ENTRY_SIZE, "[%5lu.%06lu] %s",
460 		  (unsigned long)ts_nsec, rem_nsec / 1000,
461 		  tmpbuffer);
462 	port->logbuffer_head = (port->logbuffer_head + 1) % LOG_BUFFER_ENTRIES;
463 
464 abort:
465 	mutex_unlock(&port->logbuffer_lock);
466 }
467 
468 __printf(2, 3)
469 static void tcpm_log(struct tcpm_port *port, const char *fmt, ...)
470 {
471 	va_list args;
472 
473 	/* Do not log while disconnected and unattached */
474 	if (tcpm_port_is_disconnected(port) &&
475 	    (port->state == SRC_UNATTACHED || port->state == SNK_UNATTACHED ||
476 	     port->state == TOGGLING))
477 		return;
478 
479 	va_start(args, fmt);
480 	_tcpm_log(port, fmt, args);
481 	va_end(args);
482 }
483 
484 __printf(2, 3)
485 static void tcpm_log_force(struct tcpm_port *port, const char *fmt, ...)
486 {
487 	va_list args;
488 
489 	va_start(args, fmt);
490 	_tcpm_log(port, fmt, args);
491 	va_end(args);
492 }
493 
494 static void tcpm_log_source_caps(struct tcpm_port *port)
495 {
496 	int i;
497 
498 	for (i = 0; i < port->nr_source_caps; i++) {
499 		u32 pdo = port->source_caps[i];
500 		enum pd_pdo_type type = pdo_type(pdo);
501 		char msg[64];
502 
503 		switch (type) {
504 		case PDO_TYPE_FIXED:
505 			scnprintf(msg, sizeof(msg),
506 				  "%u mV, %u mA [%s%s%s%s%s%s]",
507 				  pdo_fixed_voltage(pdo),
508 				  pdo_max_current(pdo),
509 				  (pdo & PDO_FIXED_DUAL_ROLE) ?
510 							"R" : "",
511 				  (pdo & PDO_FIXED_SUSPEND) ?
512 							"S" : "",
513 				  (pdo & PDO_FIXED_HIGHER_CAP) ?
514 							"H" : "",
515 				  (pdo & PDO_FIXED_USB_COMM) ?
516 							"U" : "",
517 				  (pdo & PDO_FIXED_DATA_SWAP) ?
518 							"D" : "",
519 				  (pdo & PDO_FIXED_EXTPOWER) ?
520 							"E" : "");
521 			break;
522 		case PDO_TYPE_VAR:
523 			scnprintf(msg, sizeof(msg),
524 				  "%u-%u mV, %u mA",
525 				  pdo_min_voltage(pdo),
526 				  pdo_max_voltage(pdo),
527 				  pdo_max_current(pdo));
528 			break;
529 		case PDO_TYPE_BATT:
530 			scnprintf(msg, sizeof(msg),
531 				  "%u-%u mV, %u mW",
532 				  pdo_min_voltage(pdo),
533 				  pdo_max_voltage(pdo),
534 				  pdo_max_power(pdo));
535 			break;
536 		case PDO_TYPE_APDO:
537 			if (pdo_apdo_type(pdo) == APDO_TYPE_PPS)
538 				scnprintf(msg, sizeof(msg),
539 					  "%u-%u mV, %u mA",
540 					  pdo_pps_apdo_min_voltage(pdo),
541 					  pdo_pps_apdo_max_voltage(pdo),
542 					  pdo_pps_apdo_max_current(pdo));
543 			else
544 				strcpy(msg, "undefined APDO");
545 			break;
546 		default:
547 			strcpy(msg, "undefined");
548 			break;
549 		}
550 		tcpm_log(port, " PDO %d: type %d, %s",
551 			 i, type, msg);
552 	}
553 }
554 
555 static int tcpm_debug_show(struct seq_file *s, void *v)
556 {
557 	struct tcpm_port *port = (struct tcpm_port *)s->private;
558 	int tail;
559 
560 	mutex_lock(&port->logbuffer_lock);
561 	tail = port->logbuffer_tail;
562 	while (tail != port->logbuffer_head) {
563 		seq_printf(s, "%s\n", port->logbuffer[tail]);
564 		tail = (tail + 1) % LOG_BUFFER_ENTRIES;
565 	}
566 	if (!seq_has_overflowed(s))
567 		port->logbuffer_tail = tail;
568 	mutex_unlock(&port->logbuffer_lock);
569 
570 	return 0;
571 }
572 DEFINE_SHOW_ATTRIBUTE(tcpm_debug);
573 
574 static void tcpm_debugfs_init(struct tcpm_port *port)
575 {
576 	char name[NAME_MAX];
577 
578 	mutex_init(&port->logbuffer_lock);
579 	snprintf(name, NAME_MAX, "tcpm-%s", dev_name(port->dev));
580 	port->dentry = debugfs_create_file(name, S_IFREG | 0444, usb_debug_root,
581 					   port, &tcpm_debug_fops);
582 }
583 
584 static void tcpm_debugfs_exit(struct tcpm_port *port)
585 {
586 	int i;
587 
588 	mutex_lock(&port->logbuffer_lock);
589 	for (i = 0; i < LOG_BUFFER_ENTRIES; i++) {
590 		kfree(port->logbuffer[i]);
591 		port->logbuffer[i] = NULL;
592 	}
593 	mutex_unlock(&port->logbuffer_lock);
594 
595 	debugfs_remove(port->dentry);
596 }
597 
598 #else
599 
600 __printf(2, 3)
601 static void tcpm_log(const struct tcpm_port *port, const char *fmt, ...) { }
602 __printf(2, 3)
603 static void tcpm_log_force(struct tcpm_port *port, const char *fmt, ...) { }
604 static void tcpm_log_source_caps(struct tcpm_port *port) { }
605 static void tcpm_debugfs_init(const struct tcpm_port *port) { }
606 static void tcpm_debugfs_exit(const struct tcpm_port *port) { }
607 
608 #endif
609 
610 static int tcpm_pd_transmit(struct tcpm_port *port,
611 			    enum tcpm_transmit_type type,
612 			    const struct pd_message *msg)
613 {
614 	unsigned long timeout;
615 	int ret;
616 
617 	if (msg)
618 		tcpm_log(port, "PD TX, header: %#x", le16_to_cpu(msg->header));
619 	else
620 		tcpm_log(port, "PD TX, type: %#x", type);
621 
622 	reinit_completion(&port->tx_complete);
623 	ret = port->tcpc->pd_transmit(port->tcpc, type, msg);
624 	if (ret < 0)
625 		return ret;
626 
627 	mutex_unlock(&port->lock);
628 	timeout = wait_for_completion_timeout(&port->tx_complete,
629 				msecs_to_jiffies(PD_T_TCPC_TX_TIMEOUT));
630 	mutex_lock(&port->lock);
631 	if (!timeout)
632 		return -ETIMEDOUT;
633 
634 	switch (port->tx_status) {
635 	case TCPC_TX_SUCCESS:
636 		port->message_id = (port->message_id + 1) & PD_HEADER_ID_MASK;
637 		return 0;
638 	case TCPC_TX_DISCARDED:
639 		return -EAGAIN;
640 	case TCPC_TX_FAILED:
641 	default:
642 		return -EIO;
643 	}
644 }
645 
646 void tcpm_pd_transmit_complete(struct tcpm_port *port,
647 			       enum tcpm_transmit_status status)
648 {
649 	tcpm_log(port, "PD TX complete, status: %u", status);
650 	port->tx_status = status;
651 	complete(&port->tx_complete);
652 }
653 EXPORT_SYMBOL_GPL(tcpm_pd_transmit_complete);
654 
655 static int tcpm_mux_set(struct tcpm_port *port, int state,
656 			enum usb_role usb_role,
657 			enum typec_orientation orientation)
658 {
659 	int ret;
660 
661 	tcpm_log(port, "Requesting mux state %d, usb-role %d, orientation %d",
662 		 state, usb_role, orientation);
663 
664 	ret = typec_set_orientation(port->typec_port, orientation);
665 	if (ret)
666 		return ret;
667 
668 	if (port->role_sw) {
669 		ret = usb_role_switch_set_role(port->role_sw, usb_role);
670 		if (ret)
671 			return ret;
672 	}
673 
674 	return typec_set_mode(port->typec_port, state);
675 }
676 
677 static int tcpm_set_polarity(struct tcpm_port *port,
678 			     enum typec_cc_polarity polarity)
679 {
680 	int ret;
681 
682 	tcpm_log(port, "polarity %d", polarity);
683 
684 	ret = port->tcpc->set_polarity(port->tcpc, polarity);
685 	if (ret < 0)
686 		return ret;
687 
688 	port->polarity = polarity;
689 
690 	return 0;
691 }
692 
693 static int tcpm_set_vconn(struct tcpm_port *port, bool enable)
694 {
695 	int ret;
696 
697 	tcpm_log(port, "vconn:=%d", enable);
698 
699 	ret = port->tcpc->set_vconn(port->tcpc, enable);
700 	if (!ret) {
701 		port->vconn_role = enable ? TYPEC_SOURCE : TYPEC_SINK;
702 		typec_set_vconn_role(port->typec_port, port->vconn_role);
703 	}
704 
705 	return ret;
706 }
707 
708 static u32 tcpm_get_current_limit(struct tcpm_port *port)
709 {
710 	enum typec_cc_status cc;
711 	u32 limit;
712 
713 	cc = port->polarity ? port->cc2 : port->cc1;
714 	switch (cc) {
715 	case TYPEC_CC_RP_1_5:
716 		limit = 1500;
717 		break;
718 	case TYPEC_CC_RP_3_0:
719 		limit = 3000;
720 		break;
721 	case TYPEC_CC_RP_DEF:
722 	default:
723 		if (port->tcpc->get_current_limit)
724 			limit = port->tcpc->get_current_limit(port->tcpc);
725 		else
726 			limit = 0;
727 		break;
728 	}
729 
730 	return limit;
731 }
732 
733 static int tcpm_set_current_limit(struct tcpm_port *port, u32 max_ma, u32 mv)
734 {
735 	int ret = -EOPNOTSUPP;
736 
737 	tcpm_log(port, "Setting voltage/current limit %u mV %u mA", mv, max_ma);
738 
739 	port->supply_voltage = mv;
740 	port->current_limit = max_ma;
741 
742 	if (port->tcpc->set_current_limit)
743 		ret = port->tcpc->set_current_limit(port->tcpc, max_ma, mv);
744 
745 	return ret;
746 }
747 
748 /*
749  * Determine RP value to set based on maximum current supported
750  * by a port if configured as source.
751  * Returns CC value to report to link partner.
752  */
753 static enum typec_cc_status tcpm_rp_cc(struct tcpm_port *port)
754 {
755 	const u32 *src_pdo = port->src_pdo;
756 	int nr_pdo = port->nr_src_pdo;
757 	int i;
758 
759 	/*
760 	 * Search for first entry with matching voltage.
761 	 * It should report the maximum supported current.
762 	 */
763 	for (i = 0; i < nr_pdo; i++) {
764 		const u32 pdo = src_pdo[i];
765 
766 		if (pdo_type(pdo) == PDO_TYPE_FIXED &&
767 		    pdo_fixed_voltage(pdo) == 5000) {
768 			unsigned int curr = pdo_max_current(pdo);
769 
770 			if (curr >= 3000)
771 				return TYPEC_CC_RP_3_0;
772 			else if (curr >= 1500)
773 				return TYPEC_CC_RP_1_5;
774 			return TYPEC_CC_RP_DEF;
775 		}
776 	}
777 
778 	return TYPEC_CC_RP_DEF;
779 }
780 
781 static int tcpm_set_attached_state(struct tcpm_port *port, bool attached)
782 {
783 	return port->tcpc->set_roles(port->tcpc, attached, port->pwr_role,
784 				     port->data_role);
785 }
786 
787 static int tcpm_set_roles(struct tcpm_port *port, bool attached,
788 			  enum typec_role role, enum typec_data_role data)
789 {
790 	enum typec_orientation orientation;
791 	enum usb_role usb_role;
792 	int ret;
793 
794 	if (port->polarity == TYPEC_POLARITY_CC1)
795 		orientation = TYPEC_ORIENTATION_NORMAL;
796 	else
797 		orientation = TYPEC_ORIENTATION_REVERSE;
798 
799 	if (port->typec_caps.data == TYPEC_PORT_DRD) {
800 		if (data == TYPEC_HOST)
801 			usb_role = USB_ROLE_HOST;
802 		else
803 			usb_role = USB_ROLE_DEVICE;
804 	} else if (port->typec_caps.data == TYPEC_PORT_DFP) {
805 		if (data == TYPEC_HOST) {
806 			if (role == TYPEC_SOURCE)
807 				usb_role = USB_ROLE_HOST;
808 			else
809 				usb_role = USB_ROLE_NONE;
810 		} else {
811 			return -ENOTSUPP;
812 		}
813 	} else {
814 		if (data == TYPEC_DEVICE) {
815 			if (role == TYPEC_SINK)
816 				usb_role = USB_ROLE_DEVICE;
817 			else
818 				usb_role = USB_ROLE_NONE;
819 		} else {
820 			return -ENOTSUPP;
821 		}
822 	}
823 
824 	ret = tcpm_mux_set(port, TYPEC_STATE_USB, usb_role, orientation);
825 	if (ret < 0)
826 		return ret;
827 
828 	ret = port->tcpc->set_roles(port->tcpc, attached, role, data);
829 	if (ret < 0)
830 		return ret;
831 
832 	port->pwr_role = role;
833 	port->data_role = data;
834 	typec_set_data_role(port->typec_port, data);
835 	typec_set_pwr_role(port->typec_port, role);
836 
837 	return 0;
838 }
839 
840 static int tcpm_set_pwr_role(struct tcpm_port *port, enum typec_role role)
841 {
842 	int ret;
843 
844 	ret = port->tcpc->set_roles(port->tcpc, true, role,
845 				    port->data_role);
846 	if (ret < 0)
847 		return ret;
848 
849 	port->pwr_role = role;
850 	typec_set_pwr_role(port->typec_port, role);
851 
852 	return 0;
853 }
854 
855 static int tcpm_pd_send_source_caps(struct tcpm_port *port)
856 {
857 	struct pd_message msg;
858 	int i;
859 
860 	memset(&msg, 0, sizeof(msg));
861 	if (!port->nr_src_pdo) {
862 		/* No source capabilities defined, sink only */
863 		msg.header = PD_HEADER_LE(PD_CTRL_REJECT,
864 					  port->pwr_role,
865 					  port->data_role,
866 					  port->negotiated_rev,
867 					  port->message_id, 0);
868 	} else {
869 		msg.header = PD_HEADER_LE(PD_DATA_SOURCE_CAP,
870 					  port->pwr_role,
871 					  port->data_role,
872 					  port->negotiated_rev,
873 					  port->message_id,
874 					  port->nr_src_pdo);
875 	}
876 	for (i = 0; i < port->nr_src_pdo; i++)
877 		msg.payload[i] = cpu_to_le32(port->src_pdo[i]);
878 
879 	return tcpm_pd_transmit(port, TCPC_TX_SOP, &msg);
880 }
881 
882 static int tcpm_pd_send_sink_caps(struct tcpm_port *port)
883 {
884 	struct pd_message msg;
885 	int i;
886 
887 	memset(&msg, 0, sizeof(msg));
888 	if (!port->nr_snk_pdo) {
889 		/* No sink capabilities defined, source only */
890 		msg.header = PD_HEADER_LE(PD_CTRL_REJECT,
891 					  port->pwr_role,
892 					  port->data_role,
893 					  port->negotiated_rev,
894 					  port->message_id, 0);
895 	} else {
896 		msg.header = PD_HEADER_LE(PD_DATA_SINK_CAP,
897 					  port->pwr_role,
898 					  port->data_role,
899 					  port->negotiated_rev,
900 					  port->message_id,
901 					  port->nr_snk_pdo);
902 	}
903 	for (i = 0; i < port->nr_snk_pdo; i++)
904 		msg.payload[i] = cpu_to_le32(port->snk_pdo[i]);
905 
906 	return tcpm_pd_transmit(port, TCPC_TX_SOP, &msg);
907 }
908 
909 static void tcpm_set_state(struct tcpm_port *port, enum tcpm_state state,
910 			   unsigned int delay_ms)
911 {
912 	if (delay_ms) {
913 		tcpm_log(port, "pending state change %s -> %s @ %u ms",
914 			 tcpm_states[port->state], tcpm_states[state],
915 			 delay_ms);
916 		port->delayed_state = state;
917 		mod_delayed_work(port->wq, &port->state_machine,
918 				 msecs_to_jiffies(delay_ms));
919 		port->delayed_runtime = jiffies + msecs_to_jiffies(delay_ms);
920 		port->delay_ms = delay_ms;
921 	} else {
922 		tcpm_log(port, "state change %s -> %s",
923 			 tcpm_states[port->state], tcpm_states[state]);
924 		port->delayed_state = INVALID_STATE;
925 		port->prev_state = port->state;
926 		port->state = state;
927 		/*
928 		 * Don't re-queue the state machine work item if we're currently
929 		 * in the state machine and we're immediately changing states.
930 		 * tcpm_state_machine_work() will continue running the state
931 		 * machine.
932 		 */
933 		if (!port->state_machine_running)
934 			mod_delayed_work(port->wq, &port->state_machine, 0);
935 	}
936 }
937 
938 static void tcpm_set_state_cond(struct tcpm_port *port, enum tcpm_state state,
939 				unsigned int delay_ms)
940 {
941 	if (port->enter_state == port->state)
942 		tcpm_set_state(port, state, delay_ms);
943 	else
944 		tcpm_log(port,
945 			 "skipped %sstate change %s -> %s [%u ms], context state %s",
946 			 delay_ms ? "delayed " : "",
947 			 tcpm_states[port->state], tcpm_states[state],
948 			 delay_ms, tcpm_states[port->enter_state]);
949 }
950 
951 static void tcpm_queue_message(struct tcpm_port *port,
952 			       enum pd_msg_request message)
953 {
954 	port->queued_message = message;
955 	mod_delayed_work(port->wq, &port->state_machine, 0);
956 }
957 
958 /*
959  * VDM/VDO handling functions
960  */
961 static void tcpm_queue_vdm(struct tcpm_port *port, const u32 header,
962 			   const u32 *data, int cnt)
963 {
964 	port->vdo_count = cnt + 1;
965 	port->vdo_data[0] = header;
966 	memcpy(&port->vdo_data[1], data, sizeof(u32) * cnt);
967 	/* Set ready, vdm state machine will actually send */
968 	port->vdm_retries = 0;
969 	port->vdm_state = VDM_STATE_READY;
970 }
971 
972 static void svdm_consume_identity(struct tcpm_port *port, const __le32 *payload,
973 				  int cnt)
974 {
975 	u32 vdo = le32_to_cpu(payload[VDO_INDEX_IDH]);
976 	u32 product = le32_to_cpu(payload[VDO_INDEX_PRODUCT]);
977 
978 	memset(&port->mode_data, 0, sizeof(port->mode_data));
979 
980 	port->partner_ident.id_header = vdo;
981 	port->partner_ident.cert_stat = le32_to_cpu(payload[VDO_INDEX_CSTAT]);
982 	port->partner_ident.product = product;
983 
984 	typec_partner_set_identity(port->partner);
985 
986 	tcpm_log(port, "Identity: %04x:%04x.%04x",
987 		 PD_IDH_VID(vdo),
988 		 PD_PRODUCT_PID(product), product & 0xffff);
989 }
990 
991 static bool svdm_consume_svids(struct tcpm_port *port, const __le32 *payload,
992 			       int cnt)
993 {
994 	struct pd_mode_data *pmdata = &port->mode_data;
995 	int i;
996 
997 	for (i = 1; i < cnt; i++) {
998 		u32 p = le32_to_cpu(payload[i]);
999 		u16 svid;
1000 
1001 		svid = (p >> 16) & 0xffff;
1002 		if (!svid)
1003 			return false;
1004 
1005 		if (pmdata->nsvids >= SVID_DISCOVERY_MAX)
1006 			goto abort;
1007 
1008 		pmdata->svids[pmdata->nsvids++] = svid;
1009 		tcpm_log(port, "SVID %d: 0x%x", pmdata->nsvids, svid);
1010 
1011 		svid = p & 0xffff;
1012 		if (!svid)
1013 			return false;
1014 
1015 		if (pmdata->nsvids >= SVID_DISCOVERY_MAX)
1016 			goto abort;
1017 
1018 		pmdata->svids[pmdata->nsvids++] = svid;
1019 		tcpm_log(port, "SVID %d: 0x%x", pmdata->nsvids, svid);
1020 	}
1021 	return true;
1022 abort:
1023 	tcpm_log(port, "SVID_DISCOVERY_MAX(%d) too low!", SVID_DISCOVERY_MAX);
1024 	return false;
1025 }
1026 
1027 static void svdm_consume_modes(struct tcpm_port *port, const __le32 *payload,
1028 			       int cnt)
1029 {
1030 	struct pd_mode_data *pmdata = &port->mode_data;
1031 	struct typec_altmode_desc *paltmode;
1032 	int i;
1033 
1034 	if (pmdata->altmodes >= ARRAY_SIZE(port->partner_altmode)) {
1035 		/* Already logged in svdm_consume_svids() */
1036 		return;
1037 	}
1038 
1039 	for (i = 1; i < cnt; i++) {
1040 		paltmode = &pmdata->altmode_desc[pmdata->altmodes];
1041 		memset(paltmode, 0, sizeof(*paltmode));
1042 
1043 		paltmode->svid = pmdata->svids[pmdata->svid_index];
1044 		paltmode->mode = i;
1045 		paltmode->vdo = le32_to_cpu(payload[i]);
1046 
1047 		tcpm_log(port, " Alternate mode %d: SVID 0x%04x, VDO %d: 0x%08x",
1048 			 pmdata->altmodes, paltmode->svid,
1049 			 paltmode->mode, paltmode->vdo);
1050 
1051 		pmdata->altmodes++;
1052 	}
1053 }
1054 
1055 static void tcpm_register_partner_altmodes(struct tcpm_port *port)
1056 {
1057 	struct pd_mode_data *modep = &port->mode_data;
1058 	struct typec_altmode *altmode;
1059 	int i;
1060 
1061 	for (i = 0; i < modep->altmodes; i++) {
1062 		altmode = typec_partner_register_altmode(port->partner,
1063 						&modep->altmode_desc[i]);
1064 		if (!altmode)
1065 			tcpm_log(port, "Failed to register partner SVID 0x%04x",
1066 				 modep->altmode_desc[i].svid);
1067 		port->partner_altmode[i] = altmode;
1068 	}
1069 }
1070 
1071 #define supports_modal(port)	PD_IDH_MODAL_SUPP((port)->partner_ident.id_header)
1072 
1073 static int tcpm_pd_svdm(struct tcpm_port *port, const __le32 *payload, int cnt,
1074 			u32 *response)
1075 {
1076 	struct typec_altmode *adev;
1077 	struct typec_altmode *pdev;
1078 	struct pd_mode_data *modep;
1079 	u32 p[PD_MAX_PAYLOAD];
1080 	int rlen = 0;
1081 	int cmd_type;
1082 	int cmd;
1083 	int i;
1084 
1085 	for (i = 0; i < cnt; i++)
1086 		p[i] = le32_to_cpu(payload[i]);
1087 
1088 	cmd_type = PD_VDO_CMDT(p[0]);
1089 	cmd = PD_VDO_CMD(p[0]);
1090 
1091 	tcpm_log(port, "Rx VDM cmd 0x%x type %d cmd %d len %d",
1092 		 p[0], cmd_type, cmd, cnt);
1093 
1094 	modep = &port->mode_data;
1095 
1096 	adev = typec_match_altmode(port->port_altmode, ALTMODE_DISCOVERY_MAX,
1097 				   PD_VDO_VID(p[0]), PD_VDO_OPOS(p[0]));
1098 
1099 	pdev = typec_match_altmode(port->partner_altmode, ALTMODE_DISCOVERY_MAX,
1100 				   PD_VDO_VID(p[0]), PD_VDO_OPOS(p[0]));
1101 
1102 	switch (cmd_type) {
1103 	case CMDT_INIT:
1104 		switch (cmd) {
1105 		case CMD_DISCOVER_IDENT:
1106 			/* 6.4.4.3.1: Only respond as UFP (device) */
1107 			if (port->data_role == TYPEC_DEVICE &&
1108 			    port->nr_snk_vdo) {
1109 				for (i = 0; i <  port->nr_snk_vdo; i++)
1110 					response[i + 1] = port->snk_vdo[i];
1111 				rlen = port->nr_snk_vdo + 1;
1112 			}
1113 			break;
1114 		case CMD_DISCOVER_SVID:
1115 			break;
1116 		case CMD_DISCOVER_MODES:
1117 			break;
1118 		case CMD_ENTER_MODE:
1119 			break;
1120 		case CMD_EXIT_MODE:
1121 			break;
1122 		case CMD_ATTENTION:
1123 			/* Attention command does not have response */
1124 			if (adev)
1125 				typec_altmode_attention(adev, p[1]);
1126 			return 0;
1127 		default:
1128 			break;
1129 		}
1130 		if (rlen >= 1) {
1131 			response[0] = p[0] | VDO_CMDT(CMDT_RSP_ACK);
1132 		} else if (rlen == 0) {
1133 			response[0] = p[0] | VDO_CMDT(CMDT_RSP_NAK);
1134 			rlen = 1;
1135 		} else {
1136 			response[0] = p[0] | VDO_CMDT(CMDT_RSP_BUSY);
1137 			rlen = 1;
1138 		}
1139 		break;
1140 	case CMDT_RSP_ACK:
1141 		/* silently drop message if we are not connected */
1142 		if (IS_ERR_OR_NULL(port->partner))
1143 			break;
1144 
1145 		switch (cmd) {
1146 		case CMD_DISCOVER_IDENT:
1147 			/* 6.4.4.3.1 */
1148 			svdm_consume_identity(port, payload, cnt);
1149 			response[0] = VDO(USB_SID_PD, 1, CMD_DISCOVER_SVID);
1150 			rlen = 1;
1151 			break;
1152 		case CMD_DISCOVER_SVID:
1153 			/* 6.4.4.3.2 */
1154 			if (svdm_consume_svids(port, payload, cnt)) {
1155 				response[0] = VDO(USB_SID_PD, 1,
1156 						  CMD_DISCOVER_SVID);
1157 				rlen = 1;
1158 			} else if (modep->nsvids && supports_modal(port)) {
1159 				response[0] = VDO(modep->svids[0], 1,
1160 						  CMD_DISCOVER_MODES);
1161 				rlen = 1;
1162 			}
1163 			break;
1164 		case CMD_DISCOVER_MODES:
1165 			/* 6.4.4.3.3 */
1166 			svdm_consume_modes(port, payload, cnt);
1167 			modep->svid_index++;
1168 			if (modep->svid_index < modep->nsvids) {
1169 				u16 svid = modep->svids[modep->svid_index];
1170 				response[0] = VDO(svid, 1, CMD_DISCOVER_MODES);
1171 				rlen = 1;
1172 			} else {
1173 				tcpm_register_partner_altmodes(port);
1174 			}
1175 			break;
1176 		case CMD_ENTER_MODE:
1177 			if (adev && pdev) {
1178 				typec_altmode_update_active(pdev, true);
1179 
1180 				if (typec_altmode_vdm(adev, p[0], &p[1], cnt)) {
1181 					response[0] = VDO(adev->svid, 1,
1182 							  CMD_EXIT_MODE);
1183 					response[0] |= VDO_OPOS(adev->mode);
1184 					return 1;
1185 				}
1186 			}
1187 			return 0;
1188 		case CMD_EXIT_MODE:
1189 			if (adev && pdev) {
1190 				typec_altmode_update_active(pdev, false);
1191 
1192 				/* Back to USB Operation */
1193 				WARN_ON(typec_altmode_notify(adev,
1194 							     TYPEC_STATE_USB,
1195 							     NULL));
1196 			}
1197 			break;
1198 		default:
1199 			break;
1200 		}
1201 		break;
1202 	case CMDT_RSP_NAK:
1203 		switch (cmd) {
1204 		case CMD_ENTER_MODE:
1205 			/* Back to USB Operation */
1206 			if (adev)
1207 				WARN_ON(typec_altmode_notify(adev,
1208 							     TYPEC_STATE_USB,
1209 							     NULL));
1210 			break;
1211 		default:
1212 			break;
1213 		}
1214 		break;
1215 	default:
1216 		break;
1217 	}
1218 
1219 	/* Informing the alternate mode drivers about everything */
1220 	if (adev)
1221 		typec_altmode_vdm(adev, p[0], &p[1], cnt);
1222 
1223 	return rlen;
1224 }
1225 
1226 static void tcpm_handle_vdm_request(struct tcpm_port *port,
1227 				    const __le32 *payload, int cnt)
1228 {
1229 	int rlen = 0;
1230 	u32 response[8] = { };
1231 	u32 p0 = le32_to_cpu(payload[0]);
1232 
1233 	if (port->vdm_state == VDM_STATE_BUSY) {
1234 		/* If UFP responded busy retry after timeout */
1235 		if (PD_VDO_CMDT(p0) == CMDT_RSP_BUSY) {
1236 			port->vdm_state = VDM_STATE_WAIT_RSP_BUSY;
1237 			port->vdo_retry = (p0 & ~VDO_CMDT_MASK) |
1238 				CMDT_INIT;
1239 			mod_delayed_work(port->wq, &port->vdm_state_machine,
1240 					 msecs_to_jiffies(PD_T_VDM_BUSY));
1241 			return;
1242 		}
1243 		port->vdm_state = VDM_STATE_DONE;
1244 	}
1245 
1246 	if (PD_VDO_SVDM(p0))
1247 		rlen = tcpm_pd_svdm(port, payload, cnt, response);
1248 
1249 	if (rlen > 0) {
1250 		tcpm_queue_vdm(port, response[0], &response[1], rlen - 1);
1251 		mod_delayed_work(port->wq, &port->vdm_state_machine, 0);
1252 	}
1253 }
1254 
1255 static void tcpm_send_vdm(struct tcpm_port *port, u32 vid, int cmd,
1256 			  const u32 *data, int count)
1257 {
1258 	u32 header;
1259 
1260 	if (WARN_ON(count > VDO_MAX_SIZE - 1))
1261 		count = VDO_MAX_SIZE - 1;
1262 
1263 	/* set VDM header with VID & CMD */
1264 	header = VDO(vid, ((vid & USB_SID_PD) == USB_SID_PD) ?
1265 			1 : (PD_VDO_CMD(cmd) <= CMD_ATTENTION), cmd);
1266 	tcpm_queue_vdm(port, header, data, count);
1267 
1268 	mod_delayed_work(port->wq, &port->vdm_state_machine, 0);
1269 }
1270 
1271 static unsigned int vdm_ready_timeout(u32 vdm_hdr)
1272 {
1273 	unsigned int timeout;
1274 	int cmd = PD_VDO_CMD(vdm_hdr);
1275 
1276 	/* its not a structured VDM command */
1277 	if (!PD_VDO_SVDM(vdm_hdr))
1278 		return PD_T_VDM_UNSTRUCTURED;
1279 
1280 	switch (PD_VDO_CMDT(vdm_hdr)) {
1281 	case CMDT_INIT:
1282 		if (cmd == CMD_ENTER_MODE || cmd == CMD_EXIT_MODE)
1283 			timeout = PD_T_VDM_WAIT_MODE_E;
1284 		else
1285 			timeout = PD_T_VDM_SNDR_RSP;
1286 		break;
1287 	default:
1288 		if (cmd == CMD_ENTER_MODE || cmd == CMD_EXIT_MODE)
1289 			timeout = PD_T_VDM_E_MODE;
1290 		else
1291 			timeout = PD_T_VDM_RCVR_RSP;
1292 		break;
1293 	}
1294 	return timeout;
1295 }
1296 
1297 static void vdm_run_state_machine(struct tcpm_port *port)
1298 {
1299 	struct pd_message msg;
1300 	int i, res;
1301 
1302 	switch (port->vdm_state) {
1303 	case VDM_STATE_READY:
1304 		/* Only transmit VDM if attached */
1305 		if (!port->attached) {
1306 			port->vdm_state = VDM_STATE_ERR_BUSY;
1307 			break;
1308 		}
1309 
1310 		/*
1311 		 * if there's traffic or we're not in PDO ready state don't send
1312 		 * a VDM.
1313 		 */
1314 		if (port->state != SRC_READY && port->state != SNK_READY)
1315 			break;
1316 
1317 		/* Prepare and send VDM */
1318 		memset(&msg, 0, sizeof(msg));
1319 		msg.header = PD_HEADER_LE(PD_DATA_VENDOR_DEF,
1320 					  port->pwr_role,
1321 					  port->data_role,
1322 					  port->negotiated_rev,
1323 					  port->message_id, port->vdo_count);
1324 		for (i = 0; i < port->vdo_count; i++)
1325 			msg.payload[i] = cpu_to_le32(port->vdo_data[i]);
1326 		res = tcpm_pd_transmit(port, TCPC_TX_SOP, &msg);
1327 		if (res < 0) {
1328 			port->vdm_state = VDM_STATE_ERR_SEND;
1329 		} else {
1330 			unsigned long timeout;
1331 
1332 			port->vdm_retries = 0;
1333 			port->vdm_state = VDM_STATE_BUSY;
1334 			timeout = vdm_ready_timeout(port->vdo_data[0]);
1335 			mod_delayed_work(port->wq, &port->vdm_state_machine,
1336 					 timeout);
1337 		}
1338 		break;
1339 	case VDM_STATE_WAIT_RSP_BUSY:
1340 		port->vdo_data[0] = port->vdo_retry;
1341 		port->vdo_count = 1;
1342 		port->vdm_state = VDM_STATE_READY;
1343 		break;
1344 	case VDM_STATE_BUSY:
1345 		port->vdm_state = VDM_STATE_ERR_TMOUT;
1346 		break;
1347 	case VDM_STATE_ERR_SEND:
1348 		/*
1349 		 * A partner which does not support USB PD will not reply,
1350 		 * so this is not a fatal error. At the same time, some
1351 		 * devices may not return GoodCRC under some circumstances,
1352 		 * so we need to retry.
1353 		 */
1354 		if (port->vdm_retries < 3) {
1355 			tcpm_log(port, "VDM Tx error, retry");
1356 			port->vdm_retries++;
1357 			port->vdm_state = VDM_STATE_READY;
1358 		}
1359 		break;
1360 	default:
1361 		break;
1362 	}
1363 }
1364 
1365 static void vdm_state_machine_work(struct work_struct *work)
1366 {
1367 	struct tcpm_port *port = container_of(work, struct tcpm_port,
1368 					      vdm_state_machine.work);
1369 	enum vdm_states prev_state;
1370 
1371 	mutex_lock(&port->lock);
1372 
1373 	/*
1374 	 * Continue running as long as the port is not busy and there was
1375 	 * a state change.
1376 	 */
1377 	do {
1378 		prev_state = port->vdm_state;
1379 		vdm_run_state_machine(port);
1380 	} while (port->vdm_state != prev_state &&
1381 		 port->vdm_state != VDM_STATE_BUSY);
1382 
1383 	mutex_unlock(&port->lock);
1384 }
1385 
1386 enum pdo_err {
1387 	PDO_NO_ERR,
1388 	PDO_ERR_NO_VSAFE5V,
1389 	PDO_ERR_VSAFE5V_NOT_FIRST,
1390 	PDO_ERR_PDO_TYPE_NOT_IN_ORDER,
1391 	PDO_ERR_FIXED_NOT_SORTED,
1392 	PDO_ERR_VARIABLE_BATT_NOT_SORTED,
1393 	PDO_ERR_DUPE_PDO,
1394 	PDO_ERR_PPS_APDO_NOT_SORTED,
1395 	PDO_ERR_DUPE_PPS_APDO,
1396 };
1397 
1398 static const char * const pdo_err_msg[] = {
1399 	[PDO_ERR_NO_VSAFE5V] =
1400 	" err: source/sink caps should atleast have vSafe5V",
1401 	[PDO_ERR_VSAFE5V_NOT_FIRST] =
1402 	" err: vSafe5V Fixed Supply Object Shall always be the first object",
1403 	[PDO_ERR_PDO_TYPE_NOT_IN_ORDER] =
1404 	" err: PDOs should be in the following order: Fixed; Battery; Variable",
1405 	[PDO_ERR_FIXED_NOT_SORTED] =
1406 	" err: Fixed supply pdos should be in increasing order of their fixed voltage",
1407 	[PDO_ERR_VARIABLE_BATT_NOT_SORTED] =
1408 	" err: Variable/Battery supply pdos should be in increasing order of their minimum voltage",
1409 	[PDO_ERR_DUPE_PDO] =
1410 	" err: Variable/Batt supply pdos cannot have same min/max voltage",
1411 	[PDO_ERR_PPS_APDO_NOT_SORTED] =
1412 	" err: Programmable power supply apdos should be in increasing order of their maximum voltage",
1413 	[PDO_ERR_DUPE_PPS_APDO] =
1414 	" err: Programmable power supply apdos cannot have same min/max voltage and max current",
1415 };
1416 
1417 static enum pdo_err tcpm_caps_err(struct tcpm_port *port, const u32 *pdo,
1418 				  unsigned int nr_pdo)
1419 {
1420 	unsigned int i;
1421 
1422 	/* Should at least contain vSafe5v */
1423 	if (nr_pdo < 1)
1424 		return PDO_ERR_NO_VSAFE5V;
1425 
1426 	/* The vSafe5V Fixed Supply Object Shall always be the first object */
1427 	if (pdo_type(pdo[0]) != PDO_TYPE_FIXED ||
1428 	    pdo_fixed_voltage(pdo[0]) != VSAFE5V)
1429 		return PDO_ERR_VSAFE5V_NOT_FIRST;
1430 
1431 	for (i = 1; i < nr_pdo; i++) {
1432 		if (pdo_type(pdo[i]) < pdo_type(pdo[i - 1])) {
1433 			return PDO_ERR_PDO_TYPE_NOT_IN_ORDER;
1434 		} else if (pdo_type(pdo[i]) == pdo_type(pdo[i - 1])) {
1435 			enum pd_pdo_type type = pdo_type(pdo[i]);
1436 
1437 			switch (type) {
1438 			/*
1439 			 * The remaining Fixed Supply Objects, if
1440 			 * present, shall be sent in voltage order;
1441 			 * lowest to highest.
1442 			 */
1443 			case PDO_TYPE_FIXED:
1444 				if (pdo_fixed_voltage(pdo[i]) <=
1445 				    pdo_fixed_voltage(pdo[i - 1]))
1446 					return PDO_ERR_FIXED_NOT_SORTED;
1447 				break;
1448 			/*
1449 			 * The Battery Supply Objects and Variable
1450 			 * supply, if present shall be sent in Minimum
1451 			 * Voltage order; lowest to highest.
1452 			 */
1453 			case PDO_TYPE_VAR:
1454 			case PDO_TYPE_BATT:
1455 				if (pdo_min_voltage(pdo[i]) <
1456 				    pdo_min_voltage(pdo[i - 1]))
1457 					return PDO_ERR_VARIABLE_BATT_NOT_SORTED;
1458 				else if ((pdo_min_voltage(pdo[i]) ==
1459 					  pdo_min_voltage(pdo[i - 1])) &&
1460 					 (pdo_max_voltage(pdo[i]) ==
1461 					  pdo_max_voltage(pdo[i - 1])))
1462 					return PDO_ERR_DUPE_PDO;
1463 				break;
1464 			/*
1465 			 * The Programmable Power Supply APDOs, if present,
1466 			 * shall be sent in Maximum Voltage order;
1467 			 * lowest to highest.
1468 			 */
1469 			case PDO_TYPE_APDO:
1470 				if (pdo_apdo_type(pdo[i]) != APDO_TYPE_PPS)
1471 					break;
1472 
1473 				if (pdo_pps_apdo_max_voltage(pdo[i]) <
1474 				    pdo_pps_apdo_max_voltage(pdo[i - 1]))
1475 					return PDO_ERR_PPS_APDO_NOT_SORTED;
1476 				else if (pdo_pps_apdo_min_voltage(pdo[i]) ==
1477 					  pdo_pps_apdo_min_voltage(pdo[i - 1]) &&
1478 					 pdo_pps_apdo_max_voltage(pdo[i]) ==
1479 					  pdo_pps_apdo_max_voltage(pdo[i - 1]) &&
1480 					 pdo_pps_apdo_max_current(pdo[i]) ==
1481 					  pdo_pps_apdo_max_current(pdo[i - 1]))
1482 					return PDO_ERR_DUPE_PPS_APDO;
1483 				break;
1484 			default:
1485 				tcpm_log_force(port, " Unknown pdo type");
1486 			}
1487 		}
1488 	}
1489 
1490 	return PDO_NO_ERR;
1491 }
1492 
1493 static int tcpm_validate_caps(struct tcpm_port *port, const u32 *pdo,
1494 			      unsigned int nr_pdo)
1495 {
1496 	enum pdo_err err_index = tcpm_caps_err(port, pdo, nr_pdo);
1497 
1498 	if (err_index != PDO_NO_ERR) {
1499 		tcpm_log_force(port, " %s", pdo_err_msg[err_index]);
1500 		return -EINVAL;
1501 	}
1502 
1503 	return 0;
1504 }
1505 
1506 static int tcpm_altmode_enter(struct typec_altmode *altmode, u32 *vdo)
1507 {
1508 	struct tcpm_port *port = typec_altmode_get_drvdata(altmode);
1509 	u32 header;
1510 
1511 	mutex_lock(&port->lock);
1512 	header = VDO(altmode->svid, vdo ? 2 : 1, CMD_ENTER_MODE);
1513 	header |= VDO_OPOS(altmode->mode);
1514 
1515 	tcpm_queue_vdm(port, header, vdo, vdo ? 1 : 0);
1516 	mod_delayed_work(port->wq, &port->vdm_state_machine, 0);
1517 	mutex_unlock(&port->lock);
1518 
1519 	return 0;
1520 }
1521 
1522 static int tcpm_altmode_exit(struct typec_altmode *altmode)
1523 {
1524 	struct tcpm_port *port = typec_altmode_get_drvdata(altmode);
1525 	u32 header;
1526 
1527 	mutex_lock(&port->lock);
1528 	header = VDO(altmode->svid, 1, CMD_EXIT_MODE);
1529 	header |= VDO_OPOS(altmode->mode);
1530 
1531 	tcpm_queue_vdm(port, header, NULL, 0);
1532 	mod_delayed_work(port->wq, &port->vdm_state_machine, 0);
1533 	mutex_unlock(&port->lock);
1534 
1535 	return 0;
1536 }
1537 
1538 static int tcpm_altmode_vdm(struct typec_altmode *altmode,
1539 			    u32 header, const u32 *data, int count)
1540 {
1541 	struct tcpm_port *port = typec_altmode_get_drvdata(altmode);
1542 
1543 	mutex_lock(&port->lock);
1544 	tcpm_queue_vdm(port, header, data, count - 1);
1545 	mod_delayed_work(port->wq, &port->vdm_state_machine, 0);
1546 	mutex_unlock(&port->lock);
1547 
1548 	return 0;
1549 }
1550 
1551 static const struct typec_altmode_ops tcpm_altmode_ops = {
1552 	.enter = tcpm_altmode_enter,
1553 	.exit = tcpm_altmode_exit,
1554 	.vdm = tcpm_altmode_vdm,
1555 };
1556 
1557 /*
1558  * PD (data, control) command handling functions
1559  */
1560 static inline enum tcpm_state ready_state(struct tcpm_port *port)
1561 {
1562 	if (port->pwr_role == TYPEC_SOURCE)
1563 		return SRC_READY;
1564 	else
1565 		return SNK_READY;
1566 }
1567 
1568 static int tcpm_pd_send_control(struct tcpm_port *port,
1569 				enum pd_ctrl_msg_type type);
1570 
1571 static void tcpm_handle_alert(struct tcpm_port *port, const __le32 *payload,
1572 			      int cnt)
1573 {
1574 	u32 p0 = le32_to_cpu(payload[0]);
1575 	unsigned int type = usb_pd_ado_type(p0);
1576 
1577 	if (!type) {
1578 		tcpm_log(port, "Alert message received with no type");
1579 		return;
1580 	}
1581 
1582 	/* Just handling non-battery alerts for now */
1583 	if (!(type & USB_PD_ADO_TYPE_BATT_STATUS_CHANGE)) {
1584 		switch (port->state) {
1585 		case SRC_READY:
1586 		case SNK_READY:
1587 			tcpm_set_state(port, GET_STATUS_SEND, 0);
1588 			break;
1589 		default:
1590 			tcpm_queue_message(port, PD_MSG_CTRL_WAIT);
1591 			break;
1592 		}
1593 	}
1594 }
1595 
1596 static void tcpm_pd_data_request(struct tcpm_port *port,
1597 				 const struct pd_message *msg)
1598 {
1599 	enum pd_data_msg_type type = pd_header_type_le(msg->header);
1600 	unsigned int cnt = pd_header_cnt_le(msg->header);
1601 	unsigned int rev = pd_header_rev_le(msg->header);
1602 	unsigned int i;
1603 
1604 	switch (type) {
1605 	case PD_DATA_SOURCE_CAP:
1606 		if (port->pwr_role != TYPEC_SINK)
1607 			break;
1608 
1609 		for (i = 0; i < cnt; i++)
1610 			port->source_caps[i] = le32_to_cpu(msg->payload[i]);
1611 
1612 		port->nr_source_caps = cnt;
1613 
1614 		tcpm_log_source_caps(port);
1615 
1616 		tcpm_validate_caps(port, port->source_caps,
1617 				   port->nr_source_caps);
1618 
1619 		/*
1620 		 * Adjust revision in subsequent message headers, as required,
1621 		 * to comply with 6.2.1.1.5 of the USB PD 3.0 spec. We don't
1622 		 * support Rev 1.0 so just do nothing in that scenario.
1623 		 */
1624 		if (rev == PD_REV10)
1625 			break;
1626 
1627 		if (rev < PD_MAX_REV)
1628 			port->negotiated_rev = rev;
1629 
1630 		/*
1631 		 * This message may be received even if VBUS is not
1632 		 * present. This is quite unexpected; see USB PD
1633 		 * specification, sections 8.3.3.6.3.1 and 8.3.3.6.3.2.
1634 		 * However, at the same time, we must be ready to
1635 		 * receive this message and respond to it 15ms after
1636 		 * receiving PS_RDY during power swap operations, no matter
1637 		 * if VBUS is available or not (USB PD specification,
1638 		 * section 6.5.9.2).
1639 		 * So we need to accept the message either way,
1640 		 * but be prepared to keep waiting for VBUS after it was
1641 		 * handled.
1642 		 */
1643 		tcpm_set_state(port, SNK_NEGOTIATE_CAPABILITIES, 0);
1644 		break;
1645 	case PD_DATA_REQUEST:
1646 		if (port->pwr_role != TYPEC_SOURCE ||
1647 		    cnt != 1) {
1648 			tcpm_queue_message(port, PD_MSG_CTRL_REJECT);
1649 			break;
1650 		}
1651 
1652 		/*
1653 		 * Adjust revision in subsequent message headers, as required,
1654 		 * to comply with 6.2.1.1.5 of the USB PD 3.0 spec. We don't
1655 		 * support Rev 1.0 so just reject in that scenario.
1656 		 */
1657 		if (rev == PD_REV10) {
1658 			tcpm_queue_message(port, PD_MSG_CTRL_REJECT);
1659 			break;
1660 		}
1661 
1662 		if (rev < PD_MAX_REV)
1663 			port->negotiated_rev = rev;
1664 
1665 		port->sink_request = le32_to_cpu(msg->payload[0]);
1666 		tcpm_set_state(port, SRC_NEGOTIATE_CAPABILITIES, 0);
1667 		break;
1668 	case PD_DATA_SINK_CAP:
1669 		/* We don't do anything with this at the moment... */
1670 		for (i = 0; i < cnt; i++)
1671 			port->sink_caps[i] = le32_to_cpu(msg->payload[i]);
1672 		port->nr_sink_caps = cnt;
1673 		break;
1674 	case PD_DATA_VENDOR_DEF:
1675 		tcpm_handle_vdm_request(port, msg->payload, cnt);
1676 		break;
1677 	case PD_DATA_BIST:
1678 		if (port->state == SRC_READY || port->state == SNK_READY) {
1679 			port->bist_request = le32_to_cpu(msg->payload[0]);
1680 			tcpm_set_state(port, BIST_RX, 0);
1681 		}
1682 		break;
1683 	case PD_DATA_ALERT:
1684 		tcpm_handle_alert(port, msg->payload, cnt);
1685 		break;
1686 	case PD_DATA_BATT_STATUS:
1687 	case PD_DATA_GET_COUNTRY_INFO:
1688 		/* Currently unsupported */
1689 		tcpm_queue_message(port, PD_MSG_CTRL_NOT_SUPP);
1690 		break;
1691 	default:
1692 		tcpm_log(port, "Unhandled data message type %#x", type);
1693 		break;
1694 	}
1695 }
1696 
1697 static void tcpm_pps_complete(struct tcpm_port *port, int result)
1698 {
1699 	if (port->pps_pending) {
1700 		port->pps_status = result;
1701 		port->pps_pending = false;
1702 		complete(&port->pps_complete);
1703 	}
1704 }
1705 
1706 static void tcpm_pd_ctrl_request(struct tcpm_port *port,
1707 				 const struct pd_message *msg)
1708 {
1709 	enum pd_ctrl_msg_type type = pd_header_type_le(msg->header);
1710 	enum tcpm_state next_state;
1711 
1712 	switch (type) {
1713 	case PD_CTRL_GOOD_CRC:
1714 	case PD_CTRL_PING:
1715 		break;
1716 	case PD_CTRL_GET_SOURCE_CAP:
1717 		switch (port->state) {
1718 		case SRC_READY:
1719 		case SNK_READY:
1720 			tcpm_queue_message(port, PD_MSG_DATA_SOURCE_CAP);
1721 			break;
1722 		default:
1723 			tcpm_queue_message(port, PD_MSG_CTRL_REJECT);
1724 			break;
1725 		}
1726 		break;
1727 	case PD_CTRL_GET_SINK_CAP:
1728 		switch (port->state) {
1729 		case SRC_READY:
1730 		case SNK_READY:
1731 			tcpm_queue_message(port, PD_MSG_DATA_SINK_CAP);
1732 			break;
1733 		default:
1734 			tcpm_queue_message(port, PD_MSG_CTRL_REJECT);
1735 			break;
1736 		}
1737 		break;
1738 	case PD_CTRL_GOTO_MIN:
1739 		break;
1740 	case PD_CTRL_PS_RDY:
1741 		switch (port->state) {
1742 		case SNK_TRANSITION_SINK:
1743 			if (port->vbus_present) {
1744 				tcpm_set_current_limit(port,
1745 						       port->current_limit,
1746 						       port->supply_voltage);
1747 				port->explicit_contract = true;
1748 				tcpm_set_state(port, SNK_READY, 0);
1749 			} else {
1750 				/*
1751 				 * Seen after power swap. Keep waiting for VBUS
1752 				 * in a transitional state.
1753 				 */
1754 				tcpm_set_state(port,
1755 					       SNK_TRANSITION_SINK_VBUS, 0);
1756 			}
1757 			break;
1758 		case PR_SWAP_SRC_SNK_SOURCE_OFF_CC_DEBOUNCED:
1759 			tcpm_set_state(port, PR_SWAP_SRC_SNK_SINK_ON, 0);
1760 			break;
1761 		case PR_SWAP_SNK_SRC_SINK_OFF:
1762 			tcpm_set_state(port, PR_SWAP_SNK_SRC_SOURCE_ON, 0);
1763 			break;
1764 		case VCONN_SWAP_WAIT_FOR_VCONN:
1765 			tcpm_set_state(port, VCONN_SWAP_TURN_OFF_VCONN, 0);
1766 			break;
1767 		default:
1768 			break;
1769 		}
1770 		break;
1771 	case PD_CTRL_REJECT:
1772 	case PD_CTRL_WAIT:
1773 	case PD_CTRL_NOT_SUPP:
1774 		switch (port->state) {
1775 		case SNK_NEGOTIATE_CAPABILITIES:
1776 			/* USB PD specification, Figure 8-43 */
1777 			if (port->explicit_contract)
1778 				next_state = SNK_READY;
1779 			else
1780 				next_state = SNK_WAIT_CAPABILITIES;
1781 			tcpm_set_state(port, next_state, 0);
1782 			break;
1783 		case SNK_NEGOTIATE_PPS_CAPABILITIES:
1784 			/* Revert data back from any requested PPS updates */
1785 			port->pps_data.out_volt = port->supply_voltage;
1786 			port->pps_data.op_curr = port->current_limit;
1787 			port->pps_status = (type == PD_CTRL_WAIT ?
1788 					    -EAGAIN : -EOPNOTSUPP);
1789 			tcpm_set_state(port, SNK_READY, 0);
1790 			break;
1791 		case DR_SWAP_SEND:
1792 			port->swap_status = (type == PD_CTRL_WAIT ?
1793 					     -EAGAIN : -EOPNOTSUPP);
1794 			tcpm_set_state(port, DR_SWAP_CANCEL, 0);
1795 			break;
1796 		case PR_SWAP_SEND:
1797 			port->swap_status = (type == PD_CTRL_WAIT ?
1798 					     -EAGAIN : -EOPNOTSUPP);
1799 			tcpm_set_state(port, PR_SWAP_CANCEL, 0);
1800 			break;
1801 		case VCONN_SWAP_SEND:
1802 			port->swap_status = (type == PD_CTRL_WAIT ?
1803 					     -EAGAIN : -EOPNOTSUPP);
1804 			tcpm_set_state(port, VCONN_SWAP_CANCEL, 0);
1805 			break;
1806 		default:
1807 			break;
1808 		}
1809 		break;
1810 	case PD_CTRL_ACCEPT:
1811 		switch (port->state) {
1812 		case SNK_NEGOTIATE_CAPABILITIES:
1813 			port->pps_data.active = false;
1814 			tcpm_set_state(port, SNK_TRANSITION_SINK, 0);
1815 			break;
1816 		case SNK_NEGOTIATE_PPS_CAPABILITIES:
1817 			port->pps_data.active = true;
1818 			port->supply_voltage = port->pps_data.out_volt;
1819 			port->current_limit = port->pps_data.op_curr;
1820 			tcpm_set_state(port, SNK_TRANSITION_SINK, 0);
1821 			break;
1822 		case SOFT_RESET_SEND:
1823 			port->message_id = 0;
1824 			port->rx_msgid = -1;
1825 			if (port->pwr_role == TYPEC_SOURCE)
1826 				next_state = SRC_SEND_CAPABILITIES;
1827 			else
1828 				next_state = SNK_WAIT_CAPABILITIES;
1829 			tcpm_set_state(port, next_state, 0);
1830 			break;
1831 		case DR_SWAP_SEND:
1832 			tcpm_set_state(port, DR_SWAP_CHANGE_DR, 0);
1833 			break;
1834 		case PR_SWAP_SEND:
1835 			tcpm_set_state(port, PR_SWAP_START, 0);
1836 			break;
1837 		case VCONN_SWAP_SEND:
1838 			tcpm_set_state(port, VCONN_SWAP_START, 0);
1839 			break;
1840 		default:
1841 			break;
1842 		}
1843 		break;
1844 	case PD_CTRL_SOFT_RESET:
1845 		tcpm_set_state(port, SOFT_RESET, 0);
1846 		break;
1847 	case PD_CTRL_DR_SWAP:
1848 		if (port->typec_caps.data != TYPEC_PORT_DRD) {
1849 			tcpm_queue_message(port, PD_MSG_CTRL_REJECT);
1850 			break;
1851 		}
1852 		/*
1853 		 * XXX
1854 		 * 6.3.9: If an alternate mode is active, a request to swap
1855 		 * alternate modes shall trigger a port reset.
1856 		 */
1857 		switch (port->state) {
1858 		case SRC_READY:
1859 		case SNK_READY:
1860 			tcpm_set_state(port, DR_SWAP_ACCEPT, 0);
1861 			break;
1862 		default:
1863 			tcpm_queue_message(port, PD_MSG_CTRL_WAIT);
1864 			break;
1865 		}
1866 		break;
1867 	case PD_CTRL_PR_SWAP:
1868 		if (port->port_type != TYPEC_PORT_DRP) {
1869 			tcpm_queue_message(port, PD_MSG_CTRL_REJECT);
1870 			break;
1871 		}
1872 		switch (port->state) {
1873 		case SRC_READY:
1874 		case SNK_READY:
1875 			tcpm_set_state(port, PR_SWAP_ACCEPT, 0);
1876 			break;
1877 		default:
1878 			tcpm_queue_message(port, PD_MSG_CTRL_WAIT);
1879 			break;
1880 		}
1881 		break;
1882 	case PD_CTRL_VCONN_SWAP:
1883 		switch (port->state) {
1884 		case SRC_READY:
1885 		case SNK_READY:
1886 			tcpm_set_state(port, VCONN_SWAP_ACCEPT, 0);
1887 			break;
1888 		default:
1889 			tcpm_queue_message(port, PD_MSG_CTRL_WAIT);
1890 			break;
1891 		}
1892 		break;
1893 	case PD_CTRL_GET_SOURCE_CAP_EXT:
1894 	case PD_CTRL_GET_STATUS:
1895 	case PD_CTRL_FR_SWAP:
1896 	case PD_CTRL_GET_PPS_STATUS:
1897 	case PD_CTRL_GET_COUNTRY_CODES:
1898 		/* Currently not supported */
1899 		tcpm_queue_message(port, PD_MSG_CTRL_NOT_SUPP);
1900 		break;
1901 	default:
1902 		tcpm_log(port, "Unhandled ctrl message type %#x", type);
1903 		break;
1904 	}
1905 }
1906 
1907 static void tcpm_pd_ext_msg_request(struct tcpm_port *port,
1908 				    const struct pd_message *msg)
1909 {
1910 	enum pd_ext_msg_type type = pd_header_type_le(msg->header);
1911 	unsigned int data_size = pd_ext_header_data_size_le(msg->ext_msg.header);
1912 
1913 	if (!(msg->ext_msg.header & PD_EXT_HDR_CHUNKED)) {
1914 		tcpm_log(port, "Unchunked extended messages unsupported");
1915 		return;
1916 	}
1917 
1918 	if (data_size > PD_EXT_MAX_CHUNK_DATA) {
1919 		tcpm_log(port, "Chunk handling not yet supported");
1920 		return;
1921 	}
1922 
1923 	switch (type) {
1924 	case PD_EXT_STATUS:
1925 		/*
1926 		 * If PPS related events raised then get PPS status to clear
1927 		 * (see USB PD 3.0 Spec, 6.5.2.4)
1928 		 */
1929 		if (msg->ext_msg.data[USB_PD_EXT_SDB_EVENT_FLAGS] &
1930 		    USB_PD_EXT_SDB_PPS_EVENTS)
1931 			tcpm_set_state(port, GET_PPS_STATUS_SEND, 0);
1932 		else
1933 			tcpm_set_state(port, ready_state(port), 0);
1934 		break;
1935 	case PD_EXT_PPS_STATUS:
1936 		/*
1937 		 * For now the PPS status message is used to clear events
1938 		 * and nothing more.
1939 		 */
1940 		tcpm_set_state(port, ready_state(port), 0);
1941 		break;
1942 	case PD_EXT_SOURCE_CAP_EXT:
1943 	case PD_EXT_GET_BATT_CAP:
1944 	case PD_EXT_GET_BATT_STATUS:
1945 	case PD_EXT_BATT_CAP:
1946 	case PD_EXT_GET_MANUFACTURER_INFO:
1947 	case PD_EXT_MANUFACTURER_INFO:
1948 	case PD_EXT_SECURITY_REQUEST:
1949 	case PD_EXT_SECURITY_RESPONSE:
1950 	case PD_EXT_FW_UPDATE_REQUEST:
1951 	case PD_EXT_FW_UPDATE_RESPONSE:
1952 	case PD_EXT_COUNTRY_INFO:
1953 	case PD_EXT_COUNTRY_CODES:
1954 		tcpm_queue_message(port, PD_MSG_CTRL_NOT_SUPP);
1955 		break;
1956 	default:
1957 		tcpm_log(port, "Unhandled extended message type %#x", type);
1958 		break;
1959 	}
1960 }
1961 
1962 static void tcpm_pd_rx_handler(struct work_struct *work)
1963 {
1964 	struct pd_rx_event *event = container_of(work,
1965 						 struct pd_rx_event, work);
1966 	const struct pd_message *msg = &event->msg;
1967 	unsigned int cnt = pd_header_cnt_le(msg->header);
1968 	struct tcpm_port *port = event->port;
1969 
1970 	mutex_lock(&port->lock);
1971 
1972 	tcpm_log(port, "PD RX, header: %#x [%d]", le16_to_cpu(msg->header),
1973 		 port->attached);
1974 
1975 	if (port->attached) {
1976 		enum pd_ctrl_msg_type type = pd_header_type_le(msg->header);
1977 		unsigned int msgid = pd_header_msgid_le(msg->header);
1978 
1979 		/*
1980 		 * USB PD standard, 6.6.1.2:
1981 		 * "... if MessageID value in a received Message is the
1982 		 * same as the stored value, the receiver shall return a
1983 		 * GoodCRC Message with that MessageID value and drop
1984 		 * the Message (this is a retry of an already received
1985 		 * Message). Note: this shall not apply to the Soft_Reset
1986 		 * Message which always has a MessageID value of zero."
1987 		 */
1988 		if (msgid == port->rx_msgid && type != PD_CTRL_SOFT_RESET)
1989 			goto done;
1990 		port->rx_msgid = msgid;
1991 
1992 		/*
1993 		 * If both ends believe to be DFP/host, we have a data role
1994 		 * mismatch.
1995 		 */
1996 		if (!!(le16_to_cpu(msg->header) & PD_HEADER_DATA_ROLE) ==
1997 		    (port->data_role == TYPEC_HOST)) {
1998 			tcpm_log(port,
1999 				 "Data role mismatch, initiating error recovery");
2000 			tcpm_set_state(port, ERROR_RECOVERY, 0);
2001 		} else {
2002 			if (msg->header & PD_HEADER_EXT_HDR)
2003 				tcpm_pd_ext_msg_request(port, msg);
2004 			else if (cnt)
2005 				tcpm_pd_data_request(port, msg);
2006 			else
2007 				tcpm_pd_ctrl_request(port, msg);
2008 		}
2009 	}
2010 
2011 done:
2012 	mutex_unlock(&port->lock);
2013 	kfree(event);
2014 }
2015 
2016 void tcpm_pd_receive(struct tcpm_port *port, const struct pd_message *msg)
2017 {
2018 	struct pd_rx_event *event;
2019 
2020 	event = kzalloc(sizeof(*event), GFP_ATOMIC);
2021 	if (!event)
2022 		return;
2023 
2024 	INIT_WORK(&event->work, tcpm_pd_rx_handler);
2025 	event->port = port;
2026 	memcpy(&event->msg, msg, sizeof(*msg));
2027 	queue_work(port->wq, &event->work);
2028 }
2029 EXPORT_SYMBOL_GPL(tcpm_pd_receive);
2030 
2031 static int tcpm_pd_send_control(struct tcpm_port *port,
2032 				enum pd_ctrl_msg_type type)
2033 {
2034 	struct pd_message msg;
2035 
2036 	memset(&msg, 0, sizeof(msg));
2037 	msg.header = PD_HEADER_LE(type, port->pwr_role,
2038 				  port->data_role,
2039 				  port->negotiated_rev,
2040 				  port->message_id, 0);
2041 
2042 	return tcpm_pd_transmit(port, TCPC_TX_SOP, &msg);
2043 }
2044 
2045 /*
2046  * Send queued message without affecting state.
2047  * Return true if state machine should go back to sleep,
2048  * false otherwise.
2049  */
2050 static bool tcpm_send_queued_message(struct tcpm_port *port)
2051 {
2052 	enum pd_msg_request queued_message;
2053 
2054 	do {
2055 		queued_message = port->queued_message;
2056 		port->queued_message = PD_MSG_NONE;
2057 
2058 		switch (queued_message) {
2059 		case PD_MSG_CTRL_WAIT:
2060 			tcpm_pd_send_control(port, PD_CTRL_WAIT);
2061 			break;
2062 		case PD_MSG_CTRL_REJECT:
2063 			tcpm_pd_send_control(port, PD_CTRL_REJECT);
2064 			break;
2065 		case PD_MSG_CTRL_NOT_SUPP:
2066 			tcpm_pd_send_control(port, PD_CTRL_NOT_SUPP);
2067 			break;
2068 		case PD_MSG_DATA_SINK_CAP:
2069 			tcpm_pd_send_sink_caps(port);
2070 			break;
2071 		case PD_MSG_DATA_SOURCE_CAP:
2072 			tcpm_pd_send_source_caps(port);
2073 			break;
2074 		default:
2075 			break;
2076 		}
2077 	} while (port->queued_message != PD_MSG_NONE);
2078 
2079 	if (port->delayed_state != INVALID_STATE) {
2080 		if (time_is_after_jiffies(port->delayed_runtime)) {
2081 			mod_delayed_work(port->wq, &port->state_machine,
2082 					 port->delayed_runtime - jiffies);
2083 			return true;
2084 		}
2085 		port->delayed_state = INVALID_STATE;
2086 	}
2087 	return false;
2088 }
2089 
2090 static int tcpm_pd_check_request(struct tcpm_port *port)
2091 {
2092 	u32 pdo, rdo = port->sink_request;
2093 	unsigned int max, op, pdo_max, index;
2094 	enum pd_pdo_type type;
2095 
2096 	index = rdo_index(rdo);
2097 	if (!index || index > port->nr_src_pdo)
2098 		return -EINVAL;
2099 
2100 	pdo = port->src_pdo[index - 1];
2101 	type = pdo_type(pdo);
2102 	switch (type) {
2103 	case PDO_TYPE_FIXED:
2104 	case PDO_TYPE_VAR:
2105 		max = rdo_max_current(rdo);
2106 		op = rdo_op_current(rdo);
2107 		pdo_max = pdo_max_current(pdo);
2108 
2109 		if (op > pdo_max)
2110 			return -EINVAL;
2111 		if (max > pdo_max && !(rdo & RDO_CAP_MISMATCH))
2112 			return -EINVAL;
2113 
2114 		if (type == PDO_TYPE_FIXED)
2115 			tcpm_log(port,
2116 				 "Requested %u mV, %u mA for %u / %u mA",
2117 				 pdo_fixed_voltage(pdo), pdo_max, op, max);
2118 		else
2119 			tcpm_log(port,
2120 				 "Requested %u -> %u mV, %u mA for %u / %u mA",
2121 				 pdo_min_voltage(pdo), pdo_max_voltage(pdo),
2122 				 pdo_max, op, max);
2123 		break;
2124 	case PDO_TYPE_BATT:
2125 		max = rdo_max_power(rdo);
2126 		op = rdo_op_power(rdo);
2127 		pdo_max = pdo_max_power(pdo);
2128 
2129 		if (op > pdo_max)
2130 			return -EINVAL;
2131 		if (max > pdo_max && !(rdo & RDO_CAP_MISMATCH))
2132 			return -EINVAL;
2133 		tcpm_log(port,
2134 			 "Requested %u -> %u mV, %u mW for %u / %u mW",
2135 			 pdo_min_voltage(pdo), pdo_max_voltage(pdo),
2136 			 pdo_max, op, max);
2137 		break;
2138 	default:
2139 		return -EINVAL;
2140 	}
2141 
2142 	port->op_vsafe5v = index == 1;
2143 
2144 	return 0;
2145 }
2146 
2147 #define min_power(x, y) min(pdo_max_power(x), pdo_max_power(y))
2148 #define min_current(x, y) min(pdo_max_current(x), pdo_max_current(y))
2149 
2150 static int tcpm_pd_select_pdo(struct tcpm_port *port, int *sink_pdo,
2151 			      int *src_pdo)
2152 {
2153 	unsigned int i, j, max_src_mv = 0, min_src_mv = 0, max_mw = 0,
2154 		     max_mv = 0, src_mw = 0, src_ma = 0, max_snk_mv = 0,
2155 		     min_snk_mv = 0;
2156 	int ret = -EINVAL;
2157 
2158 	port->pps_data.supported = false;
2159 	port->usb_type = POWER_SUPPLY_USB_TYPE_PD;
2160 
2161 	/*
2162 	 * Select the source PDO providing the most power which has a
2163 	 * matchig sink cap.
2164 	 */
2165 	for (i = 0; i < port->nr_source_caps; i++) {
2166 		u32 pdo = port->source_caps[i];
2167 		enum pd_pdo_type type = pdo_type(pdo);
2168 
2169 		switch (type) {
2170 		case PDO_TYPE_FIXED:
2171 			max_src_mv = pdo_fixed_voltage(pdo);
2172 			min_src_mv = max_src_mv;
2173 			break;
2174 		case PDO_TYPE_BATT:
2175 		case PDO_TYPE_VAR:
2176 			max_src_mv = pdo_max_voltage(pdo);
2177 			min_src_mv = pdo_min_voltage(pdo);
2178 			break;
2179 		case PDO_TYPE_APDO:
2180 			if (pdo_apdo_type(pdo) == APDO_TYPE_PPS) {
2181 				port->pps_data.supported = true;
2182 				port->usb_type =
2183 					POWER_SUPPLY_USB_TYPE_PD_PPS;
2184 			}
2185 			continue;
2186 		default:
2187 			tcpm_log(port, "Invalid source PDO type, ignoring");
2188 			continue;
2189 		}
2190 
2191 		switch (type) {
2192 		case PDO_TYPE_FIXED:
2193 		case PDO_TYPE_VAR:
2194 			src_ma = pdo_max_current(pdo);
2195 			src_mw = src_ma * min_src_mv / 1000;
2196 			break;
2197 		case PDO_TYPE_BATT:
2198 			src_mw = pdo_max_power(pdo);
2199 			break;
2200 		case PDO_TYPE_APDO:
2201 			continue;
2202 		default:
2203 			tcpm_log(port, "Invalid source PDO type, ignoring");
2204 			continue;
2205 		}
2206 
2207 		for (j = 0; j < port->nr_snk_pdo; j++) {
2208 			pdo = port->snk_pdo[j];
2209 
2210 			switch (pdo_type(pdo)) {
2211 			case PDO_TYPE_FIXED:
2212 				max_snk_mv = pdo_fixed_voltage(pdo);
2213 				min_snk_mv = max_snk_mv;
2214 				break;
2215 			case PDO_TYPE_BATT:
2216 			case PDO_TYPE_VAR:
2217 				max_snk_mv = pdo_max_voltage(pdo);
2218 				min_snk_mv = pdo_min_voltage(pdo);
2219 				break;
2220 			case PDO_TYPE_APDO:
2221 				continue;
2222 			default:
2223 				tcpm_log(port, "Invalid sink PDO type, ignoring");
2224 				continue;
2225 			}
2226 
2227 			if (max_src_mv <= max_snk_mv &&
2228 				min_src_mv >= min_snk_mv) {
2229 				/* Prefer higher voltages if available */
2230 				if ((src_mw == max_mw && min_src_mv > max_mv) ||
2231 							src_mw > max_mw) {
2232 					*src_pdo = i;
2233 					*sink_pdo = j;
2234 					max_mw = src_mw;
2235 					max_mv = min_src_mv;
2236 					ret = 0;
2237 				}
2238 			}
2239 		}
2240 	}
2241 
2242 	return ret;
2243 }
2244 
2245 #define min_pps_apdo_current(x, y)	\
2246 	min(pdo_pps_apdo_max_current(x), pdo_pps_apdo_max_current(y))
2247 
2248 static unsigned int tcpm_pd_select_pps_apdo(struct tcpm_port *port)
2249 {
2250 	unsigned int i, j, max_mw = 0, max_mv = 0;
2251 	unsigned int min_src_mv, max_src_mv, src_ma, src_mw;
2252 	unsigned int min_snk_mv, max_snk_mv;
2253 	unsigned int max_op_mv;
2254 	u32 pdo, src, snk;
2255 	unsigned int src_pdo = 0, snk_pdo = 0;
2256 
2257 	/*
2258 	 * Select the source PPS APDO providing the most power while staying
2259 	 * within the board's limits. We skip the first PDO as this is always
2260 	 * 5V 3A.
2261 	 */
2262 	for (i = 1; i < port->nr_source_caps; ++i) {
2263 		pdo = port->source_caps[i];
2264 
2265 		switch (pdo_type(pdo)) {
2266 		case PDO_TYPE_APDO:
2267 			if (pdo_apdo_type(pdo) != APDO_TYPE_PPS) {
2268 				tcpm_log(port, "Not PPS APDO (source), ignoring");
2269 				continue;
2270 			}
2271 
2272 			min_src_mv = pdo_pps_apdo_min_voltage(pdo);
2273 			max_src_mv = pdo_pps_apdo_max_voltage(pdo);
2274 			src_ma = pdo_pps_apdo_max_current(pdo);
2275 			src_mw = (src_ma * max_src_mv) / 1000;
2276 
2277 			/*
2278 			 * Now search through the sink PDOs to find a matching
2279 			 * PPS APDO. Again skip the first sink PDO as this will
2280 			 * always be 5V 3A.
2281 			 */
2282 			for (j = 1; j < port->nr_snk_pdo; j++) {
2283 				pdo = port->snk_pdo[j];
2284 
2285 				switch (pdo_type(pdo)) {
2286 				case PDO_TYPE_APDO:
2287 					if (pdo_apdo_type(pdo) != APDO_TYPE_PPS) {
2288 						tcpm_log(port,
2289 							 "Not PPS APDO (sink), ignoring");
2290 						continue;
2291 					}
2292 
2293 					min_snk_mv =
2294 						pdo_pps_apdo_min_voltage(pdo);
2295 					max_snk_mv =
2296 						pdo_pps_apdo_max_voltage(pdo);
2297 					break;
2298 				default:
2299 					tcpm_log(port,
2300 						 "Not APDO type (sink), ignoring");
2301 					continue;
2302 				}
2303 
2304 				if (min_src_mv <= max_snk_mv &&
2305 				    max_src_mv >= min_snk_mv) {
2306 					max_op_mv = min(max_src_mv, max_snk_mv);
2307 					src_mw = (max_op_mv * src_ma) / 1000;
2308 					/* Prefer higher voltages if available */
2309 					if ((src_mw == max_mw &&
2310 					     max_op_mv > max_mv) ||
2311 					    src_mw > max_mw) {
2312 						src_pdo = i;
2313 						snk_pdo = j;
2314 						max_mw = src_mw;
2315 						max_mv = max_op_mv;
2316 					}
2317 				}
2318 			}
2319 
2320 			break;
2321 		default:
2322 			tcpm_log(port, "Not APDO type (source), ignoring");
2323 			continue;
2324 		}
2325 	}
2326 
2327 	if (src_pdo) {
2328 		src = port->source_caps[src_pdo];
2329 		snk = port->snk_pdo[snk_pdo];
2330 
2331 		port->pps_data.min_volt = max(pdo_pps_apdo_min_voltage(src),
2332 					      pdo_pps_apdo_min_voltage(snk));
2333 		port->pps_data.max_volt = min(pdo_pps_apdo_max_voltage(src),
2334 					      pdo_pps_apdo_max_voltage(snk));
2335 		port->pps_data.max_curr = min_pps_apdo_current(src, snk);
2336 		port->pps_data.out_volt = min(port->pps_data.max_volt,
2337 					      max(port->pps_data.min_volt,
2338 						  port->pps_data.out_volt));
2339 		port->pps_data.op_curr = min(port->pps_data.max_curr,
2340 					     port->pps_data.op_curr);
2341 	}
2342 
2343 	return src_pdo;
2344 }
2345 
2346 static int tcpm_pd_build_request(struct tcpm_port *port, u32 *rdo)
2347 {
2348 	unsigned int mv, ma, mw, flags;
2349 	unsigned int max_ma, max_mw;
2350 	enum pd_pdo_type type;
2351 	u32 pdo, matching_snk_pdo;
2352 	int src_pdo_index = 0;
2353 	int snk_pdo_index = 0;
2354 	int ret;
2355 
2356 	ret = tcpm_pd_select_pdo(port, &snk_pdo_index, &src_pdo_index);
2357 	if (ret < 0)
2358 		return ret;
2359 
2360 	pdo = port->source_caps[src_pdo_index];
2361 	matching_snk_pdo = port->snk_pdo[snk_pdo_index];
2362 	type = pdo_type(pdo);
2363 
2364 	switch (type) {
2365 	case PDO_TYPE_FIXED:
2366 		mv = pdo_fixed_voltage(pdo);
2367 		break;
2368 	case PDO_TYPE_BATT:
2369 	case PDO_TYPE_VAR:
2370 		mv = pdo_min_voltage(pdo);
2371 		break;
2372 	default:
2373 		tcpm_log(port, "Invalid PDO selected!");
2374 		return -EINVAL;
2375 	}
2376 
2377 	/* Select maximum available current within the sink pdo's limit */
2378 	if (type == PDO_TYPE_BATT) {
2379 		mw = min_power(pdo, matching_snk_pdo);
2380 		ma = 1000 * mw / mv;
2381 	} else {
2382 		ma = min_current(pdo, matching_snk_pdo);
2383 		mw = ma * mv / 1000;
2384 	}
2385 
2386 	flags = RDO_USB_COMM | RDO_NO_SUSPEND;
2387 
2388 	/* Set mismatch bit if offered power is less than operating power */
2389 	max_ma = ma;
2390 	max_mw = mw;
2391 	if (mw < port->operating_snk_mw) {
2392 		flags |= RDO_CAP_MISMATCH;
2393 		if (type == PDO_TYPE_BATT &&
2394 		    (pdo_max_power(matching_snk_pdo) > pdo_max_power(pdo)))
2395 			max_mw = pdo_max_power(matching_snk_pdo);
2396 		else if (pdo_max_current(matching_snk_pdo) >
2397 			 pdo_max_current(pdo))
2398 			max_ma = pdo_max_current(matching_snk_pdo);
2399 	}
2400 
2401 	tcpm_log(port, "cc=%d cc1=%d cc2=%d vbus=%d vconn=%s polarity=%d",
2402 		 port->cc_req, port->cc1, port->cc2, port->vbus_source,
2403 		 port->vconn_role == TYPEC_SOURCE ? "source" : "sink",
2404 		 port->polarity);
2405 
2406 	if (type == PDO_TYPE_BATT) {
2407 		*rdo = RDO_BATT(src_pdo_index + 1, mw, max_mw, flags);
2408 
2409 		tcpm_log(port, "Requesting PDO %d: %u mV, %u mW%s",
2410 			 src_pdo_index, mv, mw,
2411 			 flags & RDO_CAP_MISMATCH ? " [mismatch]" : "");
2412 	} else {
2413 		*rdo = RDO_FIXED(src_pdo_index + 1, ma, max_ma, flags);
2414 
2415 		tcpm_log(port, "Requesting PDO %d: %u mV, %u mA%s",
2416 			 src_pdo_index, mv, ma,
2417 			 flags & RDO_CAP_MISMATCH ? " [mismatch]" : "");
2418 	}
2419 
2420 	port->current_limit = ma;
2421 	port->supply_voltage = mv;
2422 
2423 	return 0;
2424 }
2425 
2426 static int tcpm_pd_send_request(struct tcpm_port *port)
2427 {
2428 	struct pd_message msg;
2429 	int ret;
2430 	u32 rdo;
2431 
2432 	ret = tcpm_pd_build_request(port, &rdo);
2433 	if (ret < 0)
2434 		return ret;
2435 
2436 	memset(&msg, 0, sizeof(msg));
2437 	msg.header = PD_HEADER_LE(PD_DATA_REQUEST,
2438 				  port->pwr_role,
2439 				  port->data_role,
2440 				  port->negotiated_rev,
2441 				  port->message_id, 1);
2442 	msg.payload[0] = cpu_to_le32(rdo);
2443 
2444 	return tcpm_pd_transmit(port, TCPC_TX_SOP, &msg);
2445 }
2446 
2447 static int tcpm_pd_build_pps_request(struct tcpm_port *port, u32 *rdo)
2448 {
2449 	unsigned int out_mv, op_ma, op_mw, max_mv, max_ma, flags;
2450 	enum pd_pdo_type type;
2451 	unsigned int src_pdo_index;
2452 	u32 pdo;
2453 
2454 	src_pdo_index = tcpm_pd_select_pps_apdo(port);
2455 	if (!src_pdo_index)
2456 		return -EOPNOTSUPP;
2457 
2458 	pdo = port->source_caps[src_pdo_index];
2459 	type = pdo_type(pdo);
2460 
2461 	switch (type) {
2462 	case PDO_TYPE_APDO:
2463 		if (pdo_apdo_type(pdo) != APDO_TYPE_PPS) {
2464 			tcpm_log(port, "Invalid APDO selected!");
2465 			return -EINVAL;
2466 		}
2467 		max_mv = port->pps_data.max_volt;
2468 		max_ma = port->pps_data.max_curr;
2469 		out_mv = port->pps_data.out_volt;
2470 		op_ma = port->pps_data.op_curr;
2471 		break;
2472 	default:
2473 		tcpm_log(port, "Invalid PDO selected!");
2474 		return -EINVAL;
2475 	}
2476 
2477 	flags = RDO_USB_COMM | RDO_NO_SUSPEND;
2478 
2479 	op_mw = (op_ma * out_mv) / 1000;
2480 	if (op_mw < port->operating_snk_mw) {
2481 		/*
2482 		 * Try raising current to meet power needs. If that's not enough
2483 		 * then try upping the voltage. If that's still not enough
2484 		 * then we've obviously chosen a PPS APDO which really isn't
2485 		 * suitable so abandon ship.
2486 		 */
2487 		op_ma = (port->operating_snk_mw * 1000) / out_mv;
2488 		if ((port->operating_snk_mw * 1000) % out_mv)
2489 			++op_ma;
2490 		op_ma += RDO_PROG_CURR_MA_STEP - (op_ma % RDO_PROG_CURR_MA_STEP);
2491 
2492 		if (op_ma > max_ma) {
2493 			op_ma = max_ma;
2494 			out_mv = (port->operating_snk_mw * 1000) / op_ma;
2495 			if ((port->operating_snk_mw * 1000) % op_ma)
2496 				++out_mv;
2497 			out_mv += RDO_PROG_VOLT_MV_STEP -
2498 				  (out_mv % RDO_PROG_VOLT_MV_STEP);
2499 
2500 			if (out_mv > max_mv) {
2501 				tcpm_log(port, "Invalid PPS APDO selected!");
2502 				return -EINVAL;
2503 			}
2504 		}
2505 	}
2506 
2507 	tcpm_log(port, "cc=%d cc1=%d cc2=%d vbus=%d vconn=%s polarity=%d",
2508 		 port->cc_req, port->cc1, port->cc2, port->vbus_source,
2509 		 port->vconn_role == TYPEC_SOURCE ? "source" : "sink",
2510 		 port->polarity);
2511 
2512 	*rdo = RDO_PROG(src_pdo_index + 1, out_mv, op_ma, flags);
2513 
2514 	tcpm_log(port, "Requesting APDO %d: %u mV, %u mA",
2515 		 src_pdo_index, out_mv, op_ma);
2516 
2517 	port->pps_data.op_curr = op_ma;
2518 	port->pps_data.out_volt = out_mv;
2519 
2520 	return 0;
2521 }
2522 
2523 static int tcpm_pd_send_pps_request(struct tcpm_port *port)
2524 {
2525 	struct pd_message msg;
2526 	int ret;
2527 	u32 rdo;
2528 
2529 	ret = tcpm_pd_build_pps_request(port, &rdo);
2530 	if (ret < 0)
2531 		return ret;
2532 
2533 	memset(&msg, 0, sizeof(msg));
2534 	msg.header = PD_HEADER_LE(PD_DATA_REQUEST,
2535 				  port->pwr_role,
2536 				  port->data_role,
2537 				  port->negotiated_rev,
2538 				  port->message_id, 1);
2539 	msg.payload[0] = cpu_to_le32(rdo);
2540 
2541 	return tcpm_pd_transmit(port, TCPC_TX_SOP, &msg);
2542 }
2543 
2544 static int tcpm_set_vbus(struct tcpm_port *port, bool enable)
2545 {
2546 	int ret;
2547 
2548 	if (enable && port->vbus_charge)
2549 		return -EINVAL;
2550 
2551 	tcpm_log(port, "vbus:=%d charge=%d", enable, port->vbus_charge);
2552 
2553 	ret = port->tcpc->set_vbus(port->tcpc, enable, port->vbus_charge);
2554 	if (ret < 0)
2555 		return ret;
2556 
2557 	port->vbus_source = enable;
2558 	return 0;
2559 }
2560 
2561 static int tcpm_set_charge(struct tcpm_port *port, bool charge)
2562 {
2563 	int ret;
2564 
2565 	if (charge && port->vbus_source)
2566 		return -EINVAL;
2567 
2568 	if (charge != port->vbus_charge) {
2569 		tcpm_log(port, "vbus=%d charge:=%d", port->vbus_source, charge);
2570 		ret = port->tcpc->set_vbus(port->tcpc, port->vbus_source,
2571 					   charge);
2572 		if (ret < 0)
2573 			return ret;
2574 	}
2575 	port->vbus_charge = charge;
2576 	return 0;
2577 }
2578 
2579 static bool tcpm_start_toggling(struct tcpm_port *port, enum typec_cc_status cc)
2580 {
2581 	int ret;
2582 
2583 	if (!port->tcpc->start_toggling)
2584 		return false;
2585 
2586 	tcpm_log_force(port, "Start toggling");
2587 	ret = port->tcpc->start_toggling(port->tcpc, port->port_type, cc);
2588 	return ret == 0;
2589 }
2590 
2591 static void tcpm_set_cc(struct tcpm_port *port, enum typec_cc_status cc)
2592 {
2593 	tcpm_log(port, "cc:=%d", cc);
2594 	port->cc_req = cc;
2595 	port->tcpc->set_cc(port->tcpc, cc);
2596 }
2597 
2598 static int tcpm_init_vbus(struct tcpm_port *port)
2599 {
2600 	int ret;
2601 
2602 	ret = port->tcpc->set_vbus(port->tcpc, false, false);
2603 	port->vbus_source = false;
2604 	port->vbus_charge = false;
2605 	return ret;
2606 }
2607 
2608 static int tcpm_init_vconn(struct tcpm_port *port)
2609 {
2610 	int ret;
2611 
2612 	ret = port->tcpc->set_vconn(port->tcpc, false);
2613 	port->vconn_role = TYPEC_SINK;
2614 	return ret;
2615 }
2616 
2617 static void tcpm_typec_connect(struct tcpm_port *port)
2618 {
2619 	if (!port->connected) {
2620 		/* Make sure we don't report stale identity information */
2621 		memset(&port->partner_ident, 0, sizeof(port->partner_ident));
2622 		port->partner_desc.usb_pd = port->pd_capable;
2623 		if (tcpm_port_is_debug(port))
2624 			port->partner_desc.accessory = TYPEC_ACCESSORY_DEBUG;
2625 		else if (tcpm_port_is_audio(port))
2626 			port->partner_desc.accessory = TYPEC_ACCESSORY_AUDIO;
2627 		else
2628 			port->partner_desc.accessory = TYPEC_ACCESSORY_NONE;
2629 		port->partner = typec_register_partner(port->typec_port,
2630 						       &port->partner_desc);
2631 		port->connected = true;
2632 	}
2633 }
2634 
2635 static int tcpm_src_attach(struct tcpm_port *port)
2636 {
2637 	enum typec_cc_polarity polarity =
2638 				port->cc2 == TYPEC_CC_RD ? TYPEC_POLARITY_CC2
2639 							 : TYPEC_POLARITY_CC1;
2640 	int ret;
2641 
2642 	if (port->attached)
2643 		return 0;
2644 
2645 	ret = tcpm_set_polarity(port, polarity);
2646 	if (ret < 0)
2647 		return ret;
2648 
2649 	ret = tcpm_set_roles(port, true, TYPEC_SOURCE,
2650 			     tcpm_data_role_for_source(port));
2651 	if (ret < 0)
2652 		return ret;
2653 
2654 	ret = port->tcpc->set_pd_rx(port->tcpc, true);
2655 	if (ret < 0)
2656 		goto out_disable_mux;
2657 
2658 	/*
2659 	 * USB Type-C specification, version 1.2,
2660 	 * chapter 4.5.2.2.8.1 (Attached.SRC Requirements)
2661 	 * Enable VCONN only if the non-RD port is set to RA.
2662 	 */
2663 	if ((polarity == TYPEC_POLARITY_CC1 && port->cc2 == TYPEC_CC_RA) ||
2664 	    (polarity == TYPEC_POLARITY_CC2 && port->cc1 == TYPEC_CC_RA)) {
2665 		ret = tcpm_set_vconn(port, true);
2666 		if (ret < 0)
2667 			goto out_disable_pd;
2668 	}
2669 
2670 	ret = tcpm_set_vbus(port, true);
2671 	if (ret < 0)
2672 		goto out_disable_vconn;
2673 
2674 	port->pd_capable = false;
2675 
2676 	port->partner = NULL;
2677 
2678 	port->attached = true;
2679 	port->send_discover = true;
2680 
2681 	return 0;
2682 
2683 out_disable_vconn:
2684 	tcpm_set_vconn(port, false);
2685 out_disable_pd:
2686 	port->tcpc->set_pd_rx(port->tcpc, false);
2687 out_disable_mux:
2688 	tcpm_mux_set(port, TYPEC_STATE_SAFE, USB_ROLE_NONE,
2689 		     TYPEC_ORIENTATION_NONE);
2690 	return ret;
2691 }
2692 
2693 static void tcpm_typec_disconnect(struct tcpm_port *port)
2694 {
2695 	if (port->connected) {
2696 		typec_unregister_partner(port->partner);
2697 		port->partner = NULL;
2698 		port->connected = false;
2699 	}
2700 }
2701 
2702 static void tcpm_unregister_altmodes(struct tcpm_port *port)
2703 {
2704 	struct pd_mode_data *modep = &port->mode_data;
2705 	int i;
2706 
2707 	for (i = 0; i < modep->altmodes; i++) {
2708 		typec_unregister_altmode(port->partner_altmode[i]);
2709 		port->partner_altmode[i] = NULL;
2710 	}
2711 
2712 	memset(modep, 0, sizeof(*modep));
2713 }
2714 
2715 static void tcpm_reset_port(struct tcpm_port *port)
2716 {
2717 	tcpm_unregister_altmodes(port);
2718 	tcpm_typec_disconnect(port);
2719 	port->attached = false;
2720 	port->pd_capable = false;
2721 	port->pps_data.supported = false;
2722 
2723 	/*
2724 	 * First Rx ID should be 0; set this to a sentinel of -1 so that
2725 	 * we can check tcpm_pd_rx_handler() if we had seen it before.
2726 	 */
2727 	port->rx_msgid = -1;
2728 
2729 	port->tcpc->set_pd_rx(port->tcpc, false);
2730 	tcpm_init_vbus(port);	/* also disables charging */
2731 	tcpm_init_vconn(port);
2732 	tcpm_set_current_limit(port, 0, 0);
2733 	tcpm_set_polarity(port, TYPEC_POLARITY_CC1);
2734 	tcpm_mux_set(port, TYPEC_STATE_SAFE, USB_ROLE_NONE,
2735 		     TYPEC_ORIENTATION_NONE);
2736 	tcpm_set_attached_state(port, false);
2737 	port->try_src_count = 0;
2738 	port->try_snk_count = 0;
2739 	port->usb_type = POWER_SUPPLY_USB_TYPE_C;
2740 
2741 	power_supply_changed(port->psy);
2742 }
2743 
2744 static void tcpm_detach(struct tcpm_port *port)
2745 {
2746 	if (!port->attached)
2747 		return;
2748 
2749 	if (tcpm_port_is_disconnected(port))
2750 		port->hard_reset_count = 0;
2751 
2752 	tcpm_reset_port(port);
2753 }
2754 
2755 static void tcpm_src_detach(struct tcpm_port *port)
2756 {
2757 	tcpm_detach(port);
2758 }
2759 
2760 static int tcpm_snk_attach(struct tcpm_port *port)
2761 {
2762 	int ret;
2763 
2764 	if (port->attached)
2765 		return 0;
2766 
2767 	ret = tcpm_set_polarity(port, port->cc2 != TYPEC_CC_OPEN ?
2768 				TYPEC_POLARITY_CC2 : TYPEC_POLARITY_CC1);
2769 	if (ret < 0)
2770 		return ret;
2771 
2772 	ret = tcpm_set_roles(port, true, TYPEC_SINK,
2773 			     tcpm_data_role_for_sink(port));
2774 	if (ret < 0)
2775 		return ret;
2776 
2777 	port->pd_capable = false;
2778 
2779 	port->partner = NULL;
2780 
2781 	port->attached = true;
2782 	port->send_discover = true;
2783 
2784 	return 0;
2785 }
2786 
2787 static void tcpm_snk_detach(struct tcpm_port *port)
2788 {
2789 	tcpm_detach(port);
2790 }
2791 
2792 static int tcpm_acc_attach(struct tcpm_port *port)
2793 {
2794 	int ret;
2795 
2796 	if (port->attached)
2797 		return 0;
2798 
2799 	ret = tcpm_set_roles(port, true, TYPEC_SOURCE,
2800 			     tcpm_data_role_for_source(port));
2801 	if (ret < 0)
2802 		return ret;
2803 
2804 	port->partner = NULL;
2805 
2806 	tcpm_typec_connect(port);
2807 
2808 	port->attached = true;
2809 
2810 	return 0;
2811 }
2812 
2813 static void tcpm_acc_detach(struct tcpm_port *port)
2814 {
2815 	tcpm_detach(port);
2816 }
2817 
2818 static inline enum tcpm_state hard_reset_state(struct tcpm_port *port)
2819 {
2820 	if (port->hard_reset_count < PD_N_HARD_RESET_COUNT)
2821 		return HARD_RESET_SEND;
2822 	if (port->pd_capable)
2823 		return ERROR_RECOVERY;
2824 	if (port->pwr_role == TYPEC_SOURCE)
2825 		return SRC_UNATTACHED;
2826 	if (port->state == SNK_WAIT_CAPABILITIES)
2827 		return SNK_READY;
2828 	return SNK_UNATTACHED;
2829 }
2830 
2831 static inline enum tcpm_state unattached_state(struct tcpm_port *port)
2832 {
2833 	if (port->port_type == TYPEC_PORT_DRP) {
2834 		if (port->pwr_role == TYPEC_SOURCE)
2835 			return SRC_UNATTACHED;
2836 		else
2837 			return SNK_UNATTACHED;
2838 	} else if (port->port_type == TYPEC_PORT_SRC) {
2839 		return SRC_UNATTACHED;
2840 	}
2841 
2842 	return SNK_UNATTACHED;
2843 }
2844 
2845 static void tcpm_check_send_discover(struct tcpm_port *port)
2846 {
2847 	if (port->data_role == TYPEC_HOST && port->send_discover &&
2848 	    port->pd_capable) {
2849 		tcpm_send_vdm(port, USB_SID_PD, CMD_DISCOVER_IDENT, NULL, 0);
2850 		port->send_discover = false;
2851 	}
2852 }
2853 
2854 static void tcpm_swap_complete(struct tcpm_port *port, int result)
2855 {
2856 	if (port->swap_pending) {
2857 		port->swap_status = result;
2858 		port->swap_pending = false;
2859 		port->non_pd_role_swap = false;
2860 		complete(&port->swap_complete);
2861 	}
2862 }
2863 
2864 static enum typec_pwr_opmode tcpm_get_pwr_opmode(enum typec_cc_status cc)
2865 {
2866 	switch (cc) {
2867 	case TYPEC_CC_RP_1_5:
2868 		return TYPEC_PWR_MODE_1_5A;
2869 	case TYPEC_CC_RP_3_0:
2870 		return TYPEC_PWR_MODE_3_0A;
2871 	case TYPEC_CC_RP_DEF:
2872 	default:
2873 		return TYPEC_PWR_MODE_USB;
2874 	}
2875 }
2876 
2877 static void run_state_machine(struct tcpm_port *port)
2878 {
2879 	int ret;
2880 	enum typec_pwr_opmode opmode;
2881 	unsigned int msecs;
2882 
2883 	port->enter_state = port->state;
2884 	switch (port->state) {
2885 	case TOGGLING:
2886 		break;
2887 	/* SRC states */
2888 	case SRC_UNATTACHED:
2889 		if (!port->non_pd_role_swap)
2890 			tcpm_swap_complete(port, -ENOTCONN);
2891 		tcpm_src_detach(port);
2892 		if (tcpm_start_toggling(port, tcpm_rp_cc(port))) {
2893 			tcpm_set_state(port, TOGGLING, 0);
2894 			break;
2895 		}
2896 		tcpm_set_cc(port, tcpm_rp_cc(port));
2897 		if (port->port_type == TYPEC_PORT_DRP)
2898 			tcpm_set_state(port, SNK_UNATTACHED, PD_T_DRP_SNK);
2899 		break;
2900 	case SRC_ATTACH_WAIT:
2901 		if (tcpm_port_is_debug(port))
2902 			tcpm_set_state(port, DEBUG_ACC_ATTACHED,
2903 				       PD_T_CC_DEBOUNCE);
2904 		else if (tcpm_port_is_audio(port))
2905 			tcpm_set_state(port, AUDIO_ACC_ATTACHED,
2906 				       PD_T_CC_DEBOUNCE);
2907 		else if (tcpm_port_is_source(port))
2908 			tcpm_set_state(port,
2909 				       tcpm_try_snk(port) ? SNK_TRY
2910 							  : SRC_ATTACHED,
2911 				       PD_T_CC_DEBOUNCE);
2912 		break;
2913 
2914 	case SNK_TRY:
2915 		port->try_snk_count++;
2916 		/*
2917 		 * Requirements:
2918 		 * - Do not drive vconn or vbus
2919 		 * - Terminate CC pins (both) to Rd
2920 		 * Action:
2921 		 * - Wait for tDRPTry (PD_T_DRP_TRY).
2922 		 *   Until then, ignore any state changes.
2923 		 */
2924 		tcpm_set_cc(port, TYPEC_CC_RD);
2925 		tcpm_set_state(port, SNK_TRY_WAIT, PD_T_DRP_TRY);
2926 		break;
2927 	case SNK_TRY_WAIT:
2928 		if (tcpm_port_is_sink(port)) {
2929 			tcpm_set_state(port, SNK_TRY_WAIT_DEBOUNCE, 0);
2930 		} else {
2931 			tcpm_set_state(port, SRC_TRYWAIT, 0);
2932 			port->max_wait = 0;
2933 		}
2934 		break;
2935 	case SNK_TRY_WAIT_DEBOUNCE:
2936 		tcpm_set_state(port, SNK_TRY_WAIT_DEBOUNCE_CHECK_VBUS,
2937 			       PD_T_PD_DEBOUNCE);
2938 		break;
2939 	case SNK_TRY_WAIT_DEBOUNCE_CHECK_VBUS:
2940 		if (port->vbus_present && tcpm_port_is_sink(port)) {
2941 			tcpm_set_state(port, SNK_ATTACHED, 0);
2942 		} else {
2943 			tcpm_set_state(port, SRC_TRYWAIT, 0);
2944 			port->max_wait = 0;
2945 		}
2946 		break;
2947 	case SRC_TRYWAIT:
2948 		tcpm_set_cc(port, tcpm_rp_cc(port));
2949 		if (port->max_wait == 0) {
2950 			port->max_wait = jiffies +
2951 					 msecs_to_jiffies(PD_T_DRP_TRY);
2952 			tcpm_set_state(port, SRC_TRYWAIT_UNATTACHED,
2953 				       PD_T_DRP_TRY);
2954 		} else {
2955 			if (time_is_after_jiffies(port->max_wait))
2956 				tcpm_set_state(port, SRC_TRYWAIT_UNATTACHED,
2957 					       jiffies_to_msecs(port->max_wait -
2958 								jiffies));
2959 			else
2960 				tcpm_set_state(port, SNK_UNATTACHED, 0);
2961 		}
2962 		break;
2963 	case SRC_TRYWAIT_DEBOUNCE:
2964 		tcpm_set_state(port, SRC_ATTACHED, PD_T_CC_DEBOUNCE);
2965 		break;
2966 	case SRC_TRYWAIT_UNATTACHED:
2967 		tcpm_set_state(port, SNK_UNATTACHED, 0);
2968 		break;
2969 
2970 	case SRC_ATTACHED:
2971 		ret = tcpm_src_attach(port);
2972 		tcpm_set_state(port, SRC_UNATTACHED,
2973 			       ret < 0 ? 0 : PD_T_PS_SOURCE_ON);
2974 		break;
2975 	case SRC_STARTUP:
2976 		opmode =  tcpm_get_pwr_opmode(tcpm_rp_cc(port));
2977 		typec_set_pwr_opmode(port->typec_port, opmode);
2978 		port->pwr_opmode = TYPEC_PWR_MODE_USB;
2979 		port->caps_count = 0;
2980 		port->negotiated_rev = PD_MAX_REV;
2981 		port->message_id = 0;
2982 		port->rx_msgid = -1;
2983 		port->explicit_contract = false;
2984 		tcpm_set_state(port, SRC_SEND_CAPABILITIES, 0);
2985 		break;
2986 	case SRC_SEND_CAPABILITIES:
2987 		port->caps_count++;
2988 		if (port->caps_count > PD_N_CAPS_COUNT) {
2989 			tcpm_set_state(port, SRC_READY, 0);
2990 			break;
2991 		}
2992 		ret = tcpm_pd_send_source_caps(port);
2993 		if (ret < 0) {
2994 			tcpm_set_state(port, SRC_SEND_CAPABILITIES,
2995 				       PD_T_SEND_SOURCE_CAP);
2996 		} else {
2997 			/*
2998 			 * Per standard, we should clear the reset counter here.
2999 			 * However, that can result in state machine hang-ups.
3000 			 * Reset it only in READY state to improve stability.
3001 			 */
3002 			/* port->hard_reset_count = 0; */
3003 			port->caps_count = 0;
3004 			port->pd_capable = true;
3005 			tcpm_set_state_cond(port, SRC_SEND_CAPABILITIES_TIMEOUT,
3006 					    PD_T_SEND_SOURCE_CAP);
3007 		}
3008 		break;
3009 	case SRC_SEND_CAPABILITIES_TIMEOUT:
3010 		/*
3011 		 * Error recovery for a PD_DATA_SOURCE_CAP reply timeout.
3012 		 *
3013 		 * PD 2.0 sinks are supposed to accept src-capabilities with a
3014 		 * 3.0 header and simply ignore any src PDOs which the sink does
3015 		 * not understand such as PPS but some 2.0 sinks instead ignore
3016 		 * the entire PD_DATA_SOURCE_CAP message, causing contract
3017 		 * negotiation to fail.
3018 		 *
3019 		 * After PD_N_HARD_RESET_COUNT hard-reset attempts, we try
3020 		 * sending src-capabilities with a lower PD revision to
3021 		 * make these broken sinks work.
3022 		 */
3023 		if (port->hard_reset_count < PD_N_HARD_RESET_COUNT) {
3024 			tcpm_set_state(port, HARD_RESET_SEND, 0);
3025 		} else if (port->negotiated_rev > PD_REV20) {
3026 			port->negotiated_rev--;
3027 			port->hard_reset_count = 0;
3028 			tcpm_set_state(port, SRC_SEND_CAPABILITIES, 0);
3029 		} else {
3030 			tcpm_set_state(port, hard_reset_state(port), 0);
3031 		}
3032 		break;
3033 	case SRC_NEGOTIATE_CAPABILITIES:
3034 		ret = tcpm_pd_check_request(port);
3035 		if (ret < 0) {
3036 			tcpm_pd_send_control(port, PD_CTRL_REJECT);
3037 			if (!port->explicit_contract) {
3038 				tcpm_set_state(port,
3039 					       SRC_WAIT_NEW_CAPABILITIES, 0);
3040 			} else {
3041 				tcpm_set_state(port, SRC_READY, 0);
3042 			}
3043 		} else {
3044 			tcpm_pd_send_control(port, PD_CTRL_ACCEPT);
3045 			tcpm_set_state(port, SRC_TRANSITION_SUPPLY,
3046 				       PD_T_SRC_TRANSITION);
3047 		}
3048 		break;
3049 	case SRC_TRANSITION_SUPPLY:
3050 		/* XXX: regulator_set_voltage(vbus, ...) */
3051 		tcpm_pd_send_control(port, PD_CTRL_PS_RDY);
3052 		port->explicit_contract = true;
3053 		typec_set_pwr_opmode(port->typec_port, TYPEC_PWR_MODE_PD);
3054 		port->pwr_opmode = TYPEC_PWR_MODE_PD;
3055 		tcpm_set_state_cond(port, SRC_READY, 0);
3056 		break;
3057 	case SRC_READY:
3058 #if 1
3059 		port->hard_reset_count = 0;
3060 #endif
3061 		port->try_src_count = 0;
3062 
3063 		tcpm_swap_complete(port, 0);
3064 		tcpm_typec_connect(port);
3065 
3066 		tcpm_check_send_discover(port);
3067 		/*
3068 		 * 6.3.5
3069 		 * Sending ping messages is not necessary if
3070 		 * - the source operates at vSafe5V
3071 		 * or
3072 		 * - The system is not operating in PD mode
3073 		 * or
3074 		 * - Both partners are connected using a Type-C connector
3075 		 *
3076 		 * There is no actual need to send PD messages since the local
3077 		 * port type-c and the spec does not clearly say whether PD is
3078 		 * possible when type-c is connected to Type-A/B
3079 		 */
3080 		break;
3081 	case SRC_WAIT_NEW_CAPABILITIES:
3082 		/* Nothing to do... */
3083 		break;
3084 
3085 	/* SNK states */
3086 	case SNK_UNATTACHED:
3087 		if (!port->non_pd_role_swap)
3088 			tcpm_swap_complete(port, -ENOTCONN);
3089 		tcpm_pps_complete(port, -ENOTCONN);
3090 		tcpm_snk_detach(port);
3091 		if (tcpm_start_toggling(port, TYPEC_CC_RD)) {
3092 			tcpm_set_state(port, TOGGLING, 0);
3093 			break;
3094 		}
3095 		tcpm_set_cc(port, TYPEC_CC_RD);
3096 		if (port->port_type == TYPEC_PORT_DRP)
3097 			tcpm_set_state(port, SRC_UNATTACHED, PD_T_DRP_SRC);
3098 		break;
3099 	case SNK_ATTACH_WAIT:
3100 		if ((port->cc1 == TYPEC_CC_OPEN &&
3101 		     port->cc2 != TYPEC_CC_OPEN) ||
3102 		    (port->cc1 != TYPEC_CC_OPEN &&
3103 		     port->cc2 == TYPEC_CC_OPEN))
3104 			tcpm_set_state(port, SNK_DEBOUNCED,
3105 				       PD_T_CC_DEBOUNCE);
3106 		else if (tcpm_port_is_disconnected(port))
3107 			tcpm_set_state(port, SNK_UNATTACHED,
3108 				       PD_T_PD_DEBOUNCE);
3109 		break;
3110 	case SNK_DEBOUNCED:
3111 		if (tcpm_port_is_disconnected(port))
3112 			tcpm_set_state(port, SNK_UNATTACHED,
3113 				       PD_T_PD_DEBOUNCE);
3114 		else if (port->vbus_present)
3115 			tcpm_set_state(port,
3116 				       tcpm_try_src(port) ? SRC_TRY
3117 							  : SNK_ATTACHED,
3118 				       0);
3119 		else
3120 			/* Wait for VBUS, but not forever */
3121 			tcpm_set_state(port, PORT_RESET, PD_T_PS_SOURCE_ON);
3122 		break;
3123 
3124 	case SRC_TRY:
3125 		port->try_src_count++;
3126 		tcpm_set_cc(port, tcpm_rp_cc(port));
3127 		port->max_wait = 0;
3128 		tcpm_set_state(port, SRC_TRY_WAIT, 0);
3129 		break;
3130 	case SRC_TRY_WAIT:
3131 		if (port->max_wait == 0) {
3132 			port->max_wait = jiffies +
3133 					 msecs_to_jiffies(PD_T_DRP_TRY);
3134 			msecs = PD_T_DRP_TRY;
3135 		} else {
3136 			if (time_is_after_jiffies(port->max_wait))
3137 				msecs = jiffies_to_msecs(port->max_wait -
3138 							 jiffies);
3139 			else
3140 				msecs = 0;
3141 		}
3142 		tcpm_set_state(port, SNK_TRYWAIT, msecs);
3143 		break;
3144 	case SRC_TRY_DEBOUNCE:
3145 		tcpm_set_state(port, SRC_ATTACHED, PD_T_PD_DEBOUNCE);
3146 		break;
3147 	case SNK_TRYWAIT:
3148 		tcpm_set_cc(port, TYPEC_CC_RD);
3149 		tcpm_set_state(port, SNK_TRYWAIT_VBUS, PD_T_CC_DEBOUNCE);
3150 		break;
3151 	case SNK_TRYWAIT_VBUS:
3152 		/*
3153 		 * TCPM stays in this state indefinitely until VBUS
3154 		 * is detected as long as Rp is not detected for
3155 		 * more than a time period of tPDDebounce.
3156 		 */
3157 		if (port->vbus_present && tcpm_port_is_sink(port)) {
3158 			tcpm_set_state(port, SNK_ATTACHED, 0);
3159 			break;
3160 		}
3161 		if (!tcpm_port_is_sink(port))
3162 			tcpm_set_state(port, SNK_TRYWAIT_DEBOUNCE, 0);
3163 		break;
3164 	case SNK_TRYWAIT_DEBOUNCE:
3165 		tcpm_set_state(port, SNK_UNATTACHED, PD_T_PD_DEBOUNCE);
3166 		break;
3167 	case SNK_ATTACHED:
3168 		ret = tcpm_snk_attach(port);
3169 		if (ret < 0)
3170 			tcpm_set_state(port, SNK_UNATTACHED, 0);
3171 		else
3172 			tcpm_set_state(port, SNK_STARTUP, 0);
3173 		break;
3174 	case SNK_STARTUP:
3175 		opmode =  tcpm_get_pwr_opmode(port->polarity ?
3176 					      port->cc2 : port->cc1);
3177 		typec_set_pwr_opmode(port->typec_port, opmode);
3178 		port->pwr_opmode = TYPEC_PWR_MODE_USB;
3179 		port->negotiated_rev = PD_MAX_REV;
3180 		port->message_id = 0;
3181 		port->rx_msgid = -1;
3182 		port->explicit_contract = false;
3183 		tcpm_set_state(port, SNK_DISCOVERY, 0);
3184 		break;
3185 	case SNK_DISCOVERY:
3186 		if (port->vbus_present) {
3187 			tcpm_set_current_limit(port,
3188 					       tcpm_get_current_limit(port),
3189 					       5000);
3190 			tcpm_set_charge(port, true);
3191 			tcpm_set_state(port, SNK_WAIT_CAPABILITIES, 0);
3192 			break;
3193 		}
3194 		/*
3195 		 * For DRP, timeouts differ. Also, handling is supposed to be
3196 		 * different and much more complex (dead battery detection;
3197 		 * see USB power delivery specification, section 8.3.3.6.1.5.1).
3198 		 */
3199 		tcpm_set_state(port, hard_reset_state(port),
3200 			       port->port_type == TYPEC_PORT_DRP ?
3201 					PD_T_DB_DETECT : PD_T_NO_RESPONSE);
3202 		break;
3203 	case SNK_DISCOVERY_DEBOUNCE:
3204 		tcpm_set_state(port, SNK_DISCOVERY_DEBOUNCE_DONE,
3205 			       PD_T_CC_DEBOUNCE);
3206 		break;
3207 	case SNK_DISCOVERY_DEBOUNCE_DONE:
3208 		if (!tcpm_port_is_disconnected(port) &&
3209 		    tcpm_port_is_sink(port) &&
3210 		    time_is_after_jiffies(port->delayed_runtime)) {
3211 			tcpm_set_state(port, SNK_DISCOVERY,
3212 				       jiffies_to_msecs(port->delayed_runtime -
3213 							jiffies));
3214 			break;
3215 		}
3216 		tcpm_set_state(port, unattached_state(port), 0);
3217 		break;
3218 	case SNK_WAIT_CAPABILITIES:
3219 		ret = port->tcpc->set_pd_rx(port->tcpc, true);
3220 		if (ret < 0) {
3221 			tcpm_set_state(port, SNK_READY, 0);
3222 			break;
3223 		}
3224 		/*
3225 		 * If VBUS has never been low, and we time out waiting
3226 		 * for source cap, try a soft reset first, in case we
3227 		 * were already in a stable contract before this boot.
3228 		 * Do this only once.
3229 		 */
3230 		if (port->vbus_never_low) {
3231 			port->vbus_never_low = false;
3232 			tcpm_set_state(port, SOFT_RESET_SEND,
3233 				       PD_T_SINK_WAIT_CAP);
3234 		} else {
3235 			tcpm_set_state(port, hard_reset_state(port),
3236 				       PD_T_SINK_WAIT_CAP);
3237 		}
3238 		break;
3239 	case SNK_NEGOTIATE_CAPABILITIES:
3240 		port->pd_capable = true;
3241 		port->hard_reset_count = 0;
3242 		ret = tcpm_pd_send_request(port);
3243 		if (ret < 0) {
3244 			/* Let the Source send capabilities again. */
3245 			tcpm_set_state(port, SNK_WAIT_CAPABILITIES, 0);
3246 		} else {
3247 			tcpm_set_state_cond(port, hard_reset_state(port),
3248 					    PD_T_SENDER_RESPONSE);
3249 		}
3250 		break;
3251 	case SNK_NEGOTIATE_PPS_CAPABILITIES:
3252 		ret = tcpm_pd_send_pps_request(port);
3253 		if (ret < 0) {
3254 			port->pps_status = ret;
3255 			/*
3256 			 * If this was called due to updates to sink
3257 			 * capabilities, and pps is no longer valid, we should
3258 			 * safely fall back to a standard PDO.
3259 			 */
3260 			if (port->update_sink_caps)
3261 				tcpm_set_state(port, SNK_NEGOTIATE_CAPABILITIES, 0);
3262 			else
3263 				tcpm_set_state(port, SNK_READY, 0);
3264 		} else {
3265 			tcpm_set_state_cond(port, hard_reset_state(port),
3266 					    PD_T_SENDER_RESPONSE);
3267 		}
3268 		break;
3269 	case SNK_TRANSITION_SINK:
3270 	case SNK_TRANSITION_SINK_VBUS:
3271 		tcpm_set_state(port, hard_reset_state(port),
3272 			       PD_T_PS_TRANSITION);
3273 		break;
3274 	case SNK_READY:
3275 		port->try_snk_count = 0;
3276 		port->update_sink_caps = false;
3277 		if (port->explicit_contract) {
3278 			typec_set_pwr_opmode(port->typec_port,
3279 					     TYPEC_PWR_MODE_PD);
3280 			port->pwr_opmode = TYPEC_PWR_MODE_PD;
3281 		}
3282 
3283 		tcpm_swap_complete(port, 0);
3284 		tcpm_typec_connect(port);
3285 		tcpm_check_send_discover(port);
3286 		tcpm_pps_complete(port, port->pps_status);
3287 
3288 		power_supply_changed(port->psy);
3289 
3290 		break;
3291 
3292 	/* Accessory states */
3293 	case ACC_UNATTACHED:
3294 		tcpm_acc_detach(port);
3295 		tcpm_set_state(port, SRC_UNATTACHED, 0);
3296 		break;
3297 	case DEBUG_ACC_ATTACHED:
3298 	case AUDIO_ACC_ATTACHED:
3299 		ret = tcpm_acc_attach(port);
3300 		if (ret < 0)
3301 			tcpm_set_state(port, ACC_UNATTACHED, 0);
3302 		break;
3303 	case AUDIO_ACC_DEBOUNCE:
3304 		tcpm_set_state(port, ACC_UNATTACHED, PD_T_CC_DEBOUNCE);
3305 		break;
3306 
3307 	/* Hard_Reset states */
3308 	case HARD_RESET_SEND:
3309 		tcpm_pd_transmit(port, TCPC_TX_HARD_RESET, NULL);
3310 		tcpm_set_state(port, HARD_RESET_START, 0);
3311 		break;
3312 	case HARD_RESET_START:
3313 		port->hard_reset_count++;
3314 		port->tcpc->set_pd_rx(port->tcpc, false);
3315 		tcpm_unregister_altmodes(port);
3316 		port->send_discover = true;
3317 		if (port->pwr_role == TYPEC_SOURCE)
3318 			tcpm_set_state(port, SRC_HARD_RESET_VBUS_OFF,
3319 				       PD_T_PS_HARD_RESET);
3320 		else
3321 			tcpm_set_state(port, SNK_HARD_RESET_SINK_OFF, 0);
3322 		break;
3323 	case SRC_HARD_RESET_VBUS_OFF:
3324 		tcpm_set_vconn(port, true);
3325 		tcpm_set_vbus(port, false);
3326 		tcpm_set_roles(port, port->self_powered, TYPEC_SOURCE,
3327 			       tcpm_data_role_for_source(port));
3328 		tcpm_set_state(port, SRC_HARD_RESET_VBUS_ON, PD_T_SRC_RECOVER);
3329 		break;
3330 	case SRC_HARD_RESET_VBUS_ON:
3331 		tcpm_set_vbus(port, true);
3332 		port->tcpc->set_pd_rx(port->tcpc, true);
3333 		tcpm_set_attached_state(port, true);
3334 		tcpm_set_state(port, SRC_UNATTACHED, PD_T_PS_SOURCE_ON);
3335 		break;
3336 	case SNK_HARD_RESET_SINK_OFF:
3337 		memset(&port->pps_data, 0, sizeof(port->pps_data));
3338 		tcpm_set_vconn(port, false);
3339 		if (port->pd_capable)
3340 			tcpm_set_charge(port, false);
3341 		tcpm_set_roles(port, port->self_powered, TYPEC_SINK,
3342 			       tcpm_data_role_for_sink(port));
3343 		/*
3344 		 * VBUS may or may not toggle, depending on the adapter.
3345 		 * If it doesn't toggle, transition to SNK_HARD_RESET_SINK_ON
3346 		 * directly after timeout.
3347 		 */
3348 		tcpm_set_state(port, SNK_HARD_RESET_SINK_ON, PD_T_SAFE_0V);
3349 		break;
3350 	case SNK_HARD_RESET_WAIT_VBUS:
3351 		/* Assume we're disconnected if VBUS doesn't come back. */
3352 		tcpm_set_state(port, SNK_UNATTACHED,
3353 			       PD_T_SRC_RECOVER_MAX + PD_T_SRC_TURN_ON);
3354 		break;
3355 	case SNK_HARD_RESET_SINK_ON:
3356 		/* Note: There is no guarantee that VBUS is on in this state */
3357 		/*
3358 		 * XXX:
3359 		 * The specification suggests that dual mode ports in sink
3360 		 * mode should transition to state PE_SRC_Transition_to_default.
3361 		 * See USB power delivery specification chapter 8.3.3.6.1.3.
3362 		 * This would mean to to
3363 		 * - turn off VCONN, reset power supply
3364 		 * - request hardware reset
3365 		 * - turn on VCONN
3366 		 * - Transition to state PE_Src_Startup
3367 		 * SNK only ports shall transition to state Snk_Startup
3368 		 * (see chapter 8.3.3.3.8).
3369 		 * Similar, dual-mode ports in source mode should transition
3370 		 * to PE_SNK_Transition_to_default.
3371 		 */
3372 		if (port->pd_capable) {
3373 			tcpm_set_current_limit(port,
3374 					       tcpm_get_current_limit(port),
3375 					       5000);
3376 			tcpm_set_charge(port, true);
3377 		}
3378 		tcpm_set_attached_state(port, true);
3379 		tcpm_set_state(port, SNK_STARTUP, 0);
3380 		break;
3381 
3382 	/* Soft_Reset states */
3383 	case SOFT_RESET:
3384 		port->message_id = 0;
3385 		port->rx_msgid = -1;
3386 		tcpm_pd_send_control(port, PD_CTRL_ACCEPT);
3387 		if (port->pwr_role == TYPEC_SOURCE)
3388 			tcpm_set_state(port, SRC_SEND_CAPABILITIES, 0);
3389 		else
3390 			tcpm_set_state(port, SNK_WAIT_CAPABILITIES, 0);
3391 		break;
3392 	case SOFT_RESET_SEND:
3393 		port->message_id = 0;
3394 		port->rx_msgid = -1;
3395 		if (tcpm_pd_send_control(port, PD_CTRL_SOFT_RESET))
3396 			tcpm_set_state_cond(port, hard_reset_state(port), 0);
3397 		else
3398 			tcpm_set_state_cond(port, hard_reset_state(port),
3399 					    PD_T_SENDER_RESPONSE);
3400 		break;
3401 
3402 	/* DR_Swap states */
3403 	case DR_SWAP_SEND:
3404 		tcpm_pd_send_control(port, PD_CTRL_DR_SWAP);
3405 		tcpm_set_state_cond(port, DR_SWAP_SEND_TIMEOUT,
3406 				    PD_T_SENDER_RESPONSE);
3407 		break;
3408 	case DR_SWAP_ACCEPT:
3409 		tcpm_pd_send_control(port, PD_CTRL_ACCEPT);
3410 		tcpm_set_state_cond(port, DR_SWAP_CHANGE_DR, 0);
3411 		break;
3412 	case DR_SWAP_SEND_TIMEOUT:
3413 		tcpm_swap_complete(port, -ETIMEDOUT);
3414 		tcpm_set_state(port, ready_state(port), 0);
3415 		break;
3416 	case DR_SWAP_CHANGE_DR:
3417 		if (port->data_role == TYPEC_HOST) {
3418 			tcpm_unregister_altmodes(port);
3419 			tcpm_set_roles(port, true, port->pwr_role,
3420 				       TYPEC_DEVICE);
3421 		} else {
3422 			tcpm_set_roles(port, true, port->pwr_role,
3423 				       TYPEC_HOST);
3424 			port->send_discover = true;
3425 		}
3426 		tcpm_set_state(port, ready_state(port), 0);
3427 		break;
3428 
3429 	/* PR_Swap states */
3430 	case PR_SWAP_ACCEPT:
3431 		tcpm_pd_send_control(port, PD_CTRL_ACCEPT);
3432 		tcpm_set_state(port, PR_SWAP_START, 0);
3433 		break;
3434 	case PR_SWAP_SEND:
3435 		tcpm_pd_send_control(port, PD_CTRL_PR_SWAP);
3436 		tcpm_set_state_cond(port, PR_SWAP_SEND_TIMEOUT,
3437 				    PD_T_SENDER_RESPONSE);
3438 		break;
3439 	case PR_SWAP_SEND_TIMEOUT:
3440 		tcpm_swap_complete(port, -ETIMEDOUT);
3441 		tcpm_set_state(port, ready_state(port), 0);
3442 		break;
3443 	case PR_SWAP_START:
3444 		if (port->pwr_role == TYPEC_SOURCE)
3445 			tcpm_set_state(port, PR_SWAP_SRC_SNK_TRANSITION_OFF,
3446 				       PD_T_SRC_TRANSITION);
3447 		else
3448 			tcpm_set_state(port, PR_SWAP_SNK_SRC_SINK_OFF, 0);
3449 		break;
3450 	case PR_SWAP_SRC_SNK_TRANSITION_OFF:
3451 		tcpm_set_vbus(port, false);
3452 		port->explicit_contract = false;
3453 		/* allow time for Vbus discharge, must be < tSrcSwapStdby */
3454 		tcpm_set_state(port, PR_SWAP_SRC_SNK_SOURCE_OFF,
3455 			       PD_T_SRCSWAPSTDBY);
3456 		break;
3457 	case PR_SWAP_SRC_SNK_SOURCE_OFF:
3458 		tcpm_set_cc(port, TYPEC_CC_RD);
3459 		/* allow CC debounce */
3460 		tcpm_set_state(port, PR_SWAP_SRC_SNK_SOURCE_OFF_CC_DEBOUNCED,
3461 			       PD_T_CC_DEBOUNCE);
3462 		break;
3463 	case PR_SWAP_SRC_SNK_SOURCE_OFF_CC_DEBOUNCED:
3464 		/*
3465 		 * USB-PD standard, 6.2.1.4, Port Power Role:
3466 		 * "During the Power Role Swap Sequence, for the initial Source
3467 		 * Port, the Port Power Role field shall be set to Sink in the
3468 		 * PS_RDY Message indicating that the initial Source’s power
3469 		 * supply is turned off"
3470 		 */
3471 		tcpm_set_pwr_role(port, TYPEC_SINK);
3472 		if (tcpm_pd_send_control(port, PD_CTRL_PS_RDY)) {
3473 			tcpm_set_state(port, ERROR_RECOVERY, 0);
3474 			break;
3475 		}
3476 		tcpm_set_state_cond(port, SNK_UNATTACHED, PD_T_PS_SOURCE_ON);
3477 		break;
3478 	case PR_SWAP_SRC_SNK_SINK_ON:
3479 		tcpm_set_state(port, SNK_STARTUP, 0);
3480 		break;
3481 	case PR_SWAP_SNK_SRC_SINK_OFF:
3482 		tcpm_set_charge(port, false);
3483 		tcpm_set_state(port, hard_reset_state(port),
3484 			       PD_T_PS_SOURCE_OFF);
3485 		break;
3486 	case PR_SWAP_SNK_SRC_SOURCE_ON:
3487 		tcpm_set_cc(port, tcpm_rp_cc(port));
3488 		tcpm_set_vbus(port, true);
3489 		/*
3490 		 * allow time VBUS ramp-up, must be < tNewSrc
3491 		 * Also, this window overlaps with CC debounce as well.
3492 		 * So, Wait for the max of two which is PD_T_NEWSRC
3493 		 */
3494 		tcpm_set_state(port, PR_SWAP_SNK_SRC_SOURCE_ON_VBUS_RAMPED_UP,
3495 			       PD_T_NEWSRC);
3496 		break;
3497 	case PR_SWAP_SNK_SRC_SOURCE_ON_VBUS_RAMPED_UP:
3498 		/*
3499 		 * USB PD standard, 6.2.1.4:
3500 		 * "Subsequent Messages initiated by the Policy Engine,
3501 		 * such as the PS_RDY Message sent to indicate that Vbus
3502 		 * is ready, will have the Port Power Role field set to
3503 		 * Source."
3504 		 */
3505 		tcpm_set_pwr_role(port, TYPEC_SOURCE);
3506 		tcpm_pd_send_control(port, PD_CTRL_PS_RDY);
3507 		tcpm_set_state(port, SRC_STARTUP, 0);
3508 		break;
3509 
3510 	case VCONN_SWAP_ACCEPT:
3511 		tcpm_pd_send_control(port, PD_CTRL_ACCEPT);
3512 		tcpm_set_state(port, VCONN_SWAP_START, 0);
3513 		break;
3514 	case VCONN_SWAP_SEND:
3515 		tcpm_pd_send_control(port, PD_CTRL_VCONN_SWAP);
3516 		tcpm_set_state(port, VCONN_SWAP_SEND_TIMEOUT,
3517 			       PD_T_SENDER_RESPONSE);
3518 		break;
3519 	case VCONN_SWAP_SEND_TIMEOUT:
3520 		tcpm_swap_complete(port, -ETIMEDOUT);
3521 		tcpm_set_state(port, ready_state(port), 0);
3522 		break;
3523 	case VCONN_SWAP_START:
3524 		if (port->vconn_role == TYPEC_SOURCE)
3525 			tcpm_set_state(port, VCONN_SWAP_WAIT_FOR_VCONN, 0);
3526 		else
3527 			tcpm_set_state(port, VCONN_SWAP_TURN_ON_VCONN, 0);
3528 		break;
3529 	case VCONN_SWAP_WAIT_FOR_VCONN:
3530 		tcpm_set_state(port, hard_reset_state(port),
3531 			       PD_T_VCONN_SOURCE_ON);
3532 		break;
3533 	case VCONN_SWAP_TURN_ON_VCONN:
3534 		tcpm_set_vconn(port, true);
3535 		tcpm_pd_send_control(port, PD_CTRL_PS_RDY);
3536 		tcpm_set_state(port, ready_state(port), 0);
3537 		break;
3538 	case VCONN_SWAP_TURN_OFF_VCONN:
3539 		tcpm_set_vconn(port, false);
3540 		tcpm_set_state(port, ready_state(port), 0);
3541 		break;
3542 
3543 	case DR_SWAP_CANCEL:
3544 	case PR_SWAP_CANCEL:
3545 	case VCONN_SWAP_CANCEL:
3546 		tcpm_swap_complete(port, port->swap_status);
3547 		if (port->pwr_role == TYPEC_SOURCE)
3548 			tcpm_set_state(port, SRC_READY, 0);
3549 		else
3550 			tcpm_set_state(port, SNK_READY, 0);
3551 		break;
3552 
3553 	case BIST_RX:
3554 		switch (BDO_MODE_MASK(port->bist_request)) {
3555 		case BDO_MODE_CARRIER2:
3556 			tcpm_pd_transmit(port, TCPC_TX_BIST_MODE_2, NULL);
3557 			break;
3558 		default:
3559 			break;
3560 		}
3561 		/* Always switch to unattached state */
3562 		tcpm_set_state(port, unattached_state(port), 0);
3563 		break;
3564 	case GET_STATUS_SEND:
3565 		tcpm_pd_send_control(port, PD_CTRL_GET_STATUS);
3566 		tcpm_set_state(port, GET_STATUS_SEND_TIMEOUT,
3567 			       PD_T_SENDER_RESPONSE);
3568 		break;
3569 	case GET_STATUS_SEND_TIMEOUT:
3570 		tcpm_set_state(port, ready_state(port), 0);
3571 		break;
3572 	case GET_PPS_STATUS_SEND:
3573 		tcpm_pd_send_control(port, PD_CTRL_GET_PPS_STATUS);
3574 		tcpm_set_state(port, GET_PPS_STATUS_SEND_TIMEOUT,
3575 			       PD_T_SENDER_RESPONSE);
3576 		break;
3577 	case GET_PPS_STATUS_SEND_TIMEOUT:
3578 		tcpm_set_state(port, ready_state(port), 0);
3579 		break;
3580 	case ERROR_RECOVERY:
3581 		tcpm_swap_complete(port, -EPROTO);
3582 		tcpm_pps_complete(port, -EPROTO);
3583 		tcpm_set_state(port, PORT_RESET, 0);
3584 		break;
3585 	case PORT_RESET:
3586 		tcpm_reset_port(port);
3587 		tcpm_set_cc(port, TYPEC_CC_OPEN);
3588 		tcpm_set_state(port, PORT_RESET_WAIT_OFF,
3589 			       PD_T_ERROR_RECOVERY);
3590 		break;
3591 	case PORT_RESET_WAIT_OFF:
3592 		tcpm_set_state(port,
3593 			       tcpm_default_state(port),
3594 			       port->vbus_present ? PD_T_PS_SOURCE_OFF : 0);
3595 		break;
3596 	default:
3597 		WARN(1, "Unexpected port state %d\n", port->state);
3598 		break;
3599 	}
3600 }
3601 
3602 static void tcpm_state_machine_work(struct work_struct *work)
3603 {
3604 	struct tcpm_port *port = container_of(work, struct tcpm_port,
3605 					      state_machine.work);
3606 	enum tcpm_state prev_state;
3607 
3608 	mutex_lock(&port->lock);
3609 	port->state_machine_running = true;
3610 
3611 	if (port->queued_message && tcpm_send_queued_message(port))
3612 		goto done;
3613 
3614 	/* If we were queued due to a delayed state change, update it now */
3615 	if (port->delayed_state) {
3616 		tcpm_log(port, "state change %s -> %s [delayed %ld ms]",
3617 			 tcpm_states[port->state],
3618 			 tcpm_states[port->delayed_state], port->delay_ms);
3619 		port->prev_state = port->state;
3620 		port->state = port->delayed_state;
3621 		port->delayed_state = INVALID_STATE;
3622 	}
3623 
3624 	/*
3625 	 * Continue running as long as we have (non-delayed) state changes
3626 	 * to make.
3627 	 */
3628 	do {
3629 		prev_state = port->state;
3630 		run_state_machine(port);
3631 		if (port->queued_message)
3632 			tcpm_send_queued_message(port);
3633 	} while (port->state != prev_state && !port->delayed_state);
3634 
3635 done:
3636 	port->state_machine_running = false;
3637 	mutex_unlock(&port->lock);
3638 }
3639 
3640 static void _tcpm_cc_change(struct tcpm_port *port, enum typec_cc_status cc1,
3641 			    enum typec_cc_status cc2)
3642 {
3643 	enum typec_cc_status old_cc1, old_cc2;
3644 	enum tcpm_state new_state;
3645 
3646 	old_cc1 = port->cc1;
3647 	old_cc2 = port->cc2;
3648 	port->cc1 = cc1;
3649 	port->cc2 = cc2;
3650 
3651 	tcpm_log_force(port,
3652 		       "CC1: %u -> %u, CC2: %u -> %u [state %s, polarity %d, %s]",
3653 		       old_cc1, cc1, old_cc2, cc2, tcpm_states[port->state],
3654 		       port->polarity,
3655 		       tcpm_port_is_disconnected(port) ? "disconnected"
3656 						       : "connected");
3657 
3658 	switch (port->state) {
3659 	case TOGGLING:
3660 		if (tcpm_port_is_debug(port) || tcpm_port_is_audio(port) ||
3661 		    tcpm_port_is_source(port))
3662 			tcpm_set_state(port, SRC_ATTACH_WAIT, 0);
3663 		else if (tcpm_port_is_sink(port))
3664 			tcpm_set_state(port, SNK_ATTACH_WAIT, 0);
3665 		break;
3666 	case SRC_UNATTACHED:
3667 	case ACC_UNATTACHED:
3668 		if (tcpm_port_is_debug(port) || tcpm_port_is_audio(port) ||
3669 		    tcpm_port_is_source(port))
3670 			tcpm_set_state(port, SRC_ATTACH_WAIT, 0);
3671 		break;
3672 	case SRC_ATTACH_WAIT:
3673 		if (tcpm_port_is_disconnected(port) ||
3674 		    tcpm_port_is_audio_detached(port))
3675 			tcpm_set_state(port, SRC_UNATTACHED, 0);
3676 		else if (cc1 != old_cc1 || cc2 != old_cc2)
3677 			tcpm_set_state(port, SRC_ATTACH_WAIT, 0);
3678 		break;
3679 	case SRC_ATTACHED:
3680 	case SRC_SEND_CAPABILITIES:
3681 	case SRC_READY:
3682 		if (tcpm_port_is_disconnected(port) ||
3683 		    !tcpm_port_is_source(port)) {
3684 			if (port->port_type == TYPEC_PORT_SRC)
3685 				tcpm_set_state(port, SRC_UNATTACHED, 0);
3686 			else
3687 				tcpm_set_state(port, SNK_UNATTACHED, 0);
3688 		}
3689 		break;
3690 	case SNK_UNATTACHED:
3691 		if (tcpm_port_is_sink(port))
3692 			tcpm_set_state(port, SNK_ATTACH_WAIT, 0);
3693 		break;
3694 	case SNK_ATTACH_WAIT:
3695 		if ((port->cc1 == TYPEC_CC_OPEN &&
3696 		     port->cc2 != TYPEC_CC_OPEN) ||
3697 		    (port->cc1 != TYPEC_CC_OPEN &&
3698 		     port->cc2 == TYPEC_CC_OPEN))
3699 			new_state = SNK_DEBOUNCED;
3700 		else if (tcpm_port_is_disconnected(port))
3701 			new_state = SNK_UNATTACHED;
3702 		else
3703 			break;
3704 		if (new_state != port->delayed_state)
3705 			tcpm_set_state(port, SNK_ATTACH_WAIT, 0);
3706 		break;
3707 	case SNK_DEBOUNCED:
3708 		if (tcpm_port_is_disconnected(port))
3709 			new_state = SNK_UNATTACHED;
3710 		else if (port->vbus_present)
3711 			new_state = tcpm_try_src(port) ? SRC_TRY : SNK_ATTACHED;
3712 		else
3713 			new_state = SNK_UNATTACHED;
3714 		if (new_state != port->delayed_state)
3715 			tcpm_set_state(port, SNK_DEBOUNCED, 0);
3716 		break;
3717 	case SNK_READY:
3718 		if (tcpm_port_is_disconnected(port))
3719 			tcpm_set_state(port, unattached_state(port), 0);
3720 		else if (!port->pd_capable &&
3721 			 (cc1 != old_cc1 || cc2 != old_cc2))
3722 			tcpm_set_current_limit(port,
3723 					       tcpm_get_current_limit(port),
3724 					       5000);
3725 		break;
3726 
3727 	case AUDIO_ACC_ATTACHED:
3728 		if (cc1 == TYPEC_CC_OPEN || cc2 == TYPEC_CC_OPEN)
3729 			tcpm_set_state(port, AUDIO_ACC_DEBOUNCE, 0);
3730 		break;
3731 	case AUDIO_ACC_DEBOUNCE:
3732 		if (tcpm_port_is_audio(port))
3733 			tcpm_set_state(port, AUDIO_ACC_ATTACHED, 0);
3734 		break;
3735 
3736 	case DEBUG_ACC_ATTACHED:
3737 		if (cc1 == TYPEC_CC_OPEN || cc2 == TYPEC_CC_OPEN)
3738 			tcpm_set_state(port, ACC_UNATTACHED, 0);
3739 		break;
3740 
3741 	case SNK_TRY:
3742 		/* Do nothing, waiting for timeout */
3743 		break;
3744 
3745 	case SNK_DISCOVERY:
3746 		/* CC line is unstable, wait for debounce */
3747 		if (tcpm_port_is_disconnected(port))
3748 			tcpm_set_state(port, SNK_DISCOVERY_DEBOUNCE, 0);
3749 		break;
3750 	case SNK_DISCOVERY_DEBOUNCE:
3751 		break;
3752 
3753 	case SRC_TRYWAIT:
3754 		/* Hand over to state machine if needed */
3755 		if (!port->vbus_present && tcpm_port_is_source(port))
3756 			tcpm_set_state(port, SRC_TRYWAIT_DEBOUNCE, 0);
3757 		break;
3758 	case SRC_TRYWAIT_DEBOUNCE:
3759 		if (port->vbus_present || !tcpm_port_is_source(port))
3760 			tcpm_set_state(port, SRC_TRYWAIT, 0);
3761 		break;
3762 	case SNK_TRY_WAIT_DEBOUNCE:
3763 		if (!tcpm_port_is_sink(port)) {
3764 			port->max_wait = 0;
3765 			tcpm_set_state(port, SRC_TRYWAIT, 0);
3766 		}
3767 		break;
3768 	case SRC_TRY_WAIT:
3769 		if (tcpm_port_is_source(port))
3770 			tcpm_set_state(port, SRC_TRY_DEBOUNCE, 0);
3771 		break;
3772 	case SRC_TRY_DEBOUNCE:
3773 		tcpm_set_state(port, SRC_TRY_WAIT, 0);
3774 		break;
3775 	case SNK_TRYWAIT_DEBOUNCE:
3776 		if (tcpm_port_is_sink(port))
3777 			tcpm_set_state(port, SNK_TRYWAIT_VBUS, 0);
3778 		break;
3779 	case SNK_TRYWAIT_VBUS:
3780 		if (!tcpm_port_is_sink(port))
3781 			tcpm_set_state(port, SNK_TRYWAIT_DEBOUNCE, 0);
3782 		break;
3783 	case SNK_TRYWAIT:
3784 		/* Do nothing, waiting for tCCDebounce */
3785 		break;
3786 	case PR_SWAP_SNK_SRC_SINK_OFF:
3787 	case PR_SWAP_SRC_SNK_TRANSITION_OFF:
3788 	case PR_SWAP_SRC_SNK_SOURCE_OFF:
3789 	case PR_SWAP_SRC_SNK_SOURCE_OFF_CC_DEBOUNCED:
3790 	case PR_SWAP_SNK_SRC_SOURCE_ON:
3791 		/*
3792 		 * CC state change is expected in PR_SWAP
3793 		 * Ignore it.
3794 		 */
3795 		break;
3796 
3797 	default:
3798 		if (tcpm_port_is_disconnected(port))
3799 			tcpm_set_state(port, unattached_state(port), 0);
3800 		break;
3801 	}
3802 }
3803 
3804 static void _tcpm_pd_vbus_on(struct tcpm_port *port)
3805 {
3806 	tcpm_log_force(port, "VBUS on");
3807 	port->vbus_present = true;
3808 	switch (port->state) {
3809 	case SNK_TRANSITION_SINK_VBUS:
3810 		port->explicit_contract = true;
3811 		tcpm_set_state(port, SNK_READY, 0);
3812 		break;
3813 	case SNK_DISCOVERY:
3814 		tcpm_set_state(port, SNK_DISCOVERY, 0);
3815 		break;
3816 
3817 	case SNK_DEBOUNCED:
3818 		tcpm_set_state(port, tcpm_try_src(port) ? SRC_TRY
3819 							: SNK_ATTACHED,
3820 				       0);
3821 		break;
3822 	case SNK_HARD_RESET_WAIT_VBUS:
3823 		tcpm_set_state(port, SNK_HARD_RESET_SINK_ON, 0);
3824 		break;
3825 	case SRC_ATTACHED:
3826 		tcpm_set_state(port, SRC_STARTUP, 0);
3827 		break;
3828 	case SRC_HARD_RESET_VBUS_ON:
3829 		tcpm_set_state(port, SRC_STARTUP, 0);
3830 		break;
3831 
3832 	case SNK_TRY:
3833 		/* Do nothing, waiting for timeout */
3834 		break;
3835 	case SRC_TRYWAIT:
3836 		/* Do nothing, Waiting for Rd to be detected */
3837 		break;
3838 	case SRC_TRYWAIT_DEBOUNCE:
3839 		tcpm_set_state(port, SRC_TRYWAIT, 0);
3840 		break;
3841 	case SNK_TRY_WAIT_DEBOUNCE:
3842 		/* Do nothing, waiting for PD_DEBOUNCE to do be done */
3843 		break;
3844 	case SNK_TRYWAIT:
3845 		/* Do nothing, waiting for tCCDebounce */
3846 		break;
3847 	case SNK_TRYWAIT_VBUS:
3848 		if (tcpm_port_is_sink(port))
3849 			tcpm_set_state(port, SNK_ATTACHED, 0);
3850 		break;
3851 	case SNK_TRYWAIT_DEBOUNCE:
3852 		/* Do nothing, waiting for Rp */
3853 		break;
3854 	case SRC_TRY_WAIT:
3855 	case SRC_TRY_DEBOUNCE:
3856 		/* Do nothing, waiting for sink detection */
3857 		break;
3858 	default:
3859 		break;
3860 	}
3861 }
3862 
3863 static void _tcpm_pd_vbus_off(struct tcpm_port *port)
3864 {
3865 	tcpm_log_force(port, "VBUS off");
3866 	port->vbus_present = false;
3867 	port->vbus_never_low = false;
3868 	switch (port->state) {
3869 	case SNK_HARD_RESET_SINK_OFF:
3870 		tcpm_set_state(port, SNK_HARD_RESET_WAIT_VBUS, 0);
3871 		break;
3872 	case SRC_HARD_RESET_VBUS_OFF:
3873 		tcpm_set_state(port, SRC_HARD_RESET_VBUS_ON, 0);
3874 		break;
3875 	case HARD_RESET_SEND:
3876 		break;
3877 
3878 	case SNK_TRY:
3879 		/* Do nothing, waiting for timeout */
3880 		break;
3881 	case SRC_TRYWAIT:
3882 		/* Hand over to state machine if needed */
3883 		if (tcpm_port_is_source(port))
3884 			tcpm_set_state(port, SRC_TRYWAIT_DEBOUNCE, 0);
3885 		break;
3886 	case SNK_TRY_WAIT_DEBOUNCE:
3887 		/* Do nothing, waiting for PD_DEBOUNCE to do be done */
3888 		break;
3889 	case SNK_TRYWAIT:
3890 	case SNK_TRYWAIT_VBUS:
3891 	case SNK_TRYWAIT_DEBOUNCE:
3892 		break;
3893 	case SNK_ATTACH_WAIT:
3894 		tcpm_set_state(port, SNK_UNATTACHED, 0);
3895 		break;
3896 
3897 	case SNK_NEGOTIATE_CAPABILITIES:
3898 		break;
3899 
3900 	case PR_SWAP_SRC_SNK_TRANSITION_OFF:
3901 		tcpm_set_state(port, PR_SWAP_SRC_SNK_SOURCE_OFF, 0);
3902 		break;
3903 
3904 	case PR_SWAP_SNK_SRC_SINK_OFF:
3905 		/* Do nothing, expected */
3906 		break;
3907 
3908 	case PORT_RESET_WAIT_OFF:
3909 		tcpm_set_state(port, tcpm_default_state(port), 0);
3910 		break;
3911 	case SRC_TRY_WAIT:
3912 	case SRC_TRY_DEBOUNCE:
3913 		/* Do nothing, waiting for sink detection */
3914 		break;
3915 	default:
3916 		if (port->pwr_role == TYPEC_SINK &&
3917 		    port->attached)
3918 			tcpm_set_state(port, SNK_UNATTACHED, 0);
3919 		break;
3920 	}
3921 }
3922 
3923 static void _tcpm_pd_hard_reset(struct tcpm_port *port)
3924 {
3925 	tcpm_log_force(port, "Received hard reset");
3926 	/*
3927 	 * If we keep receiving hard reset requests, executing the hard reset
3928 	 * must have failed. Revert to error recovery if that happens.
3929 	 */
3930 	tcpm_set_state(port,
3931 		       port->hard_reset_count < PD_N_HARD_RESET_COUNT ?
3932 				HARD_RESET_START : ERROR_RECOVERY,
3933 		       0);
3934 }
3935 
3936 static void tcpm_pd_event_handler(struct work_struct *work)
3937 {
3938 	struct tcpm_port *port = container_of(work, struct tcpm_port,
3939 					      event_work);
3940 	u32 events;
3941 
3942 	mutex_lock(&port->lock);
3943 
3944 	spin_lock(&port->pd_event_lock);
3945 	while (port->pd_events) {
3946 		events = port->pd_events;
3947 		port->pd_events = 0;
3948 		spin_unlock(&port->pd_event_lock);
3949 		if (events & TCPM_RESET_EVENT)
3950 			_tcpm_pd_hard_reset(port);
3951 		if (events & TCPM_VBUS_EVENT) {
3952 			bool vbus;
3953 
3954 			vbus = port->tcpc->get_vbus(port->tcpc);
3955 			if (vbus)
3956 				_tcpm_pd_vbus_on(port);
3957 			else
3958 				_tcpm_pd_vbus_off(port);
3959 		}
3960 		if (events & TCPM_CC_EVENT) {
3961 			enum typec_cc_status cc1, cc2;
3962 
3963 			if (port->tcpc->get_cc(port->tcpc, &cc1, &cc2) == 0)
3964 				_tcpm_cc_change(port, cc1, cc2);
3965 		}
3966 		spin_lock(&port->pd_event_lock);
3967 	}
3968 	spin_unlock(&port->pd_event_lock);
3969 	mutex_unlock(&port->lock);
3970 }
3971 
3972 void tcpm_cc_change(struct tcpm_port *port)
3973 {
3974 	spin_lock(&port->pd_event_lock);
3975 	port->pd_events |= TCPM_CC_EVENT;
3976 	spin_unlock(&port->pd_event_lock);
3977 	queue_work(port->wq, &port->event_work);
3978 }
3979 EXPORT_SYMBOL_GPL(tcpm_cc_change);
3980 
3981 void tcpm_vbus_change(struct tcpm_port *port)
3982 {
3983 	spin_lock(&port->pd_event_lock);
3984 	port->pd_events |= TCPM_VBUS_EVENT;
3985 	spin_unlock(&port->pd_event_lock);
3986 	queue_work(port->wq, &port->event_work);
3987 }
3988 EXPORT_SYMBOL_GPL(tcpm_vbus_change);
3989 
3990 void tcpm_pd_hard_reset(struct tcpm_port *port)
3991 {
3992 	spin_lock(&port->pd_event_lock);
3993 	port->pd_events = TCPM_RESET_EVENT;
3994 	spin_unlock(&port->pd_event_lock);
3995 	queue_work(port->wq, &port->event_work);
3996 }
3997 EXPORT_SYMBOL_GPL(tcpm_pd_hard_reset);
3998 
3999 static int tcpm_dr_set(struct typec_port *p, enum typec_data_role data)
4000 {
4001 	struct tcpm_port *port = typec_get_drvdata(p);
4002 	int ret;
4003 
4004 	mutex_lock(&port->swap_lock);
4005 	mutex_lock(&port->lock);
4006 
4007 	if (port->typec_caps.data != TYPEC_PORT_DRD) {
4008 		ret = -EINVAL;
4009 		goto port_unlock;
4010 	}
4011 	if (port->state != SRC_READY && port->state != SNK_READY) {
4012 		ret = -EAGAIN;
4013 		goto port_unlock;
4014 	}
4015 
4016 	if (port->data_role == data) {
4017 		ret = 0;
4018 		goto port_unlock;
4019 	}
4020 
4021 	/*
4022 	 * XXX
4023 	 * 6.3.9: If an alternate mode is active, a request to swap
4024 	 * alternate modes shall trigger a port reset.
4025 	 * Reject data role swap request in this case.
4026 	 */
4027 
4028 	if (!port->pd_capable) {
4029 		/*
4030 		 * If the partner is not PD capable, reset the port to
4031 		 * trigger a role change. This can only work if a preferred
4032 		 * role is configured, and if it matches the requested role.
4033 		 */
4034 		if (port->try_role == TYPEC_NO_PREFERRED_ROLE ||
4035 		    port->try_role == port->pwr_role) {
4036 			ret = -EINVAL;
4037 			goto port_unlock;
4038 		}
4039 		port->non_pd_role_swap = true;
4040 		tcpm_set_state(port, PORT_RESET, 0);
4041 	} else {
4042 		tcpm_set_state(port, DR_SWAP_SEND, 0);
4043 	}
4044 
4045 	port->swap_status = 0;
4046 	port->swap_pending = true;
4047 	reinit_completion(&port->swap_complete);
4048 	mutex_unlock(&port->lock);
4049 
4050 	if (!wait_for_completion_timeout(&port->swap_complete,
4051 				msecs_to_jiffies(PD_ROLE_SWAP_TIMEOUT)))
4052 		ret = -ETIMEDOUT;
4053 	else
4054 		ret = port->swap_status;
4055 
4056 	port->non_pd_role_swap = false;
4057 	goto swap_unlock;
4058 
4059 port_unlock:
4060 	mutex_unlock(&port->lock);
4061 swap_unlock:
4062 	mutex_unlock(&port->swap_lock);
4063 	return ret;
4064 }
4065 
4066 static int tcpm_pr_set(struct typec_port *p, enum typec_role role)
4067 {
4068 	struct tcpm_port *port = typec_get_drvdata(p);
4069 	int ret;
4070 
4071 	mutex_lock(&port->swap_lock);
4072 	mutex_lock(&port->lock);
4073 
4074 	if (port->port_type != TYPEC_PORT_DRP) {
4075 		ret = -EINVAL;
4076 		goto port_unlock;
4077 	}
4078 	if (port->state != SRC_READY && port->state != SNK_READY) {
4079 		ret = -EAGAIN;
4080 		goto port_unlock;
4081 	}
4082 
4083 	if (role == port->pwr_role) {
4084 		ret = 0;
4085 		goto port_unlock;
4086 	}
4087 
4088 	port->swap_status = 0;
4089 	port->swap_pending = true;
4090 	reinit_completion(&port->swap_complete);
4091 	tcpm_set_state(port, PR_SWAP_SEND, 0);
4092 	mutex_unlock(&port->lock);
4093 
4094 	if (!wait_for_completion_timeout(&port->swap_complete,
4095 				msecs_to_jiffies(PD_ROLE_SWAP_TIMEOUT)))
4096 		ret = -ETIMEDOUT;
4097 	else
4098 		ret = port->swap_status;
4099 
4100 	goto swap_unlock;
4101 
4102 port_unlock:
4103 	mutex_unlock(&port->lock);
4104 swap_unlock:
4105 	mutex_unlock(&port->swap_lock);
4106 	return ret;
4107 }
4108 
4109 static int tcpm_vconn_set(struct typec_port *p, enum typec_role role)
4110 {
4111 	struct tcpm_port *port = typec_get_drvdata(p);
4112 	int ret;
4113 
4114 	mutex_lock(&port->swap_lock);
4115 	mutex_lock(&port->lock);
4116 
4117 	if (port->state != SRC_READY && port->state != SNK_READY) {
4118 		ret = -EAGAIN;
4119 		goto port_unlock;
4120 	}
4121 
4122 	if (role == port->vconn_role) {
4123 		ret = 0;
4124 		goto port_unlock;
4125 	}
4126 
4127 	port->swap_status = 0;
4128 	port->swap_pending = true;
4129 	reinit_completion(&port->swap_complete);
4130 	tcpm_set_state(port, VCONN_SWAP_SEND, 0);
4131 	mutex_unlock(&port->lock);
4132 
4133 	if (!wait_for_completion_timeout(&port->swap_complete,
4134 				msecs_to_jiffies(PD_ROLE_SWAP_TIMEOUT)))
4135 		ret = -ETIMEDOUT;
4136 	else
4137 		ret = port->swap_status;
4138 
4139 	goto swap_unlock;
4140 
4141 port_unlock:
4142 	mutex_unlock(&port->lock);
4143 swap_unlock:
4144 	mutex_unlock(&port->swap_lock);
4145 	return ret;
4146 }
4147 
4148 static int tcpm_try_role(struct typec_port *p, int role)
4149 {
4150 	struct tcpm_port *port = typec_get_drvdata(p);
4151 	struct tcpc_dev	*tcpc = port->tcpc;
4152 	int ret = 0;
4153 
4154 	mutex_lock(&port->lock);
4155 	if (tcpc->try_role)
4156 		ret = tcpc->try_role(tcpc, role);
4157 	if (!ret)
4158 		port->try_role = role;
4159 	port->try_src_count = 0;
4160 	port->try_snk_count = 0;
4161 	mutex_unlock(&port->lock);
4162 
4163 	return ret;
4164 }
4165 
4166 static int tcpm_pps_set_op_curr(struct tcpm_port *port, u16 op_curr)
4167 {
4168 	unsigned int target_mw;
4169 	int ret;
4170 
4171 	mutex_lock(&port->swap_lock);
4172 	mutex_lock(&port->lock);
4173 
4174 	if (!port->pps_data.active) {
4175 		ret = -EOPNOTSUPP;
4176 		goto port_unlock;
4177 	}
4178 
4179 	if (port->state != SNK_READY) {
4180 		ret = -EAGAIN;
4181 		goto port_unlock;
4182 	}
4183 
4184 	if (op_curr > port->pps_data.max_curr) {
4185 		ret = -EINVAL;
4186 		goto port_unlock;
4187 	}
4188 
4189 	target_mw = (op_curr * port->pps_data.out_volt) / 1000;
4190 	if (target_mw < port->operating_snk_mw) {
4191 		ret = -EINVAL;
4192 		goto port_unlock;
4193 	}
4194 
4195 	/* Round down operating current to align with PPS valid steps */
4196 	op_curr = op_curr - (op_curr % RDO_PROG_CURR_MA_STEP);
4197 
4198 	reinit_completion(&port->pps_complete);
4199 	port->pps_data.op_curr = op_curr;
4200 	port->pps_status = 0;
4201 	port->pps_pending = true;
4202 	tcpm_set_state(port, SNK_NEGOTIATE_PPS_CAPABILITIES, 0);
4203 	mutex_unlock(&port->lock);
4204 
4205 	if (!wait_for_completion_timeout(&port->pps_complete,
4206 				msecs_to_jiffies(PD_PPS_CTRL_TIMEOUT)))
4207 		ret = -ETIMEDOUT;
4208 	else
4209 		ret = port->pps_status;
4210 
4211 	goto swap_unlock;
4212 
4213 port_unlock:
4214 	mutex_unlock(&port->lock);
4215 swap_unlock:
4216 	mutex_unlock(&port->swap_lock);
4217 
4218 	return ret;
4219 }
4220 
4221 static int tcpm_pps_set_out_volt(struct tcpm_port *port, u16 out_volt)
4222 {
4223 	unsigned int target_mw;
4224 	int ret;
4225 
4226 	mutex_lock(&port->swap_lock);
4227 	mutex_lock(&port->lock);
4228 
4229 	if (!port->pps_data.active) {
4230 		ret = -EOPNOTSUPP;
4231 		goto port_unlock;
4232 	}
4233 
4234 	if (port->state != SNK_READY) {
4235 		ret = -EAGAIN;
4236 		goto port_unlock;
4237 	}
4238 
4239 	if (out_volt < port->pps_data.min_volt ||
4240 	    out_volt > port->pps_data.max_volt) {
4241 		ret = -EINVAL;
4242 		goto port_unlock;
4243 	}
4244 
4245 	target_mw = (port->pps_data.op_curr * out_volt) / 1000;
4246 	if (target_mw < port->operating_snk_mw) {
4247 		ret = -EINVAL;
4248 		goto port_unlock;
4249 	}
4250 
4251 	/* Round down output voltage to align with PPS valid steps */
4252 	out_volt = out_volt - (out_volt % RDO_PROG_VOLT_MV_STEP);
4253 
4254 	reinit_completion(&port->pps_complete);
4255 	port->pps_data.out_volt = out_volt;
4256 	port->pps_status = 0;
4257 	port->pps_pending = true;
4258 	tcpm_set_state(port, SNK_NEGOTIATE_PPS_CAPABILITIES, 0);
4259 	mutex_unlock(&port->lock);
4260 
4261 	if (!wait_for_completion_timeout(&port->pps_complete,
4262 				msecs_to_jiffies(PD_PPS_CTRL_TIMEOUT)))
4263 		ret = -ETIMEDOUT;
4264 	else
4265 		ret = port->pps_status;
4266 
4267 	goto swap_unlock;
4268 
4269 port_unlock:
4270 	mutex_unlock(&port->lock);
4271 swap_unlock:
4272 	mutex_unlock(&port->swap_lock);
4273 
4274 	return ret;
4275 }
4276 
4277 static int tcpm_pps_activate(struct tcpm_port *port, bool activate)
4278 {
4279 	int ret = 0;
4280 
4281 	mutex_lock(&port->swap_lock);
4282 	mutex_lock(&port->lock);
4283 
4284 	if (!port->pps_data.supported) {
4285 		ret = -EOPNOTSUPP;
4286 		goto port_unlock;
4287 	}
4288 
4289 	/* Trying to deactivate PPS when already deactivated so just bail */
4290 	if (!port->pps_data.active && !activate)
4291 		goto port_unlock;
4292 
4293 	if (port->state != SNK_READY) {
4294 		ret = -EAGAIN;
4295 		goto port_unlock;
4296 	}
4297 
4298 	reinit_completion(&port->pps_complete);
4299 	port->pps_status = 0;
4300 	port->pps_pending = true;
4301 
4302 	/* Trigger PPS request or move back to standard PDO contract */
4303 	if (activate) {
4304 		port->pps_data.out_volt = port->supply_voltage;
4305 		port->pps_data.op_curr = port->current_limit;
4306 		tcpm_set_state(port, SNK_NEGOTIATE_PPS_CAPABILITIES, 0);
4307 	} else {
4308 		tcpm_set_state(port, SNK_NEGOTIATE_CAPABILITIES, 0);
4309 	}
4310 	mutex_unlock(&port->lock);
4311 
4312 	if (!wait_for_completion_timeout(&port->pps_complete,
4313 				msecs_to_jiffies(PD_PPS_CTRL_TIMEOUT)))
4314 		ret = -ETIMEDOUT;
4315 	else
4316 		ret = port->pps_status;
4317 
4318 	goto swap_unlock;
4319 
4320 port_unlock:
4321 	mutex_unlock(&port->lock);
4322 swap_unlock:
4323 	mutex_unlock(&port->swap_lock);
4324 
4325 	return ret;
4326 }
4327 
4328 static void tcpm_init(struct tcpm_port *port)
4329 {
4330 	enum typec_cc_status cc1, cc2;
4331 
4332 	port->tcpc->init(port->tcpc);
4333 
4334 	tcpm_reset_port(port);
4335 
4336 	/*
4337 	 * XXX
4338 	 * Should possibly wait for VBUS to settle if it was enabled locally
4339 	 * since tcpm_reset_port() will disable VBUS.
4340 	 */
4341 	port->vbus_present = port->tcpc->get_vbus(port->tcpc);
4342 	if (port->vbus_present)
4343 		port->vbus_never_low = true;
4344 
4345 	tcpm_set_state(port, tcpm_default_state(port), 0);
4346 
4347 	if (port->tcpc->get_cc(port->tcpc, &cc1, &cc2) == 0)
4348 		_tcpm_cc_change(port, cc1, cc2);
4349 
4350 	/*
4351 	 * Some adapters need a clean slate at startup, and won't recover
4352 	 * otherwise. So do not try to be fancy and force a clean disconnect.
4353 	 */
4354 	tcpm_set_state(port, PORT_RESET, 0);
4355 }
4356 
4357 static int tcpm_port_type_set(struct typec_port *p, enum typec_port_type type)
4358 {
4359 	struct tcpm_port *port = typec_get_drvdata(p);
4360 
4361 	mutex_lock(&port->lock);
4362 	if (type == port->port_type)
4363 		goto port_unlock;
4364 
4365 	port->port_type = type;
4366 
4367 	if (!port->connected) {
4368 		tcpm_set_state(port, PORT_RESET, 0);
4369 	} else if (type == TYPEC_PORT_SNK) {
4370 		if (!(port->pwr_role == TYPEC_SINK &&
4371 		      port->data_role == TYPEC_DEVICE))
4372 			tcpm_set_state(port, PORT_RESET, 0);
4373 	} else if (type == TYPEC_PORT_SRC) {
4374 		if (!(port->pwr_role == TYPEC_SOURCE &&
4375 		      port->data_role == TYPEC_HOST))
4376 			tcpm_set_state(port, PORT_RESET, 0);
4377 	}
4378 
4379 port_unlock:
4380 	mutex_unlock(&port->lock);
4381 	return 0;
4382 }
4383 
4384 static const struct typec_operations tcpm_ops = {
4385 	.try_role = tcpm_try_role,
4386 	.dr_set = tcpm_dr_set,
4387 	.pr_set = tcpm_pr_set,
4388 	.vconn_set = tcpm_vconn_set,
4389 	.port_type_set = tcpm_port_type_set
4390 };
4391 
4392 void tcpm_tcpc_reset(struct tcpm_port *port)
4393 {
4394 	mutex_lock(&port->lock);
4395 	/* XXX: Maintain PD connection if possible? */
4396 	tcpm_init(port);
4397 	mutex_unlock(&port->lock);
4398 }
4399 EXPORT_SYMBOL_GPL(tcpm_tcpc_reset);
4400 
4401 static int tcpm_fw_get_caps(struct tcpm_port *port,
4402 			    struct fwnode_handle *fwnode)
4403 {
4404 	const char *cap_str;
4405 	int ret;
4406 	u32 mw;
4407 
4408 	if (!fwnode)
4409 		return -EINVAL;
4410 
4411 	/* USB data support is optional */
4412 	ret = fwnode_property_read_string(fwnode, "data-role", &cap_str);
4413 	if (ret == 0) {
4414 		ret = typec_find_port_data_role(cap_str);
4415 		if (ret < 0)
4416 			return ret;
4417 		port->typec_caps.data = ret;
4418 	}
4419 
4420 	ret = fwnode_property_read_string(fwnode, "power-role", &cap_str);
4421 	if (ret < 0)
4422 		return ret;
4423 
4424 	ret = typec_find_port_power_role(cap_str);
4425 	if (ret < 0)
4426 		return ret;
4427 	port->typec_caps.type = ret;
4428 	port->port_type = port->typec_caps.type;
4429 
4430 	if (port->port_type == TYPEC_PORT_SNK)
4431 		goto sink;
4432 
4433 	/* Get source pdos */
4434 	ret = fwnode_property_count_u32(fwnode, "source-pdos");
4435 	if (ret <= 0)
4436 		return -EINVAL;
4437 
4438 	port->nr_src_pdo = min(ret, PDO_MAX_OBJECTS);
4439 	ret = fwnode_property_read_u32_array(fwnode, "source-pdos",
4440 					     port->src_pdo, port->nr_src_pdo);
4441 	if ((ret < 0) || tcpm_validate_caps(port, port->src_pdo,
4442 					    port->nr_src_pdo))
4443 		return -EINVAL;
4444 
4445 	if (port->port_type == TYPEC_PORT_SRC)
4446 		return 0;
4447 
4448 	/* Get the preferred power role for DRP */
4449 	ret = fwnode_property_read_string(fwnode, "try-power-role", &cap_str);
4450 	if (ret < 0)
4451 		return ret;
4452 
4453 	port->typec_caps.prefer_role = typec_find_power_role(cap_str);
4454 	if (port->typec_caps.prefer_role < 0)
4455 		return -EINVAL;
4456 sink:
4457 	/* Get sink pdos */
4458 	ret = fwnode_property_count_u32(fwnode, "sink-pdos");
4459 	if (ret <= 0)
4460 		return -EINVAL;
4461 
4462 	port->nr_snk_pdo = min(ret, PDO_MAX_OBJECTS);
4463 	ret = fwnode_property_read_u32_array(fwnode, "sink-pdos",
4464 					     port->snk_pdo, port->nr_snk_pdo);
4465 	if ((ret < 0) || tcpm_validate_caps(port, port->snk_pdo,
4466 					    port->nr_snk_pdo))
4467 		return -EINVAL;
4468 
4469 	if (fwnode_property_read_u32(fwnode, "op-sink-microwatt", &mw) < 0)
4470 		return -EINVAL;
4471 	port->operating_snk_mw = mw / 1000;
4472 
4473 	port->self_powered = fwnode_property_read_bool(fwnode, "self-powered");
4474 
4475 	return 0;
4476 }
4477 
4478 /* Power Supply access to expose source power information */
4479 enum tcpm_psy_online_states {
4480 	TCPM_PSY_OFFLINE = 0,
4481 	TCPM_PSY_FIXED_ONLINE,
4482 	TCPM_PSY_PROG_ONLINE,
4483 };
4484 
4485 static enum power_supply_property tcpm_psy_props[] = {
4486 	POWER_SUPPLY_PROP_USB_TYPE,
4487 	POWER_SUPPLY_PROP_ONLINE,
4488 	POWER_SUPPLY_PROP_VOLTAGE_MIN,
4489 	POWER_SUPPLY_PROP_VOLTAGE_MAX,
4490 	POWER_SUPPLY_PROP_VOLTAGE_NOW,
4491 	POWER_SUPPLY_PROP_CURRENT_MAX,
4492 	POWER_SUPPLY_PROP_CURRENT_NOW,
4493 };
4494 
4495 static int tcpm_psy_get_online(struct tcpm_port *port,
4496 			       union power_supply_propval *val)
4497 {
4498 	if (port->vbus_charge) {
4499 		if (port->pps_data.active)
4500 			val->intval = TCPM_PSY_PROG_ONLINE;
4501 		else
4502 			val->intval = TCPM_PSY_FIXED_ONLINE;
4503 	} else {
4504 		val->intval = TCPM_PSY_OFFLINE;
4505 	}
4506 
4507 	return 0;
4508 }
4509 
4510 static int tcpm_psy_get_voltage_min(struct tcpm_port *port,
4511 				    union power_supply_propval *val)
4512 {
4513 	if (port->pps_data.active)
4514 		val->intval = port->pps_data.min_volt * 1000;
4515 	else
4516 		val->intval = port->supply_voltage * 1000;
4517 
4518 	return 0;
4519 }
4520 
4521 static int tcpm_psy_get_voltage_max(struct tcpm_port *port,
4522 				    union power_supply_propval *val)
4523 {
4524 	if (port->pps_data.active)
4525 		val->intval = port->pps_data.max_volt * 1000;
4526 	else
4527 		val->intval = port->supply_voltage * 1000;
4528 
4529 	return 0;
4530 }
4531 
4532 static int tcpm_psy_get_voltage_now(struct tcpm_port *port,
4533 				    union power_supply_propval *val)
4534 {
4535 	val->intval = port->supply_voltage * 1000;
4536 
4537 	return 0;
4538 }
4539 
4540 static int tcpm_psy_get_current_max(struct tcpm_port *port,
4541 				    union power_supply_propval *val)
4542 {
4543 	if (port->pps_data.active)
4544 		val->intval = port->pps_data.max_curr * 1000;
4545 	else
4546 		val->intval = port->current_limit * 1000;
4547 
4548 	return 0;
4549 }
4550 
4551 static int tcpm_psy_get_current_now(struct tcpm_port *port,
4552 				    union power_supply_propval *val)
4553 {
4554 	val->intval = port->current_limit * 1000;
4555 
4556 	return 0;
4557 }
4558 
4559 static int tcpm_psy_get_prop(struct power_supply *psy,
4560 			     enum power_supply_property psp,
4561 			     union power_supply_propval *val)
4562 {
4563 	struct tcpm_port *port = power_supply_get_drvdata(psy);
4564 	int ret = 0;
4565 
4566 	switch (psp) {
4567 	case POWER_SUPPLY_PROP_USB_TYPE:
4568 		val->intval = port->usb_type;
4569 		break;
4570 	case POWER_SUPPLY_PROP_ONLINE:
4571 		ret = tcpm_psy_get_online(port, val);
4572 		break;
4573 	case POWER_SUPPLY_PROP_VOLTAGE_MIN:
4574 		ret = tcpm_psy_get_voltage_min(port, val);
4575 		break;
4576 	case POWER_SUPPLY_PROP_VOLTAGE_MAX:
4577 		ret = tcpm_psy_get_voltage_max(port, val);
4578 		break;
4579 	case POWER_SUPPLY_PROP_VOLTAGE_NOW:
4580 		ret = tcpm_psy_get_voltage_now(port, val);
4581 		break;
4582 	case POWER_SUPPLY_PROP_CURRENT_MAX:
4583 		ret = tcpm_psy_get_current_max(port, val);
4584 		break;
4585 	case POWER_SUPPLY_PROP_CURRENT_NOW:
4586 		ret = tcpm_psy_get_current_now(port, val);
4587 		break;
4588 	default:
4589 		ret = -EINVAL;
4590 		break;
4591 	}
4592 
4593 	return ret;
4594 }
4595 
4596 static int tcpm_psy_set_online(struct tcpm_port *port,
4597 			       const union power_supply_propval *val)
4598 {
4599 	int ret;
4600 
4601 	switch (val->intval) {
4602 	case TCPM_PSY_FIXED_ONLINE:
4603 		ret = tcpm_pps_activate(port, false);
4604 		break;
4605 	case TCPM_PSY_PROG_ONLINE:
4606 		ret = tcpm_pps_activate(port, true);
4607 		break;
4608 	default:
4609 		ret = -EINVAL;
4610 		break;
4611 	}
4612 
4613 	return ret;
4614 }
4615 
4616 static int tcpm_psy_set_prop(struct power_supply *psy,
4617 			     enum power_supply_property psp,
4618 			     const union power_supply_propval *val)
4619 {
4620 	struct tcpm_port *port = power_supply_get_drvdata(psy);
4621 	int ret;
4622 
4623 	switch (psp) {
4624 	case POWER_SUPPLY_PROP_ONLINE:
4625 		ret = tcpm_psy_set_online(port, val);
4626 		break;
4627 	case POWER_SUPPLY_PROP_VOLTAGE_NOW:
4628 		if (val->intval < port->pps_data.min_volt * 1000 ||
4629 		    val->intval > port->pps_data.max_volt * 1000)
4630 			ret = -EINVAL;
4631 		else
4632 			ret = tcpm_pps_set_out_volt(port, val->intval / 1000);
4633 		break;
4634 	case POWER_SUPPLY_PROP_CURRENT_NOW:
4635 		if (val->intval > port->pps_data.max_curr * 1000)
4636 			ret = -EINVAL;
4637 		else
4638 			ret = tcpm_pps_set_op_curr(port, val->intval / 1000);
4639 		break;
4640 	default:
4641 		ret = -EINVAL;
4642 		break;
4643 	}
4644 
4645 	return ret;
4646 }
4647 
4648 static int tcpm_psy_prop_writeable(struct power_supply *psy,
4649 				   enum power_supply_property psp)
4650 {
4651 	switch (psp) {
4652 	case POWER_SUPPLY_PROP_ONLINE:
4653 	case POWER_SUPPLY_PROP_VOLTAGE_NOW:
4654 	case POWER_SUPPLY_PROP_CURRENT_NOW:
4655 		return 1;
4656 	default:
4657 		return 0;
4658 	}
4659 }
4660 
4661 static enum power_supply_usb_type tcpm_psy_usb_types[] = {
4662 	POWER_SUPPLY_USB_TYPE_C,
4663 	POWER_SUPPLY_USB_TYPE_PD,
4664 	POWER_SUPPLY_USB_TYPE_PD_PPS,
4665 };
4666 
4667 static const char *tcpm_psy_name_prefix = "tcpm-source-psy-";
4668 
4669 static int devm_tcpm_psy_register(struct tcpm_port *port)
4670 {
4671 	struct power_supply_config psy_cfg = {};
4672 	const char *port_dev_name = dev_name(port->dev);
4673 	size_t psy_name_len = strlen(tcpm_psy_name_prefix) +
4674 				     strlen(port_dev_name) + 1;
4675 	char *psy_name;
4676 
4677 	psy_cfg.drv_data = port;
4678 	psy_cfg.fwnode = dev_fwnode(port->dev);
4679 	psy_name = devm_kzalloc(port->dev, psy_name_len, GFP_KERNEL);
4680 	if (!psy_name)
4681 		return -ENOMEM;
4682 
4683 	snprintf(psy_name, psy_name_len, "%s%s", tcpm_psy_name_prefix,
4684 		 port_dev_name);
4685 	port->psy_desc.name = psy_name;
4686 	port->psy_desc.type = POWER_SUPPLY_TYPE_USB,
4687 	port->psy_desc.usb_types = tcpm_psy_usb_types;
4688 	port->psy_desc.num_usb_types = ARRAY_SIZE(tcpm_psy_usb_types);
4689 	port->psy_desc.properties = tcpm_psy_props,
4690 	port->psy_desc.num_properties = ARRAY_SIZE(tcpm_psy_props),
4691 	port->psy_desc.get_property = tcpm_psy_get_prop,
4692 	port->psy_desc.set_property = tcpm_psy_set_prop,
4693 	port->psy_desc.property_is_writeable = tcpm_psy_prop_writeable,
4694 
4695 	port->usb_type = POWER_SUPPLY_USB_TYPE_C;
4696 
4697 	port->psy = devm_power_supply_register(port->dev, &port->psy_desc,
4698 					       &psy_cfg);
4699 
4700 	return PTR_ERR_OR_ZERO(port->psy);
4701 }
4702 
4703 struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc)
4704 {
4705 	struct tcpm_port *port;
4706 	int err;
4707 
4708 	if (!dev || !tcpc ||
4709 	    !tcpc->get_vbus || !tcpc->set_cc || !tcpc->get_cc ||
4710 	    !tcpc->set_polarity || !tcpc->set_vconn || !tcpc->set_vbus ||
4711 	    !tcpc->set_pd_rx || !tcpc->set_roles || !tcpc->pd_transmit)
4712 		return ERR_PTR(-EINVAL);
4713 
4714 	port = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL);
4715 	if (!port)
4716 		return ERR_PTR(-ENOMEM);
4717 
4718 	port->dev = dev;
4719 	port->tcpc = tcpc;
4720 
4721 	mutex_init(&port->lock);
4722 	mutex_init(&port->swap_lock);
4723 
4724 	port->wq = create_singlethread_workqueue(dev_name(dev));
4725 	if (!port->wq)
4726 		return ERR_PTR(-ENOMEM);
4727 	INIT_DELAYED_WORK(&port->state_machine, tcpm_state_machine_work);
4728 	INIT_DELAYED_WORK(&port->vdm_state_machine, vdm_state_machine_work);
4729 	INIT_WORK(&port->event_work, tcpm_pd_event_handler);
4730 
4731 	spin_lock_init(&port->pd_event_lock);
4732 
4733 	init_completion(&port->tx_complete);
4734 	init_completion(&port->swap_complete);
4735 	init_completion(&port->pps_complete);
4736 	tcpm_debugfs_init(port);
4737 
4738 	err = tcpm_fw_get_caps(port, tcpc->fwnode);
4739 	if (err < 0)
4740 		goto out_destroy_wq;
4741 
4742 	port->try_role = port->typec_caps.prefer_role;
4743 
4744 	port->typec_caps.fwnode = tcpc->fwnode;
4745 	port->typec_caps.revision = 0x0120;	/* Type-C spec release 1.2 */
4746 	port->typec_caps.pd_revision = 0x0300;	/* USB-PD spec release 3.0 */
4747 	port->typec_caps.driver_data = port;
4748 	port->typec_caps.ops = &tcpm_ops;
4749 	port->typec_caps.orientation_aware = 1;
4750 
4751 	port->partner_desc.identity = &port->partner_ident;
4752 	port->port_type = port->typec_caps.type;
4753 
4754 	port->role_sw = usb_role_switch_get(port->dev);
4755 	if (IS_ERR(port->role_sw)) {
4756 		err = PTR_ERR(port->role_sw);
4757 		goto out_destroy_wq;
4758 	}
4759 
4760 	err = devm_tcpm_psy_register(port);
4761 	if (err)
4762 		goto out_role_sw_put;
4763 
4764 	port->typec_port = typec_register_port(port->dev, &port->typec_caps);
4765 	if (IS_ERR(port->typec_port)) {
4766 		err = PTR_ERR(port->typec_port);
4767 		goto out_role_sw_put;
4768 	}
4769 
4770 	mutex_lock(&port->lock);
4771 	tcpm_init(port);
4772 	mutex_unlock(&port->lock);
4773 
4774 	tcpm_log(port, "%s: registered", dev_name(dev));
4775 	return port;
4776 
4777 out_role_sw_put:
4778 	usb_role_switch_put(port->role_sw);
4779 out_destroy_wq:
4780 	tcpm_debugfs_exit(port);
4781 	destroy_workqueue(port->wq);
4782 	return ERR_PTR(err);
4783 }
4784 EXPORT_SYMBOL_GPL(tcpm_register_port);
4785 
4786 void tcpm_unregister_port(struct tcpm_port *port)
4787 {
4788 	int i;
4789 
4790 	tcpm_reset_port(port);
4791 	for (i = 0; i < ARRAY_SIZE(port->port_altmode); i++)
4792 		typec_unregister_altmode(port->port_altmode[i]);
4793 	typec_unregister_port(port->typec_port);
4794 	usb_role_switch_put(port->role_sw);
4795 	tcpm_debugfs_exit(port);
4796 	destroy_workqueue(port->wq);
4797 }
4798 EXPORT_SYMBOL_GPL(tcpm_unregister_port);
4799 
4800 MODULE_AUTHOR("Guenter Roeck <groeck@chromium.org>");
4801 MODULE_DESCRIPTION("USB Type-C Port Manager");
4802 MODULE_LICENSE("GPL");
4803