Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v4.17 3736 lines 95 kB view raw
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/proc_fs.h> 16#include <linux/sched/clock.h> 17#include <linux/seq_file.h> 18#include <linux/slab.h> 19#include <linux/spinlock.h> 20#include <linux/usb/pd.h> 21#include <linux/usb/pd_bdo.h> 22#include <linux/usb/pd_vdo.h> 23#include <linux/usb/role.h> 24#include <linux/usb/tcpm.h> 25#include <linux/usb/typec.h> 26#include <linux/workqueue.h> 27 28#define FOREACH_STATE(S) \ 29 S(INVALID_STATE), \ 30 S(DRP_TOGGLING), \ 31 S(SRC_UNATTACHED), \ 32 S(SRC_ATTACH_WAIT), \ 33 S(SRC_ATTACHED), \ 34 S(SRC_STARTUP), \ 35 S(SRC_SEND_CAPABILITIES), \ 36 S(SRC_NEGOTIATE_CAPABILITIES), \ 37 S(SRC_TRANSITION_SUPPLY), \ 38 S(SRC_READY), \ 39 S(SRC_WAIT_NEW_CAPABILITIES), \ 40 \ 41 S(SNK_UNATTACHED), \ 42 S(SNK_ATTACH_WAIT), \ 43 S(SNK_DEBOUNCED), \ 44 S(SNK_ATTACHED), \ 45 S(SNK_STARTUP), \ 46 S(SNK_DISCOVERY), \ 47 S(SNK_DISCOVERY_DEBOUNCE), \ 48 S(SNK_DISCOVERY_DEBOUNCE_DONE), \ 49 S(SNK_WAIT_CAPABILITIES), \ 50 S(SNK_NEGOTIATE_CAPABILITIES), \ 51 S(SNK_TRANSITION_SINK), \ 52 S(SNK_TRANSITION_SINK_VBUS), \ 53 S(SNK_READY), \ 54 \ 55 S(ACC_UNATTACHED), \ 56 S(DEBUG_ACC_ATTACHED), \ 57 S(AUDIO_ACC_ATTACHED), \ 58 S(AUDIO_ACC_DEBOUNCE), \ 59 \ 60 S(HARD_RESET_SEND), \ 61 S(HARD_RESET_START), \ 62 S(SRC_HARD_RESET_VBUS_OFF), \ 63 S(SRC_HARD_RESET_VBUS_ON), \ 64 S(SNK_HARD_RESET_SINK_OFF), \ 65 S(SNK_HARD_RESET_WAIT_VBUS), \ 66 S(SNK_HARD_RESET_SINK_ON), \ 67 \ 68 S(SOFT_RESET), \ 69 S(SOFT_RESET_SEND), \ 70 \ 71 S(DR_SWAP_ACCEPT), \ 72 S(DR_SWAP_SEND), \ 73 S(DR_SWAP_SEND_TIMEOUT), \ 74 S(DR_SWAP_CANCEL), \ 75 S(DR_SWAP_CHANGE_DR), \ 76 \ 77 S(PR_SWAP_ACCEPT), \ 78 S(PR_SWAP_SEND), \ 79 S(PR_SWAP_SEND_TIMEOUT), \ 80 S(PR_SWAP_CANCEL), \ 81 S(PR_SWAP_START), \ 82 S(PR_SWAP_SRC_SNK_TRANSITION_OFF), \ 83 S(PR_SWAP_SRC_SNK_SOURCE_OFF), \ 84 S(PR_SWAP_SRC_SNK_SOURCE_OFF_CC_DEBOUNCED), \ 85 S(PR_SWAP_SRC_SNK_SINK_ON), \ 86 S(PR_SWAP_SNK_SRC_SINK_OFF), \ 87 S(PR_SWAP_SNK_SRC_SOURCE_ON), \ 88 S(PR_SWAP_SNK_SRC_SOURCE_ON_VBUS_RAMPED_UP), \ 89 \ 90 S(VCONN_SWAP_ACCEPT), \ 91 S(VCONN_SWAP_SEND), \ 92 S(VCONN_SWAP_SEND_TIMEOUT), \ 93 S(VCONN_SWAP_CANCEL), \ 94 S(VCONN_SWAP_START), \ 95 S(VCONN_SWAP_WAIT_FOR_VCONN), \ 96 S(VCONN_SWAP_TURN_ON_VCONN), \ 97 S(VCONN_SWAP_TURN_OFF_VCONN), \ 98 \ 99 S(SNK_TRY), \ 100 S(SNK_TRY_WAIT), \ 101 S(SNK_TRY_WAIT_DEBOUNCE), \ 102 S(SNK_TRY_WAIT_DEBOUNCE_CHECK_VBUS), \ 103 S(SRC_TRYWAIT), \ 104 S(SRC_TRYWAIT_DEBOUNCE), \ 105 S(SRC_TRYWAIT_UNATTACHED), \ 106 \ 107 S(SRC_TRY), \ 108 S(SRC_TRY_WAIT), \ 109 S(SRC_TRY_DEBOUNCE), \ 110 S(SNK_TRYWAIT), \ 111 S(SNK_TRYWAIT_DEBOUNCE), \ 112 S(SNK_TRYWAIT_VBUS), \ 113 S(BIST_RX), \ 114 \ 115 S(ERROR_RECOVERY), \ 116 S(PORT_RESET), \ 117 S(PORT_RESET_WAIT_OFF) 118 119#define GENERATE_ENUM(e) e 120#define GENERATE_STRING(s) #s 121 122enum tcpm_state { 123 FOREACH_STATE(GENERATE_ENUM) 124}; 125 126static const char * const tcpm_states[] = { 127 FOREACH_STATE(GENERATE_STRING) 128}; 129 130enum vdm_states { 131 VDM_STATE_ERR_BUSY = -3, 132 VDM_STATE_ERR_SEND = -2, 133 VDM_STATE_ERR_TMOUT = -1, 134 VDM_STATE_DONE = 0, 135 /* Anything >0 represents an active state */ 136 VDM_STATE_READY = 1, 137 VDM_STATE_BUSY = 2, 138 VDM_STATE_WAIT_RSP_BUSY = 3, 139}; 140 141enum pd_msg_request { 142 PD_MSG_NONE = 0, 143 PD_MSG_CTRL_REJECT, 144 PD_MSG_CTRL_WAIT, 145 PD_MSG_DATA_SINK_CAP, 146 PD_MSG_DATA_SOURCE_CAP, 147}; 148 149/* Events from low level driver */ 150 151#define TCPM_CC_EVENT BIT(0) 152#define TCPM_VBUS_EVENT BIT(1) 153#define TCPM_RESET_EVENT BIT(2) 154 155#define LOG_BUFFER_ENTRIES 1024 156#define LOG_BUFFER_ENTRY_SIZE 128 157 158/* Alternate mode support */ 159 160#define SVID_DISCOVERY_MAX 16 161 162struct pd_mode_data { 163 int svid_index; /* current SVID index */ 164 int nsvids; 165 u16 svids[SVID_DISCOVERY_MAX]; 166 int altmodes; /* number of alternate modes */ 167 struct typec_altmode_desc altmode_desc[SVID_DISCOVERY_MAX]; 168}; 169 170struct tcpm_port { 171 struct device *dev; 172 173 struct mutex lock; /* tcpm state machine lock */ 174 struct workqueue_struct *wq; 175 176 struct typec_capability typec_caps; 177 struct typec_port *typec_port; 178 179 struct tcpc_dev *tcpc; 180 struct usb_role_switch *role_sw; 181 182 enum typec_role vconn_role; 183 enum typec_role pwr_role; 184 enum typec_data_role data_role; 185 enum typec_pwr_opmode pwr_opmode; 186 187 struct usb_pd_identity partner_ident; 188 struct typec_partner_desc partner_desc; 189 struct typec_partner *partner; 190 191 enum typec_cc_status cc_req; 192 193 enum typec_cc_status cc1; 194 enum typec_cc_status cc2; 195 enum typec_cc_polarity polarity; 196 197 bool attached; 198 bool connected; 199 enum typec_port_type port_type; 200 bool vbus_present; 201 bool vbus_never_low; 202 bool vbus_source; 203 bool vbus_charge; 204 205 bool send_discover; 206 bool op_vsafe5v; 207 208 int try_role; 209 int try_snk_count; 210 int try_src_count; 211 212 enum pd_msg_request queued_message; 213 214 enum tcpm_state enter_state; 215 enum tcpm_state prev_state; 216 enum tcpm_state state; 217 enum tcpm_state delayed_state; 218 unsigned long delayed_runtime; 219 unsigned long delay_ms; 220 221 spinlock_t pd_event_lock; 222 u32 pd_events; 223 224 struct work_struct event_work; 225 struct delayed_work state_machine; 226 struct delayed_work vdm_state_machine; 227 bool state_machine_running; 228 229 struct completion tx_complete; 230 enum tcpm_transmit_status tx_status; 231 232 struct mutex swap_lock; /* swap command lock */ 233 bool swap_pending; 234 bool non_pd_role_swap; 235 struct completion swap_complete; 236 int swap_status; 237 238 unsigned int message_id; 239 unsigned int caps_count; 240 unsigned int hard_reset_count; 241 bool pd_capable; 242 bool explicit_contract; 243 unsigned int rx_msgid; 244 245 /* Partner capabilities/requests */ 246 u32 sink_request; 247 u32 source_caps[PDO_MAX_OBJECTS]; 248 unsigned int nr_source_caps; 249 u32 sink_caps[PDO_MAX_OBJECTS]; 250 unsigned int nr_sink_caps; 251 252 /* Local capabilities */ 253 u32 src_pdo[PDO_MAX_OBJECTS]; 254 unsigned int nr_src_pdo; 255 u32 snk_pdo[PDO_MAX_OBJECTS]; 256 unsigned int nr_snk_pdo; 257 u32 snk_vdo[VDO_MAX_OBJECTS]; 258 unsigned int nr_snk_vdo; 259 260 unsigned int max_snk_mv; 261 unsigned int max_snk_ma; 262 unsigned int max_snk_mw; 263 unsigned int operating_snk_mw; 264 265 /* Requested current / voltage */ 266 u32 current_limit; 267 u32 supply_voltage; 268 269 u32 bist_request; 270 271 /* PD state for Vendor Defined Messages */ 272 enum vdm_states vdm_state; 273 u32 vdm_retries; 274 /* next Vendor Defined Message to send */ 275 u32 vdo_data[VDO_MAX_SIZE]; 276 u8 vdo_count; 277 /* VDO to retry if UFP responder replied busy */ 278 u32 vdo_retry; 279 280 /* Alternate mode data */ 281 282 struct pd_mode_data mode_data; 283 struct typec_altmode *partner_altmode[SVID_DISCOVERY_MAX]; 284 struct typec_altmode *port_altmode[SVID_DISCOVERY_MAX]; 285 286 /* Deadline in jiffies to exit src_try_wait state */ 287 unsigned long max_wait; 288 289#ifdef CONFIG_DEBUG_FS 290 struct dentry *dentry; 291 struct mutex logbuffer_lock; /* log buffer access lock */ 292 int logbuffer_head; 293 int logbuffer_tail; 294 u8 *logbuffer[LOG_BUFFER_ENTRIES]; 295#endif 296}; 297 298struct pd_rx_event { 299 struct work_struct work; 300 struct tcpm_port *port; 301 struct pd_message msg; 302}; 303 304#define tcpm_cc_is_sink(cc) \ 305 ((cc) == TYPEC_CC_RP_DEF || (cc) == TYPEC_CC_RP_1_5 || \ 306 (cc) == TYPEC_CC_RP_3_0) 307 308#define tcpm_port_is_sink(port) \ 309 ((tcpm_cc_is_sink((port)->cc1) && !tcpm_cc_is_sink((port)->cc2)) || \ 310 (tcpm_cc_is_sink((port)->cc2) && !tcpm_cc_is_sink((port)->cc1))) 311 312#define tcpm_cc_is_source(cc) ((cc) == TYPEC_CC_RD) 313#define tcpm_cc_is_audio(cc) ((cc) == TYPEC_CC_RA) 314#define tcpm_cc_is_open(cc) ((cc) == TYPEC_CC_OPEN) 315 316#define tcpm_port_is_source(port) \ 317 ((tcpm_cc_is_source((port)->cc1) && \ 318 !tcpm_cc_is_source((port)->cc2)) || \ 319 (tcpm_cc_is_source((port)->cc2) && \ 320 !tcpm_cc_is_source((port)->cc1))) 321 322#define tcpm_port_is_debug(port) \ 323 (tcpm_cc_is_source((port)->cc1) && tcpm_cc_is_source((port)->cc2)) 324 325#define tcpm_port_is_audio(port) \ 326 (tcpm_cc_is_audio((port)->cc1) && tcpm_cc_is_audio((port)->cc2)) 327 328#define tcpm_port_is_audio_detached(port) \ 329 ((tcpm_cc_is_audio((port)->cc1) && tcpm_cc_is_open((port)->cc2)) || \ 330 (tcpm_cc_is_audio((port)->cc2) && tcpm_cc_is_open((port)->cc1))) 331 332#define tcpm_try_snk(port) \ 333 ((port)->try_snk_count == 0 && (port)->try_role == TYPEC_SINK && \ 334 (port)->port_type == TYPEC_PORT_DRP) 335 336#define tcpm_try_src(port) \ 337 ((port)->try_src_count == 0 && (port)->try_role == TYPEC_SOURCE && \ 338 (port)->port_type == TYPEC_PORT_DRP) 339 340static enum tcpm_state tcpm_default_state(struct tcpm_port *port) 341{ 342 if (port->port_type == TYPEC_PORT_DRP) { 343 if (port->try_role == TYPEC_SINK) 344 return SNK_UNATTACHED; 345 else if (port->try_role == TYPEC_SOURCE) 346 return SRC_UNATTACHED; 347 else if (port->tcpc->config->default_role == TYPEC_SINK) 348 return SNK_UNATTACHED; 349 /* Fall through to return SRC_UNATTACHED */ 350 } else if (port->port_type == TYPEC_PORT_SNK) { 351 return SNK_UNATTACHED; 352 } 353 return SRC_UNATTACHED; 354} 355 356static inline 357struct tcpm_port *typec_cap_to_tcpm(const struct typec_capability *cap) 358{ 359 return container_of(cap, struct tcpm_port, typec_caps); 360} 361 362static bool tcpm_port_is_disconnected(struct tcpm_port *port) 363{ 364 return (!port->attached && port->cc1 == TYPEC_CC_OPEN && 365 port->cc2 == TYPEC_CC_OPEN) || 366 (port->attached && ((port->polarity == TYPEC_POLARITY_CC1 && 367 port->cc1 == TYPEC_CC_OPEN) || 368 (port->polarity == TYPEC_POLARITY_CC2 && 369 port->cc2 == TYPEC_CC_OPEN))); 370} 371 372/* 373 * Logging 374 */ 375 376#ifdef CONFIG_DEBUG_FS 377 378static bool tcpm_log_full(struct tcpm_port *port) 379{ 380 return port->logbuffer_tail == 381 (port->logbuffer_head + 1) % LOG_BUFFER_ENTRIES; 382} 383 384__printf(2, 0) 385static void _tcpm_log(struct tcpm_port *port, const char *fmt, va_list args) 386{ 387 char tmpbuffer[LOG_BUFFER_ENTRY_SIZE]; 388 u64 ts_nsec = local_clock(); 389 unsigned long rem_nsec; 390 391 if (!port->logbuffer[port->logbuffer_head]) { 392 port->logbuffer[port->logbuffer_head] = 393 kzalloc(LOG_BUFFER_ENTRY_SIZE, GFP_KERNEL); 394 if (!port->logbuffer[port->logbuffer_head]) 395 return; 396 } 397 398 vsnprintf(tmpbuffer, sizeof(tmpbuffer), fmt, args); 399 400 mutex_lock(&port->logbuffer_lock); 401 402 if (tcpm_log_full(port)) { 403 port->logbuffer_head = max(port->logbuffer_head - 1, 0); 404 strcpy(tmpbuffer, "overflow"); 405 } 406 407 if (port->logbuffer_head < 0 || 408 port->logbuffer_head >= LOG_BUFFER_ENTRIES) { 409 dev_warn(port->dev, 410 "Bad log buffer index %d\n", port->logbuffer_head); 411 goto abort; 412 } 413 414 if (!port->logbuffer[port->logbuffer_head]) { 415 dev_warn(port->dev, 416 "Log buffer index %d is NULL\n", port->logbuffer_head); 417 goto abort; 418 } 419 420 rem_nsec = do_div(ts_nsec, 1000000000); 421 scnprintf(port->logbuffer[port->logbuffer_head], 422 LOG_BUFFER_ENTRY_SIZE, "[%5lu.%06lu] %s", 423 (unsigned long)ts_nsec, rem_nsec / 1000, 424 tmpbuffer); 425 port->logbuffer_head = (port->logbuffer_head + 1) % LOG_BUFFER_ENTRIES; 426 427abort: 428 mutex_unlock(&port->logbuffer_lock); 429} 430 431__printf(2, 3) 432static void tcpm_log(struct tcpm_port *port, const char *fmt, ...) 433{ 434 va_list args; 435 436 /* Do not log while disconnected and unattached */ 437 if (tcpm_port_is_disconnected(port) && 438 (port->state == SRC_UNATTACHED || port->state == SNK_UNATTACHED || 439 port->state == DRP_TOGGLING)) 440 return; 441 442 va_start(args, fmt); 443 _tcpm_log(port, fmt, args); 444 va_end(args); 445} 446 447__printf(2, 3) 448static void tcpm_log_force(struct tcpm_port *port, const char *fmt, ...) 449{ 450 va_list args; 451 452 va_start(args, fmt); 453 _tcpm_log(port, fmt, args); 454 va_end(args); 455} 456 457static void tcpm_log_source_caps(struct tcpm_port *port) 458{ 459 int i; 460 461 for (i = 0; i < port->nr_source_caps; i++) { 462 u32 pdo = port->source_caps[i]; 463 enum pd_pdo_type type = pdo_type(pdo); 464 char msg[64]; 465 466 switch (type) { 467 case PDO_TYPE_FIXED: 468 scnprintf(msg, sizeof(msg), 469 "%u mV, %u mA [%s%s%s%s%s%s]", 470 pdo_fixed_voltage(pdo), 471 pdo_max_current(pdo), 472 (pdo & PDO_FIXED_DUAL_ROLE) ? 473 "R" : "", 474 (pdo & PDO_FIXED_SUSPEND) ? 475 "S" : "", 476 (pdo & PDO_FIXED_HIGHER_CAP) ? 477 "H" : "", 478 (pdo & PDO_FIXED_USB_COMM) ? 479 "U" : "", 480 (pdo & PDO_FIXED_DATA_SWAP) ? 481 "D" : "", 482 (pdo & PDO_FIXED_EXTPOWER) ? 483 "E" : ""); 484 break; 485 case PDO_TYPE_VAR: 486 scnprintf(msg, sizeof(msg), 487 "%u-%u mV, %u mA", 488 pdo_min_voltage(pdo), 489 pdo_max_voltage(pdo), 490 pdo_max_current(pdo)); 491 break; 492 case PDO_TYPE_BATT: 493 scnprintf(msg, sizeof(msg), 494 "%u-%u mV, %u mW", 495 pdo_min_voltage(pdo), 496 pdo_max_voltage(pdo), 497 pdo_max_power(pdo)); 498 break; 499 default: 500 strcpy(msg, "undefined"); 501 break; 502 } 503 tcpm_log(port, " PDO %d: type %d, %s", 504 i, type, msg); 505 } 506} 507 508static int tcpm_debug_show(struct seq_file *s, void *v) 509{ 510 struct tcpm_port *port = (struct tcpm_port *)s->private; 511 int tail; 512 513 mutex_lock(&port->logbuffer_lock); 514 tail = port->logbuffer_tail; 515 while (tail != port->logbuffer_head) { 516 seq_printf(s, "%s\n", port->logbuffer[tail]); 517 tail = (tail + 1) % LOG_BUFFER_ENTRIES; 518 } 519 if (!seq_has_overflowed(s)) 520 port->logbuffer_tail = tail; 521 mutex_unlock(&port->logbuffer_lock); 522 523 return 0; 524} 525DEFINE_SHOW_ATTRIBUTE(tcpm_debug); 526 527static struct dentry *rootdir; 528 529static int tcpm_debugfs_init(struct tcpm_port *port) 530{ 531 mutex_init(&port->logbuffer_lock); 532 /* /sys/kernel/debug/tcpm/usbcX */ 533 if (!rootdir) { 534 rootdir = debugfs_create_dir("tcpm", NULL); 535 if (!rootdir) 536 return -ENOMEM; 537 } 538 539 port->dentry = debugfs_create_file(dev_name(port->dev), 540 S_IFREG | 0444, rootdir, 541 port, &tcpm_debug_fops); 542 543 return 0; 544} 545 546static void tcpm_debugfs_exit(struct tcpm_port *port) 547{ 548 debugfs_remove(port->dentry); 549} 550 551#else 552 553__printf(2, 3) 554static void tcpm_log(const struct tcpm_port *port, const char *fmt, ...) { } 555__printf(2, 3) 556static void tcpm_log_force(struct tcpm_port *port, const char *fmt, ...) { } 557static void tcpm_log_source_caps(struct tcpm_port *port) { } 558static int tcpm_debugfs_init(const struct tcpm_port *port) { return 0; } 559static void tcpm_debugfs_exit(const struct tcpm_port *port) { } 560 561#endif 562 563static int tcpm_pd_transmit(struct tcpm_port *port, 564 enum tcpm_transmit_type type, 565 const struct pd_message *msg) 566{ 567 unsigned long timeout; 568 int ret; 569 570 if (msg) 571 tcpm_log(port, "PD TX, header: %#x", le16_to_cpu(msg->header)); 572 else 573 tcpm_log(port, "PD TX, type: %#x", type); 574 575 reinit_completion(&port->tx_complete); 576 ret = port->tcpc->pd_transmit(port->tcpc, type, msg); 577 if (ret < 0) 578 return ret; 579 580 mutex_unlock(&port->lock); 581 timeout = wait_for_completion_timeout(&port->tx_complete, 582 msecs_to_jiffies(PD_T_TCPC_TX_TIMEOUT)); 583 mutex_lock(&port->lock); 584 if (!timeout) 585 return -ETIMEDOUT; 586 587 switch (port->tx_status) { 588 case TCPC_TX_SUCCESS: 589 port->message_id = (port->message_id + 1) & PD_HEADER_ID_MASK; 590 return 0; 591 case TCPC_TX_DISCARDED: 592 return -EAGAIN; 593 case TCPC_TX_FAILED: 594 default: 595 return -EIO; 596 } 597} 598 599void tcpm_pd_transmit_complete(struct tcpm_port *port, 600 enum tcpm_transmit_status status) 601{ 602 tcpm_log(port, "PD TX complete, status: %u", status); 603 port->tx_status = status; 604 complete(&port->tx_complete); 605} 606EXPORT_SYMBOL_GPL(tcpm_pd_transmit_complete); 607 608static int tcpm_mux_set(struct tcpm_port *port, enum tcpc_mux_mode mode, 609 enum usb_role usb_role, 610 enum typec_orientation orientation) 611{ 612 int ret; 613 614 tcpm_log(port, "Requesting mux mode %d, usb-role %d, orientation %d", 615 mode, usb_role, orientation); 616 617 ret = typec_set_orientation(port->typec_port, orientation); 618 if (ret) 619 return ret; 620 621 if (port->role_sw) { 622 ret = usb_role_switch_set_role(port->role_sw, usb_role); 623 if (ret) 624 return ret; 625 } 626 627 return typec_set_mode(port->typec_port, mode); 628} 629 630static int tcpm_set_polarity(struct tcpm_port *port, 631 enum typec_cc_polarity polarity) 632{ 633 int ret; 634 635 tcpm_log(port, "polarity %d", polarity); 636 637 ret = port->tcpc->set_polarity(port->tcpc, polarity); 638 if (ret < 0) 639 return ret; 640 641 port->polarity = polarity; 642 643 return 0; 644} 645 646static int tcpm_set_vconn(struct tcpm_port *port, bool enable) 647{ 648 int ret; 649 650 tcpm_log(port, "vconn:=%d", enable); 651 652 ret = port->tcpc->set_vconn(port->tcpc, enable); 653 if (!ret) { 654 port->vconn_role = enable ? TYPEC_SOURCE : TYPEC_SINK; 655 typec_set_vconn_role(port->typec_port, port->vconn_role); 656 } 657 658 return ret; 659} 660 661static u32 tcpm_get_current_limit(struct tcpm_port *port) 662{ 663 enum typec_cc_status cc; 664 u32 limit; 665 666 cc = port->polarity ? port->cc2 : port->cc1; 667 switch (cc) { 668 case TYPEC_CC_RP_1_5: 669 limit = 1500; 670 break; 671 case TYPEC_CC_RP_3_0: 672 limit = 3000; 673 break; 674 case TYPEC_CC_RP_DEF: 675 default: 676 if (port->tcpc->get_current_limit) 677 limit = port->tcpc->get_current_limit(port->tcpc); 678 else 679 limit = 0; 680 break; 681 } 682 683 return limit; 684} 685 686static int tcpm_set_current_limit(struct tcpm_port *port, u32 max_ma, u32 mv) 687{ 688 int ret = -EOPNOTSUPP; 689 690 tcpm_log(port, "Setting voltage/current limit %u mV %u mA", mv, max_ma); 691 692 if (port->tcpc->set_current_limit) 693 ret = port->tcpc->set_current_limit(port->tcpc, max_ma, mv); 694 695 return ret; 696} 697 698/* 699 * Determine RP value to set based on maximum current supported 700 * by a port if configured as source. 701 * Returns CC value to report to link partner. 702 */ 703static enum typec_cc_status tcpm_rp_cc(struct tcpm_port *port) 704{ 705 const u32 *src_pdo = port->src_pdo; 706 int nr_pdo = port->nr_src_pdo; 707 int i; 708 709 /* 710 * Search for first entry with matching voltage. 711 * It should report the maximum supported current. 712 */ 713 for (i = 0; i < nr_pdo; i++) { 714 const u32 pdo = src_pdo[i]; 715 716 if (pdo_type(pdo) == PDO_TYPE_FIXED && 717 pdo_fixed_voltage(pdo) == 5000) { 718 unsigned int curr = pdo_max_current(pdo); 719 720 if (curr >= 3000) 721 return TYPEC_CC_RP_3_0; 722 else if (curr >= 1500) 723 return TYPEC_CC_RP_1_5; 724 return TYPEC_CC_RP_DEF; 725 } 726 } 727 728 return TYPEC_CC_RP_DEF; 729} 730 731static int tcpm_set_attached_state(struct tcpm_port *port, bool attached) 732{ 733 return port->tcpc->set_roles(port->tcpc, attached, port->pwr_role, 734 port->data_role); 735} 736 737static int tcpm_set_roles(struct tcpm_port *port, bool attached, 738 enum typec_role role, enum typec_data_role data) 739{ 740 enum typec_orientation orientation; 741 enum usb_role usb_role; 742 int ret; 743 744 if (port->polarity == TYPEC_POLARITY_CC1) 745 orientation = TYPEC_ORIENTATION_NORMAL; 746 else 747 orientation = TYPEC_ORIENTATION_REVERSE; 748 749 if (data == TYPEC_HOST) 750 usb_role = USB_ROLE_HOST; 751 else 752 usb_role = USB_ROLE_DEVICE; 753 754 ret = tcpm_mux_set(port, TYPEC_MUX_USB, usb_role, orientation); 755 if (ret < 0) 756 return ret; 757 758 ret = port->tcpc->set_roles(port->tcpc, attached, role, data); 759 if (ret < 0) 760 return ret; 761 762 port->pwr_role = role; 763 port->data_role = data; 764 typec_set_data_role(port->typec_port, data); 765 typec_set_pwr_role(port->typec_port, role); 766 767 return 0; 768} 769 770static int tcpm_set_pwr_role(struct tcpm_port *port, enum typec_role role) 771{ 772 int ret; 773 774 ret = port->tcpc->set_roles(port->tcpc, true, role, 775 port->data_role); 776 if (ret < 0) 777 return ret; 778 779 port->pwr_role = role; 780 typec_set_pwr_role(port->typec_port, role); 781 782 return 0; 783} 784 785static int tcpm_pd_send_source_caps(struct tcpm_port *port) 786{ 787 struct pd_message msg; 788 int i; 789 790 memset(&msg, 0, sizeof(msg)); 791 if (!port->nr_src_pdo) { 792 /* No source capabilities defined, sink only */ 793 msg.header = PD_HEADER_LE(PD_CTRL_REJECT, 794 port->pwr_role, 795 port->data_role, 796 port->message_id, 0); 797 } else { 798 msg.header = PD_HEADER_LE(PD_DATA_SOURCE_CAP, 799 port->pwr_role, 800 port->data_role, 801 port->message_id, 802 port->nr_src_pdo); 803 } 804 for (i = 0; i < port->nr_src_pdo; i++) 805 msg.payload[i] = cpu_to_le32(port->src_pdo[i]); 806 807 return tcpm_pd_transmit(port, TCPC_TX_SOP, &msg); 808} 809 810static int tcpm_pd_send_sink_caps(struct tcpm_port *port) 811{ 812 struct pd_message msg; 813 int i; 814 815 memset(&msg, 0, sizeof(msg)); 816 if (!port->nr_snk_pdo) { 817 /* No sink capabilities defined, source only */ 818 msg.header = PD_HEADER_LE(PD_CTRL_REJECT, 819 port->pwr_role, 820 port->data_role, 821 port->message_id, 0); 822 } else { 823 msg.header = PD_HEADER_LE(PD_DATA_SINK_CAP, 824 port->pwr_role, 825 port->data_role, 826 port->message_id, 827 port->nr_snk_pdo); 828 } 829 for (i = 0; i < port->nr_snk_pdo; i++) 830 msg.payload[i] = cpu_to_le32(port->snk_pdo[i]); 831 832 return tcpm_pd_transmit(port, TCPC_TX_SOP, &msg); 833} 834 835static void tcpm_set_state(struct tcpm_port *port, enum tcpm_state state, 836 unsigned int delay_ms) 837{ 838 if (delay_ms) { 839 tcpm_log(port, "pending state change %s -> %s @ %u ms", 840 tcpm_states[port->state], tcpm_states[state], 841 delay_ms); 842 port->delayed_state = state; 843 mod_delayed_work(port->wq, &port->state_machine, 844 msecs_to_jiffies(delay_ms)); 845 port->delayed_runtime = jiffies + msecs_to_jiffies(delay_ms); 846 port->delay_ms = delay_ms; 847 } else { 848 tcpm_log(port, "state change %s -> %s", 849 tcpm_states[port->state], tcpm_states[state]); 850 port->delayed_state = INVALID_STATE; 851 port->prev_state = port->state; 852 port->state = state; 853 /* 854 * Don't re-queue the state machine work item if we're currently 855 * in the state machine and we're immediately changing states. 856 * tcpm_state_machine_work() will continue running the state 857 * machine. 858 */ 859 if (!port->state_machine_running) 860 mod_delayed_work(port->wq, &port->state_machine, 0); 861 } 862} 863 864static void tcpm_set_state_cond(struct tcpm_port *port, enum tcpm_state state, 865 unsigned int delay_ms) 866{ 867 if (port->enter_state == port->state) 868 tcpm_set_state(port, state, delay_ms); 869 else 870 tcpm_log(port, 871 "skipped %sstate change %s -> %s [%u ms], context state %s", 872 delay_ms ? "delayed " : "", 873 tcpm_states[port->state], tcpm_states[state], 874 delay_ms, tcpm_states[port->enter_state]); 875} 876 877static void tcpm_queue_message(struct tcpm_port *port, 878 enum pd_msg_request message) 879{ 880 port->queued_message = message; 881 mod_delayed_work(port->wq, &port->state_machine, 0); 882} 883 884/* 885 * VDM/VDO handling functions 886 */ 887static void tcpm_queue_vdm(struct tcpm_port *port, const u32 header, 888 const u32 *data, int cnt) 889{ 890 port->vdo_count = cnt + 1; 891 port->vdo_data[0] = header; 892 memcpy(&port->vdo_data[1], data, sizeof(u32) * cnt); 893 /* Set ready, vdm state machine will actually send */ 894 port->vdm_retries = 0; 895 port->vdm_state = VDM_STATE_READY; 896} 897 898static void svdm_consume_identity(struct tcpm_port *port, const __le32 *payload, 899 int cnt) 900{ 901 u32 vdo = le32_to_cpu(payload[VDO_INDEX_IDH]); 902 u32 product = le32_to_cpu(payload[VDO_INDEX_PRODUCT]); 903 904 memset(&port->mode_data, 0, sizeof(port->mode_data)); 905 906 port->partner_ident.id_header = vdo; 907 port->partner_ident.cert_stat = le32_to_cpu(payload[VDO_INDEX_CSTAT]); 908 port->partner_ident.product = product; 909 910 typec_partner_set_identity(port->partner); 911 912 tcpm_log(port, "Identity: %04x:%04x.%04x", 913 PD_IDH_VID(vdo), 914 PD_PRODUCT_PID(product), product & 0xffff); 915} 916 917static bool svdm_consume_svids(struct tcpm_port *port, const __le32 *payload, 918 int cnt) 919{ 920 struct pd_mode_data *pmdata = &port->mode_data; 921 int i; 922 923 for (i = 1; i < cnt; i++) { 924 u32 p = le32_to_cpu(payload[i]); 925 u16 svid; 926 927 svid = (p >> 16) & 0xffff; 928 if (!svid) 929 return false; 930 931 if (pmdata->nsvids >= SVID_DISCOVERY_MAX) 932 goto abort; 933 934 pmdata->svids[pmdata->nsvids++] = svid; 935 tcpm_log(port, "SVID %d: 0x%x", pmdata->nsvids, svid); 936 937 svid = p & 0xffff; 938 if (!svid) 939 return false; 940 941 if (pmdata->nsvids >= SVID_DISCOVERY_MAX) 942 goto abort; 943 944 pmdata->svids[pmdata->nsvids++] = svid; 945 tcpm_log(port, "SVID %d: 0x%x", pmdata->nsvids, svid); 946 } 947 return true; 948abort: 949 tcpm_log(port, "SVID_DISCOVERY_MAX(%d) too low!", SVID_DISCOVERY_MAX); 950 return false; 951} 952 953static void svdm_consume_modes(struct tcpm_port *port, const __le32 *payload, 954 int cnt) 955{ 956 struct pd_mode_data *pmdata = &port->mode_data; 957 struct typec_altmode_desc *paltmode; 958 struct typec_mode_desc *pmode; 959 int i; 960 961 if (pmdata->altmodes >= ARRAY_SIZE(port->partner_altmode)) { 962 /* Already logged in svdm_consume_svids() */ 963 return; 964 } 965 966 paltmode = &pmdata->altmode_desc[pmdata->altmodes]; 967 memset(paltmode, 0, sizeof(*paltmode)); 968 969 paltmode->svid = pmdata->svids[pmdata->svid_index]; 970 971 tcpm_log(port, " Alternate mode %d: SVID 0x%04x", 972 pmdata->altmodes, paltmode->svid); 973 974 for (i = 1; i < cnt && paltmode->n_modes < ALTMODE_MAX_MODES; i++) { 975 pmode = &paltmode->modes[paltmode->n_modes]; 976 memset(pmode, 0, sizeof(*pmode)); 977 pmode->vdo = le32_to_cpu(payload[i]); 978 pmode->index = i - 1; 979 paltmode->n_modes++; 980 tcpm_log(port, " VDO %d: 0x%08x", 981 pmode->index, pmode->vdo); 982 } 983 port->partner_altmode[pmdata->altmodes] = 984 typec_partner_register_altmode(port->partner, paltmode); 985 if (!port->partner_altmode[pmdata->altmodes]) { 986 tcpm_log(port, 987 "Failed to register alternate modes for SVID 0x%04x", 988 paltmode->svid); 989 return; 990 } 991 pmdata->altmodes++; 992} 993 994#define supports_modal(port) PD_IDH_MODAL_SUPP((port)->partner_ident.id_header) 995 996static int tcpm_pd_svdm(struct tcpm_port *port, const __le32 *payload, int cnt, 997 u32 *response) 998{ 999 u32 p0 = le32_to_cpu(payload[0]); 1000 int cmd_type = PD_VDO_CMDT(p0); 1001 int cmd = PD_VDO_CMD(p0); 1002 struct pd_mode_data *modep; 1003 int rlen = 0; 1004 u16 svid; 1005 int i; 1006 1007 tcpm_log(port, "Rx VDM cmd 0x%x type %d cmd %d len %d", 1008 p0, cmd_type, cmd, cnt); 1009 1010 modep = &port->mode_data; 1011 1012 switch (cmd_type) { 1013 case CMDT_INIT: 1014 switch (cmd) { 1015 case CMD_DISCOVER_IDENT: 1016 /* 6.4.4.3.1: Only respond as UFP (device) */ 1017 if (port->data_role == TYPEC_DEVICE && 1018 port->nr_snk_vdo) { 1019 for (i = 0; i < port->nr_snk_vdo; i++) 1020 response[i + 1] = port->snk_vdo[i]; 1021 rlen = port->nr_snk_vdo + 1; 1022 } 1023 break; 1024 case CMD_DISCOVER_SVID: 1025 break; 1026 case CMD_DISCOVER_MODES: 1027 break; 1028 case CMD_ENTER_MODE: 1029 break; 1030 case CMD_EXIT_MODE: 1031 break; 1032 case CMD_ATTENTION: 1033 break; 1034 default: 1035 break; 1036 } 1037 if (rlen >= 1) { 1038 response[0] = p0 | VDO_CMDT(CMDT_RSP_ACK); 1039 } else if (rlen == 0) { 1040 response[0] = p0 | VDO_CMDT(CMDT_RSP_NAK); 1041 rlen = 1; 1042 } else { 1043 response[0] = p0 | VDO_CMDT(CMDT_RSP_BUSY); 1044 rlen = 1; 1045 } 1046 break; 1047 case CMDT_RSP_ACK: 1048 /* silently drop message if we are not connected */ 1049 if (IS_ERR_OR_NULL(port->partner)) 1050 break; 1051 1052 switch (cmd) { 1053 case CMD_DISCOVER_IDENT: 1054 /* 6.4.4.3.1 */ 1055 svdm_consume_identity(port, payload, cnt); 1056 response[0] = VDO(USB_SID_PD, 1, CMD_DISCOVER_SVID); 1057 rlen = 1; 1058 break; 1059 case CMD_DISCOVER_SVID: 1060 /* 6.4.4.3.2 */ 1061 if (svdm_consume_svids(port, payload, cnt)) { 1062 response[0] = VDO(USB_SID_PD, 1, 1063 CMD_DISCOVER_SVID); 1064 rlen = 1; 1065 } else if (modep->nsvids && supports_modal(port)) { 1066 response[0] = VDO(modep->svids[0], 1, 1067 CMD_DISCOVER_MODES); 1068 rlen = 1; 1069 } 1070 break; 1071 case CMD_DISCOVER_MODES: 1072 /* 6.4.4.3.3 */ 1073 svdm_consume_modes(port, payload, cnt); 1074 modep->svid_index++; 1075 if (modep->svid_index < modep->nsvids) { 1076 svid = modep->svids[modep->svid_index]; 1077 response[0] = VDO(svid, 1, CMD_DISCOVER_MODES); 1078 rlen = 1; 1079 } else { 1080 /* enter alternate mode if/when implemented */ 1081 } 1082 break; 1083 case CMD_ENTER_MODE: 1084 break; 1085 default: 1086 break; 1087 } 1088 break; 1089 default: 1090 break; 1091 } 1092 1093 return rlen; 1094} 1095 1096static void tcpm_handle_vdm_request(struct tcpm_port *port, 1097 const __le32 *payload, int cnt) 1098{ 1099 int rlen = 0; 1100 u32 response[8] = { }; 1101 u32 p0 = le32_to_cpu(payload[0]); 1102 1103 if (port->vdm_state == VDM_STATE_BUSY) { 1104 /* If UFP responded busy retry after timeout */ 1105 if (PD_VDO_CMDT(p0) == CMDT_RSP_BUSY) { 1106 port->vdm_state = VDM_STATE_WAIT_RSP_BUSY; 1107 port->vdo_retry = (p0 & ~VDO_CMDT_MASK) | 1108 CMDT_INIT; 1109 mod_delayed_work(port->wq, &port->vdm_state_machine, 1110 msecs_to_jiffies(PD_T_VDM_BUSY)); 1111 return; 1112 } 1113 port->vdm_state = VDM_STATE_DONE; 1114 } 1115 1116 if (PD_VDO_SVDM(p0)) 1117 rlen = tcpm_pd_svdm(port, payload, cnt, response); 1118 1119 if (rlen > 0) { 1120 tcpm_queue_vdm(port, response[0], &response[1], rlen - 1); 1121 mod_delayed_work(port->wq, &port->vdm_state_machine, 0); 1122 } 1123} 1124 1125static void tcpm_send_vdm(struct tcpm_port *port, u32 vid, int cmd, 1126 const u32 *data, int count) 1127{ 1128 u32 header; 1129 1130 if (WARN_ON(count > VDO_MAX_SIZE - 1)) 1131 count = VDO_MAX_SIZE - 1; 1132 1133 /* set VDM header with VID & CMD */ 1134 header = VDO(vid, ((vid & USB_SID_PD) == USB_SID_PD) ? 1135 1 : (PD_VDO_CMD(cmd) <= CMD_ATTENTION), cmd); 1136 tcpm_queue_vdm(port, header, data, count); 1137 1138 mod_delayed_work(port->wq, &port->vdm_state_machine, 0); 1139} 1140 1141static unsigned int vdm_ready_timeout(u32 vdm_hdr) 1142{ 1143 unsigned int timeout; 1144 int cmd = PD_VDO_CMD(vdm_hdr); 1145 1146 /* its not a structured VDM command */ 1147 if (!PD_VDO_SVDM(vdm_hdr)) 1148 return PD_T_VDM_UNSTRUCTURED; 1149 1150 switch (PD_VDO_CMDT(vdm_hdr)) { 1151 case CMDT_INIT: 1152 if (cmd == CMD_ENTER_MODE || cmd == CMD_EXIT_MODE) 1153 timeout = PD_T_VDM_WAIT_MODE_E; 1154 else 1155 timeout = PD_T_VDM_SNDR_RSP; 1156 break; 1157 default: 1158 if (cmd == CMD_ENTER_MODE || cmd == CMD_EXIT_MODE) 1159 timeout = PD_T_VDM_E_MODE; 1160 else 1161 timeout = PD_T_VDM_RCVR_RSP; 1162 break; 1163 } 1164 return timeout; 1165} 1166 1167static void vdm_run_state_machine(struct tcpm_port *port) 1168{ 1169 struct pd_message msg; 1170 int i, res; 1171 1172 switch (port->vdm_state) { 1173 case VDM_STATE_READY: 1174 /* Only transmit VDM if attached */ 1175 if (!port->attached) { 1176 port->vdm_state = VDM_STATE_ERR_BUSY; 1177 break; 1178 } 1179 1180 /* 1181 * if there's traffic or we're not in PDO ready state don't send 1182 * a VDM. 1183 */ 1184 if (port->state != SRC_READY && port->state != SNK_READY) 1185 break; 1186 1187 /* Prepare and send VDM */ 1188 memset(&msg, 0, sizeof(msg)); 1189 msg.header = PD_HEADER_LE(PD_DATA_VENDOR_DEF, 1190 port->pwr_role, 1191 port->data_role, 1192 port->message_id, port->vdo_count); 1193 for (i = 0; i < port->vdo_count; i++) 1194 msg.payload[i] = cpu_to_le32(port->vdo_data[i]); 1195 res = tcpm_pd_transmit(port, TCPC_TX_SOP, &msg); 1196 if (res < 0) { 1197 port->vdm_state = VDM_STATE_ERR_SEND; 1198 } else { 1199 unsigned long timeout; 1200 1201 port->vdm_retries = 0; 1202 port->vdm_state = VDM_STATE_BUSY; 1203 timeout = vdm_ready_timeout(port->vdo_data[0]); 1204 mod_delayed_work(port->wq, &port->vdm_state_machine, 1205 timeout); 1206 } 1207 break; 1208 case VDM_STATE_WAIT_RSP_BUSY: 1209 port->vdo_data[0] = port->vdo_retry; 1210 port->vdo_count = 1; 1211 port->vdm_state = VDM_STATE_READY; 1212 break; 1213 case VDM_STATE_BUSY: 1214 port->vdm_state = VDM_STATE_ERR_TMOUT; 1215 break; 1216 case VDM_STATE_ERR_SEND: 1217 /* 1218 * A partner which does not support USB PD will not reply, 1219 * so this is not a fatal error. At the same time, some 1220 * devices may not return GoodCRC under some circumstances, 1221 * so we need to retry. 1222 */ 1223 if (port->vdm_retries < 3) { 1224 tcpm_log(port, "VDM Tx error, retry"); 1225 port->vdm_retries++; 1226 port->vdm_state = VDM_STATE_READY; 1227 } 1228 break; 1229 default: 1230 break; 1231 } 1232} 1233 1234static void vdm_state_machine_work(struct work_struct *work) 1235{ 1236 struct tcpm_port *port = container_of(work, struct tcpm_port, 1237 vdm_state_machine.work); 1238 enum vdm_states prev_state; 1239 1240 mutex_lock(&port->lock); 1241 1242 /* 1243 * Continue running as long as the port is not busy and there was 1244 * a state change. 1245 */ 1246 do { 1247 prev_state = port->vdm_state; 1248 vdm_run_state_machine(port); 1249 } while (port->vdm_state != prev_state && 1250 port->vdm_state != VDM_STATE_BUSY); 1251 1252 mutex_unlock(&port->lock); 1253} 1254 1255enum pdo_err { 1256 PDO_NO_ERR, 1257 PDO_ERR_NO_VSAFE5V, 1258 PDO_ERR_VSAFE5V_NOT_FIRST, 1259 PDO_ERR_PDO_TYPE_NOT_IN_ORDER, 1260 PDO_ERR_FIXED_NOT_SORTED, 1261 PDO_ERR_VARIABLE_BATT_NOT_SORTED, 1262 PDO_ERR_DUPE_PDO, 1263}; 1264 1265static const char * const pdo_err_msg[] = { 1266 [PDO_ERR_NO_VSAFE5V] = 1267 " err: source/sink caps should atleast have vSafe5V", 1268 [PDO_ERR_VSAFE5V_NOT_FIRST] = 1269 " err: vSafe5V Fixed Supply Object Shall always be the first object", 1270 [PDO_ERR_PDO_TYPE_NOT_IN_ORDER] = 1271 " err: PDOs should be in the following order: Fixed; Battery; Variable", 1272 [PDO_ERR_FIXED_NOT_SORTED] = 1273 " err: Fixed supply pdos should be in increasing order of their fixed voltage", 1274 [PDO_ERR_VARIABLE_BATT_NOT_SORTED] = 1275 " err: Variable/Battery supply pdos should be in increasing order of their minimum voltage", 1276 [PDO_ERR_DUPE_PDO] = 1277 " err: Variable/Batt supply pdos cannot have same min/max voltage", 1278}; 1279 1280static enum pdo_err tcpm_caps_err(struct tcpm_port *port, const u32 *pdo, 1281 unsigned int nr_pdo) 1282{ 1283 unsigned int i; 1284 1285 /* Should at least contain vSafe5v */ 1286 if (nr_pdo < 1) 1287 return PDO_ERR_NO_VSAFE5V; 1288 1289 /* The vSafe5V Fixed Supply Object Shall always be the first object */ 1290 if (pdo_type(pdo[0]) != PDO_TYPE_FIXED || 1291 pdo_fixed_voltage(pdo[0]) != VSAFE5V) 1292 return PDO_ERR_VSAFE5V_NOT_FIRST; 1293 1294 for (i = 1; i < nr_pdo; i++) { 1295 if (pdo_type(pdo[i]) < pdo_type(pdo[i - 1])) { 1296 return PDO_ERR_PDO_TYPE_NOT_IN_ORDER; 1297 } else if (pdo_type(pdo[i]) == pdo_type(pdo[i - 1])) { 1298 enum pd_pdo_type type = pdo_type(pdo[i]); 1299 1300 switch (type) { 1301 /* 1302 * The remaining Fixed Supply Objects, if 1303 * present, shall be sent in voltage order; 1304 * lowest to highest. 1305 */ 1306 case PDO_TYPE_FIXED: 1307 if (pdo_fixed_voltage(pdo[i]) <= 1308 pdo_fixed_voltage(pdo[i - 1])) 1309 return PDO_ERR_FIXED_NOT_SORTED; 1310 break; 1311 /* 1312 * The Battery Supply Objects and Variable 1313 * supply, if present shall be sent in Minimum 1314 * Voltage order; lowest to highest. 1315 */ 1316 case PDO_TYPE_VAR: 1317 case PDO_TYPE_BATT: 1318 if (pdo_min_voltage(pdo[i]) < 1319 pdo_min_voltage(pdo[i - 1])) 1320 return PDO_ERR_VARIABLE_BATT_NOT_SORTED; 1321 else if ((pdo_min_voltage(pdo[i]) == 1322 pdo_min_voltage(pdo[i - 1])) && 1323 (pdo_max_voltage(pdo[i]) == 1324 pdo_min_voltage(pdo[i - 1]))) 1325 return PDO_ERR_DUPE_PDO; 1326 break; 1327 default: 1328 tcpm_log_force(port, " Unknown pdo type"); 1329 } 1330 } 1331 } 1332 1333 return PDO_NO_ERR; 1334} 1335 1336static int tcpm_validate_caps(struct tcpm_port *port, const u32 *pdo, 1337 unsigned int nr_pdo) 1338{ 1339 enum pdo_err err_index = tcpm_caps_err(port, pdo, nr_pdo); 1340 1341 if (err_index != PDO_NO_ERR) { 1342 tcpm_log_force(port, " %s", pdo_err_msg[err_index]); 1343 return -EINVAL; 1344 } 1345 1346 return 0; 1347} 1348 1349/* 1350 * PD (data, control) command handling functions 1351 */ 1352static void tcpm_pd_data_request(struct tcpm_port *port, 1353 const struct pd_message *msg) 1354{ 1355 enum pd_data_msg_type type = pd_header_type_le(msg->header); 1356 unsigned int cnt = pd_header_cnt_le(msg->header); 1357 unsigned int i; 1358 1359 switch (type) { 1360 case PD_DATA_SOURCE_CAP: 1361 if (port->pwr_role != TYPEC_SINK) 1362 break; 1363 1364 for (i = 0; i < cnt; i++) 1365 port->source_caps[i] = le32_to_cpu(msg->payload[i]); 1366 1367 port->nr_source_caps = cnt; 1368 1369 tcpm_log_source_caps(port); 1370 1371 tcpm_validate_caps(port, port->source_caps, 1372 port->nr_source_caps); 1373 1374 /* 1375 * This message may be received even if VBUS is not 1376 * present. This is quite unexpected; see USB PD 1377 * specification, sections 8.3.3.6.3.1 and 8.3.3.6.3.2. 1378 * However, at the same time, we must be ready to 1379 * receive this message and respond to it 15ms after 1380 * receiving PS_RDY during power swap operations, no matter 1381 * if VBUS is available or not (USB PD specification, 1382 * section 6.5.9.2). 1383 * So we need to accept the message either way, 1384 * but be prepared to keep waiting for VBUS after it was 1385 * handled. 1386 */ 1387 tcpm_set_state(port, SNK_NEGOTIATE_CAPABILITIES, 0); 1388 break; 1389 case PD_DATA_REQUEST: 1390 if (port->pwr_role != TYPEC_SOURCE || 1391 cnt != 1) { 1392 tcpm_queue_message(port, PD_MSG_CTRL_REJECT); 1393 break; 1394 } 1395 port->sink_request = le32_to_cpu(msg->payload[0]); 1396 tcpm_set_state(port, SRC_NEGOTIATE_CAPABILITIES, 0); 1397 break; 1398 case PD_DATA_SINK_CAP: 1399 /* We don't do anything with this at the moment... */ 1400 for (i = 0; i < cnt; i++) 1401 port->sink_caps[i] = le32_to_cpu(msg->payload[i]); 1402 port->nr_sink_caps = cnt; 1403 break; 1404 case PD_DATA_VENDOR_DEF: 1405 tcpm_handle_vdm_request(port, msg->payload, cnt); 1406 break; 1407 case PD_DATA_BIST: 1408 if (port->state == SRC_READY || port->state == SNK_READY) { 1409 port->bist_request = le32_to_cpu(msg->payload[0]); 1410 tcpm_set_state(port, BIST_RX, 0); 1411 } 1412 break; 1413 default: 1414 tcpm_log(port, "Unhandled data message type %#x", type); 1415 break; 1416 } 1417} 1418 1419static void tcpm_pd_ctrl_request(struct tcpm_port *port, 1420 const struct pd_message *msg) 1421{ 1422 enum pd_ctrl_msg_type type = pd_header_type_le(msg->header); 1423 enum tcpm_state next_state; 1424 1425 switch (type) { 1426 case PD_CTRL_GOOD_CRC: 1427 case PD_CTRL_PING: 1428 break; 1429 case PD_CTRL_GET_SOURCE_CAP: 1430 switch (port->state) { 1431 case SRC_READY: 1432 case SNK_READY: 1433 tcpm_queue_message(port, PD_MSG_DATA_SOURCE_CAP); 1434 break; 1435 default: 1436 tcpm_queue_message(port, PD_MSG_CTRL_REJECT); 1437 break; 1438 } 1439 break; 1440 case PD_CTRL_GET_SINK_CAP: 1441 switch (port->state) { 1442 case SRC_READY: 1443 case SNK_READY: 1444 tcpm_queue_message(port, PD_MSG_DATA_SINK_CAP); 1445 break; 1446 default: 1447 tcpm_queue_message(port, PD_MSG_CTRL_REJECT); 1448 break; 1449 } 1450 break; 1451 case PD_CTRL_GOTO_MIN: 1452 break; 1453 case PD_CTRL_PS_RDY: 1454 switch (port->state) { 1455 case SNK_TRANSITION_SINK: 1456 if (port->vbus_present) { 1457 tcpm_set_current_limit(port, 1458 port->current_limit, 1459 port->supply_voltage); 1460 port->explicit_contract = true; 1461 tcpm_set_state(port, SNK_READY, 0); 1462 } else { 1463 /* 1464 * Seen after power swap. Keep waiting for VBUS 1465 * in a transitional state. 1466 */ 1467 tcpm_set_state(port, 1468 SNK_TRANSITION_SINK_VBUS, 0); 1469 } 1470 break; 1471 case PR_SWAP_SRC_SNK_SOURCE_OFF_CC_DEBOUNCED: 1472 tcpm_set_state(port, PR_SWAP_SRC_SNK_SINK_ON, 0); 1473 break; 1474 case PR_SWAP_SNK_SRC_SINK_OFF: 1475 tcpm_set_state(port, PR_SWAP_SNK_SRC_SOURCE_ON, 0); 1476 break; 1477 case VCONN_SWAP_WAIT_FOR_VCONN: 1478 tcpm_set_state(port, VCONN_SWAP_TURN_OFF_VCONN, 0); 1479 break; 1480 default: 1481 break; 1482 } 1483 break; 1484 case PD_CTRL_REJECT: 1485 case PD_CTRL_WAIT: 1486 switch (port->state) { 1487 case SNK_NEGOTIATE_CAPABILITIES: 1488 /* USB PD specification, Figure 8-43 */ 1489 if (port->explicit_contract) 1490 next_state = SNK_READY; 1491 else 1492 next_state = SNK_WAIT_CAPABILITIES; 1493 tcpm_set_state(port, next_state, 0); 1494 break; 1495 case DR_SWAP_SEND: 1496 port->swap_status = (type == PD_CTRL_WAIT ? 1497 -EAGAIN : -EOPNOTSUPP); 1498 tcpm_set_state(port, DR_SWAP_CANCEL, 0); 1499 break; 1500 case PR_SWAP_SEND: 1501 port->swap_status = (type == PD_CTRL_WAIT ? 1502 -EAGAIN : -EOPNOTSUPP); 1503 tcpm_set_state(port, PR_SWAP_CANCEL, 0); 1504 break; 1505 case VCONN_SWAP_SEND: 1506 port->swap_status = (type == PD_CTRL_WAIT ? 1507 -EAGAIN : -EOPNOTSUPP); 1508 tcpm_set_state(port, VCONN_SWAP_CANCEL, 0); 1509 break; 1510 default: 1511 break; 1512 } 1513 break; 1514 case PD_CTRL_ACCEPT: 1515 switch (port->state) { 1516 case SNK_NEGOTIATE_CAPABILITIES: 1517 tcpm_set_state(port, SNK_TRANSITION_SINK, 0); 1518 break; 1519 case SOFT_RESET_SEND: 1520 port->message_id = 0; 1521 port->rx_msgid = -1; 1522 if (port->pwr_role == TYPEC_SOURCE) 1523 next_state = SRC_SEND_CAPABILITIES; 1524 else 1525 next_state = SNK_WAIT_CAPABILITIES; 1526 tcpm_set_state(port, next_state, 0); 1527 break; 1528 case DR_SWAP_SEND: 1529 tcpm_set_state(port, DR_SWAP_CHANGE_DR, 0); 1530 break; 1531 case PR_SWAP_SEND: 1532 tcpm_set_state(port, PR_SWAP_START, 0); 1533 break; 1534 case VCONN_SWAP_SEND: 1535 tcpm_set_state(port, VCONN_SWAP_START, 0); 1536 break; 1537 default: 1538 break; 1539 } 1540 break; 1541 case PD_CTRL_SOFT_RESET: 1542 tcpm_set_state(port, SOFT_RESET, 0); 1543 break; 1544 case PD_CTRL_DR_SWAP: 1545 if (port->port_type != TYPEC_PORT_DRP) { 1546 tcpm_queue_message(port, PD_MSG_CTRL_REJECT); 1547 break; 1548 } 1549 /* 1550 * XXX 1551 * 6.3.9: If an alternate mode is active, a request to swap 1552 * alternate modes shall trigger a port reset. 1553 */ 1554 switch (port->state) { 1555 case SRC_READY: 1556 case SNK_READY: 1557 tcpm_set_state(port, DR_SWAP_ACCEPT, 0); 1558 break; 1559 default: 1560 tcpm_queue_message(port, PD_MSG_CTRL_WAIT); 1561 break; 1562 } 1563 break; 1564 case PD_CTRL_PR_SWAP: 1565 if (port->port_type != TYPEC_PORT_DRP) { 1566 tcpm_queue_message(port, PD_MSG_CTRL_REJECT); 1567 break; 1568 } 1569 switch (port->state) { 1570 case SRC_READY: 1571 case SNK_READY: 1572 tcpm_set_state(port, PR_SWAP_ACCEPT, 0); 1573 break; 1574 default: 1575 tcpm_queue_message(port, PD_MSG_CTRL_WAIT); 1576 break; 1577 } 1578 break; 1579 case PD_CTRL_VCONN_SWAP: 1580 switch (port->state) { 1581 case SRC_READY: 1582 case SNK_READY: 1583 tcpm_set_state(port, VCONN_SWAP_ACCEPT, 0); 1584 break; 1585 default: 1586 tcpm_queue_message(port, PD_MSG_CTRL_WAIT); 1587 break; 1588 } 1589 break; 1590 default: 1591 tcpm_log(port, "Unhandled ctrl message type %#x", type); 1592 break; 1593 } 1594} 1595 1596static void tcpm_pd_rx_handler(struct work_struct *work) 1597{ 1598 struct pd_rx_event *event = container_of(work, 1599 struct pd_rx_event, work); 1600 const struct pd_message *msg = &event->msg; 1601 unsigned int cnt = pd_header_cnt_le(msg->header); 1602 struct tcpm_port *port = event->port; 1603 1604 mutex_lock(&port->lock); 1605 1606 tcpm_log(port, "PD RX, header: %#x [%d]", le16_to_cpu(msg->header), 1607 port->attached); 1608 1609 if (port->attached) { 1610 enum pd_ctrl_msg_type type = pd_header_type_le(msg->header); 1611 unsigned int msgid = pd_header_msgid_le(msg->header); 1612 1613 /* 1614 * USB PD standard, 6.6.1.2: 1615 * "... if MessageID value in a received Message is the 1616 * same as the stored value, the receiver shall return a 1617 * GoodCRC Message with that MessageID value and drop 1618 * the Message (this is a retry of an already received 1619 * Message). Note: this shall not apply to the Soft_Reset 1620 * Message which always has a MessageID value of zero." 1621 */ 1622 if (msgid == port->rx_msgid && type != PD_CTRL_SOFT_RESET) 1623 goto done; 1624 port->rx_msgid = msgid; 1625 1626 /* 1627 * If both ends believe to be DFP/host, we have a data role 1628 * mismatch. 1629 */ 1630 if (!!(le16_to_cpu(msg->header) & PD_HEADER_DATA_ROLE) == 1631 (port->data_role == TYPEC_HOST)) { 1632 tcpm_log(port, 1633 "Data role mismatch, initiating error recovery"); 1634 tcpm_set_state(port, ERROR_RECOVERY, 0); 1635 } else { 1636 if (cnt) 1637 tcpm_pd_data_request(port, msg); 1638 else 1639 tcpm_pd_ctrl_request(port, msg); 1640 } 1641 } 1642 1643done: 1644 mutex_unlock(&port->lock); 1645 kfree(event); 1646} 1647 1648void tcpm_pd_receive(struct tcpm_port *port, const struct pd_message *msg) 1649{ 1650 struct pd_rx_event *event; 1651 1652 event = kzalloc(sizeof(*event), GFP_ATOMIC); 1653 if (!event) 1654 return; 1655 1656 INIT_WORK(&event->work, tcpm_pd_rx_handler); 1657 event->port = port; 1658 memcpy(&event->msg, msg, sizeof(*msg)); 1659 queue_work(port->wq, &event->work); 1660} 1661EXPORT_SYMBOL_GPL(tcpm_pd_receive); 1662 1663static int tcpm_pd_send_control(struct tcpm_port *port, 1664 enum pd_ctrl_msg_type type) 1665{ 1666 struct pd_message msg; 1667 1668 memset(&msg, 0, sizeof(msg)); 1669 msg.header = PD_HEADER_LE(type, port->pwr_role, 1670 port->data_role, 1671 port->message_id, 0); 1672 1673 return tcpm_pd_transmit(port, TCPC_TX_SOP, &msg); 1674} 1675 1676/* 1677 * Send queued message without affecting state. 1678 * Return true if state machine should go back to sleep, 1679 * false otherwise. 1680 */ 1681static bool tcpm_send_queued_message(struct tcpm_port *port) 1682{ 1683 enum pd_msg_request queued_message; 1684 1685 do { 1686 queued_message = port->queued_message; 1687 port->queued_message = PD_MSG_NONE; 1688 1689 switch (queued_message) { 1690 case PD_MSG_CTRL_WAIT: 1691 tcpm_pd_send_control(port, PD_CTRL_WAIT); 1692 break; 1693 case PD_MSG_CTRL_REJECT: 1694 tcpm_pd_send_control(port, PD_CTRL_REJECT); 1695 break; 1696 case PD_MSG_DATA_SINK_CAP: 1697 tcpm_pd_send_sink_caps(port); 1698 break; 1699 case PD_MSG_DATA_SOURCE_CAP: 1700 tcpm_pd_send_source_caps(port); 1701 break; 1702 default: 1703 break; 1704 } 1705 } while (port->queued_message != PD_MSG_NONE); 1706 1707 if (port->delayed_state != INVALID_STATE) { 1708 if (time_is_after_jiffies(port->delayed_runtime)) { 1709 mod_delayed_work(port->wq, &port->state_machine, 1710 port->delayed_runtime - jiffies); 1711 return true; 1712 } 1713 port->delayed_state = INVALID_STATE; 1714 } 1715 return false; 1716} 1717 1718static int tcpm_pd_check_request(struct tcpm_port *port) 1719{ 1720 u32 pdo, rdo = port->sink_request; 1721 unsigned int max, op, pdo_max, index; 1722 enum pd_pdo_type type; 1723 1724 index = rdo_index(rdo); 1725 if (!index || index > port->nr_src_pdo) 1726 return -EINVAL; 1727 1728 pdo = port->src_pdo[index - 1]; 1729 type = pdo_type(pdo); 1730 switch (type) { 1731 case PDO_TYPE_FIXED: 1732 case PDO_TYPE_VAR: 1733 max = rdo_max_current(rdo); 1734 op = rdo_op_current(rdo); 1735 pdo_max = pdo_max_current(pdo); 1736 1737 if (op > pdo_max) 1738 return -EINVAL; 1739 if (max > pdo_max && !(rdo & RDO_CAP_MISMATCH)) 1740 return -EINVAL; 1741 1742 if (type == PDO_TYPE_FIXED) 1743 tcpm_log(port, 1744 "Requested %u mV, %u mA for %u / %u mA", 1745 pdo_fixed_voltage(pdo), pdo_max, op, max); 1746 else 1747 tcpm_log(port, 1748 "Requested %u -> %u mV, %u mA for %u / %u mA", 1749 pdo_min_voltage(pdo), pdo_max_voltage(pdo), 1750 pdo_max, op, max); 1751 break; 1752 case PDO_TYPE_BATT: 1753 max = rdo_max_power(rdo); 1754 op = rdo_op_power(rdo); 1755 pdo_max = pdo_max_power(pdo); 1756 1757 if (op > pdo_max) 1758 return -EINVAL; 1759 if (max > pdo_max && !(rdo & RDO_CAP_MISMATCH)) 1760 return -EINVAL; 1761 tcpm_log(port, 1762 "Requested %u -> %u mV, %u mW for %u / %u mW", 1763 pdo_min_voltage(pdo), pdo_max_voltage(pdo), 1764 pdo_max, op, max); 1765 break; 1766 default: 1767 return -EINVAL; 1768 } 1769 1770 port->op_vsafe5v = index == 1; 1771 1772 return 0; 1773} 1774 1775static int tcpm_pd_select_pdo(struct tcpm_port *port) 1776{ 1777 unsigned int i, max_mw = 0, max_mv = 0; 1778 int ret = -EINVAL; 1779 1780 /* 1781 * Select the source PDO providing the most power while staying within 1782 * the board's voltage limits. Prefer PDO providing exp 1783 */ 1784 for (i = 0; i < port->nr_source_caps; i++) { 1785 u32 pdo = port->source_caps[i]; 1786 enum pd_pdo_type type = pdo_type(pdo); 1787 unsigned int mv, ma, mw; 1788 1789 if (type == PDO_TYPE_FIXED) 1790 mv = pdo_fixed_voltage(pdo); 1791 else 1792 mv = pdo_min_voltage(pdo); 1793 1794 if (type == PDO_TYPE_BATT) { 1795 mw = pdo_max_power(pdo); 1796 } else { 1797 ma = min(pdo_max_current(pdo), 1798 port->max_snk_ma); 1799 mw = ma * mv / 1000; 1800 } 1801 1802 /* Perfer higher voltages if available */ 1803 if ((mw > max_mw || (mw == max_mw && mv > max_mv)) && 1804 mv <= port->max_snk_mv) { 1805 ret = i; 1806 max_mw = mw; 1807 max_mv = mv; 1808 } 1809 } 1810 1811 return ret; 1812} 1813 1814static int tcpm_pd_build_request(struct tcpm_port *port, u32 *rdo) 1815{ 1816 unsigned int mv, ma, mw, flags; 1817 unsigned int max_ma, max_mw; 1818 enum pd_pdo_type type; 1819 int index; 1820 u32 pdo; 1821 1822 index = tcpm_pd_select_pdo(port); 1823 if (index < 0) 1824 return -EINVAL; 1825 pdo = port->source_caps[index]; 1826 type = pdo_type(pdo); 1827 1828 if (type == PDO_TYPE_FIXED) 1829 mv = pdo_fixed_voltage(pdo); 1830 else 1831 mv = pdo_min_voltage(pdo); 1832 1833 /* Select maximum available current within the board's power limit */ 1834 if (type == PDO_TYPE_BATT) { 1835 mw = pdo_max_power(pdo); 1836 ma = 1000 * min(mw, port->max_snk_mw) / mv; 1837 } else { 1838 ma = min(pdo_max_current(pdo), 1839 1000 * port->max_snk_mw / mv); 1840 } 1841 ma = min(ma, port->max_snk_ma); 1842 1843 flags = RDO_USB_COMM | RDO_NO_SUSPEND; 1844 1845 /* Set mismatch bit if offered power is less than operating power */ 1846 mw = ma * mv / 1000; 1847 max_ma = ma; 1848 max_mw = mw; 1849 if (mw < port->operating_snk_mw) { 1850 flags |= RDO_CAP_MISMATCH; 1851 max_mw = port->operating_snk_mw; 1852 max_ma = max_mw * 1000 / mv; 1853 } 1854 1855 tcpm_log(port, "cc=%d cc1=%d cc2=%d vbus=%d vconn=%s polarity=%d", 1856 port->cc_req, port->cc1, port->cc2, port->vbus_source, 1857 port->vconn_role == TYPEC_SOURCE ? "source" : "sink", 1858 port->polarity); 1859 1860 if (type == PDO_TYPE_BATT) { 1861 *rdo = RDO_BATT(index + 1, mw, max_mw, flags); 1862 1863 tcpm_log(port, "Requesting PDO %d: %u mV, %u mW%s", 1864 index, mv, mw, 1865 flags & RDO_CAP_MISMATCH ? " [mismatch]" : ""); 1866 } else { 1867 *rdo = RDO_FIXED(index + 1, ma, max_ma, flags); 1868 1869 tcpm_log(port, "Requesting PDO %d: %u mV, %u mA%s", 1870 index, mv, ma, 1871 flags & RDO_CAP_MISMATCH ? " [mismatch]" : ""); 1872 } 1873 1874 port->current_limit = ma; 1875 port->supply_voltage = mv; 1876 1877 return 0; 1878} 1879 1880static int tcpm_pd_send_request(struct tcpm_port *port) 1881{ 1882 struct pd_message msg; 1883 int ret; 1884 u32 rdo; 1885 1886 ret = tcpm_pd_build_request(port, &rdo); 1887 if (ret < 0) 1888 return ret; 1889 1890 memset(&msg, 0, sizeof(msg)); 1891 msg.header = PD_HEADER_LE(PD_DATA_REQUEST, 1892 port->pwr_role, 1893 port->data_role, 1894 port->message_id, 1); 1895 msg.payload[0] = cpu_to_le32(rdo); 1896 1897 return tcpm_pd_transmit(port, TCPC_TX_SOP, &msg); 1898} 1899 1900static int tcpm_set_vbus(struct tcpm_port *port, bool enable) 1901{ 1902 int ret; 1903 1904 if (enable && port->vbus_charge) 1905 return -EINVAL; 1906 1907 tcpm_log(port, "vbus:=%d charge=%d", enable, port->vbus_charge); 1908 1909 ret = port->tcpc->set_vbus(port->tcpc, enable, port->vbus_charge); 1910 if (ret < 0) 1911 return ret; 1912 1913 port->vbus_source = enable; 1914 return 0; 1915} 1916 1917static int tcpm_set_charge(struct tcpm_port *port, bool charge) 1918{ 1919 int ret; 1920 1921 if (charge && port->vbus_source) 1922 return -EINVAL; 1923 1924 if (charge != port->vbus_charge) { 1925 tcpm_log(port, "vbus=%d charge:=%d", port->vbus_source, charge); 1926 ret = port->tcpc->set_vbus(port->tcpc, port->vbus_source, 1927 charge); 1928 if (ret < 0) 1929 return ret; 1930 } 1931 port->vbus_charge = charge; 1932 return 0; 1933} 1934 1935static bool tcpm_start_drp_toggling(struct tcpm_port *port) 1936{ 1937 int ret; 1938 1939 if (port->tcpc->start_drp_toggling && 1940 port->port_type == TYPEC_PORT_DRP) { 1941 tcpm_log_force(port, "Start DRP toggling"); 1942 ret = port->tcpc->start_drp_toggling(port->tcpc, 1943 tcpm_rp_cc(port)); 1944 if (!ret) 1945 return true; 1946 } 1947 1948 return false; 1949} 1950 1951static void tcpm_set_cc(struct tcpm_port *port, enum typec_cc_status cc) 1952{ 1953 tcpm_log(port, "cc:=%d", cc); 1954 port->cc_req = cc; 1955 port->tcpc->set_cc(port->tcpc, cc); 1956} 1957 1958static int tcpm_init_vbus(struct tcpm_port *port) 1959{ 1960 int ret; 1961 1962 ret = port->tcpc->set_vbus(port->tcpc, false, false); 1963 port->vbus_source = false; 1964 port->vbus_charge = false; 1965 return ret; 1966} 1967 1968static int tcpm_init_vconn(struct tcpm_port *port) 1969{ 1970 int ret; 1971 1972 ret = port->tcpc->set_vconn(port->tcpc, false); 1973 port->vconn_role = TYPEC_SINK; 1974 return ret; 1975} 1976 1977static void tcpm_typec_connect(struct tcpm_port *port) 1978{ 1979 if (!port->connected) { 1980 /* Make sure we don't report stale identity information */ 1981 memset(&port->partner_ident, 0, sizeof(port->partner_ident)); 1982 port->partner_desc.usb_pd = port->pd_capable; 1983 if (tcpm_port_is_debug(port)) 1984 port->partner_desc.accessory = TYPEC_ACCESSORY_DEBUG; 1985 else if (tcpm_port_is_audio(port)) 1986 port->partner_desc.accessory = TYPEC_ACCESSORY_AUDIO; 1987 else 1988 port->partner_desc.accessory = TYPEC_ACCESSORY_NONE; 1989 port->partner = typec_register_partner(port->typec_port, 1990 &port->partner_desc); 1991 port->connected = true; 1992 } 1993} 1994 1995static int tcpm_src_attach(struct tcpm_port *port) 1996{ 1997 enum typec_cc_polarity polarity = 1998 port->cc2 == TYPEC_CC_RD ? TYPEC_POLARITY_CC2 1999 : TYPEC_POLARITY_CC1; 2000 int ret; 2001 2002 if (port->attached) 2003 return 0; 2004 2005 ret = tcpm_set_polarity(port, polarity); 2006 if (ret < 0) 2007 return ret; 2008 2009 ret = tcpm_set_roles(port, true, TYPEC_SOURCE, TYPEC_HOST); 2010 if (ret < 0) 2011 return ret; 2012 2013 ret = port->tcpc->set_pd_rx(port->tcpc, true); 2014 if (ret < 0) 2015 goto out_disable_mux; 2016 2017 /* 2018 * USB Type-C specification, version 1.2, 2019 * chapter 4.5.2.2.8.1 (Attached.SRC Requirements) 2020 * Enable VCONN only if the non-RD port is set to RA. 2021 */ 2022 if ((polarity == TYPEC_POLARITY_CC1 && port->cc2 == TYPEC_CC_RA) || 2023 (polarity == TYPEC_POLARITY_CC2 && port->cc1 == TYPEC_CC_RA)) { 2024 ret = tcpm_set_vconn(port, true); 2025 if (ret < 0) 2026 goto out_disable_pd; 2027 } 2028 2029 ret = tcpm_set_vbus(port, true); 2030 if (ret < 0) 2031 goto out_disable_vconn; 2032 2033 port->pd_capable = false; 2034 2035 port->partner = NULL; 2036 2037 port->attached = true; 2038 port->send_discover = true; 2039 2040 return 0; 2041 2042out_disable_vconn: 2043 tcpm_set_vconn(port, false); 2044out_disable_pd: 2045 port->tcpc->set_pd_rx(port->tcpc, false); 2046out_disable_mux: 2047 tcpm_mux_set(port, TYPEC_MUX_NONE, USB_ROLE_NONE, 2048 TYPEC_ORIENTATION_NONE); 2049 return ret; 2050} 2051 2052static void tcpm_typec_disconnect(struct tcpm_port *port) 2053{ 2054 if (port->connected) { 2055 typec_unregister_partner(port->partner); 2056 port->partner = NULL; 2057 port->connected = false; 2058 } 2059} 2060 2061static void tcpm_unregister_altmodes(struct tcpm_port *port) 2062{ 2063 struct pd_mode_data *modep = &port->mode_data; 2064 int i; 2065 2066 for (i = 0; i < modep->altmodes; i++) { 2067 typec_unregister_altmode(port->partner_altmode[i]); 2068 port->partner_altmode[i] = NULL; 2069 } 2070 2071 memset(modep, 0, sizeof(*modep)); 2072} 2073 2074static void tcpm_reset_port(struct tcpm_port *port) 2075{ 2076 tcpm_unregister_altmodes(port); 2077 tcpm_typec_disconnect(port); 2078 port->attached = false; 2079 port->pd_capable = false; 2080 2081 /* 2082 * First Rx ID should be 0; set this to a sentinel of -1 so that 2083 * we can check tcpm_pd_rx_handler() if we had seen it before. 2084 */ 2085 port->rx_msgid = -1; 2086 2087 port->tcpc->set_pd_rx(port->tcpc, false); 2088 tcpm_init_vbus(port); /* also disables charging */ 2089 tcpm_init_vconn(port); 2090 tcpm_set_current_limit(port, 0, 0); 2091 tcpm_set_polarity(port, TYPEC_POLARITY_CC1); 2092 tcpm_mux_set(port, TYPEC_MUX_NONE, USB_ROLE_NONE, 2093 TYPEC_ORIENTATION_NONE); 2094 tcpm_set_attached_state(port, false); 2095 port->try_src_count = 0; 2096 port->try_snk_count = 0; 2097} 2098 2099static void tcpm_detach(struct tcpm_port *port) 2100{ 2101 if (!port->attached) 2102 return; 2103 2104 if (tcpm_port_is_disconnected(port)) 2105 port->hard_reset_count = 0; 2106 2107 tcpm_reset_port(port); 2108} 2109 2110static void tcpm_src_detach(struct tcpm_port *port) 2111{ 2112 tcpm_detach(port); 2113} 2114 2115static int tcpm_snk_attach(struct tcpm_port *port) 2116{ 2117 int ret; 2118 2119 if (port->attached) 2120 return 0; 2121 2122 ret = tcpm_set_polarity(port, port->cc2 != TYPEC_CC_OPEN ? 2123 TYPEC_POLARITY_CC2 : TYPEC_POLARITY_CC1); 2124 if (ret < 0) 2125 return ret; 2126 2127 ret = tcpm_set_roles(port, true, TYPEC_SINK, TYPEC_DEVICE); 2128 if (ret < 0) 2129 return ret; 2130 2131 port->pd_capable = false; 2132 2133 port->partner = NULL; 2134 2135 port->attached = true; 2136 port->send_discover = true; 2137 2138 return 0; 2139} 2140 2141static void tcpm_snk_detach(struct tcpm_port *port) 2142{ 2143 tcpm_detach(port); 2144} 2145 2146static int tcpm_acc_attach(struct tcpm_port *port) 2147{ 2148 int ret; 2149 2150 if (port->attached) 2151 return 0; 2152 2153 ret = tcpm_set_roles(port, true, TYPEC_SOURCE, TYPEC_HOST); 2154 if (ret < 0) 2155 return ret; 2156 2157 port->partner = NULL; 2158 2159 tcpm_typec_connect(port); 2160 2161 port->attached = true; 2162 2163 return 0; 2164} 2165 2166static void tcpm_acc_detach(struct tcpm_port *port) 2167{ 2168 tcpm_detach(port); 2169} 2170 2171static inline enum tcpm_state hard_reset_state(struct tcpm_port *port) 2172{ 2173 if (port->hard_reset_count < PD_N_HARD_RESET_COUNT) 2174 return HARD_RESET_SEND; 2175 if (port->pd_capable) 2176 return ERROR_RECOVERY; 2177 if (port->pwr_role == TYPEC_SOURCE) 2178 return SRC_UNATTACHED; 2179 if (port->state == SNK_WAIT_CAPABILITIES) 2180 return SNK_READY; 2181 return SNK_UNATTACHED; 2182} 2183 2184static inline enum tcpm_state ready_state(struct tcpm_port *port) 2185{ 2186 if (port->pwr_role == TYPEC_SOURCE) 2187 return SRC_READY; 2188 else 2189 return SNK_READY; 2190} 2191 2192static inline enum tcpm_state unattached_state(struct tcpm_port *port) 2193{ 2194 if (port->port_type == TYPEC_PORT_DRP) { 2195 if (port->pwr_role == TYPEC_SOURCE) 2196 return SRC_UNATTACHED; 2197 else 2198 return SNK_UNATTACHED; 2199 } else if (port->port_type == TYPEC_PORT_SRC) { 2200 return SRC_UNATTACHED; 2201 } 2202 2203 return SNK_UNATTACHED; 2204} 2205 2206static void tcpm_check_send_discover(struct tcpm_port *port) 2207{ 2208 if (port->data_role == TYPEC_HOST && port->send_discover && 2209 port->pd_capable) { 2210 tcpm_send_vdm(port, USB_SID_PD, CMD_DISCOVER_IDENT, NULL, 0); 2211 port->send_discover = false; 2212 } 2213} 2214 2215static void tcpm_swap_complete(struct tcpm_port *port, int result) 2216{ 2217 if (port->swap_pending) { 2218 port->swap_status = result; 2219 port->swap_pending = false; 2220 port->non_pd_role_swap = false; 2221 complete(&port->swap_complete); 2222 } 2223} 2224 2225static enum typec_pwr_opmode tcpm_get_pwr_opmode(enum typec_cc_status cc) 2226{ 2227 switch (cc) { 2228 case TYPEC_CC_RP_1_5: 2229 return TYPEC_PWR_MODE_1_5A; 2230 case TYPEC_CC_RP_3_0: 2231 return TYPEC_PWR_MODE_3_0A; 2232 case TYPEC_CC_RP_DEF: 2233 default: 2234 return TYPEC_PWR_MODE_USB; 2235 } 2236} 2237 2238static void run_state_machine(struct tcpm_port *port) 2239{ 2240 int ret; 2241 enum typec_pwr_opmode opmode; 2242 unsigned int msecs; 2243 2244 port->enter_state = port->state; 2245 switch (port->state) { 2246 case DRP_TOGGLING: 2247 break; 2248 /* SRC states */ 2249 case SRC_UNATTACHED: 2250 if (!port->non_pd_role_swap) 2251 tcpm_swap_complete(port, -ENOTCONN); 2252 tcpm_src_detach(port); 2253 if (tcpm_start_drp_toggling(port)) { 2254 tcpm_set_state(port, DRP_TOGGLING, 0); 2255 break; 2256 } 2257 tcpm_set_cc(port, tcpm_rp_cc(port)); 2258 if (port->port_type == TYPEC_PORT_DRP) 2259 tcpm_set_state(port, SNK_UNATTACHED, PD_T_DRP_SNK); 2260 break; 2261 case SRC_ATTACH_WAIT: 2262 if (tcpm_port_is_debug(port)) 2263 tcpm_set_state(port, DEBUG_ACC_ATTACHED, 2264 PD_T_CC_DEBOUNCE); 2265 else if (tcpm_port_is_audio(port)) 2266 tcpm_set_state(port, AUDIO_ACC_ATTACHED, 2267 PD_T_CC_DEBOUNCE); 2268 else if (tcpm_port_is_source(port)) 2269 tcpm_set_state(port, 2270 tcpm_try_snk(port) ? SNK_TRY 2271 : SRC_ATTACHED, 2272 PD_T_CC_DEBOUNCE); 2273 break; 2274 2275 case SNK_TRY: 2276 port->try_snk_count++; 2277 /* 2278 * Requirements: 2279 * - Do not drive vconn or vbus 2280 * - Terminate CC pins (both) to Rd 2281 * Action: 2282 * - Wait for tDRPTry (PD_T_DRP_TRY). 2283 * Until then, ignore any state changes. 2284 */ 2285 tcpm_set_cc(port, TYPEC_CC_RD); 2286 tcpm_set_state(port, SNK_TRY_WAIT, PD_T_DRP_TRY); 2287 break; 2288 case SNK_TRY_WAIT: 2289 if (tcpm_port_is_sink(port)) { 2290 tcpm_set_state(port, SNK_TRY_WAIT_DEBOUNCE, 0); 2291 } else { 2292 tcpm_set_state(port, SRC_TRYWAIT, 0); 2293 port->max_wait = 0; 2294 } 2295 break; 2296 case SNK_TRY_WAIT_DEBOUNCE: 2297 tcpm_set_state(port, SNK_TRY_WAIT_DEBOUNCE_CHECK_VBUS, 2298 PD_T_PD_DEBOUNCE); 2299 break; 2300 case SNK_TRY_WAIT_DEBOUNCE_CHECK_VBUS: 2301 if (port->vbus_present && tcpm_port_is_sink(port)) { 2302 tcpm_set_state(port, SNK_ATTACHED, 0); 2303 } else { 2304 tcpm_set_state(port, SRC_TRYWAIT, 0); 2305 port->max_wait = 0; 2306 } 2307 break; 2308 case SRC_TRYWAIT: 2309 tcpm_set_cc(port, tcpm_rp_cc(port)); 2310 if (port->max_wait == 0) { 2311 port->max_wait = jiffies + 2312 msecs_to_jiffies(PD_T_DRP_TRY); 2313 tcpm_set_state(port, SRC_TRYWAIT_UNATTACHED, 2314 PD_T_DRP_TRY); 2315 } else { 2316 if (time_is_after_jiffies(port->max_wait)) 2317 tcpm_set_state(port, SRC_TRYWAIT_UNATTACHED, 2318 jiffies_to_msecs(port->max_wait - 2319 jiffies)); 2320 else 2321 tcpm_set_state(port, SNK_UNATTACHED, 0); 2322 } 2323 break; 2324 case SRC_TRYWAIT_DEBOUNCE: 2325 tcpm_set_state(port, SRC_ATTACHED, PD_T_CC_DEBOUNCE); 2326 break; 2327 case SRC_TRYWAIT_UNATTACHED: 2328 tcpm_set_state(port, SNK_UNATTACHED, 0); 2329 break; 2330 2331 case SRC_ATTACHED: 2332 ret = tcpm_src_attach(port); 2333 tcpm_set_state(port, SRC_UNATTACHED, 2334 ret < 0 ? 0 : PD_T_PS_SOURCE_ON); 2335 break; 2336 case SRC_STARTUP: 2337 opmode = tcpm_get_pwr_opmode(tcpm_rp_cc(port)); 2338 typec_set_pwr_opmode(port->typec_port, opmode); 2339 port->pwr_opmode = TYPEC_PWR_MODE_USB; 2340 port->caps_count = 0; 2341 port->message_id = 0; 2342 port->rx_msgid = -1; 2343 port->explicit_contract = false; 2344 tcpm_set_state(port, SRC_SEND_CAPABILITIES, 0); 2345 break; 2346 case SRC_SEND_CAPABILITIES: 2347 port->caps_count++; 2348 if (port->caps_count > PD_N_CAPS_COUNT) { 2349 tcpm_set_state(port, SRC_READY, 0); 2350 break; 2351 } 2352 ret = tcpm_pd_send_source_caps(port); 2353 if (ret < 0) { 2354 tcpm_set_state(port, SRC_SEND_CAPABILITIES, 2355 PD_T_SEND_SOURCE_CAP); 2356 } else { 2357 /* 2358 * Per standard, we should clear the reset counter here. 2359 * However, that can result in state machine hang-ups. 2360 * Reset it only in READY state to improve stability. 2361 */ 2362 /* port->hard_reset_count = 0; */ 2363 port->caps_count = 0; 2364 port->pd_capable = true; 2365 tcpm_set_state_cond(port, hard_reset_state(port), 2366 PD_T_SEND_SOURCE_CAP); 2367 } 2368 break; 2369 case SRC_NEGOTIATE_CAPABILITIES: 2370 ret = tcpm_pd_check_request(port); 2371 if (ret < 0) { 2372 tcpm_pd_send_control(port, PD_CTRL_REJECT); 2373 if (!port->explicit_contract) { 2374 tcpm_set_state(port, 2375 SRC_WAIT_NEW_CAPABILITIES, 0); 2376 } else { 2377 tcpm_set_state(port, SRC_READY, 0); 2378 } 2379 } else { 2380 tcpm_pd_send_control(port, PD_CTRL_ACCEPT); 2381 tcpm_set_state(port, SRC_TRANSITION_SUPPLY, 2382 PD_T_SRC_TRANSITION); 2383 } 2384 break; 2385 case SRC_TRANSITION_SUPPLY: 2386 /* XXX: regulator_set_voltage(vbus, ...) */ 2387 tcpm_pd_send_control(port, PD_CTRL_PS_RDY); 2388 port->explicit_contract = true; 2389 typec_set_pwr_opmode(port->typec_port, TYPEC_PWR_MODE_PD); 2390 port->pwr_opmode = TYPEC_PWR_MODE_PD; 2391 tcpm_set_state_cond(port, SRC_READY, 0); 2392 break; 2393 case SRC_READY: 2394#if 1 2395 port->hard_reset_count = 0; 2396#endif 2397 port->try_src_count = 0; 2398 2399 tcpm_swap_complete(port, 0); 2400 tcpm_typec_connect(port); 2401 tcpm_check_send_discover(port); 2402 /* 2403 * 6.3.5 2404 * Sending ping messages is not necessary if 2405 * - the source operates at vSafe5V 2406 * or 2407 * - The system is not operating in PD mode 2408 * or 2409 * - Both partners are connected using a Type-C connector 2410 * 2411 * There is no actual need to send PD messages since the local 2412 * port type-c and the spec does not clearly say whether PD is 2413 * possible when type-c is connected to Type-A/B 2414 */ 2415 break; 2416 case SRC_WAIT_NEW_CAPABILITIES: 2417 /* Nothing to do... */ 2418 break; 2419 2420 /* SNK states */ 2421 case SNK_UNATTACHED: 2422 if (!port->non_pd_role_swap) 2423 tcpm_swap_complete(port, -ENOTCONN); 2424 tcpm_snk_detach(port); 2425 if (tcpm_start_drp_toggling(port)) { 2426 tcpm_set_state(port, DRP_TOGGLING, 0); 2427 break; 2428 } 2429 tcpm_set_cc(port, TYPEC_CC_RD); 2430 if (port->port_type == TYPEC_PORT_DRP) 2431 tcpm_set_state(port, SRC_UNATTACHED, PD_T_DRP_SRC); 2432 break; 2433 case SNK_ATTACH_WAIT: 2434 if ((port->cc1 == TYPEC_CC_OPEN && 2435 port->cc2 != TYPEC_CC_OPEN) || 2436 (port->cc1 != TYPEC_CC_OPEN && 2437 port->cc2 == TYPEC_CC_OPEN)) 2438 tcpm_set_state(port, SNK_DEBOUNCED, 2439 PD_T_CC_DEBOUNCE); 2440 else if (tcpm_port_is_disconnected(port)) 2441 tcpm_set_state(port, SNK_UNATTACHED, 2442 PD_T_PD_DEBOUNCE); 2443 break; 2444 case SNK_DEBOUNCED: 2445 if (tcpm_port_is_disconnected(port)) 2446 tcpm_set_state(port, SNK_UNATTACHED, 2447 PD_T_PD_DEBOUNCE); 2448 else if (port->vbus_present) 2449 tcpm_set_state(port, 2450 tcpm_try_src(port) ? SRC_TRY 2451 : SNK_ATTACHED, 2452 0); 2453 else 2454 /* Wait for VBUS, but not forever */ 2455 tcpm_set_state(port, PORT_RESET, PD_T_PS_SOURCE_ON); 2456 break; 2457 2458 case SRC_TRY: 2459 port->try_src_count++; 2460 tcpm_set_cc(port, tcpm_rp_cc(port)); 2461 port->max_wait = 0; 2462 tcpm_set_state(port, SRC_TRY_WAIT, 0); 2463 break; 2464 case SRC_TRY_WAIT: 2465 if (port->max_wait == 0) { 2466 port->max_wait = jiffies + 2467 msecs_to_jiffies(PD_T_DRP_TRY); 2468 msecs = PD_T_DRP_TRY; 2469 } else { 2470 if (time_is_after_jiffies(port->max_wait)) 2471 msecs = jiffies_to_msecs(port->max_wait - 2472 jiffies); 2473 else 2474 msecs = 0; 2475 } 2476 tcpm_set_state(port, SNK_TRYWAIT, msecs); 2477 break; 2478 case SRC_TRY_DEBOUNCE: 2479 tcpm_set_state(port, SRC_ATTACHED, PD_T_PD_DEBOUNCE); 2480 break; 2481 case SNK_TRYWAIT: 2482 tcpm_set_cc(port, TYPEC_CC_RD); 2483 tcpm_set_state(port, SNK_TRYWAIT_VBUS, PD_T_CC_DEBOUNCE); 2484 break; 2485 case SNK_TRYWAIT_VBUS: 2486 /* 2487 * TCPM stays in this state indefinitely until VBUS 2488 * is detected as long as Rp is not detected for 2489 * more than a time period of tPDDebounce. 2490 */ 2491 if (port->vbus_present && tcpm_port_is_sink(port)) { 2492 tcpm_set_state(port, SNK_ATTACHED, 0); 2493 break; 2494 } 2495 if (!tcpm_port_is_sink(port)) 2496 tcpm_set_state(port, SNK_TRYWAIT_DEBOUNCE, 0); 2497 break; 2498 case SNK_TRYWAIT_DEBOUNCE: 2499 tcpm_set_state(port, SNK_UNATTACHED, PD_T_PD_DEBOUNCE); 2500 break; 2501 case SNK_ATTACHED: 2502 ret = tcpm_snk_attach(port); 2503 if (ret < 0) 2504 tcpm_set_state(port, SNK_UNATTACHED, 0); 2505 else 2506 tcpm_set_state(port, SNK_STARTUP, 0); 2507 break; 2508 case SNK_STARTUP: 2509 opmode = tcpm_get_pwr_opmode(port->polarity ? 2510 port->cc2 : port->cc1); 2511 typec_set_pwr_opmode(port->typec_port, opmode); 2512 port->pwr_opmode = TYPEC_PWR_MODE_USB; 2513 port->message_id = 0; 2514 port->rx_msgid = -1; 2515 port->explicit_contract = false; 2516 tcpm_set_state(port, SNK_DISCOVERY, 0); 2517 break; 2518 case SNK_DISCOVERY: 2519 if (port->vbus_present) { 2520 tcpm_set_current_limit(port, 2521 tcpm_get_current_limit(port), 2522 5000); 2523 tcpm_set_charge(port, true); 2524 tcpm_set_state(port, SNK_WAIT_CAPABILITIES, 0); 2525 break; 2526 } 2527 /* 2528 * For DRP, timeouts differ. Also, handling is supposed to be 2529 * different and much more complex (dead battery detection; 2530 * see USB power delivery specification, section 8.3.3.6.1.5.1). 2531 */ 2532 tcpm_set_state(port, hard_reset_state(port), 2533 port->port_type == TYPEC_PORT_DRP ? 2534 PD_T_DB_DETECT : PD_T_NO_RESPONSE); 2535 break; 2536 case SNK_DISCOVERY_DEBOUNCE: 2537 tcpm_set_state(port, SNK_DISCOVERY_DEBOUNCE_DONE, 2538 PD_T_CC_DEBOUNCE); 2539 break; 2540 case SNK_DISCOVERY_DEBOUNCE_DONE: 2541 if (!tcpm_port_is_disconnected(port) && 2542 tcpm_port_is_sink(port) && 2543 time_is_after_jiffies(port->delayed_runtime)) { 2544 tcpm_set_state(port, SNK_DISCOVERY, 2545 port->delayed_runtime - jiffies); 2546 break; 2547 } 2548 tcpm_set_state(port, unattached_state(port), 0); 2549 break; 2550 case SNK_WAIT_CAPABILITIES: 2551 ret = port->tcpc->set_pd_rx(port->tcpc, true); 2552 if (ret < 0) { 2553 tcpm_set_state(port, SNK_READY, 0); 2554 break; 2555 } 2556 /* 2557 * If VBUS has never been low, and we time out waiting 2558 * for source cap, try a soft reset first, in case we 2559 * were already in a stable contract before this boot. 2560 * Do this only once. 2561 */ 2562 if (port->vbus_never_low) { 2563 port->vbus_never_low = false; 2564 tcpm_set_state(port, SOFT_RESET_SEND, 2565 PD_T_SINK_WAIT_CAP); 2566 } else { 2567 tcpm_set_state(port, hard_reset_state(port), 2568 PD_T_SINK_WAIT_CAP); 2569 } 2570 break; 2571 case SNK_NEGOTIATE_CAPABILITIES: 2572 port->pd_capable = true; 2573 port->hard_reset_count = 0; 2574 ret = tcpm_pd_send_request(port); 2575 if (ret < 0) { 2576 /* Let the Source send capabilities again. */ 2577 tcpm_set_state(port, SNK_WAIT_CAPABILITIES, 0); 2578 } else { 2579 tcpm_set_state_cond(port, hard_reset_state(port), 2580 PD_T_SENDER_RESPONSE); 2581 } 2582 break; 2583 case SNK_TRANSITION_SINK: 2584 case SNK_TRANSITION_SINK_VBUS: 2585 tcpm_set_state(port, hard_reset_state(port), 2586 PD_T_PS_TRANSITION); 2587 break; 2588 case SNK_READY: 2589 port->try_snk_count = 0; 2590 if (port->explicit_contract) { 2591 typec_set_pwr_opmode(port->typec_port, 2592 TYPEC_PWR_MODE_PD); 2593 port->pwr_opmode = TYPEC_PWR_MODE_PD; 2594 } 2595 2596 tcpm_swap_complete(port, 0); 2597 tcpm_typec_connect(port); 2598 tcpm_check_send_discover(port); 2599 break; 2600 2601 /* Accessory states */ 2602 case ACC_UNATTACHED: 2603 tcpm_acc_detach(port); 2604 tcpm_set_state(port, SRC_UNATTACHED, 0); 2605 break; 2606 case DEBUG_ACC_ATTACHED: 2607 case AUDIO_ACC_ATTACHED: 2608 ret = tcpm_acc_attach(port); 2609 if (ret < 0) 2610 tcpm_set_state(port, ACC_UNATTACHED, 0); 2611 break; 2612 case AUDIO_ACC_DEBOUNCE: 2613 tcpm_set_state(port, ACC_UNATTACHED, PD_T_CC_DEBOUNCE); 2614 break; 2615 2616 /* Hard_Reset states */ 2617 case HARD_RESET_SEND: 2618 tcpm_pd_transmit(port, TCPC_TX_HARD_RESET, NULL); 2619 tcpm_set_state(port, HARD_RESET_START, 0); 2620 break; 2621 case HARD_RESET_START: 2622 port->hard_reset_count++; 2623 port->tcpc->set_pd_rx(port->tcpc, false); 2624 tcpm_unregister_altmodes(port); 2625 port->send_discover = true; 2626 if (port->pwr_role == TYPEC_SOURCE) 2627 tcpm_set_state(port, SRC_HARD_RESET_VBUS_OFF, 2628 PD_T_PS_HARD_RESET); 2629 else 2630 tcpm_set_state(port, SNK_HARD_RESET_SINK_OFF, 0); 2631 break; 2632 case SRC_HARD_RESET_VBUS_OFF: 2633 tcpm_set_vconn(port, true); 2634 tcpm_set_vbus(port, false); 2635 tcpm_set_roles(port, false, TYPEC_SOURCE, TYPEC_HOST); 2636 tcpm_set_state(port, SRC_HARD_RESET_VBUS_ON, PD_T_SRC_RECOVER); 2637 break; 2638 case SRC_HARD_RESET_VBUS_ON: 2639 tcpm_set_vbus(port, true); 2640 port->tcpc->set_pd_rx(port->tcpc, true); 2641 tcpm_set_attached_state(port, true); 2642 tcpm_set_state(port, SRC_UNATTACHED, PD_T_PS_SOURCE_ON); 2643 break; 2644 case SNK_HARD_RESET_SINK_OFF: 2645 tcpm_set_vconn(port, false); 2646 tcpm_set_charge(port, false); 2647 tcpm_set_roles(port, false, TYPEC_SINK, TYPEC_DEVICE); 2648 /* 2649 * VBUS may or may not toggle, depending on the adapter. 2650 * If it doesn't toggle, transition to SNK_HARD_RESET_SINK_ON 2651 * directly after timeout. 2652 */ 2653 tcpm_set_state(port, SNK_HARD_RESET_SINK_ON, PD_T_SAFE_0V); 2654 break; 2655 case SNK_HARD_RESET_WAIT_VBUS: 2656 /* Assume we're disconnected if VBUS doesn't come back. */ 2657 tcpm_set_state(port, SNK_UNATTACHED, 2658 PD_T_SRC_RECOVER_MAX + PD_T_SRC_TURN_ON); 2659 break; 2660 case SNK_HARD_RESET_SINK_ON: 2661 /* Note: There is no guarantee that VBUS is on in this state */ 2662 /* 2663 * XXX: 2664 * The specification suggests that dual mode ports in sink 2665 * mode should transition to state PE_SRC_Transition_to_default. 2666 * See USB power delivery specification chapter 8.3.3.6.1.3. 2667 * This would mean to to 2668 * - turn off VCONN, reset power supply 2669 * - request hardware reset 2670 * - turn on VCONN 2671 * - Transition to state PE_Src_Startup 2672 * SNK only ports shall transition to state Snk_Startup 2673 * (see chapter 8.3.3.3.8). 2674 * Similar, dual-mode ports in source mode should transition 2675 * to PE_SNK_Transition_to_default. 2676 */ 2677 tcpm_set_attached_state(port, true); 2678 tcpm_set_state(port, SNK_STARTUP, 0); 2679 break; 2680 2681 /* Soft_Reset states */ 2682 case SOFT_RESET: 2683 port->message_id = 0; 2684 port->rx_msgid = -1; 2685 tcpm_pd_send_control(port, PD_CTRL_ACCEPT); 2686 if (port->pwr_role == TYPEC_SOURCE) 2687 tcpm_set_state(port, SRC_SEND_CAPABILITIES, 0); 2688 else 2689 tcpm_set_state(port, SNK_WAIT_CAPABILITIES, 0); 2690 break; 2691 case SOFT_RESET_SEND: 2692 port->message_id = 0; 2693 port->rx_msgid = -1; 2694 if (tcpm_pd_send_control(port, PD_CTRL_SOFT_RESET)) 2695 tcpm_set_state_cond(port, hard_reset_state(port), 0); 2696 else 2697 tcpm_set_state_cond(port, hard_reset_state(port), 2698 PD_T_SENDER_RESPONSE); 2699 break; 2700 2701 /* DR_Swap states */ 2702 case DR_SWAP_SEND: 2703 tcpm_pd_send_control(port, PD_CTRL_DR_SWAP); 2704 tcpm_set_state_cond(port, DR_SWAP_SEND_TIMEOUT, 2705 PD_T_SENDER_RESPONSE); 2706 break; 2707 case DR_SWAP_ACCEPT: 2708 tcpm_pd_send_control(port, PD_CTRL_ACCEPT); 2709 tcpm_set_state_cond(port, DR_SWAP_CHANGE_DR, 0); 2710 break; 2711 case DR_SWAP_SEND_TIMEOUT: 2712 tcpm_swap_complete(port, -ETIMEDOUT); 2713 tcpm_set_state(port, ready_state(port), 0); 2714 break; 2715 case DR_SWAP_CHANGE_DR: 2716 if (port->data_role == TYPEC_HOST) { 2717 tcpm_unregister_altmodes(port); 2718 tcpm_set_roles(port, true, port->pwr_role, 2719 TYPEC_DEVICE); 2720 } else { 2721 tcpm_set_roles(port, true, port->pwr_role, 2722 TYPEC_HOST); 2723 port->send_discover = true; 2724 } 2725 tcpm_set_state(port, ready_state(port), 0); 2726 break; 2727 2728 /* PR_Swap states */ 2729 case PR_SWAP_ACCEPT: 2730 tcpm_pd_send_control(port, PD_CTRL_ACCEPT); 2731 tcpm_set_state(port, PR_SWAP_START, 0); 2732 break; 2733 case PR_SWAP_SEND: 2734 tcpm_pd_send_control(port, PD_CTRL_PR_SWAP); 2735 tcpm_set_state_cond(port, PR_SWAP_SEND_TIMEOUT, 2736 PD_T_SENDER_RESPONSE); 2737 break; 2738 case PR_SWAP_SEND_TIMEOUT: 2739 tcpm_swap_complete(port, -ETIMEDOUT); 2740 tcpm_set_state(port, ready_state(port), 0); 2741 break; 2742 case PR_SWAP_START: 2743 if (port->pwr_role == TYPEC_SOURCE) 2744 tcpm_set_state(port, PR_SWAP_SRC_SNK_TRANSITION_OFF, 2745 PD_T_SRC_TRANSITION); 2746 else 2747 tcpm_set_state(port, PR_SWAP_SNK_SRC_SINK_OFF, 0); 2748 break; 2749 case PR_SWAP_SRC_SNK_TRANSITION_OFF: 2750 tcpm_set_vbus(port, false); 2751 port->explicit_contract = false; 2752 /* allow time for Vbus discharge, must be < tSrcSwapStdby */ 2753 tcpm_set_state(port, PR_SWAP_SRC_SNK_SOURCE_OFF, 2754 PD_T_SRCSWAPSTDBY); 2755 break; 2756 case PR_SWAP_SRC_SNK_SOURCE_OFF: 2757 tcpm_set_cc(port, TYPEC_CC_RD); 2758 /* allow CC debounce */ 2759 tcpm_set_state(port, PR_SWAP_SRC_SNK_SOURCE_OFF_CC_DEBOUNCED, 2760 PD_T_CC_DEBOUNCE); 2761 break; 2762 case PR_SWAP_SRC_SNK_SOURCE_OFF_CC_DEBOUNCED: 2763 /* 2764 * USB-PD standard, 6.2.1.4, Port Power Role: 2765 * "During the Power Role Swap Sequence, for the initial Source 2766 * Port, the Port Power Role field shall be set to Sink in the 2767 * PS_RDY Message indicating that the initial Source’s power 2768 * supply is turned off" 2769 */ 2770 tcpm_set_pwr_role(port, TYPEC_SINK); 2771 if (tcpm_pd_send_control(port, PD_CTRL_PS_RDY)) { 2772 tcpm_set_state(port, ERROR_RECOVERY, 0); 2773 break; 2774 } 2775 tcpm_set_state_cond(port, SNK_UNATTACHED, PD_T_PS_SOURCE_ON); 2776 break; 2777 case PR_SWAP_SRC_SNK_SINK_ON: 2778 tcpm_set_state(port, SNK_STARTUP, 0); 2779 break; 2780 case PR_SWAP_SNK_SRC_SINK_OFF: 2781 tcpm_set_charge(port, false); 2782 tcpm_set_state(port, hard_reset_state(port), 2783 PD_T_PS_SOURCE_OFF); 2784 break; 2785 case PR_SWAP_SNK_SRC_SOURCE_ON: 2786 tcpm_set_cc(port, tcpm_rp_cc(port)); 2787 tcpm_set_vbus(port, true); 2788 /* 2789 * allow time VBUS ramp-up, must be < tNewSrc 2790 * Also, this window overlaps with CC debounce as well. 2791 * So, Wait for the max of two which is PD_T_NEWSRC 2792 */ 2793 tcpm_set_state(port, PR_SWAP_SNK_SRC_SOURCE_ON_VBUS_RAMPED_UP, 2794 PD_T_NEWSRC); 2795 break; 2796 case PR_SWAP_SNK_SRC_SOURCE_ON_VBUS_RAMPED_UP: 2797 /* 2798 * USB PD standard, 6.2.1.4: 2799 * "Subsequent Messages initiated by the Policy Engine, 2800 * such as the PS_RDY Message sent to indicate that Vbus 2801 * is ready, will have the Port Power Role field set to 2802 * Source." 2803 */ 2804 tcpm_set_pwr_role(port, TYPEC_SOURCE); 2805 tcpm_pd_send_control(port, PD_CTRL_PS_RDY); 2806 tcpm_set_state(port, SRC_STARTUP, 0); 2807 break; 2808 2809 case VCONN_SWAP_ACCEPT: 2810 tcpm_pd_send_control(port, PD_CTRL_ACCEPT); 2811 tcpm_set_state(port, VCONN_SWAP_START, 0); 2812 break; 2813 case VCONN_SWAP_SEND: 2814 tcpm_pd_send_control(port, PD_CTRL_VCONN_SWAP); 2815 tcpm_set_state(port, VCONN_SWAP_SEND_TIMEOUT, 2816 PD_T_SENDER_RESPONSE); 2817 break; 2818 case VCONN_SWAP_SEND_TIMEOUT: 2819 tcpm_swap_complete(port, -ETIMEDOUT); 2820 tcpm_set_state(port, ready_state(port), 0); 2821 break; 2822 case VCONN_SWAP_START: 2823 if (port->vconn_role == TYPEC_SOURCE) 2824 tcpm_set_state(port, VCONN_SWAP_WAIT_FOR_VCONN, 0); 2825 else 2826 tcpm_set_state(port, VCONN_SWAP_TURN_ON_VCONN, 0); 2827 break; 2828 case VCONN_SWAP_WAIT_FOR_VCONN: 2829 tcpm_set_state(port, hard_reset_state(port), 2830 PD_T_VCONN_SOURCE_ON); 2831 break; 2832 case VCONN_SWAP_TURN_ON_VCONN: 2833 tcpm_set_vconn(port, true); 2834 tcpm_pd_send_control(port, PD_CTRL_PS_RDY); 2835 tcpm_set_state(port, ready_state(port), 0); 2836 break; 2837 case VCONN_SWAP_TURN_OFF_VCONN: 2838 tcpm_set_vconn(port, false); 2839 tcpm_set_state(port, ready_state(port), 0); 2840 break; 2841 2842 case DR_SWAP_CANCEL: 2843 case PR_SWAP_CANCEL: 2844 case VCONN_SWAP_CANCEL: 2845 tcpm_swap_complete(port, port->swap_status); 2846 if (port->pwr_role == TYPEC_SOURCE) 2847 tcpm_set_state(port, SRC_READY, 0); 2848 else 2849 tcpm_set_state(port, SNK_READY, 0); 2850 break; 2851 2852 case BIST_RX: 2853 switch (BDO_MODE_MASK(port->bist_request)) { 2854 case BDO_MODE_CARRIER2: 2855 tcpm_pd_transmit(port, TCPC_TX_BIST_MODE_2, NULL); 2856 break; 2857 default: 2858 break; 2859 } 2860 /* Always switch to unattached state */ 2861 tcpm_set_state(port, unattached_state(port), 0); 2862 break; 2863 case ERROR_RECOVERY: 2864 tcpm_swap_complete(port, -EPROTO); 2865 tcpm_set_state(port, PORT_RESET, 0); 2866 break; 2867 case PORT_RESET: 2868 tcpm_reset_port(port); 2869 tcpm_set_cc(port, TYPEC_CC_OPEN); 2870 tcpm_set_state(port, PORT_RESET_WAIT_OFF, 2871 PD_T_ERROR_RECOVERY); 2872 break; 2873 case PORT_RESET_WAIT_OFF: 2874 tcpm_set_state(port, 2875 tcpm_default_state(port), 2876 port->vbus_present ? PD_T_PS_SOURCE_OFF : 0); 2877 break; 2878 default: 2879 WARN(1, "Unexpected port state %d\n", port->state); 2880 break; 2881 } 2882} 2883 2884static void tcpm_state_machine_work(struct work_struct *work) 2885{ 2886 struct tcpm_port *port = container_of(work, struct tcpm_port, 2887 state_machine.work); 2888 enum tcpm_state prev_state; 2889 2890 mutex_lock(&port->lock); 2891 port->state_machine_running = true; 2892 2893 if (port->queued_message && tcpm_send_queued_message(port)) 2894 goto done; 2895 2896 /* If we were queued due to a delayed state change, update it now */ 2897 if (port->delayed_state) { 2898 tcpm_log(port, "state change %s -> %s [delayed %ld ms]", 2899 tcpm_states[port->state], 2900 tcpm_states[port->delayed_state], port->delay_ms); 2901 port->prev_state = port->state; 2902 port->state = port->delayed_state; 2903 port->delayed_state = INVALID_STATE; 2904 } 2905 2906 /* 2907 * Continue running as long as we have (non-delayed) state changes 2908 * to make. 2909 */ 2910 do { 2911 prev_state = port->state; 2912 run_state_machine(port); 2913 if (port->queued_message) 2914 tcpm_send_queued_message(port); 2915 } while (port->state != prev_state && !port->delayed_state); 2916 2917done: 2918 port->state_machine_running = false; 2919 mutex_unlock(&port->lock); 2920} 2921 2922static void _tcpm_cc_change(struct tcpm_port *port, enum typec_cc_status cc1, 2923 enum typec_cc_status cc2) 2924{ 2925 enum typec_cc_status old_cc1, old_cc2; 2926 enum tcpm_state new_state; 2927 2928 old_cc1 = port->cc1; 2929 old_cc2 = port->cc2; 2930 port->cc1 = cc1; 2931 port->cc2 = cc2; 2932 2933 tcpm_log_force(port, 2934 "CC1: %u -> %u, CC2: %u -> %u [state %s, polarity %d, %s]", 2935 old_cc1, cc1, old_cc2, cc2, tcpm_states[port->state], 2936 port->polarity, 2937 tcpm_port_is_disconnected(port) ? "disconnected" 2938 : "connected"); 2939 2940 switch (port->state) { 2941 case DRP_TOGGLING: 2942 if (tcpm_port_is_debug(port) || tcpm_port_is_audio(port) || 2943 tcpm_port_is_source(port)) 2944 tcpm_set_state(port, SRC_ATTACH_WAIT, 0); 2945 else if (tcpm_port_is_sink(port)) 2946 tcpm_set_state(port, SNK_ATTACH_WAIT, 0); 2947 break; 2948 case SRC_UNATTACHED: 2949 case ACC_UNATTACHED: 2950 if (tcpm_port_is_debug(port) || tcpm_port_is_audio(port) || 2951 tcpm_port_is_source(port)) 2952 tcpm_set_state(port, SRC_ATTACH_WAIT, 0); 2953 break; 2954 case SRC_ATTACH_WAIT: 2955 if (tcpm_port_is_disconnected(port) || 2956 tcpm_port_is_audio_detached(port)) 2957 tcpm_set_state(port, SRC_UNATTACHED, 0); 2958 else if (cc1 != old_cc1 || cc2 != old_cc2) 2959 tcpm_set_state(port, SRC_ATTACH_WAIT, 0); 2960 break; 2961 case SRC_ATTACHED: 2962 case SRC_SEND_CAPABILITIES: 2963 case SRC_READY: 2964 if (tcpm_port_is_disconnected(port) || 2965 !tcpm_port_is_source(port)) 2966 tcpm_set_state(port, SRC_UNATTACHED, 0); 2967 break; 2968 case SNK_UNATTACHED: 2969 if (tcpm_port_is_sink(port)) 2970 tcpm_set_state(port, SNK_ATTACH_WAIT, 0); 2971 break; 2972 case SNK_ATTACH_WAIT: 2973 if ((port->cc1 == TYPEC_CC_OPEN && 2974 port->cc2 != TYPEC_CC_OPEN) || 2975 (port->cc1 != TYPEC_CC_OPEN && 2976 port->cc2 == TYPEC_CC_OPEN)) 2977 new_state = SNK_DEBOUNCED; 2978 else if (tcpm_port_is_disconnected(port)) 2979 new_state = SNK_UNATTACHED; 2980 else 2981 break; 2982 if (new_state != port->delayed_state) 2983 tcpm_set_state(port, SNK_ATTACH_WAIT, 0); 2984 break; 2985 case SNK_DEBOUNCED: 2986 if (tcpm_port_is_disconnected(port)) 2987 new_state = SNK_UNATTACHED; 2988 else if (port->vbus_present) 2989 new_state = tcpm_try_src(port) ? SRC_TRY : SNK_ATTACHED; 2990 else 2991 new_state = SNK_UNATTACHED; 2992 if (new_state != port->delayed_state) 2993 tcpm_set_state(port, SNK_DEBOUNCED, 0); 2994 break; 2995 case SNK_READY: 2996 if (tcpm_port_is_disconnected(port)) 2997 tcpm_set_state(port, unattached_state(port), 0); 2998 else if (!port->pd_capable && 2999 (cc1 != old_cc1 || cc2 != old_cc2)) 3000 tcpm_set_current_limit(port, 3001 tcpm_get_current_limit(port), 3002 5000); 3003 break; 3004 3005 case AUDIO_ACC_ATTACHED: 3006 if (cc1 == TYPEC_CC_OPEN || cc2 == TYPEC_CC_OPEN) 3007 tcpm_set_state(port, AUDIO_ACC_DEBOUNCE, 0); 3008 break; 3009 case AUDIO_ACC_DEBOUNCE: 3010 if (tcpm_port_is_audio(port)) 3011 tcpm_set_state(port, AUDIO_ACC_ATTACHED, 0); 3012 break; 3013 3014 case DEBUG_ACC_ATTACHED: 3015 if (cc1 == TYPEC_CC_OPEN || cc2 == TYPEC_CC_OPEN) 3016 tcpm_set_state(port, ACC_UNATTACHED, 0); 3017 break; 3018 3019 case SNK_TRY: 3020 /* Do nothing, waiting for timeout */ 3021 break; 3022 3023 case SNK_DISCOVERY: 3024 /* CC line is unstable, wait for debounce */ 3025 if (tcpm_port_is_disconnected(port)) 3026 tcpm_set_state(port, SNK_DISCOVERY_DEBOUNCE, 0); 3027 break; 3028 case SNK_DISCOVERY_DEBOUNCE: 3029 break; 3030 3031 case SRC_TRYWAIT: 3032 /* Hand over to state machine if needed */ 3033 if (!port->vbus_present && tcpm_port_is_source(port)) 3034 tcpm_set_state(port, SRC_TRYWAIT_DEBOUNCE, 0); 3035 break; 3036 case SRC_TRYWAIT_DEBOUNCE: 3037 if (port->vbus_present || !tcpm_port_is_source(port)) 3038 tcpm_set_state(port, SRC_TRYWAIT, 0); 3039 break; 3040 case SNK_TRY_WAIT_DEBOUNCE: 3041 if (!tcpm_port_is_sink(port)) { 3042 port->max_wait = 0; 3043 tcpm_set_state(port, SRC_TRYWAIT, 0); 3044 } 3045 break; 3046 case SRC_TRY_WAIT: 3047 if (tcpm_port_is_source(port)) 3048 tcpm_set_state(port, SRC_TRY_DEBOUNCE, 0); 3049 break; 3050 case SRC_TRY_DEBOUNCE: 3051 tcpm_set_state(port, SRC_TRY_WAIT, 0); 3052 break; 3053 case SNK_TRYWAIT_DEBOUNCE: 3054 if (tcpm_port_is_sink(port)) 3055 tcpm_set_state(port, SNK_TRYWAIT_VBUS, 0); 3056 break; 3057 case SNK_TRYWAIT_VBUS: 3058 if (!tcpm_port_is_sink(port)) 3059 tcpm_set_state(port, SNK_TRYWAIT_DEBOUNCE, 0); 3060 break; 3061 case SNK_TRYWAIT: 3062 /* Do nothing, waiting for tCCDebounce */ 3063 break; 3064 case PR_SWAP_SNK_SRC_SINK_OFF: 3065 case PR_SWAP_SRC_SNK_TRANSITION_OFF: 3066 case PR_SWAP_SRC_SNK_SOURCE_OFF: 3067 case PR_SWAP_SRC_SNK_SOURCE_OFF_CC_DEBOUNCED: 3068 case PR_SWAP_SNK_SRC_SOURCE_ON: 3069 /* 3070 * CC state change is expected in PR_SWAP 3071 * Ignore it. 3072 */ 3073 break; 3074 3075 default: 3076 if (tcpm_port_is_disconnected(port)) 3077 tcpm_set_state(port, unattached_state(port), 0); 3078 break; 3079 } 3080} 3081 3082static void _tcpm_pd_vbus_on(struct tcpm_port *port) 3083{ 3084 tcpm_log_force(port, "VBUS on"); 3085 port->vbus_present = true; 3086 switch (port->state) { 3087 case SNK_TRANSITION_SINK_VBUS: 3088 port->explicit_contract = true; 3089 tcpm_set_state(port, SNK_READY, 0); 3090 break; 3091 case SNK_DISCOVERY: 3092 tcpm_set_state(port, SNK_DISCOVERY, 0); 3093 break; 3094 3095 case SNK_DEBOUNCED: 3096 tcpm_set_state(port, tcpm_try_src(port) ? SRC_TRY 3097 : SNK_ATTACHED, 3098 0); 3099 break; 3100 case SNK_HARD_RESET_WAIT_VBUS: 3101 tcpm_set_state(port, SNK_HARD_RESET_SINK_ON, 0); 3102 break; 3103 case SRC_ATTACHED: 3104 tcpm_set_state(port, SRC_STARTUP, 0); 3105 break; 3106 case SRC_HARD_RESET_VBUS_ON: 3107 tcpm_set_state(port, SRC_STARTUP, 0); 3108 break; 3109 3110 case SNK_TRY: 3111 /* Do nothing, waiting for timeout */ 3112 break; 3113 case SRC_TRYWAIT: 3114 /* Do nothing, Waiting for Rd to be detected */ 3115 break; 3116 case SRC_TRYWAIT_DEBOUNCE: 3117 tcpm_set_state(port, SRC_TRYWAIT, 0); 3118 break; 3119 case SNK_TRY_WAIT_DEBOUNCE: 3120 /* Do nothing, waiting for PD_DEBOUNCE to do be done */ 3121 break; 3122 case SNK_TRYWAIT: 3123 /* Do nothing, waiting for tCCDebounce */ 3124 break; 3125 case SNK_TRYWAIT_VBUS: 3126 if (tcpm_port_is_sink(port)) 3127 tcpm_set_state(port, SNK_ATTACHED, 0); 3128 break; 3129 case SNK_TRYWAIT_DEBOUNCE: 3130 /* Do nothing, waiting for Rp */ 3131 break; 3132 case SRC_TRY_WAIT: 3133 case SRC_TRY_DEBOUNCE: 3134 /* Do nothing, waiting for sink detection */ 3135 break; 3136 default: 3137 break; 3138 } 3139} 3140 3141static void _tcpm_pd_vbus_off(struct tcpm_port *port) 3142{ 3143 tcpm_log_force(port, "VBUS off"); 3144 port->vbus_present = false; 3145 port->vbus_never_low = false; 3146 switch (port->state) { 3147 case SNK_HARD_RESET_SINK_OFF: 3148 tcpm_set_state(port, SNK_HARD_RESET_WAIT_VBUS, 0); 3149 break; 3150 case SRC_HARD_RESET_VBUS_OFF: 3151 tcpm_set_state(port, SRC_HARD_RESET_VBUS_ON, 0); 3152 break; 3153 case HARD_RESET_SEND: 3154 break; 3155 3156 case SNK_TRY: 3157 /* Do nothing, waiting for timeout */ 3158 break; 3159 case SRC_TRYWAIT: 3160 /* Hand over to state machine if needed */ 3161 if (tcpm_port_is_source(port)) 3162 tcpm_set_state(port, SRC_TRYWAIT_DEBOUNCE, 0); 3163 break; 3164 case SNK_TRY_WAIT_DEBOUNCE: 3165 /* Do nothing, waiting for PD_DEBOUNCE to do be done */ 3166 break; 3167 case SNK_TRYWAIT: 3168 case SNK_TRYWAIT_VBUS: 3169 case SNK_TRYWAIT_DEBOUNCE: 3170 break; 3171 case SNK_ATTACH_WAIT: 3172 tcpm_set_state(port, SNK_UNATTACHED, 0); 3173 break; 3174 3175 case SNK_NEGOTIATE_CAPABILITIES: 3176 break; 3177 3178 case PR_SWAP_SRC_SNK_TRANSITION_OFF: 3179 tcpm_set_state(port, PR_SWAP_SRC_SNK_SOURCE_OFF, 0); 3180 break; 3181 3182 case PR_SWAP_SNK_SRC_SINK_OFF: 3183 /* Do nothing, expected */ 3184 break; 3185 3186 case PORT_RESET_WAIT_OFF: 3187 tcpm_set_state(port, tcpm_default_state(port), 0); 3188 break; 3189 case SRC_TRY_WAIT: 3190 case SRC_TRY_DEBOUNCE: 3191 /* Do nothing, waiting for sink detection */ 3192 break; 3193 default: 3194 if (port->pwr_role == TYPEC_SINK && 3195 port->attached) 3196 tcpm_set_state(port, SNK_UNATTACHED, 0); 3197 break; 3198 } 3199} 3200 3201static void _tcpm_pd_hard_reset(struct tcpm_port *port) 3202{ 3203 tcpm_log_force(port, "Received hard reset"); 3204 /* 3205 * If we keep receiving hard reset requests, executing the hard reset 3206 * must have failed. Revert to error recovery if that happens. 3207 */ 3208 tcpm_set_state(port, 3209 port->hard_reset_count < PD_N_HARD_RESET_COUNT ? 3210 HARD_RESET_START : ERROR_RECOVERY, 3211 0); 3212} 3213 3214static void tcpm_pd_event_handler(struct work_struct *work) 3215{ 3216 struct tcpm_port *port = container_of(work, struct tcpm_port, 3217 event_work); 3218 u32 events; 3219 3220 mutex_lock(&port->lock); 3221 3222 spin_lock(&port->pd_event_lock); 3223 while (port->pd_events) { 3224 events = port->pd_events; 3225 port->pd_events = 0; 3226 spin_unlock(&port->pd_event_lock); 3227 if (events & TCPM_RESET_EVENT) 3228 _tcpm_pd_hard_reset(port); 3229 if (events & TCPM_VBUS_EVENT) { 3230 bool vbus; 3231 3232 vbus = port->tcpc->get_vbus(port->tcpc); 3233 if (vbus) 3234 _tcpm_pd_vbus_on(port); 3235 else 3236 _tcpm_pd_vbus_off(port); 3237 } 3238 if (events & TCPM_CC_EVENT) { 3239 enum typec_cc_status cc1, cc2; 3240 3241 if (port->tcpc->get_cc(port->tcpc, &cc1, &cc2) == 0) 3242 _tcpm_cc_change(port, cc1, cc2); 3243 } 3244 spin_lock(&port->pd_event_lock); 3245 } 3246 spin_unlock(&port->pd_event_lock); 3247 mutex_unlock(&port->lock); 3248} 3249 3250void tcpm_cc_change(struct tcpm_port *port) 3251{ 3252 spin_lock(&port->pd_event_lock); 3253 port->pd_events |= TCPM_CC_EVENT; 3254 spin_unlock(&port->pd_event_lock); 3255 queue_work(port->wq, &port->event_work); 3256} 3257EXPORT_SYMBOL_GPL(tcpm_cc_change); 3258 3259void tcpm_vbus_change(struct tcpm_port *port) 3260{ 3261 spin_lock(&port->pd_event_lock); 3262 port->pd_events |= TCPM_VBUS_EVENT; 3263 spin_unlock(&port->pd_event_lock); 3264 queue_work(port->wq, &port->event_work); 3265} 3266EXPORT_SYMBOL_GPL(tcpm_vbus_change); 3267 3268void tcpm_pd_hard_reset(struct tcpm_port *port) 3269{ 3270 spin_lock(&port->pd_event_lock); 3271 port->pd_events = TCPM_RESET_EVENT; 3272 spin_unlock(&port->pd_event_lock); 3273 queue_work(port->wq, &port->event_work); 3274} 3275EXPORT_SYMBOL_GPL(tcpm_pd_hard_reset); 3276 3277static int tcpm_dr_set(const struct typec_capability *cap, 3278 enum typec_data_role data) 3279{ 3280 struct tcpm_port *port = typec_cap_to_tcpm(cap); 3281 int ret; 3282 3283 mutex_lock(&port->swap_lock); 3284 mutex_lock(&port->lock); 3285 3286 if (port->port_type != TYPEC_PORT_DRP) { 3287 ret = -EINVAL; 3288 goto port_unlock; 3289 } 3290 if (port->state != SRC_READY && port->state != SNK_READY) { 3291 ret = -EAGAIN; 3292 goto port_unlock; 3293 } 3294 3295 if (port->data_role == data) { 3296 ret = 0; 3297 goto port_unlock; 3298 } 3299 3300 /* 3301 * XXX 3302 * 6.3.9: If an alternate mode is active, a request to swap 3303 * alternate modes shall trigger a port reset. 3304 * Reject data role swap request in this case. 3305 */ 3306 3307 if (!port->pd_capable) { 3308 /* 3309 * If the partner is not PD capable, reset the port to 3310 * trigger a role change. This can only work if a preferred 3311 * role is configured, and if it matches the requested role. 3312 */ 3313 if (port->try_role == TYPEC_NO_PREFERRED_ROLE || 3314 port->try_role == port->pwr_role) { 3315 ret = -EINVAL; 3316 goto port_unlock; 3317 } 3318 port->non_pd_role_swap = true; 3319 tcpm_set_state(port, PORT_RESET, 0); 3320 } else { 3321 tcpm_set_state(port, DR_SWAP_SEND, 0); 3322 } 3323 3324 port->swap_status = 0; 3325 port->swap_pending = true; 3326 reinit_completion(&port->swap_complete); 3327 mutex_unlock(&port->lock); 3328 3329 if (!wait_for_completion_timeout(&port->swap_complete, 3330 msecs_to_jiffies(PD_ROLE_SWAP_TIMEOUT))) 3331 ret = -ETIMEDOUT; 3332 else 3333 ret = port->swap_status; 3334 3335 port->non_pd_role_swap = false; 3336 goto swap_unlock; 3337 3338port_unlock: 3339 mutex_unlock(&port->lock); 3340swap_unlock: 3341 mutex_unlock(&port->swap_lock); 3342 return ret; 3343} 3344 3345static int tcpm_pr_set(const struct typec_capability *cap, 3346 enum typec_role role) 3347{ 3348 struct tcpm_port *port = typec_cap_to_tcpm(cap); 3349 int ret; 3350 3351 mutex_lock(&port->swap_lock); 3352 mutex_lock(&port->lock); 3353 3354 if (port->port_type != TYPEC_PORT_DRP) { 3355 ret = -EINVAL; 3356 goto port_unlock; 3357 } 3358 if (port->state != SRC_READY && port->state != SNK_READY) { 3359 ret = -EAGAIN; 3360 goto port_unlock; 3361 } 3362 3363 if (role == port->pwr_role) { 3364 ret = 0; 3365 goto port_unlock; 3366 } 3367 3368 port->swap_status = 0; 3369 port->swap_pending = true; 3370 reinit_completion(&port->swap_complete); 3371 tcpm_set_state(port, PR_SWAP_SEND, 0); 3372 mutex_unlock(&port->lock); 3373 3374 if (!wait_for_completion_timeout(&port->swap_complete, 3375 msecs_to_jiffies(PD_ROLE_SWAP_TIMEOUT))) 3376 ret = -ETIMEDOUT; 3377 else 3378 ret = port->swap_status; 3379 3380 goto swap_unlock; 3381 3382port_unlock: 3383 mutex_unlock(&port->lock); 3384swap_unlock: 3385 mutex_unlock(&port->swap_lock); 3386 return ret; 3387} 3388 3389static int tcpm_vconn_set(const struct typec_capability *cap, 3390 enum typec_role role) 3391{ 3392 struct tcpm_port *port = typec_cap_to_tcpm(cap); 3393 int ret; 3394 3395 mutex_lock(&port->swap_lock); 3396 mutex_lock(&port->lock); 3397 3398 if (port->state != SRC_READY && port->state != SNK_READY) { 3399 ret = -EAGAIN; 3400 goto port_unlock; 3401 } 3402 3403 if (role == port->vconn_role) { 3404 ret = 0; 3405 goto port_unlock; 3406 } 3407 3408 port->swap_status = 0; 3409 port->swap_pending = true; 3410 reinit_completion(&port->swap_complete); 3411 tcpm_set_state(port, VCONN_SWAP_SEND, 0); 3412 mutex_unlock(&port->lock); 3413 3414 if (!wait_for_completion_timeout(&port->swap_complete, 3415 msecs_to_jiffies(PD_ROLE_SWAP_TIMEOUT))) 3416 ret = -ETIMEDOUT; 3417 else 3418 ret = port->swap_status; 3419 3420 goto swap_unlock; 3421 3422port_unlock: 3423 mutex_unlock(&port->lock); 3424swap_unlock: 3425 mutex_unlock(&port->swap_lock); 3426 return ret; 3427} 3428 3429static int tcpm_try_role(const struct typec_capability *cap, int role) 3430{ 3431 struct tcpm_port *port = typec_cap_to_tcpm(cap); 3432 struct tcpc_dev *tcpc = port->tcpc; 3433 int ret = 0; 3434 3435 mutex_lock(&port->lock); 3436 if (tcpc->try_role) 3437 ret = tcpc->try_role(tcpc, role); 3438 if (!ret && !tcpc->config->try_role_hw) 3439 port->try_role = role; 3440 port->try_src_count = 0; 3441 port->try_snk_count = 0; 3442 mutex_unlock(&port->lock); 3443 3444 return ret; 3445} 3446 3447static void tcpm_init(struct tcpm_port *port) 3448{ 3449 enum typec_cc_status cc1, cc2; 3450 3451 port->tcpc->init(port->tcpc); 3452 3453 tcpm_reset_port(port); 3454 3455 /* 3456 * XXX 3457 * Should possibly wait for VBUS to settle if it was enabled locally 3458 * since tcpm_reset_port() will disable VBUS. 3459 */ 3460 port->vbus_present = port->tcpc->get_vbus(port->tcpc); 3461 if (port->vbus_present) 3462 port->vbus_never_low = true; 3463 3464 tcpm_set_state(port, tcpm_default_state(port), 0); 3465 3466 if (port->tcpc->get_cc(port->tcpc, &cc1, &cc2) == 0) 3467 _tcpm_cc_change(port, cc1, cc2); 3468 3469 /* 3470 * Some adapters need a clean slate at startup, and won't recover 3471 * otherwise. So do not try to be fancy and force a clean disconnect. 3472 */ 3473 tcpm_set_state(port, PORT_RESET, 0); 3474} 3475 3476static int tcpm_port_type_set(const struct typec_capability *cap, 3477 enum typec_port_type type) 3478{ 3479 struct tcpm_port *port = typec_cap_to_tcpm(cap); 3480 3481 mutex_lock(&port->lock); 3482 if (type == port->port_type) 3483 goto port_unlock; 3484 3485 port->port_type = type; 3486 3487 if (!port->connected) { 3488 tcpm_set_state(port, PORT_RESET, 0); 3489 } else if (type == TYPEC_PORT_SNK) { 3490 if (!(port->pwr_role == TYPEC_SINK && 3491 port->data_role == TYPEC_DEVICE)) 3492 tcpm_set_state(port, PORT_RESET, 0); 3493 } else if (type == TYPEC_PORT_SRC) { 3494 if (!(port->pwr_role == TYPEC_SOURCE && 3495 port->data_role == TYPEC_HOST)) 3496 tcpm_set_state(port, PORT_RESET, 0); 3497 } 3498 3499port_unlock: 3500 mutex_unlock(&port->lock); 3501 return 0; 3502} 3503 3504void tcpm_tcpc_reset(struct tcpm_port *port) 3505{ 3506 mutex_lock(&port->lock); 3507 /* XXX: Maintain PD connection if possible? */ 3508 tcpm_init(port); 3509 mutex_unlock(&port->lock); 3510} 3511EXPORT_SYMBOL_GPL(tcpm_tcpc_reset); 3512 3513static int tcpm_copy_pdos(u32 *dest_pdo, const u32 *src_pdo, 3514 unsigned int nr_pdo) 3515{ 3516 unsigned int i; 3517 3518 if (nr_pdo > PDO_MAX_OBJECTS) 3519 nr_pdo = PDO_MAX_OBJECTS; 3520 3521 for (i = 0; i < nr_pdo; i++) 3522 dest_pdo[i] = src_pdo[i]; 3523 3524 return nr_pdo; 3525} 3526 3527static int tcpm_copy_vdos(u32 *dest_vdo, const u32 *src_vdo, 3528 unsigned int nr_vdo) 3529{ 3530 unsigned int i; 3531 3532 if (nr_vdo > VDO_MAX_OBJECTS) 3533 nr_vdo = VDO_MAX_OBJECTS; 3534 3535 for (i = 0; i < nr_vdo; i++) 3536 dest_vdo[i] = src_vdo[i]; 3537 3538 return nr_vdo; 3539} 3540 3541int tcpm_update_source_capabilities(struct tcpm_port *port, const u32 *pdo, 3542 unsigned int nr_pdo) 3543{ 3544 if (tcpm_validate_caps(port, pdo, nr_pdo)) 3545 return -EINVAL; 3546 3547 mutex_lock(&port->lock); 3548 port->nr_src_pdo = tcpm_copy_pdos(port->src_pdo, pdo, nr_pdo); 3549 switch (port->state) { 3550 case SRC_UNATTACHED: 3551 case SRC_ATTACH_WAIT: 3552 case SRC_TRYWAIT: 3553 tcpm_set_cc(port, tcpm_rp_cc(port)); 3554 break; 3555 case SRC_SEND_CAPABILITIES: 3556 case SRC_NEGOTIATE_CAPABILITIES: 3557 case SRC_READY: 3558 case SRC_WAIT_NEW_CAPABILITIES: 3559 tcpm_set_cc(port, tcpm_rp_cc(port)); 3560 tcpm_set_state(port, SRC_SEND_CAPABILITIES, 0); 3561 break; 3562 default: 3563 break; 3564 } 3565 mutex_unlock(&port->lock); 3566 return 0; 3567} 3568EXPORT_SYMBOL_GPL(tcpm_update_source_capabilities); 3569 3570int tcpm_update_sink_capabilities(struct tcpm_port *port, const u32 *pdo, 3571 unsigned int nr_pdo, 3572 unsigned int max_snk_mv, 3573 unsigned int max_snk_ma, 3574 unsigned int max_snk_mw, 3575 unsigned int operating_snk_mw) 3576{ 3577 if (tcpm_validate_caps(port, pdo, nr_pdo)) 3578 return -EINVAL; 3579 3580 mutex_lock(&port->lock); 3581 port->nr_snk_pdo = tcpm_copy_pdos(port->snk_pdo, pdo, nr_pdo); 3582 port->max_snk_mv = max_snk_mv; 3583 port->max_snk_ma = max_snk_ma; 3584 port->max_snk_mw = max_snk_mw; 3585 port->operating_snk_mw = operating_snk_mw; 3586 3587 switch (port->state) { 3588 case SNK_NEGOTIATE_CAPABILITIES: 3589 case SNK_READY: 3590 case SNK_TRANSITION_SINK: 3591 case SNK_TRANSITION_SINK_VBUS: 3592 tcpm_set_state(port, SNK_NEGOTIATE_CAPABILITIES, 0); 3593 break; 3594 default: 3595 break; 3596 } 3597 mutex_unlock(&port->lock); 3598 return 0; 3599} 3600EXPORT_SYMBOL_GPL(tcpm_update_sink_capabilities); 3601 3602struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc) 3603{ 3604 struct tcpm_port *port; 3605 int i, err; 3606 3607 if (!dev || !tcpc || !tcpc->config || 3608 !tcpc->get_vbus || !tcpc->set_cc || !tcpc->get_cc || 3609 !tcpc->set_polarity || !tcpc->set_vconn || !tcpc->set_vbus || 3610 !tcpc->set_pd_rx || !tcpc->set_roles || !tcpc->pd_transmit) 3611 return ERR_PTR(-EINVAL); 3612 3613 port = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL); 3614 if (!port) 3615 return ERR_PTR(-ENOMEM); 3616 3617 port->dev = dev; 3618 port->tcpc = tcpc; 3619 3620 mutex_init(&port->lock); 3621 mutex_init(&port->swap_lock); 3622 3623 port->wq = create_singlethread_workqueue(dev_name(dev)); 3624 if (!port->wq) 3625 return ERR_PTR(-ENOMEM); 3626 INIT_DELAYED_WORK(&port->state_machine, tcpm_state_machine_work); 3627 INIT_DELAYED_WORK(&port->vdm_state_machine, vdm_state_machine_work); 3628 INIT_WORK(&port->event_work, tcpm_pd_event_handler); 3629 3630 spin_lock_init(&port->pd_event_lock); 3631 3632 init_completion(&port->tx_complete); 3633 init_completion(&port->swap_complete); 3634 tcpm_debugfs_init(port); 3635 3636 if (tcpm_validate_caps(port, tcpc->config->src_pdo, 3637 tcpc->config->nr_src_pdo) || 3638 tcpm_validate_caps(port, tcpc->config->snk_pdo, 3639 tcpc->config->nr_snk_pdo)) { 3640 err = -EINVAL; 3641 goto out_destroy_wq; 3642 } 3643 port->nr_src_pdo = tcpm_copy_pdos(port->src_pdo, tcpc->config->src_pdo, 3644 tcpc->config->nr_src_pdo); 3645 port->nr_snk_pdo = tcpm_copy_pdos(port->snk_pdo, tcpc->config->snk_pdo, 3646 tcpc->config->nr_snk_pdo); 3647 port->nr_snk_vdo = tcpm_copy_vdos(port->snk_vdo, tcpc->config->snk_vdo, 3648 tcpc->config->nr_snk_vdo); 3649 3650 port->max_snk_mv = tcpc->config->max_snk_mv; 3651 port->max_snk_ma = tcpc->config->max_snk_ma; 3652 port->max_snk_mw = tcpc->config->max_snk_mw; 3653 port->operating_snk_mw = tcpc->config->operating_snk_mw; 3654 if (!tcpc->config->try_role_hw) 3655 port->try_role = tcpc->config->default_role; 3656 else 3657 port->try_role = TYPEC_NO_PREFERRED_ROLE; 3658 3659 port->typec_caps.prefer_role = tcpc->config->default_role; 3660 port->typec_caps.type = tcpc->config->type; 3661 port->typec_caps.data = tcpc->config->data; 3662 port->typec_caps.revision = 0x0120; /* Type-C spec release 1.2 */ 3663 port->typec_caps.pd_revision = 0x0200; /* USB-PD spec release 2.0 */ 3664 port->typec_caps.dr_set = tcpm_dr_set; 3665 port->typec_caps.pr_set = tcpm_pr_set; 3666 port->typec_caps.vconn_set = tcpm_vconn_set; 3667 port->typec_caps.try_role = tcpm_try_role; 3668 port->typec_caps.port_type_set = tcpm_port_type_set; 3669 3670 port->partner_desc.identity = &port->partner_ident; 3671 port->port_type = tcpc->config->type; 3672 3673 port->role_sw = usb_role_switch_get(port->dev); 3674 if (IS_ERR(port->role_sw)) { 3675 err = PTR_ERR(port->role_sw); 3676 goto out_destroy_wq; 3677 } 3678 3679 port->typec_port = typec_register_port(port->dev, &port->typec_caps); 3680 if (IS_ERR(port->typec_port)) { 3681 err = PTR_ERR(port->typec_port); 3682 goto out_destroy_wq; 3683 } 3684 3685 if (tcpc->config->alt_modes) { 3686 const struct typec_altmode_desc *paltmode = tcpc->config->alt_modes; 3687 3688 i = 0; 3689 while (paltmode->svid && i < ARRAY_SIZE(port->port_altmode)) { 3690 struct typec_altmode *alt; 3691 3692 alt = typec_port_register_altmode(port->typec_port, 3693 paltmode); 3694 if (IS_ERR(alt)) { 3695 tcpm_log(port, 3696 "%s: failed to register port alternate mode 0x%x", 3697 dev_name(dev), paltmode->svid); 3698 break; 3699 } 3700 port->port_altmode[i] = alt; 3701 i++; 3702 paltmode++; 3703 } 3704 } 3705 3706 mutex_lock(&port->lock); 3707 tcpm_init(port); 3708 mutex_unlock(&port->lock); 3709 3710 tcpm_log(port, "%s: registered", dev_name(dev)); 3711 return port; 3712 3713out_destroy_wq: 3714 usb_role_switch_put(port->role_sw); 3715 destroy_workqueue(port->wq); 3716 return ERR_PTR(err); 3717} 3718EXPORT_SYMBOL_GPL(tcpm_register_port); 3719 3720void tcpm_unregister_port(struct tcpm_port *port) 3721{ 3722 int i; 3723 3724 tcpm_reset_port(port); 3725 for (i = 0; i < ARRAY_SIZE(port->port_altmode); i++) 3726 typec_unregister_altmode(port->port_altmode[i]); 3727 typec_unregister_port(port->typec_port); 3728 usb_role_switch_put(port->role_sw); 3729 tcpm_debugfs_exit(port); 3730 destroy_workqueue(port->wq); 3731} 3732EXPORT_SYMBOL_GPL(tcpm_unregister_port); 3733 3734MODULE_AUTHOR("Guenter Roeck <groeck@chromium.org>"); 3735MODULE_DESCRIPTION("USB Type-C Port Manager"); 3736MODULE_LICENSE("GPL");