diff options
Diffstat (limited to 'drivers/usb/pd/qpnp-pdphy.c')
| -rw-r--r-- | drivers/usb/pd/qpnp-pdphy.c | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/drivers/usb/pd/qpnp-pdphy.c b/drivers/usb/pd/qpnp-pdphy.c index e200c25bc23a..b454442e2471 100644 --- a/drivers/usb/pd/qpnp-pdphy.c +++ b/drivers/usb/pd/qpnp-pdphy.c @@ -80,6 +80,10 @@ #define VDD_PDPHY_VOL_MAX 3300000 /* uV */ #define VDD_PDPHY_HPM_LOAD 3000 /* uA */ +/* timers */ +#define RECEIVER_RESPONSE_TIME 15 /* tReceiverResponse */ +#define HARD_RESET_COMPLETE_TIME 5 /* tHardResetComplete */ + struct usb_pdphy { struct device *dev; struct regmap *regmap; @@ -96,8 +100,8 @@ struct usb_pdphy { int msg_tx_discarded_irq; int msg_rx_discarded_irq; - void (*signal_cb)(struct usbpd *pd, enum pd_sig_type type); - void (*msg_rx_cb)(struct usbpd *pd, enum pd_msg_type type, + void (*signal_cb)(struct usbpd *pd, enum pd_sig_type sig); + void (*msg_rx_cb)(struct usbpd *pd, enum pd_sop_type sop, u8 *buf, size_t len); void (*shutdown_cb)(struct usbpd *pd); @@ -401,14 +405,13 @@ int pd_phy_open(struct pd_phy_params *params) } EXPORT_SYMBOL(pd_phy_open); -int pd_phy_signal(enum pd_sig_type type, unsigned int timeout_ms) +int pd_phy_signal(enum pd_sig_type sig) { u8 val; int ret; struct usb_pdphy *pdphy = __pdphy; - dev_dbg(pdphy->dev, "%s: type %d timeout %u\n", __func__, type, - timeout_ms); + dev_dbg(pdphy->dev, "%s: type %d\n", __func__, sig); if (!pdphy) { pr_err("%s: pdphy not found\n", __func__); @@ -428,7 +431,7 @@ int pd_phy_signal(enum pd_sig_type type, unsigned int timeout_ms) usleep_range(2, 3); - val = (type == CABLE_RESET_SIG ? TX_CONTROL_FRAME_TYPE_CABLE_RESET : 0) + val = (sig == CABLE_RESET_SIG ? TX_CONTROL_FRAME_TYPE_CABLE_RESET : 0) | TX_CONTROL_SEND_SIGNAL; ret = pdphy_reg_write(pdphy, USB_PDPHY_TX_CONTROL, val); @@ -436,7 +439,8 @@ int pd_phy_signal(enum pd_sig_type type, unsigned int timeout_ms) return ret; ret = wait_event_interruptible_timeout(pdphy->tx_waitq, - pdphy->tx_status != -EINPROGRESS, msecs_to_jiffies(timeout_ms)); + pdphy->tx_status != -EINPROGRESS, + msecs_to_jiffies(HARD_RESET_COMPLETE_TIME)); if (ret <= 0) { dev_err(pdphy->dev, "%s: failed ret %d", __func__, ret); return ret ? ret : -ETIMEDOUT; @@ -447,7 +451,7 @@ int pd_phy_signal(enum pd_sig_type type, unsigned int timeout_ms) if (pdphy->tx_status) return pdphy->tx_status; - if (type == HARD_RESET_SIG) + if (sig == HARD_RESET_SIG) /* Frame filter is reconfigured in pd_phy_open() */ return pdphy_reg_write(pdphy, USB_PDPHY_FRAME_FILTER, 0); @@ -455,16 +459,15 @@ int pd_phy_signal(enum pd_sig_type type, unsigned int timeout_ms) } EXPORT_SYMBOL(pd_phy_signal); -int pd_phy_write(u16 hdr, const u8 *data, size_t data_len, - enum pd_msg_type type, unsigned int timeout_ms) +int pd_phy_write(u16 hdr, const u8 *data, size_t data_len, enum pd_sop_type sop) { u8 val; int ret; size_t total_len = data_len + USB_PDPHY_MSG_HDR_LEN; struct usb_pdphy *pdphy = __pdphy; - dev_dbg(pdphy->dev, "%s: hdr %x frame type %d timeout %u\n", - __func__, hdr, type, timeout_ms); + dev_dbg(pdphy->dev, "%s: hdr %x frame sop_type %d\n", + __func__, hdr, sop); if (data && data_len) print_hex_dump_debug("tx data obj:", DUMP_PREFIX_NONE, 32, 4, @@ -518,14 +521,15 @@ int pd_phy_write(u16 hdr, const u8 *data, size_t data_len, usleep_range(2, 3); - val = TX_CONTROL_RETRY_COUNT | (type << 2) | TX_CONTROL_SEND_MSG; + val = TX_CONTROL_RETRY_COUNT | (sop << 2) | TX_CONTROL_SEND_MSG; ret = pdphy_reg_write(pdphy, USB_PDPHY_TX_CONTROL, val); if (ret) return ret; ret = wait_event_interruptible_timeout(pdphy->tx_waitq, - pdphy->tx_status != -EINPROGRESS, msecs_to_jiffies(timeout_ms)); + pdphy->tx_status != -EINPROGRESS, + msecs_to_jiffies(RECEIVER_RESPONSE_TIME)); if (ret <= 0) { dev_err(pdphy->dev, "%s: failed ret %d", __func__, ret); return ret ? ret : -ETIMEDOUT; @@ -534,7 +538,7 @@ int pd_phy_write(u16 hdr, const u8 *data, size_t data_len, if (hdr && !pdphy->tx_status) pdphy->tx_bytes += data_len + USB_PDPHY_MSG_HDR_LEN; - return pdphy->tx_status ? pdphy->tx_status : data_len; + return pdphy->tx_status ? pdphy->tx_status : 0; } EXPORT_SYMBOL(pd_phy_write); |
