1 /* Copyright (c) 2016-2017, Linux Foundation. All rights reserved.
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
13 #include <linux/completion.h>
14 #include <linux/delay.h>
15 #include <linux/hrtimer.h>
16 #include <linux/ipc_logging.h>
17 #include <linux/kernel.h>
18 #include <linux/list.h>
19 #include <linux/module.h>
21 #include <linux/of_platform.h>
22 #include <linux/power_supply.h>
23 #include <linux/regulator/consumer.h>
24 #include <linux/slab.h>
25 #include <linux/spinlock.h>
26 #include <linux/workqueue.h>
27 #include <linux/extcon.h>
28 #include <linux/usb/class-dual-role.h>
29 #include <linux/usb/usbpd.h>
32 /* To start USB stack for USB3.1 complaince testing */
33 static bool usb_compliance_mode;
34 module_param(usb_compliance_mode, bool, S_IRUGO|S_IWUSR);
35 MODULE_PARM_DESC(usb_compliance_mode, "Start USB stack for USB3.1 compliance testing");
37 static bool disable_usb_pd;
38 module_param(disable_usb_pd, bool, S_IRUGO|S_IWUSR);
39 MODULE_PARM_DESC(disable_usb_pd, "Disable USB PD for USB3.1 compliance testing");
41 static bool rev3_sink_only;
42 module_param(rev3_sink_only, bool, 0644);
43 MODULE_PARM_DESC(rev3_sink_only, "Enable power delivery rev3.0 sink only mode");
50 PE_SRC_SEND_CAPABILITIES,
51 PE_SRC_SEND_CAPABILITIES_WAIT, /* substate to wait for Request */
52 PE_SRC_NEGOTIATE_CAPABILITY,
53 PE_SRC_TRANSITION_SUPPLY,
57 PE_SRC_SEND_SOFT_RESET,
59 PE_SRC_TRANSITION_TO_DEFAULT,
62 PE_SNK_WAIT_FOR_CAPABILITIES,
63 PE_SNK_EVALUATE_CAPABILITY,
64 PE_SNK_SELECT_CAPABILITY,
65 PE_SNK_TRANSITION_SINK,
69 PE_SNK_SEND_SOFT_RESET,
70 PE_SNK_TRANSITION_TO_DEFAULT,
72 PE_PRS_SNK_SRC_SEND_SWAP,
73 PE_PRS_SNK_SRC_TRANSITION_TO_OFF,
74 PE_PRS_SNK_SRC_SOURCE_ON,
75 PE_PRS_SRC_SNK_SEND_SWAP,
76 PE_PRS_SRC_SNK_TRANSITION_TO_OFF,
77 PE_PRS_SRC_SNK_WAIT_SOURCE_ON,
78 PE_VCS_WAIT_FOR_VCONN,
81 static const char * const usbpd_state_strings[] = {
86 "SRC_Send_Capabilities",
87 "SRC_Send_Capabilities (Wait for Request)",
88 "SRC_Negotiate_Capability",
89 "SRC_Transition_Supply",
93 "SRC_Send_Soft_Reset",
95 "SRC_Transition_to_default",
98 "SNK_Wait_for_Capabilities",
99 "SNK_Evaluate_Capability",
100 "SNK_Select_Capability",
101 "SNK_Transition_Sink",
105 "SNK_Send_Soft_Reset",
106 "SNK_Transition_to_default",
108 "PRS_SNK_SRC_Send_Swap",
109 "PRS_SNK_SRC_Transition_to_off",
110 "PRS_SNK_SRC_Source_on",
111 "PRS_SRC_SNK_Send_Swap",
112 "PRS_SRC_SNK_Transition_to_off",
113 "PRS_SRC_SNK_Wait_Source_on",
114 "VCS_Wait_for_VCONN",
117 enum usbpd_control_msg_type {
132 MSG_NOT_SUPPORTED = 0x10,
133 MSG_GET_SOURCE_CAP_EXTENDED,
137 MSG_GET_COUNTRY_CODES,
140 enum usbpd_data_msg_type {
141 MSG_SOURCE_CAPABILITIES = 1,
144 MSG_SINK_CAPABILITIES,
147 MSG_GET_COUNTRY_INFO,
151 enum usbpd_ext_msg_type {
152 MSG_SOURCE_CAPABILITIES_EXTENDED = 1,
155 MSG_GET_BATTERY_STATUS,
156 MSG_BATTERY_CAPABILITIES,
157 MSG_GET_MANUFACTURER_INFO,
158 MSG_MANUFACTURER_INFO,
159 MSG_SECURITY_REQUEST,
160 MSG_SECURITY_RESPONSE,
161 MSG_FIRMWARE_UPDATE_REQUEST,
162 MSG_FIRMWARE_UPDATE_RESPONSE,
177 static void *usbpd_ipc_log;
178 #define usbpd_dbg(dev, fmt, ...) do { \
179 ipc_log_string(usbpd_ipc_log, "%s: %s: " fmt, dev_name(dev), __func__, \
181 dev_dbg(dev, fmt, ##__VA_ARGS__); \
184 #define usbpd_info(dev, fmt, ...) do { \
185 ipc_log_string(usbpd_ipc_log, "%s: %s: " fmt, dev_name(dev), __func__, \
187 dev_info(dev, fmt, ##__VA_ARGS__); \
190 #define usbpd_warn(dev, fmt, ...) do { \
191 ipc_log_string(usbpd_ipc_log, "%s: %s: " fmt, dev_name(dev), __func__, \
193 dev_warn(dev, fmt, ##__VA_ARGS__); \
196 #define usbpd_err(dev, fmt, ...) do { \
197 ipc_log_string(usbpd_ipc_log, "%s: %s: " fmt, dev_name(dev), __func__, \
199 dev_err(dev, fmt, ##__VA_ARGS__); \
202 #define NUM_LOG_PAGES 10
204 /* Timeouts (in ms) */
205 #define ERROR_RECOVERY_TIME 25
206 #define SENDER_RESPONSE_TIME 26
207 #define SINK_WAIT_CAP_TIME 500
208 #define PS_TRANSITION_TIME 450
209 #define SRC_CAP_TIME 120
210 #define SRC_TRANSITION_TIME 25
211 #define SRC_RECOVER_TIME 750
212 #define PS_HARD_RESET_TIME 25
213 #define PS_SOURCE_ON 400
214 #define PS_SOURCE_OFF 750
215 #define FIRST_SOURCE_CAP_TIME 200
216 #define VDM_BUSY_TIME 50
217 #define VCONN_ON_TIME 100
219 /* tPSHardReset + tSafe0V */
220 #define SNK_HARD_RESET_VBUS_OFF_TIME (35 + 650)
222 /* tSrcRecover + tSrcTurnOn */
223 #define SNK_HARD_RESET_VBUS_ON_TIME (1000 + 275)
225 #define PD_CAPS_COUNT 50
227 #define PD_MAX_MSG_ID 7
229 #define PD_MAX_DATA_OBJ 7
231 #define PD_SRC_CAP_EXT_DB_LEN 24
232 #define PD_STATUS_DB_LEN 5
233 #define PD_BATTERY_CAP_DB_LEN 9
235 #define PD_MAX_EXT_MSG_LEN 260
236 #define PD_MAX_EXT_MSG_LEGACY_LEN 26
238 #define PD_MSG_HDR(type, dr, pr, id, cnt, rev) \
239 (((type) & 0x1F) | ((dr) << 5) | (rev << 6) | \
240 ((pr) << 8) | ((id) << 9) | ((cnt) << 12))
241 #define PD_MSG_HDR_COUNT(hdr) (((hdr) >> 12) & 7)
242 #define PD_MSG_HDR_TYPE(hdr) ((hdr) & 0x1F)
243 #define PD_MSG_HDR_ID(hdr) (((hdr) >> 9) & 7)
244 #define PD_MSG_HDR_REV(hdr) (((hdr) >> 6) & 3)
245 #define PD_MSG_HDR_EXTENDED BIT(15)
246 #define PD_MSG_HDR_IS_EXTENDED(hdr) ((hdr) & PD_MSG_HDR_EXTENDED)
248 #define PD_MSG_EXT_HDR(chunked, num, req, size) \
249 (((chunked) << 15) | (((num) & 0xF) << 11) | \
250 ((req) << 10) | ((size) & 0x1FF))
251 #define PD_MSG_EXT_HDR_IS_CHUNKED(ehdr) ((ehdr) & 0x8000)
252 #define PD_MSG_EXT_HDR_CHUNK_NUM(ehdr) (((ehdr) >> 11) & 0xF)
253 #define PD_MSG_EXT_HDR_REQ_CHUNK(ehdr) ((ehdr) & 0x400)
254 #define PD_MSG_EXT_HDR_DATA_SIZE(ehdr) ((ehdr) & 0x1FF)
256 #define PD_RDO_FIXED(obj, gb, mismatch, usb_comm, no_usb_susp, curr1, curr2) \
257 (((obj) << 28) | ((gb) << 27) | ((mismatch) << 26) | \
258 ((usb_comm) << 25) | ((no_usb_susp) << 24) | \
259 ((curr1) << 10) | (curr2))
261 #define PD_RDO_AUGMENTED(obj, mismatch, usb_comm, no_usb_susp, volt, curr) \
262 (((obj) << 28) | ((mismatch) << 26) | ((usb_comm) << 25) | \
263 ((no_usb_susp) << 24) | ((volt) << 9) | (curr))
265 #define PD_RDO_OBJ_POS(rdo) ((rdo) >> 28 & 7)
266 #define PD_RDO_GIVEBACK(rdo) ((rdo) >> 27 & 1)
267 #define PD_RDO_MISMATCH(rdo) ((rdo) >> 26 & 1)
268 #define PD_RDO_USB_COMM(rdo) ((rdo) >> 25 & 1)
269 #define PD_RDO_NO_USB_SUSP(rdo) ((rdo) >> 24 & 1)
270 #define PD_RDO_FIXED_CURR(rdo) ((rdo) >> 10 & 0x3FF)
271 #define PD_RDO_FIXED_CURR_MINMAX(rdo) ((rdo) & 0x3FF)
272 #define PD_RDO_PROG_VOLTAGE(rdo) ((rdo) >> 9 & 0x7FF)
273 #define PD_RDO_PROG_CURR(rdo) ((rdo) & 0x7F)
275 #define PD_SRC_PDO_TYPE(pdo) (((pdo) >> 30) & 3)
276 #define PD_SRC_PDO_TYPE_FIXED 0
277 #define PD_SRC_PDO_TYPE_BATTERY 1
278 #define PD_SRC_PDO_TYPE_VARIABLE 2
279 #define PD_SRC_PDO_TYPE_AUGMENTED 3
281 #define PD_SRC_PDO_FIXED_PR_SWAP(pdo) (((pdo) >> 29) & 1)
282 #define PD_SRC_PDO_FIXED_USB_SUSP(pdo) (((pdo) >> 28) & 1)
283 #define PD_SRC_PDO_FIXED_EXT_POWERED(pdo) (((pdo) >> 27) & 1)
284 #define PD_SRC_PDO_FIXED_USB_COMM(pdo) (((pdo) >> 26) & 1)
285 #define PD_SRC_PDO_FIXED_DR_SWAP(pdo) (((pdo) >> 25) & 1)
286 #define PD_SRC_PDO_FIXED_PEAK_CURR(pdo) (((pdo) >> 20) & 3)
287 #define PD_SRC_PDO_FIXED_VOLTAGE(pdo) (((pdo) >> 10) & 0x3FF)
288 #define PD_SRC_PDO_FIXED_MAX_CURR(pdo) ((pdo) & 0x3FF)
290 #define PD_SRC_PDO_VAR_BATT_MAX_VOLT(pdo) (((pdo) >> 20) & 0x3FF)
291 #define PD_SRC_PDO_VAR_BATT_MIN_VOLT(pdo) (((pdo) >> 10) & 0x3FF)
292 #define PD_SRC_PDO_VAR_BATT_MAX(pdo) ((pdo) & 0x3FF)
294 #define PD_APDO_PPS(pdo) (((pdo) >> 28) & 3)
295 #define PD_APDO_MAX_VOLT(pdo) (((pdo) >> 17) & 0xFF)
296 #define PD_APDO_MIN_VOLT(pdo) (((pdo) >> 8) & 0xFF)
297 #define PD_APDO_MAX_CURR(pdo) ((pdo) & 0x7F)
299 /* Vendor Defined Messages */
300 #define MAX_CRC_RECEIVE_TIME 9 /* ~(2 * tReceive_max(1.1ms) * # retry 4) */
301 #define MAX_VDM_RESPONSE_TIME 60 /* 2 * tVDMSenderResponse_max(30ms) */
302 #define MAX_VDM_BUSY_TIME 100 /* 2 * tVDMBusy (50ms) */
304 #define PD_SNK_PDO_FIXED(prs, hc, uc, usb_comm, drs, volt, curr) \
305 (((prs) << 29) | ((hc) << 28) | ((uc) << 27) | ((usb_comm) << 26) | \
306 ((drs) << 25) | ((volt) << 10) | (curr))
308 /* VDM header is the first 32-bit object following the 16-bit PD header */
309 #define VDM_HDR_SVID(hdr) ((hdr) >> 16)
310 #define VDM_IS_SVDM(hdr) ((hdr) & 0x8000)
311 #define SVDM_HDR_OBJ_POS(hdr) (((hdr) >> 8) & 0x7)
312 #define SVDM_HDR_CMD_TYPE(hdr) (((hdr) >> 6) & 0x3)
313 #define SVDM_HDR_CMD(hdr) ((hdr) & 0x1f)
315 #define SVDM_HDR(svid, ver, obj, cmd_type, cmd) \
316 (((svid) << 16) | (1 << 15) | ((ver) << 13) \
317 | ((obj) << 8) | ((cmd_type) << 6) | (cmd))
319 /* discover id response vdo bit fields */
320 #define ID_HDR_USB_HOST BIT(31)
321 #define ID_HDR_USB_DEVICE BIT(30)
322 #define ID_HDR_MODAL_OPR BIT(26)
323 #define ID_HDR_PRODUCT_TYPE(n) ((n) >> 27)
324 #define ID_HDR_PRODUCT_PER_MASK (2 << 27)
325 #define ID_HDR_PRODUCT_HUB 1
326 #define ID_HDR_PRODUCT_PER 2
327 #define ID_HDR_PRODUCT_AMA 5
328 #define ID_HDR_VID 0x05c6 /* qcom */
329 #define PROD_VDO_PID 0x0a00 /* TBD */
331 static bool check_vsafe0v = true;
332 module_param(check_vsafe0v, bool, S_IRUSR | S_IWUSR);
334 static int min_sink_current = 900;
335 module_param(min_sink_current, int, S_IRUSR | S_IWUSR);
337 static const u32 default_src_caps[] = { 0x36019096 }; /* VSafe5V @ 1.5A */
338 static const u32 default_snk_caps[] = { 0x2601912C }; /* VSafe5V @ 3A */
341 u32 data[PD_MAX_DATA_OBJ];
347 u16 data_len; /* size of payload in bytes */
348 struct list_head entry;
352 #define IS_DATA(m, t) ((m) && !PD_MSG_HDR_IS_EXTENDED((m)->hdr) && \
353 PD_MSG_HDR_COUNT((m)->hdr) && \
354 (PD_MSG_HDR_TYPE((m)->hdr) == (t)))
355 #define IS_CTRL(m, t) ((m) && !PD_MSG_HDR_COUNT((m)->hdr) && \
356 (PD_MSG_HDR_TYPE((m)->hdr) == (t)))
357 #define IS_EXT(m, t) ((m) && PD_MSG_HDR_IS_EXTENDED((m)->hdr) && \
358 (PD_MSG_HDR_TYPE((m)->hdr) == (t)))
362 struct workqueue_struct *wq;
363 struct work_struct sm_work;
364 struct hrtimer timer;
367 struct extcon_dev *extcon;
369 enum usbpd_state current_state;
370 bool hard_reset_recvd;
371 ktime_t hard_reset_recvd_time;
372 struct list_head rx_q;
374 struct rx_msg *rx_ext_msg;
376 u32 received_pdos[PD_MAX_DATA_OBJ];
381 u32 rdo; /* can be either source or sink */
382 int current_voltage; /* uV */
383 int requested_voltage; /* uV */
384 int requested_current; /* mA */
386 bool in_explicit_contract;
394 struct power_supply *usb_psy;
395 struct notifier_block psy_nb;
397 enum power_supply_typec_mode typec_mode;
398 enum power_supply_type psy_type;
399 enum power_supply_typec_power_role forced_pr;
402 enum pd_spec_rev spec_rev;
403 enum data_role current_dr;
404 enum power_role current_pr;
408 struct completion is_ready;
409 struct completion tx_chunk_request;
412 struct mutex swap_lock;
413 struct dual_role_phy_instance *dual_role;
414 struct dual_role_phy_desc dr_desc;
418 struct regulator *vbus;
419 struct regulator *vconn;
422 bool vconn_is_external;
427 int hard_reset_count;
429 enum vdm_state vdm_state;
430 u16 *discovered_svids;
432 struct vdm_tx *vdm_tx;
433 struct vdm_tx *vdm_tx_retry;
434 struct list_head svid_handlers;
436 struct list_head instance;
438 /* ext msg support */
439 bool send_get_src_cap_ext;
440 u8 src_cap_ext_db[PD_SRC_CAP_EXT_DB_LEN];
441 bool send_get_pps_status;
443 u8 status_db[PD_STATUS_DB_LEN];
444 bool send_get_battery_cap;
445 u8 get_battery_cap_db;
446 u8 battery_cap_db[PD_BATTERY_CAP_DB_LEN];
447 u8 get_battery_status_db;
448 bool send_get_battery_status;
449 u32 battery_sts_dobj;
452 static LIST_HEAD(_usbpd); /* useful for debugging */
454 static const unsigned int usbpd_extcon_cable[] = {
459 EXTCON_USB_TYPEC_MED_HIGH_CURRENT,
463 /* EXTCON_USB and EXTCON_USB_HOST are mutually exclusive */
464 static const u32 usbpd_extcon_exclusive[] = {0x3, 0};
466 enum plug_orientation usbpd_get_plug_orientation(struct usbpd *pd)
469 union power_supply_propval val;
471 ret = power_supply_get_property(pd->usb_psy,
472 POWER_SUPPLY_PROP_TYPEC_CC_ORIENTATION, &val);
474 return ORIENTATION_NONE;
478 EXPORT_SYMBOL(usbpd_get_plug_orientation);
480 static inline void stop_usb_host(struct usbpd *pd)
482 extcon_set_cable_state_(pd->extcon, EXTCON_USB_HOST, 0);
485 static inline void start_usb_host(struct usbpd *pd, bool ss)
487 enum plug_orientation cc = usbpd_get_plug_orientation(pd);
489 extcon_set_cable_state_(pd->extcon, EXTCON_USB_CC,
490 cc == ORIENTATION_CC2);
491 extcon_set_cable_state_(pd->extcon, EXTCON_USB_SPEED, ss);
492 extcon_set_cable_state_(pd->extcon, EXTCON_USB_HOST, 1);
495 static inline void stop_usb_peripheral(struct usbpd *pd)
497 extcon_set_cable_state_(pd->extcon, EXTCON_USB, 0);
500 static inline void start_usb_peripheral(struct usbpd *pd)
502 enum plug_orientation cc = usbpd_get_plug_orientation(pd);
504 extcon_set_cable_state_(pd->extcon, EXTCON_USB_CC,
505 cc == ORIENTATION_CC2);
506 extcon_set_cable_state_(pd->extcon, EXTCON_USB_SPEED, 1);
507 extcon_set_cable_state_(pd->extcon, EXTCON_USB_TYPEC_MED_HIGH_CURRENT,
508 pd->typec_mode > POWER_SUPPLY_TYPEC_SOURCE_DEFAULT ? 1 : 0);
509 extcon_set_cable_state_(pd->extcon, EXTCON_USB, 1);
512 static int set_power_role(struct usbpd *pd, enum power_role pr)
514 union power_supply_propval val = {0};
518 val.intval = POWER_SUPPLY_TYPEC_PR_NONE;
521 val.intval = POWER_SUPPLY_TYPEC_PR_SINK;
524 val.intval = POWER_SUPPLY_TYPEC_PR_SOURCE;
528 return power_supply_set_property(pd->usb_psy,
529 POWER_SUPPLY_PROP_TYPEC_POWER_ROLE, &val);
532 static struct usbpd_svid_handler *find_svid_handler(struct usbpd *pd, u16 svid)
534 struct usbpd_svid_handler *handler;
536 list_for_each_entry(handler, &pd->svid_handlers, entry)
537 if (svid == handler->svid)
543 /* Reset protocol layer */
544 static inline void pd_reset_protocol(struct usbpd *pd)
547 * first Rx ID should be 0; set this to a sentinel of -1 so that in
548 * phy_msg_received() we can check if we had seen it before.
552 pd->send_request = false;
553 pd->send_pr_swap = false;
554 pd->send_dr_swap = false;
557 static int pd_send_msg(struct usbpd *pd, u8 msg_type, const u32 *data,
558 size_t num_data, enum pd_sop_type sop)
563 if (pd->hard_reset_recvd)
566 hdr = PD_MSG_HDR(msg_type, pd->current_dr, pd->current_pr,
567 pd->tx_msgid, num_data, pd->spec_rev);
569 ret = pd_phy_write(hdr, (u8 *)data, num_data * sizeof(u32), sop);
573 pd->tx_msgid = (pd->tx_msgid + 1) & PD_MAX_MSG_ID;
577 static int pd_send_ext_msg(struct usbpd *pd, u8 msg_type,
578 const u8 *data, size_t data_len, enum pd_sop_type sop)
581 size_t len_remain, chunk_len;
582 u8 chunked_payload[PD_MAX_DATA_OBJ * sizeof(u32)] = {0};
587 if (data_len > PD_MAX_EXT_MSG_LEN) {
588 usbpd_warn(&pd->dev, "Extended message length exceeds max, truncating...\n");
589 data_len = PD_MAX_EXT_MSG_LEN;
592 pd->next_tx_chunk = 0;
593 len_remain = data_len;
595 ext_hdr = PD_MSG_EXT_HDR(1, pd->next_tx_chunk++, 0, data_len);
596 memcpy(chunked_payload, &ext_hdr, sizeof(ext_hdr));
598 chunk_len = min_t(size_t, len_remain,
599 PD_MAX_EXT_MSG_LEGACY_LEN);
600 memcpy(chunked_payload + sizeof(ext_hdr), data, chunk_len);
602 num_objs = DIV_ROUND_UP(chunk_len + sizeof(u16), sizeof(u32));
603 len_remain -= chunk_len;
605 reinit_completion(&pd->tx_chunk_request);
606 hdr = PD_MSG_HDR(msg_type, pd->current_dr, pd->current_pr,
607 pd->tx_msgid, num_objs, pd->spec_rev) |
609 ret = pd_phy_write(hdr, chunked_payload,
610 num_objs * sizeof(u32), sop);
614 pd->tx_msgid = (pd->tx_msgid + 1) & PD_MAX_MSG_ID;
616 /* Wait for request chunk */
618 !wait_for_completion_timeout(&pd->tx_chunk_request,
619 msecs_to_jiffies(SENDER_RESPONSE_TIME))) {
620 usbpd_err(&pd->dev, "Timed out waiting for chunk request\n");
623 } while (len_remain);
628 static int pd_select_pdo(struct usbpd *pd, int pdo_pos, int uv, int ua)
632 bool mismatch = false;
634 u32 pdo = pd->received_pdos[pdo_pos - 1];
636 type = PD_SRC_PDO_TYPE(pdo);
637 if (type == PD_SRC_PDO_TYPE_FIXED) {
638 curr = max_current = PD_SRC_PDO_FIXED_MAX_CURR(pdo) * 10;
641 * Check if the PDO has enough current, otherwise set the
642 * Capability Mismatch flag
644 if (curr < min_sink_current) {
646 max_current = min_sink_current;
649 pd->requested_voltage =
650 PD_SRC_PDO_FIXED_VOLTAGE(pdo) * 50 * 1000;
651 pd->rdo = PD_RDO_FIXED(pdo_pos, 0, mismatch, 1, 1, curr / 10,
653 } else if (type == PD_SRC_PDO_TYPE_AUGMENTED) {
654 if ((uv / 100000) > PD_APDO_MAX_VOLT(pdo) ||
655 (uv / 100000) < PD_APDO_MIN_VOLT(pdo) ||
656 (ua / 50000) > PD_APDO_MAX_CURR(pdo) || (ua < 0)) {
657 usbpd_err(&pd->dev, "uv (%d) and ua (%d) out of range of APDO\n",
663 pd->requested_voltage = uv;
664 pd->rdo = PD_RDO_AUGMENTED(pdo_pos, mismatch, 1, 1,
665 uv / 20000, ua / 50000);
667 usbpd_err(&pd->dev, "Only Fixed or Programmable PDOs supported\n");
671 /* Can't sink more than 5V if VCONN is sourced from the VBUS input */
672 if (pd->vconn_enabled && !pd->vconn_is_external &&
673 pd->requested_voltage > 5000000)
676 pd->requested_current = curr;
677 pd->requested_pdo = pdo_pos;
682 static int pd_eval_src_caps(struct usbpd *pd)
685 union power_supply_propval val;
686 u32 first_pdo = pd->received_pdos[0];
688 if (PD_SRC_PDO_TYPE(first_pdo) != PD_SRC_PDO_TYPE_FIXED) {
689 usbpd_err(&pd->dev, "First src_cap invalid! %08x\n", first_pdo);
693 pd->peer_usb_comm = PD_SRC_PDO_FIXED_USB_COMM(first_pdo);
694 pd->peer_pr_swap = PD_SRC_PDO_FIXED_PR_SWAP(first_pdo);
695 pd->peer_dr_swap = PD_SRC_PDO_FIXED_DR_SWAP(first_pdo);
697 val.intval = PD_SRC_PDO_FIXED_USB_SUSP(first_pdo);
698 power_supply_set_property(pd->usb_psy,
699 POWER_SUPPLY_PROP_PD_USB_SUSPEND_SUPPORTED, &val);
701 if (pd->spec_rev == USBPD_REV_30 && !rev3_sink_only) {
702 bool pps_found = false;
704 /* downgrade to 2.0 if no PPS */
705 for (i = 1; i < PD_MAX_DATA_OBJ; i++) {
706 if ((PD_SRC_PDO_TYPE(pd->received_pdos[i]) ==
707 PD_SRC_PDO_TYPE_AUGMENTED) &&
708 !PD_APDO_PPS(pd->received_pdos[i])) {
714 pd->spec_rev = USBPD_REV_20;
717 /* Select the first PDO (vSafe5V) immediately. */
718 pd_select_pdo(pd, 1, 0, 0);
723 static void pd_send_hard_reset(struct usbpd *pd)
725 union power_supply_propval val = {0};
727 usbpd_dbg(&pd->dev, "send hard reset");
729 /* Force CC logic to source/sink to keep Rp/Rd unchanged */
730 set_power_role(pd, pd->current_pr);
731 pd->hard_reset_count++;
732 pd_phy_signal(HARD_RESET_SIG);
733 pd->in_pr_swap = false;
734 power_supply_set_property(pd->usb_psy, POWER_SUPPLY_PROP_PR_SWAP, &val);
737 static void kick_sm(struct usbpd *pd, int ms)
739 pm_stay_awake(&pd->dev);
740 pd->sm_queued = true;
743 hrtimer_start(&pd->timer, ms_to_ktime(ms), HRTIMER_MODE_REL);
745 queue_work(pd->wq, &pd->sm_work);
748 static void phy_sig_received(struct usbpd *pd, enum pd_sig_type sig)
750 union power_supply_propval val = {1};
752 if (sig != HARD_RESET_SIG) {
753 usbpd_err(&pd->dev, "invalid signal (%d) received\n", sig);
757 pd->hard_reset_recvd = true;
758 pd->hard_reset_recvd_time = ktime_get();
760 usbpd_err(&pd->dev, "hard reset received\n");
762 /* Force CC logic to source/sink to keep Rp/Rd unchanged */
763 set_power_role(pd, pd->current_pr);
764 power_supply_set_property(pd->usb_psy,
765 POWER_SUPPLY_PROP_PD_IN_HARD_RESET, &val);
770 struct pd_request_chunk {
771 struct work_struct w;
775 enum pd_sop_type sop;
778 static void pd_request_chunk_work(struct work_struct *w)
780 struct pd_request_chunk *req =
781 container_of(w, struct pd_request_chunk, w);
782 struct usbpd *pd = req->pd;
785 u8 payload[4] = {0}; /* ext_hdr + padding */
786 u16 hdr = PD_MSG_HDR(req->msg_type, pd->current_dr, pd->current_pr,
787 pd->tx_msgid, 1, pd->spec_rev) | PD_MSG_HDR_EXTENDED;
789 *(u16 *)payload = PD_MSG_EXT_HDR(1, req->chunk_num, 1, 0);
791 ret = pd_phy_write(hdr, payload, sizeof(payload), req->sop);
793 pd->tx_msgid = (pd->tx_msgid + 1) & PD_MAX_MSG_ID;
795 usbpd_err(&pd->dev, "could not send chunk request\n");
797 /* queue what we have anyway */
798 spin_lock_irqsave(&pd->rx_lock, flags);
799 list_add_tail(&pd->rx_ext_msg->entry, &pd->rx_q);
800 spin_unlock_irqrestore(&pd->rx_lock, flags);
802 pd->rx_ext_msg = NULL;
808 static struct rx_msg *pd_ext_msg_received(struct usbpd *pd, u16 header, u8 *buf,
809 size_t len, enum pd_sop_type sop)
811 struct rx_msg *rx_msg;
813 u16 ext_hdr = *(u16 *)buf;
816 if (!PD_MSG_EXT_HDR_IS_CHUNKED(ext_hdr)) {
817 usbpd_err(&pd->dev, "unchunked extended messages unsupported\n");
821 /* request for next Tx chunk */
822 if (PD_MSG_EXT_HDR_REQ_CHUNK(ext_hdr)) {
823 if (PD_MSG_EXT_HDR_DATA_SIZE(ext_hdr) ||
824 PD_MSG_EXT_HDR_CHUNK_NUM(ext_hdr) !=
826 usbpd_err(&pd->dev, "invalid request chunk ext header 0x%02x\n",
831 if (!completion_done(&pd->tx_chunk_request))
832 complete(&pd->tx_chunk_request);
837 chunk_num = PD_MSG_EXT_HDR_CHUNK_NUM(ext_hdr);
839 /* allocate new message if first chunk */
840 rx_msg = kzalloc(sizeof(*rx_msg) +
841 PD_MSG_EXT_HDR_DATA_SIZE(ext_hdr),
846 rx_msg->hdr = header;
847 rx_msg->data_len = PD_MSG_EXT_HDR_DATA_SIZE(ext_hdr);
849 if (rx_msg->data_len > PD_MAX_EXT_MSG_LEN) {
850 usbpd_warn(&pd->dev, "Extended message length exceeds max, truncating...\n");
851 rx_msg->data_len = PD_MAX_EXT_MSG_LEN;
854 if (!pd->rx_ext_msg) {
855 usbpd_err(&pd->dev, "missing first rx_ext_msg chunk\n");
859 rx_msg = pd->rx_ext_msg;
863 * The amount to copy is derived as follows:
865 * - if extended data_len < 26, then copy data_len bytes
866 * - for chunks 0..N-2, copy 26 bytes
867 * - for the last chunk (N-1), copy the remainder
870 min((rx_msg->data_len - chunk_num * PD_MAX_EXT_MSG_LEGACY_LEN),
871 PD_MAX_EXT_MSG_LEGACY_LEN);
873 /* check against received length to avoid overrun */
874 if (bytes_to_copy > len - sizeof(ext_hdr)) {
875 usbpd_warn(&pd->dev, "not enough bytes in chunk, expected:%u received:%zu\n",
876 bytes_to_copy, len - sizeof(ext_hdr));
877 bytes_to_copy = len - sizeof(ext_hdr);
880 memcpy(rx_msg->payload + chunk_num * PD_MAX_EXT_MSG_LEGACY_LEN, buf + 2,
883 /* request next chunk? */
884 if ((rx_msg->data_len - chunk_num * PD_MAX_EXT_MSG_LEGACY_LEN) >
885 PD_MAX_EXT_MSG_LEGACY_LEN) {
886 struct pd_request_chunk *req;
888 if (pd->rx_ext_msg && pd->rx_ext_msg != rx_msg) {
889 usbpd_dbg(&pd->dev, "stale previous rx_ext_msg?\n");
890 kfree(pd->rx_ext_msg);
893 pd->rx_ext_msg = rx_msg;
895 req = kzalloc(sizeof(*req), GFP_ATOMIC);
897 goto queue_rx; /* return what we have anyway */
899 INIT_WORK(&req->w, pd_request_chunk_work);
901 req->msg_type = PD_MSG_HDR_TYPE(header);
902 req->chunk_num = chunk_num + 1;
904 queue_work(pd->wq, &req->w);
910 pd->rx_ext_msg = NULL;
911 return rx_msg; /* queue it for usbpd_sm */
914 static void phy_msg_received(struct usbpd *pd, enum pd_sop_type sop,
917 struct rx_msg *rx_msg;
921 if (sop != SOP_MSG) {
922 usbpd_err(&pd->dev, "invalid msg type (%d) received; only SOP supported\n",
928 usbpd_err(&pd->dev, "invalid message received, len=%zd\n", len);
932 header = *((u16 *)buf);
937 usbpd_err(&pd->dev, "len=%zd not multiple of 4\n", len);
941 /* if MSGID already seen, discard */
942 if (PD_MSG_HDR_ID(header) == pd->rx_msgid &&
943 PD_MSG_HDR_TYPE(header) != MSG_SOFT_RESET) {
944 usbpd_dbg(&pd->dev, "MessageID already seen, discarding\n");
948 pd->rx_msgid = PD_MSG_HDR_ID(header);
951 if (PD_MSG_HDR_TYPE(header) == MSG_PING && !len)
954 /* check header's count field to see if it matches len */
955 if (PD_MSG_HDR_COUNT(header) != (len / 4)) {
956 usbpd_err(&pd->dev, "header count (%d) mismatch, len=%zd\n",
957 PD_MSG_HDR_COUNT(header), len);
961 /* if spec rev differs (i.e. is older), update PHY */
962 if (PD_MSG_HDR_REV(header) < pd->spec_rev)
963 pd->spec_rev = PD_MSG_HDR_REV(header);
965 usbpd_dbg(&pd->dev, "received message: type(%d) num_objs(%d)\n",
966 PD_MSG_HDR_TYPE(header), PD_MSG_HDR_COUNT(header));
968 if (!PD_MSG_HDR_IS_EXTENDED(header)) {
969 rx_msg = kzalloc(sizeof(*rx_msg) + len, GFP_ATOMIC);
973 rx_msg->hdr = header;
974 rx_msg->data_len = len;
975 memcpy(rx_msg->payload, buf, len);
977 rx_msg = pd_ext_msg_received(pd, header, buf, len, sop);
982 spin_lock_irqsave(&pd->rx_lock, flags);
983 list_add_tail(&rx_msg->entry, &pd->rx_q);
984 spin_unlock_irqrestore(&pd->rx_lock, flags);
989 static void phy_shutdown(struct usbpd *pd)
991 usbpd_dbg(&pd->dev, "shutdown");
994 static enum hrtimer_restart pd_timeout(struct hrtimer *timer)
996 struct usbpd *pd = container_of(timer, struct usbpd, timer);
998 usbpd_dbg(&pd->dev, "timeout");
999 queue_work(pd->wq, &pd->sm_work);
1001 return HRTIMER_NORESTART;
1004 /* Enters new state and executes actions on entry */
1005 static void usbpd_set_state(struct usbpd *pd, enum usbpd_state next_state)
1007 struct pd_phy_params phy_params = {
1008 .signal_cb = phy_sig_received,
1009 .msg_rx_cb = phy_msg_received,
1010 .shutdown_cb = phy_shutdown,
1011 .frame_filter_val = FRAME_FILTER_EN_SOP |
1012 FRAME_FILTER_EN_HARD_RESET,
1014 union power_supply_propval val = {0};
1015 unsigned long flags;
1018 if (pd->hard_reset_recvd) /* let usbpd_sm handle it */
1021 usbpd_dbg(&pd->dev, "%s -> %s\n",
1022 usbpd_state_strings[pd->current_state],
1023 usbpd_state_strings[next_state]);
1025 pd->current_state = next_state;
1027 switch (next_state) {
1028 case PE_ERROR_RECOVERY: /* perform hard disconnect/reconnect */
1029 pd->in_pr_swap = false;
1030 pd->current_pr = PR_NONE;
1031 set_power_role(pd, PR_NONE);
1032 pd->typec_mode = POWER_SUPPLY_TYPEC_NONE;
1037 case PE_SRC_DISABLED:
1038 /* are we still connected? */
1039 if (pd->typec_mode == POWER_SUPPLY_TYPEC_NONE) {
1040 pd->current_pr = PR_NONE;
1046 case PE_SRC_STARTUP:
1047 if (pd->current_dr == DR_NONE) {
1048 pd->current_dr = DR_DFP;
1050 * Defer starting USB host mode until PE_SRC_READY or
1051 * when PE_SRC_SEND_CAPABILITIES fails
1055 dual_role_instance_changed(pd->dual_role);
1057 /* Set CC back to DRP toggle for the next disconnect */
1058 val.intval = POWER_SUPPLY_TYPEC_PR_DUAL;
1059 power_supply_set_property(pd->usb_psy,
1060 POWER_SUPPLY_PROP_TYPEC_POWER_ROLE, &val);
1062 /* support only PD 2.0 as a source */
1063 pd->spec_rev = USBPD_REV_20;
1064 pd_reset_protocol(pd);
1066 if (!pd->in_pr_swap) {
1067 if (pd->pd_phy_opened) {
1069 pd->pd_phy_opened = false;
1072 phy_params.data_role = pd->current_dr;
1073 phy_params.power_role = pd->current_pr;
1075 ret = pd_phy_open(&phy_params);
1078 usbpd_err(&pd->dev, "error opening PD PHY %d\n",
1080 pd->current_state = PE_UNKNOWN;
1084 pd->pd_phy_opened = true;
1087 if (pd->in_pr_swap) {
1088 pd->in_pr_swap = false;
1090 power_supply_set_property(pd->usb_psy,
1091 POWER_SUPPLY_PROP_PR_SWAP, &val);
1095 * A sink might remove its terminations (during some Type-C
1096 * compliance tests or a sink attempting to do Try.SRC)
1097 * at this point just after we enabled VBUS. Sending PD
1098 * messages now would delay detecting the detach beyond the
1099 * required timing. Instead, delay sending out the first
1100 * source capabilities to allow for the other side to
1101 * completely settle CC debounce and allow HW to detect detach
1102 * sooner in the meantime. PD spec allows up to
1103 * tFirstSourceCap (250ms).
1105 pd->current_state = PE_SRC_SEND_CAPABILITIES;
1106 kick_sm(pd, FIRST_SOURCE_CAP_TIME);
1109 case PE_SRC_SEND_CAPABILITIES:
1113 case PE_SRC_NEGOTIATE_CAPABILITY:
1114 if (PD_RDO_OBJ_POS(pd->rdo) != 1 ||
1115 PD_RDO_FIXED_CURR(pd->rdo) >
1116 PD_SRC_PDO_FIXED_MAX_CURR(*default_src_caps) ||
1117 PD_RDO_FIXED_CURR_MINMAX(pd->rdo) >
1118 PD_SRC_PDO_FIXED_MAX_CURR(*default_src_caps)) {
1120 ret = pd_send_msg(pd, MSG_REJECT, NULL, 0, SOP_MSG);
1122 usbpd_err(&pd->dev, "Error sending Reject\n");
1123 usbpd_set_state(pd, PE_SRC_SEND_SOFT_RESET);
1127 usbpd_err(&pd->dev, "Invalid request: %08x\n", pd->rdo);
1129 if (pd->in_explicit_contract)
1130 usbpd_set_state(pd, PE_SRC_READY);
1133 * bypass PE_SRC_Capability_Response and
1134 * PE_SRC_Wait_New_Capabilities in this
1135 * implementation for simplicity.
1137 usbpd_set_state(pd, PE_SRC_SEND_CAPABILITIES);
1141 /* PE_SRC_TRANSITION_SUPPLY pseudo-state */
1142 ret = pd_send_msg(pd, MSG_ACCEPT, NULL, 0, SOP_MSG);
1144 usbpd_err(&pd->dev, "Error sending Accept\n");
1145 usbpd_set_state(pd, PE_SRC_SEND_SOFT_RESET);
1149 /* tSrcTransition required after ACCEPT */
1150 usleep_range(SRC_TRANSITION_TIME * USEC_PER_MSEC,
1151 (SRC_TRANSITION_TIME + 5) * USEC_PER_MSEC);
1154 * Normally a voltage change should occur within tSrcReady
1155 * but since we only support VSafe5V there is nothing more to
1156 * prepare from the power supply so send PS_RDY right away.
1158 ret = pd_send_msg(pd, MSG_PS_RDY, NULL, 0, SOP_MSG);
1160 usbpd_err(&pd->dev, "Error sending PS_RDY\n");
1161 usbpd_set_state(pd, PE_SRC_SEND_SOFT_RESET);
1165 usbpd_set_state(pd, PE_SRC_READY);
1169 pd->in_explicit_contract = true;
1173 else if (pd->current_dr == DR_DFP && pd->vdm_state == VDM_NONE)
1174 usbpd_send_svdm(pd, USBPD_SID,
1175 USBPD_SVDM_DISCOVER_IDENTITY,
1176 SVDM_CMD_TYPE_INITIATOR, 0, NULL, 0);
1178 kobject_uevent(&pd->dev.kobj, KOBJ_CHANGE);
1179 complete(&pd->is_ready);
1180 dual_role_instance_changed(pd->dual_role);
1183 case PE_SRC_HARD_RESET:
1184 case PE_SNK_HARD_RESET:
1185 /* are we still connected? */
1186 if (pd->typec_mode == POWER_SUPPLY_TYPEC_NONE)
1187 pd->current_pr = PR_NONE;
1189 /* hard reset may sleep; handle it in the workqueue */
1193 case PE_SRC_SEND_SOFT_RESET:
1194 case PE_SNK_SEND_SOFT_RESET:
1195 pd_reset_protocol(pd);
1197 ret = pd_send_msg(pd, MSG_SOFT_RESET, NULL, 0, SOP_MSG);
1199 usbpd_err(&pd->dev, "Error sending Soft Reset, do Hard Reset\n");
1200 usbpd_set_state(pd, pd->current_pr == PR_SRC ?
1201 PE_SRC_HARD_RESET : PE_SNK_HARD_RESET);
1205 /* wait for ACCEPT */
1206 kick_sm(pd, SENDER_RESPONSE_TIME);
1210 case PE_SNK_STARTUP:
1211 if (pd->current_dr == DR_NONE || pd->current_dr == DR_UFP) {
1212 pd->current_dr = DR_UFP;
1214 if (pd->psy_type == POWER_SUPPLY_TYPE_USB ||
1215 pd->psy_type == POWER_SUPPLY_TYPE_USB_CDP ||
1216 pd->psy_type == POWER_SUPPLY_TYPE_USB_FLOAT ||
1217 usb_compliance_mode)
1218 start_usb_peripheral(pd);
1221 dual_role_instance_changed(pd->dual_role);
1223 ret = power_supply_get_property(pd->usb_psy,
1224 POWER_SUPPLY_PROP_PD_ALLOWED, &val);
1226 usbpd_err(&pd->dev, "Unable to read USB PROP_PD_ALLOWED: %d\n",
1231 if (!val.intval || disable_usb_pd)
1235 * support up to PD 3.0 as a sink; if source is 2.0
1236 * phy_msg_received() will handle the downgrade.
1238 pd->spec_rev = USBPD_REV_30;
1239 pd_reset_protocol(pd);
1241 if (!pd->in_pr_swap) {
1242 if (pd->pd_phy_opened) {
1244 pd->pd_phy_opened = false;
1247 phy_params.data_role = pd->current_dr;
1248 phy_params.power_role = pd->current_pr;
1250 ret = pd_phy_open(&phy_params);
1253 usbpd_err(&pd->dev, "error opening PD PHY %d\n",
1255 pd->current_state = PE_UNKNOWN;
1259 pd->pd_phy_opened = true;
1262 pd->current_voltage = pd->requested_voltage = 5000000;
1263 val.intval = pd->requested_voltage; /* set max range to 5V */
1264 power_supply_set_property(pd->usb_psy,
1265 POWER_SUPPLY_PROP_PD_VOLTAGE_MAX, &val);
1267 if (!pd->vbus_present) {
1268 pd->current_state = PE_SNK_DISCOVERY;
1269 /* max time for hard reset to turn vbus back on */
1270 kick_sm(pd, SNK_HARD_RESET_VBUS_ON_TIME);
1274 pd->current_state = PE_SNK_WAIT_FOR_CAPABILITIES;
1277 case PE_SNK_WAIT_FOR_CAPABILITIES:
1278 spin_lock_irqsave(&pd->rx_lock, flags);
1279 if (list_empty(&pd->rx_q))
1280 kick_sm(pd, SINK_WAIT_CAP_TIME);
1281 spin_unlock_irqrestore(&pd->rx_lock, flags);
1284 case PE_SNK_EVALUATE_CAPABILITY:
1285 pd->pd_connected = true; /* we know peer is PD capable */
1286 pd->hard_reset_count = 0;
1288 /* evaluate PDOs and select one */
1289 ret = pd_eval_src_caps(pd);
1291 usbpd_err(&pd->dev, "Invalid src_caps received. Skipping request\n");
1294 pd->current_state = PE_SNK_SELECT_CAPABILITY;
1297 case PE_SNK_SELECT_CAPABILITY:
1298 ret = pd_send_msg(pd, MSG_REQUEST, &pd->rdo, 1, SOP_MSG);
1300 usbpd_err(&pd->dev, "Error sending Request\n");
1301 usbpd_set_state(pd, PE_SNK_SEND_SOFT_RESET);
1305 /* wait for ACCEPT */
1306 kick_sm(pd, SENDER_RESPONSE_TIME);
1309 case PE_SNK_TRANSITION_SINK:
1310 /* wait for PS_RDY */
1311 kick_sm(pd, PS_TRANSITION_TIME);
1315 pd->in_explicit_contract = true;
1319 else if (pd->current_dr == DR_DFP && pd->vdm_state == VDM_NONE)
1320 usbpd_send_svdm(pd, USBPD_SID,
1321 USBPD_SVDM_DISCOVER_IDENTITY,
1322 SVDM_CMD_TYPE_INITIATOR, 0, NULL, 0);
1324 kobject_uevent(&pd->dev.kobj, KOBJ_CHANGE);
1325 complete(&pd->is_ready);
1326 dual_role_instance_changed(pd->dual_role);
1329 case PE_SNK_TRANSITION_TO_DEFAULT:
1330 if (pd->current_dr != DR_UFP) {
1332 start_usb_peripheral(pd);
1333 pd->current_dr = DR_UFP;
1334 pd_phy_update_roles(pd->current_dr, pd->current_pr);
1336 if (pd->vconn_enabled) {
1337 regulator_disable(pd->vconn);
1338 pd->vconn_enabled = false;
1341 /* max time for hard reset to turn vbus off */
1342 kick_sm(pd, SNK_HARD_RESET_VBUS_OFF_TIME);
1345 case PE_PRS_SNK_SRC_TRANSITION_TO_OFF:
1346 val.intval = pd->requested_current = 0; /* suspend charging */
1347 power_supply_set_property(pd->usb_psy,
1348 POWER_SUPPLY_PROP_PD_CURRENT_MAX, &val);
1350 pd->in_explicit_contract = false;
1353 * need to update PR bit in message header so that
1354 * proper GoodCRC is sent when receiving next PS_RDY
1356 pd_phy_update_roles(pd->current_dr, PR_SRC);
1358 /* wait for PS_RDY */
1359 kick_sm(pd, PS_SOURCE_OFF);
1363 usbpd_dbg(&pd->dev, "No action for state %s\n",
1364 usbpd_state_strings[pd->current_state]);
1369 int usbpd_register_svid(struct usbpd *pd, struct usbpd_svid_handler *hdlr)
1371 if (find_svid_handler(pd, hdlr->svid)) {
1372 usbpd_err(&pd->dev, "SVID 0x%04x already registered\n",
1377 /* require connect/disconnect callbacks be implemented */
1378 if (!hdlr->connect || !hdlr->disconnect) {
1379 usbpd_err(&pd->dev, "SVID 0x%04x connect/disconnect must be non-NULL\n",
1384 usbpd_dbg(&pd->dev, "registered handler for SVID 0x%04x\n", hdlr->svid);
1386 list_add_tail(&hdlr->entry, &pd->svid_handlers);
1388 /* already connected with this SVID discovered? */
1389 if (pd->vdm_state >= DISCOVERED_SVIDS) {
1392 for (i = 0; i < pd->num_svids; i++) {
1393 if (pd->discovered_svids[i] == hdlr->svid) {
1394 hdlr->connect(hdlr);
1395 hdlr->discovered = true;
1403 EXPORT_SYMBOL(usbpd_register_svid);
1405 void usbpd_unregister_svid(struct usbpd *pd, struct usbpd_svid_handler *hdlr)
1407 list_del_init(&hdlr->entry);
1409 EXPORT_SYMBOL(usbpd_unregister_svid);
1411 int usbpd_send_vdm(struct usbpd *pd, u32 vdm_hdr, const u32 *vdos, int num_vdos)
1413 struct vdm_tx *vdm_tx;
1415 if (!pd->in_explicit_contract || pd->vdm_tx)
1418 vdm_tx = kzalloc(sizeof(*vdm_tx), GFP_KERNEL);
1422 vdm_tx->data[0] = vdm_hdr;
1423 if (vdos && num_vdos)
1424 memcpy(&vdm_tx->data[1], vdos, num_vdos * sizeof(u32));
1425 vdm_tx->size = num_vdos + 1; /* include the header */
1427 /* VDM will get sent in PE_SRC/SNK_READY state handling */
1428 pd->vdm_tx = vdm_tx;
1430 /* slight delay before queuing to prioritize handling of incoming VDM */
1435 EXPORT_SYMBOL(usbpd_send_vdm);
1437 int usbpd_send_svdm(struct usbpd *pd, u16 svid, u8 cmd,
1438 enum usbpd_svdm_cmd_type cmd_type, int obj_pos,
1439 const u32 *vdos, int num_vdos)
1441 u32 svdm_hdr = SVDM_HDR(svid, 0, obj_pos, cmd_type, cmd);
1443 usbpd_dbg(&pd->dev, "VDM tx: svid:%x cmd:%x cmd_type:%x svdm_hdr:%x\n",
1444 svid, cmd, cmd_type, svdm_hdr);
1446 return usbpd_send_vdm(pd, svdm_hdr, vdos, num_vdos);
1448 EXPORT_SYMBOL(usbpd_send_svdm);
1450 static void handle_vdm_rx(struct usbpd *pd, struct rx_msg *rx_msg)
1453 rx_msg->data_len >= sizeof(u32) ? ((u32 *)rx_msg->payload)[0] : 0;
1455 u32 *vdos = (u32 *)&rx_msg->payload[sizeof(u32)];
1456 u16 svid = VDM_HDR_SVID(vdm_hdr);
1458 u8 i, num_vdos = PD_MSG_HDR_COUNT(rx_msg->hdr) - 1;
1459 u8 cmd = SVDM_HDR_CMD(vdm_hdr);
1460 u8 cmd_type = SVDM_HDR_CMD_TYPE(vdm_hdr);
1461 bool has_dp = false;
1462 struct usbpd_svid_handler *handler;
1464 usbpd_dbg(&pd->dev, "VDM rx: svid:%x cmd:%x cmd_type:%x vdm_hdr:%x\n",
1465 svid, cmd, cmd_type, vdm_hdr);
1467 /* if it's a supported SVID, pass the message to the handler */
1468 handler = find_svid_handler(pd, svid);
1470 /* Unstructured VDM */
1471 if (!VDM_IS_SVDM(vdm_hdr)) {
1472 if (handler && handler->vdm_received)
1473 handler->vdm_received(handler, vdm_hdr, vdos, num_vdos);
1477 /* if this interrupts a previous exchange, abort queued response */
1478 if (cmd_type == SVDM_CMD_TYPE_INITIATOR && pd->vdm_tx) {
1479 usbpd_dbg(&pd->dev, "Discarding previously queued SVDM tx (SVID:0x%04x)\n",
1480 VDM_HDR_SVID(pd->vdm_tx->data[0]));
1486 if (handler && handler->svdm_received) {
1487 handler->svdm_received(handler, cmd, cmd_type, vdos, num_vdos);
1491 /* Standard Discovery or unhandled messages go here */
1493 case SVDM_CMD_TYPE_INITIATOR:
1494 if (svid == USBPD_SID && cmd == USBPD_SVDM_DISCOVER_IDENTITY) {
1496 ID_HDR_USB_HOST | ID_HDR_USB_DEVICE |
1497 ID_HDR_PRODUCT_PER_MASK | ID_HDR_VID,
1498 0x0, /* TBD: Cert Stat VDO */
1499 (PROD_VDO_PID << 16),
1500 /* TBD: Get these from gadget */
1503 usbpd_send_svdm(pd, USBPD_SID, cmd,
1504 SVDM_CMD_TYPE_RESP_ACK, 0, tx_vdos, 3);
1505 } else if (cmd != USBPD_SVDM_ATTENTION) {
1506 usbpd_send_svdm(pd, svid, cmd, SVDM_CMD_TYPE_RESP_NAK,
1507 SVDM_HDR_OBJ_POS(vdm_hdr), NULL, 0);
1511 case SVDM_CMD_TYPE_RESP_ACK:
1512 if (svid != USBPD_SID) {
1513 usbpd_err(&pd->dev, "unhandled ACK for SVID:0x%x\n",
1519 case USBPD_SVDM_DISCOVER_IDENTITY:
1520 kfree(pd->vdm_tx_retry);
1521 pd->vdm_tx_retry = NULL;
1523 pd->vdm_state = DISCOVERED_ID;
1524 usbpd_send_svdm(pd, USBPD_SID,
1525 USBPD_SVDM_DISCOVER_SVIDS,
1526 SVDM_CMD_TYPE_INITIATOR, 0, NULL, 0);
1529 case USBPD_SVDM_DISCOVER_SVIDS:
1530 pd->vdm_state = DISCOVERED_SVIDS;
1532 kfree(pd->vdm_tx_retry);
1533 pd->vdm_tx_retry = NULL;
1535 if (!pd->discovered_svids) {
1536 pd->num_svids = 2 * num_vdos;
1537 pd->discovered_svids = kcalloc(pd->num_svids,
1540 if (!pd->discovered_svids) {
1541 usbpd_err(&pd->dev, "unable to allocate SVIDs\n");
1545 psvid = pd->discovered_svids;
1546 } else { /* handle > 12 SVIDs */
1548 size_t oldsize = pd->num_svids * sizeof(u16);
1549 size_t newsize = oldsize +
1550 (2 * num_vdos * sizeof(u16));
1552 ptr = krealloc(pd->discovered_svids, newsize,
1555 usbpd_err(&pd->dev, "unable to realloc SVIDs\n");
1559 pd->discovered_svids = ptr;
1560 psvid = pd->discovered_svids + pd->num_svids;
1561 memset(psvid, 0, (2 * num_vdos));
1562 pd->num_svids += 2 * num_vdos;
1565 /* convert 32-bit VDOs to list of 16-bit SVIDs */
1566 for (i = 0; i < num_vdos * 2; i++) {
1568 * Within each 32-bit VDO,
1569 * SVID[i]: upper 16-bits
1570 * SVID[i+1]: lower 16-bits
1574 svid = vdos[i >> 1] >> 16;
1576 svid = vdos[i >> 1] & 0xFFFF;
1579 * There are some devices that incorrectly
1580 * swap the order of SVIDs within a VDO. So in
1581 * case of an odd-number of SVIDs it could end
1582 * up with SVID[i] as 0 while SVID[i+1] is
1583 * non-zero. Just skip over the zero ones.
1586 usbpd_dbg(&pd->dev, "Discovered SVID: 0x%04x\n",
1592 /* if more than 12 SVIDs, resend the request */
1593 if (num_vdos == 6 && vdos[5] != 0) {
1594 usbpd_send_svdm(pd, USBPD_SID,
1595 USBPD_SVDM_DISCOVER_SVIDS,
1596 SVDM_CMD_TYPE_INITIATOR, 0,
1601 /* now that all SVIDs are discovered, notify handlers */
1602 for (i = 0; i < pd->num_svids; i++) {
1603 svid = pd->discovered_svids[i];
1605 handler = find_svid_handler(pd, svid);
1607 handler->connect(handler);
1608 handler->discovered = true;
1617 * Finally start USB host now that we have determined
1618 * if DisplayPort mode is present or not and limit USB
1619 * to HS-only mode if so.
1621 start_usb_host(pd, !has_dp);
1626 usbpd_dbg(&pd->dev, "unhandled ACK for command:0x%x\n",
1632 case SVDM_CMD_TYPE_RESP_NAK:
1633 usbpd_info(&pd->dev, "VDM NAK received for SVID:0x%04x command:0x%x\n",
1637 case USBPD_SVDM_DISCOVER_IDENTITY:
1638 case USBPD_SVDM_DISCOVER_SVIDS:
1639 start_usb_host(pd, true);
1647 case SVDM_CMD_TYPE_RESP_BUSY:
1649 case USBPD_SVDM_DISCOVER_IDENTITY:
1650 case USBPD_SVDM_DISCOVER_SVIDS:
1651 if (!pd->vdm_tx_retry) {
1652 usbpd_err(&pd->dev, "Discover command %d VDM was unexpectedly freed\n",
1657 /* wait tVDMBusy, then retry */
1658 pd->vdm_tx = pd->vdm_tx_retry;
1659 pd->vdm_tx_retry = NULL;
1660 kick_sm(pd, VDM_BUSY_TIME);
1669 static void handle_vdm_tx(struct usbpd *pd)
1672 unsigned long flags;
1674 /* only send one VDM at a time */
1676 u32 vdm_hdr = pd->vdm_tx->data[0];
1678 /* bail out and try again later if a message just arrived */
1679 spin_lock_irqsave(&pd->rx_lock, flags);
1680 if (!list_empty(&pd->rx_q)) {
1681 spin_unlock_irqrestore(&pd->rx_lock, flags);
1684 spin_unlock_irqrestore(&pd->rx_lock, flags);
1686 ret = pd_send_msg(pd, MSG_VDM, pd->vdm_tx->data,
1687 pd->vdm_tx->size, SOP_MSG);
1689 usbpd_err(&pd->dev, "Error (%d) sending VDM command %d\n",
1690 ret, SVDM_HDR_CMD(pd->vdm_tx->data[0]));
1692 /* retry when hitting PE_SRC/SNK_Ready again */
1694 usbpd_set_state(pd, pd->current_pr == PR_SRC ?
1695 PE_SRC_SEND_SOFT_RESET :
1696 PE_SNK_SEND_SOFT_RESET);
1702 * special case: keep initiated Discover ID/SVIDs
1703 * around in case we need to re-try when receiving BUSY
1705 if (VDM_IS_SVDM(vdm_hdr) &&
1706 SVDM_HDR_CMD_TYPE(vdm_hdr) == SVDM_CMD_TYPE_INITIATOR &&
1707 SVDM_HDR_CMD(vdm_hdr) <= USBPD_SVDM_DISCOVER_SVIDS) {
1708 if (pd->vdm_tx_retry) {
1709 usbpd_dbg(&pd->dev, "Previous Discover VDM command %d not ACKed/NAKed\n",
1711 pd->vdm_tx_retry->data[0]));
1712 kfree(pd->vdm_tx_retry);
1714 pd->vdm_tx_retry = pd->vdm_tx;
1723 static void reset_vdm_state(struct usbpd *pd)
1725 struct usbpd_svid_handler *handler;
1727 list_for_each_entry(handler, &pd->svid_handlers, entry) {
1728 if (handler->discovered) {
1729 handler->disconnect(handler);
1730 handler->discovered = false;
1734 pd->vdm_state = VDM_NONE;
1735 kfree(pd->vdm_tx_retry);
1736 pd->vdm_tx_retry = NULL;
1737 kfree(pd->discovered_svids);
1738 pd->discovered_svids = NULL;
1744 static void dr_swap(struct usbpd *pd)
1746 reset_vdm_state(pd);
1748 if (pd->current_dr == DR_DFP) {
1750 start_usb_peripheral(pd);
1751 pd->current_dr = DR_UFP;
1752 } else if (pd->current_dr == DR_UFP) {
1753 stop_usb_peripheral(pd);
1754 pd->current_dr = DR_DFP;
1756 /* don't start USB host until after SVDM discovery */
1757 usbpd_send_svdm(pd, USBPD_SID, USBPD_SVDM_DISCOVER_IDENTITY,
1758 SVDM_CMD_TYPE_INITIATOR, 0, NULL, 0);
1761 pd_phy_update_roles(pd->current_dr, pd->current_pr);
1762 dual_role_instance_changed(pd->dual_role);
1766 static void vconn_swap(struct usbpd *pd)
1770 if (pd->vconn_enabled) {
1771 pd->current_state = PE_VCS_WAIT_FOR_VCONN;
1772 kick_sm(pd, VCONN_ON_TIME);
1774 ret = regulator_enable(pd->vconn);
1776 usbpd_err(&pd->dev, "Unable to enable vconn\n");
1780 pd->vconn_enabled = true;
1783 * Small delay to ensure Vconn has ramped up. This is well
1784 * below tVCONNSourceOn (100ms) so we still send PS_RDY within
1787 usleep_range(5000, 10000);
1789 ret = pd_send_msg(pd, MSG_PS_RDY, NULL, 0, SOP_MSG);
1791 usbpd_err(&pd->dev, "Error sending PS_RDY\n");
1792 usbpd_set_state(pd, pd->current_pr == PR_SRC ?
1793 PE_SRC_SEND_SOFT_RESET :
1794 PE_SNK_SEND_SOFT_RESET);
1800 static int enable_vbus(struct usbpd *pd)
1802 union power_supply_propval val = {0};
1810 * Check to make sure there's no lingering charge on
1811 * VBUS before enabling it as a source. If so poll here
1812 * until it goes below VSafe0V (0.8V) before proceeding.
1815 ret = power_supply_get_property(pd->usb_psy,
1816 POWER_SUPPLY_PROP_VOLTAGE_NOW, &val);
1817 if (ret || val.intval <= 800000)
1819 usleep_range(20000, 30000);
1823 msleep(100); /* need to wait an additional tCCDebounce */
1826 ret = regulator_enable(pd->vbus);
1828 usbpd_err(&pd->dev, "Unable to enable vbus (%d)\n", ret);
1830 pd->vbus_enabled = true;
1834 * Check to make sure VBUS voltage reaches above Vsafe5Vmin (4.75v)
1835 * before proceeding.
1838 ret = power_supply_get_property(pd->usb_psy,
1839 POWER_SUPPLY_PROP_VOLTAGE_NOW, &val);
1840 if (ret || val.intval >= 4750000) /*vsafe5Vmin*/
1842 usleep_range(10000, 12000); /* Delay between two reads */
1846 msleep(100); /* Delay to wait for VBUS ramp up if read fails */
1851 static inline void rx_msg_cleanup(struct usbpd *pd)
1853 struct rx_msg *msg, *tmp;
1854 unsigned long flags;
1856 spin_lock_irqsave(&pd->rx_lock, flags);
1857 list_for_each_entry_safe(msg, tmp, &pd->rx_q, entry) {
1858 list_del(&msg->entry);
1861 spin_unlock_irqrestore(&pd->rx_lock, flags);
1864 /* For PD 3.0, check SinkTxOk before allowing initiating AMS */
1865 static inline bool is_sink_tx_ok(struct usbpd *pd)
1867 if (pd->spec_rev == USBPD_REV_30)
1868 return pd->typec_mode == POWER_SUPPLY_TYPEC_SOURCE_HIGH;
1873 /* Handles current state and determines transitions */
1874 static void usbpd_sm(struct work_struct *w)
1876 struct usbpd *pd = container_of(w, struct usbpd, sm_work);
1877 union power_supply_propval val = {0};
1879 struct rx_msg *rx_msg = NULL;
1880 unsigned long flags;
1882 usbpd_dbg(&pd->dev, "handle state %s\n",
1883 usbpd_state_strings[pd->current_state]);
1885 hrtimer_cancel(&pd->timer);
1886 pd->sm_queued = false;
1888 spin_lock_irqsave(&pd->rx_lock, flags);
1889 if (!list_empty(&pd->rx_q)) {
1890 rx_msg = list_first_entry(&pd->rx_q, struct rx_msg, entry);
1891 list_del(&rx_msg->entry);
1893 spin_unlock_irqrestore(&pd->rx_lock, flags);
1896 if (pd->current_pr == PR_NONE) {
1897 if (pd->current_state == PE_UNKNOWN)
1900 if (pd->vconn_enabled) {
1901 regulator_disable(pd->vconn);
1902 pd->vconn_enabled = false;
1905 usbpd_info(&pd->dev, "USB Type-C disconnect\n");
1907 if (pd->pd_phy_opened) {
1909 pd->pd_phy_opened = false;
1912 pd->in_pr_swap = false;
1913 pd->pd_connected = false;
1914 pd->in_explicit_contract = false;
1915 pd->hard_reset_recvd = false;
1917 pd->hard_reset_count = 0;
1918 pd->requested_voltage = 0;
1919 pd->requested_current = 0;
1920 pd->selected_pdo = pd->requested_pdo = 0;
1921 memset(&pd->received_pdos, 0, sizeof(pd->received_pdos));
1924 power_supply_set_property(pd->usb_psy,
1925 POWER_SUPPLY_PROP_PD_IN_HARD_RESET, &val);
1927 power_supply_set_property(pd->usb_psy,
1928 POWER_SUPPLY_PROP_PD_USB_SUSPEND_SUPPORTED,
1931 power_supply_set_property(pd->usb_psy,
1932 POWER_SUPPLY_PROP_PD_ACTIVE, &val);
1934 if (pd->vbus_enabled) {
1935 regulator_disable(pd->vbus);
1936 pd->vbus_enabled = false;
1939 if (pd->current_dr == DR_UFP)
1940 stop_usb_peripheral(pd);
1941 else if (pd->current_dr == DR_DFP)
1944 pd->current_dr = DR_NONE;
1946 reset_vdm_state(pd);
1948 if (pd->current_state == PE_ERROR_RECOVERY)
1949 /* forced disconnect, wait before resetting to DRP */
1950 usleep_range(ERROR_RECOVERY_TIME * USEC_PER_MSEC,
1951 (ERROR_RECOVERY_TIME + 5) * USEC_PER_MSEC);
1954 power_supply_set_property(pd->usb_psy,
1955 POWER_SUPPLY_PROP_PR_SWAP, &val);
1957 /* set due to dual_role class "mode" change */
1958 if (pd->forced_pr != POWER_SUPPLY_TYPEC_PR_NONE)
1959 val.intval = pd->forced_pr;
1960 else if (rev3_sink_only)
1961 val.intval = POWER_SUPPLY_TYPEC_PR_SINK;
1963 /* Set CC back to DRP toggle */
1964 val.intval = POWER_SUPPLY_TYPEC_PR_DUAL;
1966 power_supply_set_property(pd->usb_psy,
1967 POWER_SUPPLY_PROP_TYPEC_POWER_ROLE, &val);
1968 pd->forced_pr = POWER_SUPPLY_TYPEC_PR_NONE;
1970 pd->current_state = PE_UNKNOWN;
1972 kobject_uevent(&pd->dev.kobj, KOBJ_CHANGE);
1973 dual_role_instance_changed(pd->dual_role);
1979 if (pd->hard_reset_recvd) {
1980 pd->hard_reset_recvd = false;
1982 if (pd->requested_current) {
1983 val.intval = pd->requested_current = 0;
1984 power_supply_set_property(pd->usb_psy,
1985 POWER_SUPPLY_PROP_PD_CURRENT_MAX, &val);
1988 pd->requested_voltage = 5000000;
1989 val.intval = pd->requested_voltage;
1990 power_supply_set_property(pd->usb_psy,
1991 POWER_SUPPLY_PROP_PD_VOLTAGE_MIN, &val);
1993 pd->in_pr_swap = false;
1995 power_supply_set_property(pd->usb_psy,
1996 POWER_SUPPLY_PROP_PR_SWAP, &val);
1998 pd->in_explicit_contract = false;
1999 pd->selected_pdo = pd->requested_pdo = 0;
2002 reset_vdm_state(pd);
2003 kobject_uevent(&pd->dev.kobj, KOBJ_CHANGE);
2005 if (pd->current_pr == PR_SINK) {
2006 usbpd_set_state(pd, PE_SNK_TRANSITION_TO_DEFAULT);
2008 s64 delta = ktime_ms_delta(ktime_get(),
2009 pd->hard_reset_recvd_time);
2010 pd->current_state = PE_SRC_TRANSITION_TO_DEFAULT;
2011 if (delta >= PS_HARD_RESET_TIME)
2014 kick_sm(pd, PS_HARD_RESET_TIME - (int)delta);
2021 if (IS_CTRL(rx_msg, MSG_SOFT_RESET)) {
2022 usbpd_dbg(&pd->dev, "Handle soft reset\n");
2024 if (pd->current_pr == PR_SRC)
2025 pd->current_state = PE_SRC_SOFT_RESET;
2026 else if (pd->current_pr == PR_SINK)
2027 pd->current_state = PE_SNK_SOFT_RESET;
2030 switch (pd->current_state) {
2033 power_supply_set_property(pd->usb_psy,
2034 POWER_SUPPLY_PROP_PD_IN_HARD_RESET, &val);
2036 if (pd->current_pr == PR_SINK) {
2037 usbpd_set_state(pd, PE_SNK_STARTUP);
2038 } else if (pd->current_pr == PR_SRC) {
2039 if (!pd->vconn_enabled &&
2041 POWER_SUPPLY_TYPEC_SINK_POWERED_CABLE) {
2042 ret = regulator_enable(pd->vconn);
2044 usbpd_err(&pd->dev, "Unable to enable vconn\n");
2046 pd->vconn_enabled = true;
2050 usbpd_set_state(pd, PE_SRC_STARTUP);
2054 case PE_SRC_STARTUP:
2055 usbpd_set_state(pd, PE_SRC_STARTUP);
2058 case PE_SRC_SEND_CAPABILITIES:
2059 ret = pd_send_msg(pd, MSG_SOURCE_CAPABILITIES, default_src_caps,
2060 ARRAY_SIZE(default_src_caps), SOP_MSG);
2064 if (pd->caps_count == 10 && pd->current_dr == DR_DFP) {
2065 /* Likely not PD-capable, start host now */
2066 start_usb_host(pd, true);
2067 } else if (pd->caps_count >= PD_CAPS_COUNT) {
2068 usbpd_dbg(&pd->dev, "Src CapsCounter exceeded, disabling PD\n");
2069 usbpd_set_state(pd, PE_SRC_DISABLED);
2072 power_supply_set_property(pd->usb_psy,
2073 POWER_SUPPLY_PROP_PD_ACTIVE,
2078 kick_sm(pd, SRC_CAP_TIME);
2082 /* transmit was successful if GoodCRC was received */
2084 pd->hard_reset_count = 0;
2085 pd->pd_connected = true; /* we know peer is PD capable */
2087 /* wait for REQUEST */
2088 pd->current_state = PE_SRC_SEND_CAPABILITIES_WAIT;
2089 kick_sm(pd, SENDER_RESPONSE_TIME);
2092 power_supply_set_property(pd->usb_psy,
2093 POWER_SUPPLY_PROP_PD_ACTIVE, &val);
2096 case PE_SRC_SEND_CAPABILITIES_WAIT:
2097 if (IS_DATA(rx_msg, MSG_REQUEST)) {
2098 pd->rdo = *(u32 *)rx_msg->payload;
2099 usbpd_set_state(pd, PE_SRC_NEGOTIATE_CAPABILITY);
2100 } else if (rx_msg) {
2101 usbpd_err(&pd->dev, "Unexpected message received\n");
2102 usbpd_set_state(pd, PE_SRC_SEND_SOFT_RESET);
2104 usbpd_set_state(pd, PE_SRC_HARD_RESET);
2109 if (IS_CTRL(rx_msg, MSG_GET_SOURCE_CAP)) {
2110 pd->current_state = PE_SRC_SEND_CAPABILITIES;
2112 } else if (IS_CTRL(rx_msg, MSG_GET_SINK_CAP)) {
2113 ret = pd_send_msg(pd, MSG_SINK_CAPABILITIES,
2114 pd->sink_caps, pd->num_sink_caps,
2117 usbpd_err(&pd->dev, "Error sending Sink Caps\n");
2118 usbpd_set_state(pd, PE_SRC_SEND_SOFT_RESET);
2120 } else if (IS_DATA(rx_msg, MSG_REQUEST)) {
2121 pd->rdo = *(u32 *)rx_msg->payload;
2122 usbpd_set_state(pd, PE_SRC_NEGOTIATE_CAPABILITY);
2123 } else if (IS_CTRL(rx_msg, MSG_DR_SWAP)) {
2124 if (pd->vdm_state == MODE_ENTERED) {
2125 usbpd_set_state(pd, PE_SRC_HARD_RESET);
2129 ret = pd_send_msg(pd, MSG_ACCEPT, NULL, 0, SOP_MSG);
2131 usbpd_err(&pd->dev, "Error sending Accept\n");
2132 usbpd_set_state(pd, PE_SRC_SEND_SOFT_RESET);
2137 } else if (IS_CTRL(rx_msg, MSG_PR_SWAP)) {
2138 /* lock in current mode */
2139 set_power_role(pd, pd->current_pr);
2141 /* we'll happily accept Src->Sink requests anytime */
2142 ret = pd_send_msg(pd, MSG_ACCEPT, NULL, 0, SOP_MSG);
2144 usbpd_err(&pd->dev, "Error sending Accept\n");
2145 usbpd_set_state(pd, PE_SRC_SEND_SOFT_RESET);
2149 pd->current_state = PE_PRS_SRC_SNK_TRANSITION_TO_OFF;
2150 kick_sm(pd, SRC_TRANSITION_TIME);
2152 } else if (IS_CTRL(rx_msg, MSG_VCONN_SWAP)) {
2153 ret = pd_send_msg(pd, MSG_ACCEPT, NULL, 0, SOP_MSG);
2155 usbpd_err(&pd->dev, "Error sending Accept\n");
2156 usbpd_set_state(pd, PE_SRC_SEND_SOFT_RESET);
2161 } else if (IS_DATA(rx_msg, MSG_VDM)) {
2162 handle_vdm_rx(pd, rx_msg);
2163 } else if (rx_msg && pd->spec_rev == USBPD_REV_30) {
2164 /* unhandled messages */
2165 ret = pd_send_msg(pd, MSG_NOT_SUPPORTED, NULL, 0,
2168 usbpd_err(&pd->dev, "Error sending Not supported\n");
2169 usbpd_set_state(pd, PE_SRC_SEND_SOFT_RESET);
2172 } else if (pd->send_pr_swap) {
2173 pd->send_pr_swap = false;
2174 ret = pd_send_msg(pd, MSG_PR_SWAP, NULL, 0, SOP_MSG);
2176 dev_err(&pd->dev, "Error sending PR Swap\n");
2177 usbpd_set_state(pd, PE_SRC_SEND_SOFT_RESET);
2181 pd->current_state = PE_PRS_SRC_SNK_SEND_SWAP;
2182 kick_sm(pd, SENDER_RESPONSE_TIME);
2183 } else if (pd->send_dr_swap) {
2184 pd->send_dr_swap = false;
2185 ret = pd_send_msg(pd, MSG_DR_SWAP, NULL, 0, SOP_MSG);
2187 dev_err(&pd->dev, "Error sending DR Swap\n");
2188 usbpd_set_state(pd, PE_SRC_SEND_SOFT_RESET);
2192 pd->current_state = PE_DRS_SEND_DR_SWAP;
2193 kick_sm(pd, SENDER_RESPONSE_TIME);
2199 case PE_SRC_TRANSITION_TO_DEFAULT:
2200 if (pd->vconn_enabled)
2201 regulator_disable(pd->vconn);
2202 pd->vconn_enabled = false;
2204 if (pd->vbus_enabled)
2205 regulator_disable(pd->vbus);
2206 pd->vbus_enabled = false;
2208 if (pd->current_dr != DR_DFP) {
2209 extcon_set_cable_state_(pd->extcon, EXTCON_USB, 0);
2210 pd->current_dr = DR_DFP;
2211 pd_phy_update_roles(pd->current_dr, pd->current_pr);
2214 /* PE_UNKNOWN will turn on VBUS and go back to PE_SRC_STARTUP */
2215 pd->current_state = PE_UNKNOWN;
2216 kick_sm(pd, SRC_RECOVER_TIME);
2219 case PE_SRC_HARD_RESET:
2221 power_supply_set_property(pd->usb_psy,
2222 POWER_SUPPLY_PROP_PD_IN_HARD_RESET, &val);
2224 pd_send_hard_reset(pd);
2225 pd->in_explicit_contract = false;
2228 reset_vdm_state(pd);
2229 kobject_uevent(&pd->dev.kobj, KOBJ_CHANGE);
2231 pd->current_state = PE_SRC_TRANSITION_TO_DEFAULT;
2232 kick_sm(pd, PS_HARD_RESET_TIME);
2235 case PE_SNK_STARTUP:
2236 usbpd_set_state(pd, PE_SNK_STARTUP);
2239 case PE_SNK_DISCOVERY:
2241 if (pd->vbus_present)
2243 PE_SNK_WAIT_FOR_CAPABILITIES);
2246 * Handle disconnection in the middle of PR_Swap.
2247 * Since in psy_changed() if pd->in_pr_swap is true
2248 * we ignore the typec_mode==NONE change since that is
2249 * expected to happen. However if the cable really did
2250 * get disconnected we need to check for it here after
2251 * waiting for VBUS presence times out.
2253 if (!pd->typec_mode) {
2254 pd->current_pr = PR_NONE;
2260 /* else fall-through */
2262 case PE_SNK_WAIT_FOR_CAPABILITIES:
2263 pd->in_pr_swap = false;
2265 power_supply_set_property(pd->usb_psy,
2266 POWER_SUPPLY_PROP_PR_SWAP, &val);
2268 if (IS_DATA(rx_msg, MSG_SOURCE_CAPABILITIES)) {
2270 power_supply_set_property(pd->usb_psy,
2271 POWER_SUPPLY_PROP_PD_IN_HARD_RESET,
2274 /* save the PDOs so userspace can further evaluate */
2275 memset(&pd->received_pdos, 0,
2276 sizeof(pd->received_pdos));
2277 memcpy(&pd->received_pdos, rx_msg->payload,
2278 min_t(size_t, rx_msg->data_len,
2279 sizeof(pd->received_pdos)));
2282 usbpd_set_state(pd, PE_SNK_EVALUATE_CAPABILITY);
2285 power_supply_set_property(pd->usb_psy,
2286 POWER_SUPPLY_PROP_PD_ACTIVE, &val);
2287 } else if (pd->hard_reset_count < 3) {
2288 usbpd_set_state(pd, PE_SNK_HARD_RESET);
2290 usbpd_dbg(&pd->dev, "Sink hard reset count exceeded, disabling PD\n");
2293 power_supply_set_property(pd->usb_psy,
2294 POWER_SUPPLY_PROP_PD_IN_HARD_RESET,
2298 power_supply_set_property(pd->usb_psy,
2299 POWER_SUPPLY_PROP_PD_ACTIVE, &val);
2302 pd->pd_phy_opened = false;
2306 case PE_SNK_SELECT_CAPABILITY:
2307 if (IS_CTRL(rx_msg, MSG_ACCEPT)) {
2308 u32 pdo = pd->received_pdos[pd->requested_pdo - 1];
2309 bool same_pps = (pd->selected_pdo == pd->requested_pdo)
2310 && (PD_SRC_PDO_TYPE(pdo) ==
2311 PD_SRC_PDO_TYPE_AUGMENTED);
2313 usbpd_set_state(pd, PE_SNK_TRANSITION_SINK);
2315 /* prepare for voltage increase/decrease */
2316 val.intval = pd->requested_voltage;
2317 power_supply_set_property(pd->usb_psy,
2318 pd->requested_voltage >= pd->current_voltage ?
2319 POWER_SUPPLY_PROP_PD_VOLTAGE_MAX :
2320 POWER_SUPPLY_PROP_PD_VOLTAGE_MIN,
2324 * if changing voltages (not within the same PPS PDO),
2325 * we must lower input current to pSnkStdby (2.5W).
2326 * Calculate it and set PD_CURRENT_MAX accordingly.
2329 pd->requested_voltage != pd->current_voltage) {
2330 int mv = max(pd->requested_voltage,
2331 pd->current_voltage) / 1000;
2332 val.intval = (2500000 / mv) * 1000;
2333 power_supply_set_property(pd->usb_psy,
2334 POWER_SUPPLY_PROP_PD_CURRENT_MAX, &val);
2336 /* decreasing current? */
2337 ret = power_supply_get_property(pd->usb_psy,
2338 POWER_SUPPLY_PROP_PD_CURRENT_MAX, &val);
2340 pd->requested_current < val.intval) {
2342 pd->requested_current * 1000;
2343 power_supply_set_property(pd->usb_psy,
2344 POWER_SUPPLY_PROP_PD_CURRENT_MAX,
2349 pd->selected_pdo = pd->requested_pdo;
2350 } else if (IS_CTRL(rx_msg, MSG_REJECT) ||
2351 IS_CTRL(rx_msg, MSG_WAIT)) {
2352 if (pd->in_explicit_contract)
2353 usbpd_set_state(pd, PE_SNK_READY);
2356 PE_SNK_WAIT_FOR_CAPABILITIES);
2357 } else if (rx_msg) {
2358 usbpd_err(&pd->dev, "Invalid response to sink request\n");
2359 usbpd_set_state(pd, PE_SNK_SEND_SOFT_RESET);
2361 /* timed out; go to hard reset */
2362 usbpd_set_state(pd, PE_SNK_HARD_RESET);
2366 case PE_SNK_TRANSITION_SINK:
2367 if (IS_CTRL(rx_msg, MSG_PS_RDY)) {
2368 val.intval = pd->requested_voltage;
2369 power_supply_set_property(pd->usb_psy,
2370 pd->requested_voltage >= pd->current_voltage ?
2371 POWER_SUPPLY_PROP_PD_VOLTAGE_MIN :
2372 POWER_SUPPLY_PROP_PD_VOLTAGE_MAX, &val);
2373 pd->current_voltage = pd->requested_voltage;
2375 /* resume charging */
2376 val.intval = pd->requested_current * 1000; /* mA->uA */
2377 power_supply_set_property(pd->usb_psy,
2378 POWER_SUPPLY_PROP_PD_CURRENT_MAX, &val);
2380 usbpd_set_state(pd, PE_SNK_READY);
2382 /* timed out; go to hard reset */
2383 usbpd_set_state(pd, PE_SNK_HARD_RESET);
2388 if (IS_DATA(rx_msg, MSG_SOURCE_CAPABILITIES)) {
2389 /* save the PDOs so userspace can further evaluate */
2390 memset(&pd->received_pdos, 0,
2391 sizeof(pd->received_pdos));
2392 memcpy(&pd->received_pdos, rx_msg->payload,
2393 min_t(size_t, rx_msg->data_len,
2394 sizeof(pd->received_pdos)));
2397 usbpd_set_state(pd, PE_SNK_EVALUATE_CAPABILITY);
2398 } else if (IS_CTRL(rx_msg, MSG_GET_SINK_CAP)) {
2399 ret = pd_send_msg(pd, MSG_SINK_CAPABILITIES,
2400 pd->sink_caps, pd->num_sink_caps,
2403 usbpd_err(&pd->dev, "Error sending Sink Caps\n");
2404 usbpd_set_state(pd, PE_SNK_SEND_SOFT_RESET);
2406 } else if (IS_CTRL(rx_msg, MSG_GET_SOURCE_CAP) &&
2407 pd->spec_rev == USBPD_REV_20) {
2408 ret = pd_send_msg(pd, MSG_SOURCE_CAPABILITIES,
2410 ARRAY_SIZE(default_src_caps), SOP_MSG);
2412 usbpd_err(&pd->dev, "Error sending SRC CAPs\n");
2413 usbpd_set_state(pd, PE_SNK_SEND_SOFT_RESET);
2416 } else if (IS_CTRL(rx_msg, MSG_DR_SWAP)) {
2417 if (pd->vdm_state == MODE_ENTERED) {
2418 usbpd_set_state(pd, PE_SNK_HARD_RESET);
2422 ret = pd_send_msg(pd, MSG_ACCEPT, NULL, 0, SOP_MSG);
2424 usbpd_err(&pd->dev, "Error sending Accept\n");
2425 usbpd_set_state(pd, PE_SRC_SEND_SOFT_RESET);
2430 } else if (IS_CTRL(rx_msg, MSG_PR_SWAP) &&
2431 pd->spec_rev == USBPD_REV_20) {
2432 /* lock in current mode */
2433 set_power_role(pd, pd->current_pr);
2435 /* TODO: should we Reject in certain circumstances? */
2436 ret = pd_send_msg(pd, MSG_ACCEPT, NULL, 0, SOP_MSG);
2438 usbpd_err(&pd->dev, "Error sending Accept\n");
2439 usbpd_set_state(pd, PE_SNK_SEND_SOFT_RESET);
2443 pd->in_pr_swap = true;
2445 power_supply_set_property(pd->usb_psy,
2446 POWER_SUPPLY_PROP_PR_SWAP, &val);
2447 usbpd_set_state(pd, PE_PRS_SNK_SRC_TRANSITION_TO_OFF);
2449 } else if (IS_CTRL(rx_msg, MSG_VCONN_SWAP) &&
2450 pd->spec_rev == USBPD_REV_20) {
2452 * if VCONN is connected to VBUS, make sure we are
2453 * not in high voltage contract, otherwise reject.
2455 if (!pd->vconn_is_external &&
2456 (pd->requested_voltage > 5000000)) {
2457 ret = pd_send_msg(pd, MSG_REJECT, NULL, 0,
2460 usbpd_err(&pd->dev, "Error sending Reject\n");
2462 PE_SNK_SEND_SOFT_RESET);
2468 ret = pd_send_msg(pd, MSG_ACCEPT, NULL, 0, SOP_MSG);
2470 usbpd_err(&pd->dev, "Error sending Accept\n");
2471 usbpd_set_state(pd, PE_SNK_SEND_SOFT_RESET);
2476 } else if (IS_DATA(rx_msg, MSG_VDM)) {
2477 handle_vdm_rx(pd, rx_msg);
2478 } else if (pd->send_get_src_cap_ext && is_sink_tx_ok(pd)) {
2479 pd->send_get_src_cap_ext = false;
2480 ret = pd_send_msg(pd, MSG_GET_SOURCE_CAP_EXTENDED, NULL,
2484 "Error sending get_src_cap_ext\n");
2485 usbpd_set_state(pd, PE_SNK_SEND_SOFT_RESET);
2488 kick_sm(pd, SENDER_RESPONSE_TIME);
2489 } else if (rx_msg &&
2490 IS_EXT(rx_msg, MSG_SOURCE_CAPABILITIES_EXTENDED)) {
2491 if (rx_msg->data_len != PD_SRC_CAP_EXT_DB_LEN) {
2492 usbpd_err(&pd->dev, "Invalid src cap ext db\n");
2495 memcpy(&pd->src_cap_ext_db, rx_msg->payload,
2496 sizeof(pd->src_cap_ext_db));
2497 complete(&pd->is_ready);
2498 } else if (pd->send_get_pps_status && is_sink_tx_ok(pd)) {
2499 pd->send_get_pps_status = false;
2500 ret = pd_send_msg(pd, MSG_GET_PPS_STATUS, NULL,
2504 "Error sending get_pps_status\n");
2505 usbpd_set_state(pd, PE_SNK_SEND_SOFT_RESET);
2508 kick_sm(pd, SENDER_RESPONSE_TIME);
2509 } else if (rx_msg &&
2510 IS_EXT(rx_msg, MSG_PPS_STATUS)) {
2511 if (rx_msg->data_len != sizeof(pd->pps_status_db)) {
2512 usbpd_err(&pd->dev, "Invalid pps status db\n");
2515 memcpy(&pd->pps_status_db, rx_msg->payload,
2516 sizeof(pd->pps_status_db));
2517 complete(&pd->is_ready);
2518 } else if (IS_DATA(rx_msg, MSG_ALERT)) {
2519 if (rx_msg->data_len != sizeof(pd->received_ado)) {
2520 usbpd_err(&pd->dev, "Invalid ado\n");
2523 memcpy(&pd->received_ado, rx_msg->payload,
2524 sizeof(pd->received_ado));
2525 ret = pd_send_msg(pd, MSG_GET_STATUS, NULL,
2529 "Error sending get_status\n");
2530 usbpd_set_state(pd, PE_SNK_SEND_SOFT_RESET);
2533 kick_sm(pd, SENDER_RESPONSE_TIME);
2534 } else if (rx_msg &&
2535 IS_EXT(rx_msg, MSG_STATUS)) {
2536 if (rx_msg->data_len != PD_STATUS_DB_LEN) {
2537 usbpd_err(&pd->dev, "Invalid status db\n");
2540 memcpy(&pd->status_db, rx_msg->payload,
2541 sizeof(pd->status_db));
2542 kobject_uevent(&pd->dev.kobj, KOBJ_CHANGE);
2543 } else if (pd->send_get_battery_cap && is_sink_tx_ok(pd)) {
2544 pd->send_get_battery_cap = false;
2545 ret = pd_send_ext_msg(pd, MSG_GET_BATTERY_CAP,
2546 &pd->get_battery_cap_db, 1, SOP_MSG);
2549 "Error sending get_battery_cap\n");
2550 usbpd_set_state(pd, PE_SNK_SEND_SOFT_RESET);
2553 kick_sm(pd, SENDER_RESPONSE_TIME);
2554 } else if (rx_msg &&
2555 IS_EXT(rx_msg, MSG_BATTERY_CAPABILITIES)) {
2556 if (rx_msg->data_len != PD_BATTERY_CAP_DB_LEN) {
2557 usbpd_err(&pd->dev, "Invalid battery cap db\n");
2560 memcpy(&pd->battery_cap_db, rx_msg->payload,
2561 sizeof(pd->battery_cap_db));
2562 complete(&pd->is_ready);
2563 } else if (pd->send_get_battery_status && is_sink_tx_ok(pd)) {
2564 pd->send_get_battery_status = false;
2565 ret = pd_send_ext_msg(pd, MSG_GET_BATTERY_STATUS,
2566 &pd->get_battery_status_db, 1, SOP_MSG);
2569 "Error sending get_battery_status\n");
2570 usbpd_set_state(pd, PE_SNK_SEND_SOFT_RESET);
2573 kick_sm(pd, SENDER_RESPONSE_TIME);
2574 } else if (rx_msg &&
2575 IS_EXT(rx_msg, MSG_BATTERY_STATUS)) {
2576 if (rx_msg->data_len != sizeof(pd->battery_sts_dobj)) {
2577 usbpd_err(&pd->dev, "Invalid bat sts dobj\n");
2580 memcpy(&pd->battery_sts_dobj, rx_msg->payload,
2581 sizeof(pd->battery_sts_dobj));
2582 complete(&pd->is_ready);
2583 } else if (rx_msg && pd->spec_rev == USBPD_REV_30) {
2584 /* unhandled messages */
2585 ret = pd_send_msg(pd, MSG_NOT_SUPPORTED, NULL, 0,
2588 usbpd_err(&pd->dev, "Error sending Not supported\n");
2589 usbpd_set_state(pd, PE_SNK_SEND_SOFT_RESET);
2592 } else if (pd->send_request) {
2593 pd->send_request = false;
2594 usbpd_set_state(pd, PE_SNK_SELECT_CAPABILITY);
2595 } else if (pd->send_pr_swap && is_sink_tx_ok(pd)) {
2596 pd->send_pr_swap = false;
2597 ret = pd_send_msg(pd, MSG_PR_SWAP, NULL, 0, SOP_MSG);
2599 dev_err(&pd->dev, "Error sending PR Swap\n");
2600 usbpd_set_state(pd, PE_SNK_SEND_SOFT_RESET);
2604 pd->current_state = PE_PRS_SNK_SRC_SEND_SWAP;
2605 kick_sm(pd, SENDER_RESPONSE_TIME);
2606 } else if (pd->send_dr_swap && is_sink_tx_ok(pd)) {
2607 pd->send_dr_swap = false;
2608 ret = pd_send_msg(pd, MSG_DR_SWAP, NULL, 0, SOP_MSG);
2610 dev_err(&pd->dev, "Error sending DR Swap\n");
2611 usbpd_set_state(pd, PE_SNK_SEND_SOFT_RESET);
2615 pd->current_state = PE_DRS_SEND_DR_SWAP;
2616 kick_sm(pd, SENDER_RESPONSE_TIME);
2617 } else if (is_sink_tx_ok(pd)) {
2622 case PE_SNK_TRANSITION_TO_DEFAULT:
2623 usbpd_set_state(pd, PE_SNK_STARTUP);
2626 case PE_SRC_SOFT_RESET:
2627 case PE_SNK_SOFT_RESET:
2628 pd_reset_protocol(pd);
2630 ret = pd_send_msg(pd, MSG_ACCEPT, NULL, 0, SOP_MSG);
2632 usbpd_err(&pd->dev, "%s: Error sending Accept, do Hard Reset\n",
2633 usbpd_state_strings[pd->current_state]);
2634 usbpd_set_state(pd, pd->current_pr == PR_SRC ?
2635 PE_SRC_HARD_RESET : PE_SNK_HARD_RESET);
2639 usbpd_set_state(pd, pd->current_pr == PR_SRC ?
2640 PE_SRC_SEND_CAPABILITIES :
2641 PE_SNK_WAIT_FOR_CAPABILITIES);
2644 case PE_SRC_SEND_SOFT_RESET:
2645 case PE_SNK_SEND_SOFT_RESET:
2646 if (IS_CTRL(rx_msg, MSG_ACCEPT)) {
2647 usbpd_set_state(pd, pd->current_pr == PR_SRC ?
2648 PE_SRC_SEND_CAPABILITIES :
2649 PE_SNK_WAIT_FOR_CAPABILITIES);
2651 usbpd_err(&pd->dev, "%s: Did not see Accept, do Hard Reset\n",
2652 usbpd_state_strings[pd->current_state]);
2653 usbpd_set_state(pd, pd->current_pr == PR_SRC ?
2654 PE_SRC_HARD_RESET : PE_SNK_HARD_RESET);
2658 case PE_SNK_HARD_RESET:
2659 /* prepare charger for VBUS change */
2661 power_supply_set_property(pd->usb_psy,
2662 POWER_SUPPLY_PROP_PD_IN_HARD_RESET, &val);
2664 pd->requested_voltage = 5000000;
2666 if (pd->requested_current) {
2667 val.intval = pd->requested_current = 0;
2668 power_supply_set_property(pd->usb_psy,
2669 POWER_SUPPLY_PROP_PD_CURRENT_MAX, &val);
2672 val.intval = pd->requested_voltage;
2673 power_supply_set_property(pd->usb_psy,
2674 POWER_SUPPLY_PROP_PD_VOLTAGE_MIN, &val);
2676 pd_send_hard_reset(pd);
2677 pd->in_explicit_contract = false;
2678 pd->selected_pdo = pd->requested_pdo = 0;
2680 reset_vdm_state(pd);
2681 kobject_uevent(&pd->dev.kobj, KOBJ_CHANGE);
2682 usbpd_set_state(pd, PE_SNK_TRANSITION_TO_DEFAULT);
2685 case PE_DRS_SEND_DR_SWAP:
2686 if (IS_CTRL(rx_msg, MSG_ACCEPT))
2689 usbpd_set_state(pd, pd->current_pr == PR_SRC ?
2690 PE_SRC_READY : PE_SNK_READY);
2693 case PE_PRS_SRC_SNK_SEND_SWAP:
2694 if (!IS_CTRL(rx_msg, MSG_ACCEPT)) {
2695 pd->current_state = PE_SRC_READY;
2699 pd->current_state = PE_PRS_SRC_SNK_TRANSITION_TO_OFF;
2700 kick_sm(pd, SRC_TRANSITION_TIME);
2703 case PE_PRS_SRC_SNK_TRANSITION_TO_OFF:
2704 pd->in_pr_swap = true;
2706 power_supply_set_property(pd->usb_psy,
2707 POWER_SUPPLY_PROP_PR_SWAP, &val);
2708 pd->in_explicit_contract = false;
2710 if (pd->vbus_enabled) {
2711 regulator_disable(pd->vbus);
2712 pd->vbus_enabled = false;
2715 /* PE_PRS_SRC_SNK_Assert_Rd */
2716 pd->current_pr = PR_SINK;
2717 set_power_role(pd, pd->current_pr);
2718 pd_phy_update_roles(pd->current_dr, pd->current_pr);
2720 /* allow time for Vbus discharge, must be < tSrcSwapStdby */
2723 ret = pd_send_msg(pd, MSG_PS_RDY, NULL, 0, SOP_MSG);
2725 usbpd_err(&pd->dev, "Error sending PS_RDY\n");
2726 usbpd_set_state(pd, PE_ERROR_RECOVERY);
2730 pd->current_state = PE_PRS_SRC_SNK_WAIT_SOURCE_ON;
2731 kick_sm(pd, PS_SOURCE_ON);
2734 case PE_PRS_SRC_SNK_WAIT_SOURCE_ON:
2735 if (IS_CTRL(rx_msg, MSG_PS_RDY))
2736 usbpd_set_state(pd, PE_SNK_STARTUP);
2738 usbpd_set_state(pd, PE_ERROR_RECOVERY);
2741 case PE_PRS_SNK_SRC_SEND_SWAP:
2742 if (!IS_CTRL(rx_msg, MSG_ACCEPT)) {
2743 pd->current_state = PE_SNK_READY;
2747 pd->in_pr_swap = true;
2749 power_supply_set_property(pd->usb_psy,
2750 POWER_SUPPLY_PROP_PR_SWAP, &val);
2751 usbpd_set_state(pd, PE_PRS_SNK_SRC_TRANSITION_TO_OFF);
2754 case PE_PRS_SNK_SRC_TRANSITION_TO_OFF:
2755 if (!IS_CTRL(rx_msg, MSG_PS_RDY)) {
2756 usbpd_set_state(pd, PE_ERROR_RECOVERY);
2760 /* PE_PRS_SNK_SRC_Assert_Rp */
2761 pd->current_pr = PR_SRC;
2762 set_power_role(pd, pd->current_pr);
2763 pd->current_state = PE_PRS_SNK_SRC_SOURCE_ON;
2767 case PE_PRS_SNK_SRC_SOURCE_ON:
2770 ret = pd_send_msg(pd, MSG_PS_RDY, NULL, 0, SOP_MSG);
2772 usbpd_err(&pd->dev, "Error sending PS_RDY\n");
2773 usbpd_set_state(pd, PE_ERROR_RECOVERY);
2777 usbpd_set_state(pd, PE_SRC_STARTUP);
2780 case PE_VCS_WAIT_FOR_VCONN:
2781 if (IS_CTRL(rx_msg, MSG_PS_RDY)) {
2783 * hopefully redundant check but in case not enabled
2784 * avoids unbalanced regulator disable count
2786 if (pd->vconn_enabled)
2787 regulator_disable(pd->vconn);
2788 pd->vconn_enabled = false;
2790 pd->current_state = pd->current_pr == PR_SRC ?
2791 PE_SRC_READY : PE_SNK_READY;
2793 /* timed out; go to hard reset */
2794 usbpd_set_state(pd, pd->current_pr == PR_SRC ?
2795 PE_SRC_HARD_RESET : PE_SNK_HARD_RESET);
2801 usbpd_err(&pd->dev, "Unhandled state %s\n",
2802 usbpd_state_strings[pd->current_state]);
2809 spin_lock_irqsave(&pd->rx_lock, flags);
2810 ret = list_empty(&pd->rx_q);
2811 spin_unlock_irqrestore(&pd->rx_lock, flags);
2813 /* requeue if there are any new/pending RX messages */
2821 static inline const char *src_current(enum power_supply_typec_mode typec_mode)
2823 switch (typec_mode) {
2824 case POWER_SUPPLY_TYPEC_SOURCE_DEFAULT:
2826 case POWER_SUPPLY_TYPEC_SOURCE_MEDIUM:
2827 return "medium - 1.5A";
2828 case POWER_SUPPLY_TYPEC_SOURCE_HIGH:
2829 return "high - 3.0A";
2835 static int psy_changed(struct notifier_block *nb, unsigned long evt, void *ptr)
2837 struct usbpd *pd = container_of(nb, struct usbpd, psy_nb);
2838 union power_supply_propval val;
2839 enum power_supply_typec_mode typec_mode;
2842 if (ptr != pd->usb_psy || evt != PSY_EVENT_PROP_CHANGED)
2845 ret = power_supply_get_property(pd->usb_psy,
2846 POWER_SUPPLY_PROP_TYPEC_MODE, &val);
2848 usbpd_err(&pd->dev, "Unable to read USB TYPEC_MODE: %d\n", ret);
2852 typec_mode = val.intval;
2854 ret = power_supply_get_property(pd->usb_psy,
2855 POWER_SUPPLY_PROP_PE_START, &val);
2857 usbpd_err(&pd->dev, "Unable to read USB PROP_PE_START: %d\n",
2862 /* Don't proceed if PE_START=0 as other props may still change */
2863 if (!val.intval && !pd->pd_connected &&
2864 typec_mode != POWER_SUPPLY_TYPEC_NONE)
2867 ret = power_supply_get_property(pd->usb_psy,
2868 POWER_SUPPLY_PROP_PRESENT, &val);
2870 usbpd_err(&pd->dev, "Unable to read USB PRESENT: %d\n", ret);
2874 pd->vbus_present = val.intval;
2876 ret = power_supply_get_property(pd->usb_psy,
2877 POWER_SUPPLY_PROP_REAL_TYPE, &val);
2879 usbpd_err(&pd->dev, "Unable to read USB TYPE: %d\n", ret);
2883 pd->psy_type = val.intval;
2886 * For sink hard reset, state machine needs to know when VBUS changes
2887 * - when in PE_SNK_TRANSITION_TO_DEFAULT, notify when VBUS falls
2888 * - when in PE_SNK_DISCOVERY, notify when VBUS rises
2890 if (typec_mode && ((!pd->vbus_present &&
2891 pd->current_state == PE_SNK_TRANSITION_TO_DEFAULT) ||
2892 (pd->vbus_present && pd->current_state == PE_SNK_DISCOVERY))) {
2893 usbpd_dbg(&pd->dev, "hard reset: typec mode:%d present:%d\n",
2894 typec_mode, pd->vbus_present);
2895 pd->typec_mode = typec_mode;
2900 if (pd->typec_mode == typec_mode)
2903 pd->typec_mode = typec_mode;
2905 usbpd_dbg(&pd->dev, "typec mode:%d present:%d type:%d orientation:%d\n",
2906 typec_mode, pd->vbus_present, pd->psy_type,
2907 usbpd_get_plug_orientation(pd));
2909 switch (typec_mode) {
2911 case POWER_SUPPLY_TYPEC_NONE:
2912 if (pd->in_pr_swap) {
2913 usbpd_dbg(&pd->dev, "Ignoring disconnect due to PR swap\n");
2917 pd->current_pr = PR_NONE;
2921 case POWER_SUPPLY_TYPEC_SOURCE_DEFAULT:
2922 case POWER_SUPPLY_TYPEC_SOURCE_MEDIUM:
2923 case POWER_SUPPLY_TYPEC_SOURCE_HIGH:
2924 usbpd_info(&pd->dev, "Type-C Source (%s) connected\n",
2925 src_current(typec_mode));
2927 /* if waiting for SinkTxOk to start an AMS */
2928 if (pd->spec_rev == USBPD_REV_30 &&
2929 typec_mode == POWER_SUPPLY_TYPEC_SOURCE_HIGH &&
2930 (pd->send_pr_swap || pd->send_dr_swap || pd->vdm_tx))
2933 if (pd->current_pr == PR_SINK)
2937 * Unexpected if not in PR swap; need to force disconnect from
2938 * source so we can turn off VBUS, Vconn, PD PHY etc.
2940 if (pd->current_pr == PR_SRC) {
2941 usbpd_info(&pd->dev, "Forcing disconnect from source mode\n");
2942 pd->current_pr = PR_NONE;
2946 pd->current_pr = PR_SINK;
2950 case POWER_SUPPLY_TYPEC_SINK_POWERED_CABLE:
2951 case POWER_SUPPLY_TYPEC_SINK:
2952 usbpd_info(&pd->dev, "Type-C Sink%s connected\n",
2953 typec_mode == POWER_SUPPLY_TYPEC_SINK ?
2956 if (pd->current_pr == PR_SRC)
2959 pd->current_pr = PR_SRC;
2962 case POWER_SUPPLY_TYPEC_SINK_DEBUG_ACCESSORY:
2963 usbpd_info(&pd->dev, "Type-C Debug Accessory connected\n");
2965 case POWER_SUPPLY_TYPEC_SINK_AUDIO_ADAPTER:
2966 usbpd_info(&pd->dev, "Type-C Analog Audio Adapter connected\n");
2969 usbpd_warn(&pd->dev, "Unsupported typec mode:%d\n",
2974 /* queue state machine due to CC state change */
2979 static enum dual_role_property usbpd_dr_properties[] = {
2980 DUAL_ROLE_PROP_SUPPORTED_MODES,
2981 DUAL_ROLE_PROP_MODE,
2986 static int usbpd_dr_get_property(struct dual_role_phy_instance *dual_role,
2987 enum dual_role_property prop, unsigned int *val)
2989 struct usbpd *pd = dual_role_get_drvdata(dual_role);
2995 case DUAL_ROLE_PROP_MODE:
2996 /* For now associate UFP/DFP with data role only */
2997 if (pd->current_dr == DR_UFP)
2998 *val = DUAL_ROLE_PROP_MODE_UFP;
2999 else if (pd->current_dr == DR_DFP)
3000 *val = DUAL_ROLE_PROP_MODE_DFP;
3002 *val = DUAL_ROLE_PROP_MODE_NONE;
3004 case DUAL_ROLE_PROP_PR:
3005 if (pd->current_pr == PR_SRC)
3006 *val = DUAL_ROLE_PROP_PR_SRC;
3007 else if (pd->current_pr == PR_SINK)
3008 *val = DUAL_ROLE_PROP_PR_SNK;
3010 *val = DUAL_ROLE_PROP_PR_NONE;
3012 case DUAL_ROLE_PROP_DR:
3013 if (pd->current_dr == DR_UFP)
3014 *val = DUAL_ROLE_PROP_DR_DEVICE;
3015 else if (pd->current_dr == DR_DFP)
3016 *val = DUAL_ROLE_PROP_DR_HOST;
3018 *val = DUAL_ROLE_PROP_DR_NONE;
3021 usbpd_warn(&pd->dev, "unsupported property %d\n", prop);
3028 static int usbpd_dr_set_property(struct dual_role_phy_instance *dual_role,
3029 enum dual_role_property prop, const unsigned int *val)
3031 struct usbpd *pd = dual_role_get_drvdata(dual_role);
3032 bool do_swap = false;
3039 case DUAL_ROLE_PROP_MODE:
3040 usbpd_dbg(&pd->dev, "Setting mode to %d\n", *val);
3042 if (pd->current_state == PE_UNKNOWN) {
3043 usbpd_warn(&pd->dev, "No active connection. Don't allow MODE change\n");
3048 * Forces disconnect on CC and re-establishes connection.
3049 * This does not use PD-based PR/DR swap
3051 if (*val == DUAL_ROLE_PROP_MODE_UFP)
3052 pd->forced_pr = POWER_SUPPLY_TYPEC_PR_SINK;
3053 else if (*val == DUAL_ROLE_PROP_MODE_DFP)
3054 pd->forced_pr = POWER_SUPPLY_TYPEC_PR_SOURCE;
3056 /* new mode will be applied in disconnect handler */
3057 set_power_role(pd, PR_NONE);
3059 /* wait until it takes effect */
3060 while (pd->forced_pr != POWER_SUPPLY_TYPEC_PR_NONE &&
3065 usbpd_err(&pd->dev, "setting mode timed out\n");
3071 case DUAL_ROLE_PROP_DR:
3072 usbpd_dbg(&pd->dev, "Setting data_role to %d\n", *val);
3074 if (*val == DUAL_ROLE_PROP_DR_HOST) {
3075 if (pd->current_dr == DR_UFP)
3077 } else if (*val == DUAL_ROLE_PROP_DR_DEVICE) {
3078 if (pd->current_dr == DR_DFP)
3081 usbpd_warn(&pd->dev, "setting data_role to 'none' unsupported\n");
3086 if (pd->current_state != PE_SRC_READY &&
3087 pd->current_state != PE_SNK_READY) {
3088 usbpd_err(&pd->dev, "data_role swap not allowed: PD not in Ready state\n");
3092 if (pd->current_state == PE_SNK_READY &&
3093 !is_sink_tx_ok(pd)) {
3094 usbpd_err(&pd->dev, "Rp indicates SinkTxNG\n");
3098 mutex_lock(&pd->swap_lock);
3099 reinit_completion(&pd->is_ready);
3100 pd->send_dr_swap = true;
3103 /* wait for operation to complete */
3104 if (!wait_for_completion_timeout(&pd->is_ready,
3105 msecs_to_jiffies(100))) {
3106 usbpd_err(&pd->dev, "data_role swap timed out\n");
3107 mutex_unlock(&pd->swap_lock);
3111 mutex_unlock(&pd->swap_lock);
3113 if ((*val == DUAL_ROLE_PROP_DR_HOST &&
3114 pd->current_dr != DR_DFP) ||
3115 (*val == DUAL_ROLE_PROP_DR_DEVICE &&
3116 pd->current_dr != DR_UFP)) {
3117 usbpd_err(&pd->dev, "incorrect state (%s) after data_role swap\n",
3118 pd->current_dr == DR_DFP ?
3126 case DUAL_ROLE_PROP_PR:
3127 usbpd_dbg(&pd->dev, "Setting power_role to %d\n", *val);
3129 if (*val == DUAL_ROLE_PROP_PR_SRC) {
3130 if (pd->current_pr == PR_SINK)
3132 } else if (*val == DUAL_ROLE_PROP_PR_SNK) {
3133 if (pd->current_pr == PR_SRC)
3136 usbpd_warn(&pd->dev, "setting power_role to 'none' unsupported\n");
3141 if (pd->current_state != PE_SRC_READY &&
3142 pd->current_state != PE_SNK_READY) {
3143 usbpd_err(&pd->dev, "power_role swap not allowed: PD not in Ready state\n");
3147 if (pd->current_state == PE_SNK_READY &&
3148 !is_sink_tx_ok(pd)) {
3149 usbpd_err(&pd->dev, "Rp indicates SinkTxNG\n");
3153 mutex_lock(&pd->swap_lock);
3154 reinit_completion(&pd->is_ready);
3155 pd->send_pr_swap = true;
3158 /* wait for operation to complete */
3159 if (!wait_for_completion_timeout(&pd->is_ready,
3160 msecs_to_jiffies(2000))) {
3161 usbpd_err(&pd->dev, "power_role swap timed out\n");
3162 mutex_unlock(&pd->swap_lock);
3166 mutex_unlock(&pd->swap_lock);
3168 if ((*val == DUAL_ROLE_PROP_PR_SRC &&
3169 pd->current_pr != PR_SRC) ||
3170 (*val == DUAL_ROLE_PROP_PR_SNK &&
3171 pd->current_pr != PR_SINK)) {
3172 usbpd_err(&pd->dev, "incorrect state (%s) after power_role swap\n",
3173 pd->current_pr == PR_SRC ?
3181 usbpd_warn(&pd->dev, "unsupported property %d\n", prop);
3188 static int usbpd_dr_prop_writeable(struct dual_role_phy_instance *dual_role,
3189 enum dual_role_property prop)
3191 struct usbpd *pd = dual_role_get_drvdata(dual_role);
3194 case DUAL_ROLE_PROP_MODE:
3196 case DUAL_ROLE_PROP_DR:
3197 case DUAL_ROLE_PROP_PR:
3199 return pd->current_state == PE_SNK_READY ||
3200 pd->current_state == PE_SRC_READY;
3209 static int usbpd_uevent(struct device *dev, struct kobj_uevent_env *env)
3211 struct usbpd *pd = dev_get_drvdata(dev);
3214 add_uevent_var(env, "DATA_ROLE=%s", pd->current_dr == DR_DFP ?
3217 if (pd->current_pr == PR_SINK) {
3218 add_uevent_var(env, "POWER_ROLE=sink");
3219 add_uevent_var(env, "SRC_CAP_ID=%d", pd->src_cap_id);
3221 for (i = 0; i < ARRAY_SIZE(pd->received_pdos); i++)
3222 add_uevent_var(env, "PDO%d=%08x", i,
3223 pd->received_pdos[i]);
3225 add_uevent_var(env, "REQUESTED_PDO=%d", pd->requested_pdo);
3226 add_uevent_var(env, "SELECTED_PDO=%d", pd->selected_pdo);
3228 add_uevent_var(env, "POWER_ROLE=source");
3229 for (i = 0; i < ARRAY_SIZE(default_src_caps); i++)
3230 add_uevent_var(env, "PDO%d=%08x", i,
3231 default_src_caps[i]);
3234 add_uevent_var(env, "RDO=%08x", pd->rdo);
3235 add_uevent_var(env, "CONTRACT=%s", pd->in_explicit_contract ?
3236 "explicit" : "implicit");
3237 add_uevent_var(env, "ALT_MODE=%d", pd->vdm_state == MODE_ENTERED);
3239 add_uevent_var(env, "ADO=%08x", pd->received_ado);
3240 for (i = 0; i < PD_STATUS_DB_LEN; i++)
3241 add_uevent_var(env, "SDB%d=%08x", i, pd->status_db[i]);
3246 static ssize_t contract_show(struct device *dev, struct device_attribute *attr,
3249 struct usbpd *pd = dev_get_drvdata(dev);
3251 return snprintf(buf, PAGE_SIZE, "%s\n",
3252 pd->in_explicit_contract ? "explicit" : "implicit");
3254 static DEVICE_ATTR_RO(contract);
3256 static ssize_t current_pr_show(struct device *dev,
3257 struct device_attribute *attr, char *buf)
3259 struct usbpd *pd = dev_get_drvdata(dev);
3260 const char *pr = "none";
3262 if (pd->current_pr == PR_SINK)
3264 else if (pd->current_pr == PR_SRC)
3267 return snprintf(buf, PAGE_SIZE, "%s\n", pr);
3269 static DEVICE_ATTR_RO(current_pr);
3271 static ssize_t initial_pr_show(struct device *dev,
3272 struct device_attribute *attr, char *buf)
3274 struct usbpd *pd = dev_get_drvdata(dev);
3275 const char *pr = "none";
3277 if (pd->typec_mode >= POWER_SUPPLY_TYPEC_SOURCE_DEFAULT)
3279 else if (pd->typec_mode >= POWER_SUPPLY_TYPEC_SINK)
3282 return snprintf(buf, PAGE_SIZE, "%s\n", pr);
3284 static DEVICE_ATTR_RO(initial_pr);
3286 static ssize_t current_dr_show(struct device *dev,
3287 struct device_attribute *attr, char *buf)
3289 struct usbpd *pd = dev_get_drvdata(dev);
3290 const char *dr = "none";
3292 if (pd->current_dr == DR_UFP)
3294 else if (pd->current_dr == DR_DFP)
3297 return snprintf(buf, PAGE_SIZE, "%s\n", dr);
3299 static DEVICE_ATTR_RO(current_dr);
3301 static ssize_t initial_dr_show(struct device *dev,
3302 struct device_attribute *attr, char *buf)
3304 struct usbpd *pd = dev_get_drvdata(dev);
3305 const char *dr = "none";
3307 if (pd->typec_mode >= POWER_SUPPLY_TYPEC_SOURCE_DEFAULT)
3309 else if (pd->typec_mode >= POWER_SUPPLY_TYPEC_SINK)
3312 return snprintf(buf, PAGE_SIZE, "%s\n", dr);
3314 static DEVICE_ATTR_RO(initial_dr);
3316 static ssize_t src_cap_id_show(struct device *dev,
3317 struct device_attribute *attr, char *buf)
3319 struct usbpd *pd = dev_get_drvdata(dev);
3321 return snprintf(buf, PAGE_SIZE, "%d\n", pd->src_cap_id);
3323 static DEVICE_ATTR_RO(src_cap_id);
3325 /* Dump received source PDOs in human-readable format */
3326 static ssize_t pdo_h_show(struct device *dev, struct device_attribute *attr,
3329 struct usbpd *pd = dev_get_drvdata(dev);
3333 for (i = 0; i < ARRAY_SIZE(pd->received_pdos); i++) {
3334 u32 pdo = pd->received_pdos[i];
3339 cnt += scnprintf(&buf[cnt], PAGE_SIZE - cnt, "PDO %d\n", i + 1);
3341 if (PD_SRC_PDO_TYPE(pdo) == PD_SRC_PDO_TYPE_FIXED) {
3342 cnt += scnprintf(&buf[cnt], PAGE_SIZE - cnt,
3344 "\tDual-Role Power:%d\n"
3345 "\tUSB Suspend Supported:%d\n"
3346 "\tExternally Powered:%d\n"
3347 "\tUSB Communications Capable:%d\n"
3348 "\tData Role Swap:%d\n"
3349 "\tPeak Current:%d\n"
3350 "\tVoltage:%d (mV)\n"
3351 "\tMax Current:%d (mA)\n",
3352 PD_SRC_PDO_FIXED_PR_SWAP(pdo),
3353 PD_SRC_PDO_FIXED_USB_SUSP(pdo),
3354 PD_SRC_PDO_FIXED_EXT_POWERED(pdo),
3355 PD_SRC_PDO_FIXED_USB_COMM(pdo),
3356 PD_SRC_PDO_FIXED_DR_SWAP(pdo),
3357 PD_SRC_PDO_FIXED_PEAK_CURR(pdo),
3358 PD_SRC_PDO_FIXED_VOLTAGE(pdo) * 50,
3359 PD_SRC_PDO_FIXED_MAX_CURR(pdo) * 10);
3360 } else if (PD_SRC_PDO_TYPE(pdo) == PD_SRC_PDO_TYPE_BATTERY) {
3361 cnt += scnprintf(&buf[cnt], PAGE_SIZE - cnt,
3362 "\tBattery supply\n"
3363 "\tMax Voltage:%d (mV)\n"
3364 "\tMin Voltage:%d (mV)\n"
3365 "\tMax Power:%d (mW)\n",
3366 PD_SRC_PDO_VAR_BATT_MAX_VOLT(pdo) * 50,
3367 PD_SRC_PDO_VAR_BATT_MIN_VOLT(pdo) * 50,
3368 PD_SRC_PDO_VAR_BATT_MAX(pdo) * 250);
3369 } else if (PD_SRC_PDO_TYPE(pdo) == PD_SRC_PDO_TYPE_VARIABLE) {
3370 cnt += scnprintf(&buf[cnt], PAGE_SIZE - cnt,
3371 "\tVariable supply\n"
3372 "\tMax Voltage:%d (mV)\n"
3373 "\tMin Voltage:%d (mV)\n"
3374 "\tMax Current:%d (mA)\n",
3375 PD_SRC_PDO_VAR_BATT_MAX_VOLT(pdo) * 50,
3376 PD_SRC_PDO_VAR_BATT_MIN_VOLT(pdo) * 50,
3377 PD_SRC_PDO_VAR_BATT_MAX(pdo) * 10);
3378 } else if (PD_SRC_PDO_TYPE(pdo) == PD_SRC_PDO_TYPE_AUGMENTED) {
3379 cnt += scnprintf(&buf[cnt], PAGE_SIZE - cnt,
3380 "\tProgrammable Power supply\n"
3381 "\tMax Voltage:%d (mV)\n"
3382 "\tMin Voltage:%d (mV)\n"
3383 "\tMax Current:%d (mA)\n",
3384 PD_APDO_MAX_VOLT(pdo) * 100,
3385 PD_APDO_MIN_VOLT(pdo) * 100,
3386 PD_APDO_MAX_CURR(pdo) * 50);
3388 cnt += scnprintf(&buf[cnt], PAGE_SIZE - cnt,
3397 static DEVICE_ATTR_RO(pdo_h);
3399 static ssize_t pdo_n_show(struct device *dev, struct device_attribute *attr,
3402 #define PDO_ATTR(n) { \
3403 .attr = { .name = __stringify(pdo##n), .mode = S_IRUGO }, \
3404 .show = pdo_n_show, \
3406 static struct device_attribute dev_attr_pdos[] = {
3416 static ssize_t pdo_n_show(struct device *dev, struct device_attribute *attr,
3419 struct usbpd *pd = dev_get_drvdata(dev);
3422 for (i = 0; i < ARRAY_SIZE(dev_attr_pdos); i++)
3423 if (attr == &dev_attr_pdos[i])
3424 /* dump the PDO as a hex string */
3425 return snprintf(buf, PAGE_SIZE, "%08x\n",
3426 pd->received_pdos[i]);
3428 usbpd_err(&pd->dev, "Invalid PDO index\n");
3432 static ssize_t select_pdo_store(struct device *dev,
3433 struct device_attribute *attr, const char *buf, size_t size)
3435 struct usbpd *pd = dev_get_drvdata(dev);
3437 int pdo, uv = 0, ua = 0;
3440 mutex_lock(&pd->swap_lock);
3442 /* Only allowed if we are already in explicit sink contract */
3443 if (pd->current_state != PE_SNK_READY || !is_sink_tx_ok(pd)) {
3444 usbpd_err(&pd->dev, "select_pdo: Cannot select new PDO yet\n");
3449 ret = sscanf(buf, "%d %d %d %d", &src_cap_id, &pdo, &uv, &ua);
3450 if (ret != 2 && ret != 4) {
3451 usbpd_err(&pd->dev, "select_pdo: Must specify <src cap id> <PDO> [<uV> <uA>]\n");
3456 if (src_cap_id != pd->src_cap_id) {
3457 usbpd_err(&pd->dev, "select_pdo: src_cap_id mismatch. Requested:%d, current:%d\n",
3458 src_cap_id, pd->src_cap_id);
3463 if (pdo < 1 || pdo > 7) {
3464 usbpd_err(&pd->dev, "select_pdo: invalid PDO:%d\n", pdo);
3469 ret = pd_select_pdo(pd, pdo, uv, ua);
3473 reinit_completion(&pd->is_ready);
3474 pd->send_request = true;
3477 /* wait for operation to complete */
3478 if (!wait_for_completion_timeout(&pd->is_ready,
3479 msecs_to_jiffies(1000))) {
3480 usbpd_err(&pd->dev, "select_pdo: request timed out\n");
3485 /* determine if request was accepted/rejected */
3486 if (pd->selected_pdo != pd->requested_pdo ||
3487 pd->current_voltage != pd->requested_voltage) {
3488 usbpd_err(&pd->dev, "select_pdo: request rejected\n");
3493 pd->send_request = false;
3494 mutex_unlock(&pd->swap_lock);
3495 return ret ? ret : size;
3498 static ssize_t select_pdo_show(struct device *dev,
3499 struct device_attribute *attr, char *buf)
3501 struct usbpd *pd = dev_get_drvdata(dev);
3503 return snprintf(buf, PAGE_SIZE, "%d\n", pd->selected_pdo);
3505 static DEVICE_ATTR_RW(select_pdo);
3507 static ssize_t rdo_show(struct device *dev, struct device_attribute *attr,
3510 struct usbpd *pd = dev_get_drvdata(dev);
3512 /* dump the RDO as a hex string */
3513 return snprintf(buf, PAGE_SIZE, "%08x\n", pd->rdo);
3515 static DEVICE_ATTR_RO(rdo);
3517 static ssize_t rdo_h_show(struct device *dev, struct device_attribute *attr,
3520 struct usbpd *pd = dev_get_drvdata(dev);
3521 int pos = PD_RDO_OBJ_POS(pd->rdo);
3522 int type = PD_SRC_PDO_TYPE(pd->received_pdos[pos]);
3525 len = scnprintf(buf, PAGE_SIZE, "Request Data Object\n"
3528 "\tCapability Mismatch:%d\n"
3529 "\tUSB Communications Capable:%d\n"
3530 "\tNo USB Suspend:%d\n",
3531 PD_RDO_OBJ_POS(pd->rdo),
3532 PD_RDO_GIVEBACK(pd->rdo),
3533 PD_RDO_MISMATCH(pd->rdo),
3534 PD_RDO_USB_COMM(pd->rdo),
3535 PD_RDO_NO_USB_SUSP(pd->rdo));
3538 case PD_SRC_PDO_TYPE_FIXED:
3539 case PD_SRC_PDO_TYPE_VARIABLE:
3540 len += scnprintf(buf + len, PAGE_SIZE - len,
3541 "(Fixed/Variable)\n"
3542 "\tOperating Current:%d (mA)\n"
3543 "\t%s Current:%d (mA)\n",
3544 PD_RDO_FIXED_CURR(pd->rdo) * 10,
3545 PD_RDO_GIVEBACK(pd->rdo) ? "Min" : "Max",
3546 PD_RDO_FIXED_CURR_MINMAX(pd->rdo) * 10);
3549 case PD_SRC_PDO_TYPE_BATTERY:
3550 len += scnprintf(buf + len, PAGE_SIZE - len,
3552 "\tOperating Power:%d (mW)\n"
3553 "\t%s Power:%d (mW)\n",
3554 PD_RDO_FIXED_CURR(pd->rdo) * 250,
3555 PD_RDO_GIVEBACK(pd->rdo) ? "Min" : "Max",
3556 PD_RDO_FIXED_CURR_MINMAX(pd->rdo) * 250);
3559 case PD_SRC_PDO_TYPE_AUGMENTED:
3560 len += scnprintf(buf + len, PAGE_SIZE - len,
3562 "\tOutput Voltage:%d (mV)\n"
3563 "\tOperating Current:%d (mA)\n",
3564 PD_RDO_PROG_VOLTAGE(pd->rdo) * 20,
3565 PD_RDO_PROG_CURR(pd->rdo) * 50);
3571 static DEVICE_ATTR_RO(rdo_h);
3573 static ssize_t hard_reset_store(struct device *dev,
3574 struct device_attribute *attr, const char *buf, size_t size)
3576 struct usbpd *pd = dev_get_drvdata(dev);
3579 if (sscanf(buf, "%d\n", &val) != 1)
3583 usbpd_set_state(pd, pd->current_pr == PR_SRC ?
3584 PE_SRC_HARD_RESET : PE_SNK_HARD_RESET);
3588 static DEVICE_ATTR_WO(hard_reset);
3590 static int trigger_tx_msg(struct usbpd *pd, bool *msg_tx_flag)
3594 /* Only allowed if we are already in explicit sink contract */
3595 if (pd->current_state != PE_SNK_READY || !is_sink_tx_ok(pd)) {
3596 usbpd_err(&pd->dev, "%s: Cannot send msg\n", __func__);
3601 reinit_completion(&pd->is_ready);
3602 *msg_tx_flag = true;
3605 /* wait for operation to complete */
3606 if (!wait_for_completion_timeout(&pd->is_ready,
3607 msecs_to_jiffies(1000))) {
3608 usbpd_err(&pd->dev, "%s: request timed out\n", __func__);
3613 *msg_tx_flag = false;
3618 static ssize_t get_src_cap_ext_show(struct device *dev,
3619 struct device_attribute *attr, char *buf)
3621 int i, ret, len = 0;
3622 struct usbpd *pd = dev_get_drvdata(dev);
3624 if (pd->spec_rev == USBPD_REV_20)
3627 ret = trigger_tx_msg(pd, &pd->send_get_src_cap_ext);
3631 for (i = 0; i < PD_SRC_CAP_EXT_DB_LEN; i++)
3632 len += snprintf(buf + len, PAGE_SIZE - len, "%d\n",
3633 pd->src_cap_ext_db[i]);
3636 static DEVICE_ATTR_RO(get_src_cap_ext);
3638 static ssize_t get_pps_status_show(struct device *dev,
3639 struct device_attribute *attr, char *buf)
3642 struct usbpd *pd = dev_get_drvdata(dev);
3644 if (pd->spec_rev == USBPD_REV_20)
3647 ret = trigger_tx_msg(pd, &pd->send_get_pps_status);
3651 return snprintf(buf, PAGE_SIZE, "%d\n", pd->pps_status_db);
3653 static DEVICE_ATTR_RO(get_pps_status);
3655 static ssize_t rx_ado_show(struct device *dev, struct device_attribute *attr,
3658 struct usbpd *pd = dev_get_drvdata(dev);
3660 /* dump the ADO as a hex string */
3661 return snprintf(buf, PAGE_SIZE, "%08x\n", pd->received_ado);
3663 static DEVICE_ATTR_RO(rx_ado);
3665 static ssize_t get_battery_cap_store(struct device *dev,
3666 struct device_attribute *attr, const char *buf, size_t size)
3668 struct usbpd *pd = dev_get_drvdata(dev);
3671 if (pd->spec_rev == USBPD_REV_20 || sscanf(buf, "%d\n", &val) != 1) {
3672 pd->get_battery_cap_db = -EINVAL;
3676 pd->get_battery_cap_db = val;
3678 ret = trigger_tx_msg(pd, &pd->send_get_battery_cap);
3680 return ret ? ret : size;
3683 static ssize_t get_battery_cap_show(struct device *dev,
3684 struct device_attribute *attr, char *buf)
3687 struct usbpd *pd = dev_get_drvdata(dev);
3689 if (pd->get_battery_cap_db == -EINVAL)
3692 for (i = 0; i < PD_BATTERY_CAP_DB_LEN; i++)
3693 len += snprintf(buf + len, PAGE_SIZE - len, "%d\n",
3694 pd->battery_cap_db[i]);
3697 static DEVICE_ATTR_RW(get_battery_cap);
3699 static ssize_t get_battery_status_store(struct device *dev,
3700 struct device_attribute *attr, const char *buf, size_t size)
3702 struct usbpd *pd = dev_get_drvdata(dev);
3705 if (pd->spec_rev == USBPD_REV_20 || sscanf(buf, "%d\n", &val) != 1) {
3706 pd->get_battery_status_db = -EINVAL;
3710 pd->get_battery_status_db = val;
3712 ret = trigger_tx_msg(pd, &pd->send_get_battery_status);
3714 return ret ? ret : size;
3717 static ssize_t get_battery_status_show(struct device *dev,
3718 struct device_attribute *attr, char *buf)
3720 struct usbpd *pd = dev_get_drvdata(dev);
3722 if (pd->get_battery_status_db == -EINVAL)
3725 return snprintf(buf, PAGE_SIZE, "%d\n", pd->battery_sts_dobj);
3727 static DEVICE_ATTR_RW(get_battery_status);
3729 static struct attribute *usbpd_attrs[] = {
3730 &dev_attr_contract.attr,
3731 &dev_attr_initial_pr.attr,
3732 &dev_attr_current_pr.attr,
3733 &dev_attr_initial_dr.attr,
3734 &dev_attr_current_dr.attr,
3735 &dev_attr_src_cap_id.attr,
3736 &dev_attr_pdo_h.attr,
3737 &dev_attr_pdos[0].attr,
3738 &dev_attr_pdos[1].attr,
3739 &dev_attr_pdos[2].attr,
3740 &dev_attr_pdos[3].attr,
3741 &dev_attr_pdos[4].attr,
3742 &dev_attr_pdos[5].attr,
3743 &dev_attr_pdos[6].attr,
3744 &dev_attr_select_pdo.attr,
3746 &dev_attr_rdo_h.attr,
3747 &dev_attr_hard_reset.attr,
3748 &dev_attr_get_src_cap_ext.attr,
3749 &dev_attr_get_pps_status.attr,
3750 &dev_attr_rx_ado.attr,
3751 &dev_attr_get_battery_cap.attr,
3752 &dev_attr_get_battery_status.attr,
3755 ATTRIBUTE_GROUPS(usbpd);
3757 static struct class usbpd_class = {
3759 .owner = THIS_MODULE,
3760 .dev_uevent = usbpd_uevent,
3761 .dev_groups = usbpd_groups,
3764 static int match_usbpd_device(struct device *dev, const void *data)
3766 return dev->parent == data;
3769 static void devm_usbpd_put(struct device *dev, void *res)
3771 struct usbpd **ppd = res;
3773 put_device(&(*ppd)->dev);
3776 struct usbpd *devm_usbpd_get_by_phandle(struct device *dev, const char *phandle)
3778 struct usbpd **ptr, *pd = NULL;
3779 struct device_node *pd_np;
3780 struct platform_device *pdev;
3781 struct device *pd_dev;
3783 if (!usbpd_class.p) /* usbpd_init() not yet called */
3784 return ERR_PTR(-EAGAIN);
3787 return ERR_PTR(-EINVAL);
3789 pd_np = of_parse_phandle(dev->of_node, phandle, 0);
3791 return ERR_PTR(-ENXIO);
3793 pdev = of_find_device_by_node(pd_np);
3795 return ERR_PTR(-ENODEV);
3797 pd_dev = class_find_device(&usbpd_class, NULL, &pdev->dev,
3798 match_usbpd_device);
3800 platform_device_put(pdev);
3801 /* device was found but maybe hadn't probed yet, so defer */
3802 return ERR_PTR(-EPROBE_DEFER);
3805 ptr = devres_alloc(devm_usbpd_put, sizeof(*ptr), GFP_KERNEL);
3808 platform_device_put(pdev);
3809 return ERR_PTR(-ENOMEM);
3812 pd = dev_get_drvdata(pd_dev);
3814 return ERR_PTR(-EPROBE_DEFER);
3817 devres_add(dev, ptr);
3821 EXPORT_SYMBOL(devm_usbpd_get_by_phandle);
3823 static int num_pd_instances;
3826 * usbpd_create - Create a new instance of USB PD protocol/policy engine
3827 * @parent - parent device to associate with
3829 * This creates a new usbpd class device which manages the state of a
3830 * USB PD-capable port. The parent device that is passed in should be
3831 * associated with the physical device port, e.g. a PD PHY.
3833 * Return: struct usbpd pointer, or an ERR_PTR value
3835 struct usbpd *usbpd_create(struct device *parent)
3840 pd = kzalloc(sizeof(*pd), GFP_KERNEL);
3842 return ERR_PTR(-ENOMEM);
3844 device_initialize(&pd->dev);
3845 pd->dev.class = &usbpd_class;
3846 pd->dev.parent = parent;
3847 dev_set_drvdata(&pd->dev, pd);
3849 ret = dev_set_name(&pd->dev, "usbpd%d", num_pd_instances++);
3853 ret = device_init_wakeup(&pd->dev, true);
3857 ret = device_add(&pd->dev);
3861 pd->wq = alloc_ordered_workqueue("usbpd_wq", WQ_FREEZABLE | WQ_HIGHPRI);
3866 INIT_WORK(&pd->sm_work, usbpd_sm);
3867 hrtimer_init(&pd->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
3868 pd->timer.function = pd_timeout;
3869 mutex_init(&pd->swap_lock);
3871 pd->usb_psy = power_supply_get_by_name("usb");
3873 usbpd_dbg(&pd->dev, "Could not get USB power_supply, deferring probe\n");
3874 ret = -EPROBE_DEFER;
3879 * associate extcon with the parent dev as it could have a DT
3880 * node which will be useful for extcon_get_edev_by_phandle()
3882 pd->extcon = devm_extcon_dev_allocate(parent, usbpd_extcon_cable);
3883 if (IS_ERR(pd->extcon)) {
3884 usbpd_err(&pd->dev, "failed to allocate extcon device\n");
3885 ret = PTR_ERR(pd->extcon);
3889 pd->extcon->mutually_exclusive = usbpd_extcon_exclusive;
3890 ret = devm_extcon_dev_register(parent, pd->extcon);
3892 usbpd_err(&pd->dev, "failed to register extcon device\n");
3896 pd->vbus = devm_regulator_get(parent, "vbus");
3897 if (IS_ERR(pd->vbus)) {
3898 ret = PTR_ERR(pd->vbus);
3902 pd->vconn = devm_regulator_get(parent, "vconn");
3903 if (IS_ERR(pd->vconn)) {
3904 ret = PTR_ERR(pd->vconn);
3908 pd->vconn_is_external = device_property_present(parent,
3909 "qcom,vconn-uses-external-source");
3911 pd->num_sink_caps = device_property_read_u32_array(parent,
3912 "qcom,default-sink-caps", NULL, 0);
3913 if (pd->num_sink_caps > 0) {
3917 if (pd->num_sink_caps % 2 || pd->num_sink_caps > 14) {
3919 usbpd_err(&pd->dev, "default-sink-caps must be be specified as voltage/current, max 7 pairs\n");
3923 ret = device_property_read_u32_array(parent,
3924 "qcom,default-sink-caps", sink_caps,
3927 usbpd_err(&pd->dev, "Error reading default-sink-caps\n");
3931 pd->num_sink_caps /= 2;
3933 for (i = 0; i < pd->num_sink_caps; i++) {
3934 int v = sink_caps[i * 2] / 50;
3935 int c = sink_caps[i * 2 + 1] / 10;
3938 PD_SNK_PDO_FIXED(0, 0, 0, 0, 0, v, c);
3941 /* First PDO includes additional capabilities */
3942 pd->sink_caps[0] |= PD_SNK_PDO_FIXED(1, 0, 0, 1, 1, 0, 0);
3944 memcpy(pd->sink_caps, default_snk_caps,
3945 sizeof(default_snk_caps));
3946 pd->num_sink_caps = ARRAY_SIZE(default_snk_caps);
3950 * Register the Android dual-role class (/sys/class/dual_role_usb/).
3951 * The first instance should be named "otg_default" as that's what
3953 * Note this is different than the /sys/class/usbpd/ created above.
3955 pd->dr_desc.name = (num_pd_instances == 1) ?
3956 "otg_default" : dev_name(&pd->dev);
3957 pd->dr_desc.supported_modes = DUAL_ROLE_SUPPORTED_MODES_DFP_AND_UFP;
3958 pd->dr_desc.properties = usbpd_dr_properties;
3959 pd->dr_desc.num_properties = ARRAY_SIZE(usbpd_dr_properties);
3960 pd->dr_desc.get_property = usbpd_dr_get_property;
3961 pd->dr_desc.set_property = usbpd_dr_set_property;
3962 pd->dr_desc.property_is_writeable = usbpd_dr_prop_writeable;
3964 pd->dual_role = devm_dual_role_instance_register(&pd->dev,
3966 if (IS_ERR(pd->dual_role)) {
3967 usbpd_err(&pd->dev, "could not register dual_role instance\n");
3970 pd->dual_role->drv_data = pd;
3973 pd->current_pr = PR_NONE;
3974 pd->current_dr = DR_NONE;
3975 list_add_tail(&pd->instance, &_usbpd);
3977 spin_lock_init(&pd->rx_lock);
3978 INIT_LIST_HEAD(&pd->rx_q);
3979 INIT_LIST_HEAD(&pd->svid_handlers);
3980 init_completion(&pd->is_ready);
3981 init_completion(&pd->tx_chunk_request);
3983 pd->psy_nb.notifier_call = psy_changed;
3984 ret = power_supply_reg_notifier(&pd->psy_nb);
3988 /* force read initial power_supply values */
3989 psy_changed(&pd->psy_nb, PSY_EVENT_PROP_CHANGED, pd->usb_psy);
3994 list_del(&pd->instance);
3996 power_supply_put(pd->usb_psy);
3998 destroy_workqueue(pd->wq);
4000 device_del(&pd->dev);
4004 return ERR_PTR(ret);
4006 EXPORT_SYMBOL(usbpd_create);
4009 * usbpd_destroy - Removes and frees a usbpd instance
4010 * @pd: the instance to destroy
4012 void usbpd_destroy(struct usbpd *pd)
4017 list_del(&pd->instance);
4018 power_supply_unreg_notifier(&pd->psy_nb);
4019 power_supply_put(pd->usb_psy);
4020 destroy_workqueue(pd->wq);
4021 device_del(&pd->dev);
4024 EXPORT_SYMBOL(usbpd_destroy);
4026 static int __init usbpd_init(void)
4028 usbpd_ipc_log = ipc_log_context_create(NUM_LOG_PAGES, "usb_pd", 0);
4029 return class_register(&usbpd_class);
4031 module_init(usbpd_init);
4033 static void __exit usbpd_exit(void)
4035 class_unregister(&usbpd_class);
4037 module_exit(usbpd_exit);
4039 MODULE_DESCRIPTION("USB Power Delivery Policy Engine");
4040 MODULE_LICENSE("GPL v2");