Loading drivers/usb/pd/policy_engine.c +5 −4 Original line number Diff line number Diff line Loading @@ -602,6 +602,8 @@ static void kick_sm(struct usbpd *pd, int ms) static void phy_sig_received(struct usbpd *pd, enum pd_sig_type type) { union power_supply_propval val = {1}; if (type != HARD_RESET_SIG) { usbpd_err(&pd->dev, "invalid signal (%d) received\n", type); return; Loading @@ -612,6 +614,9 @@ static void phy_sig_received(struct usbpd *pd, enum pd_sig_type type) /* Force CC logic to source/sink to keep Rp/Rd unchanged */ set_power_role(pd, pd->current_pr); pd->hard_reset_recvd = true; power_supply_set_property(pd->usb_psy, POWER_SUPPLY_PROP_PD_IN_HARD_RESET, &val); kick_sm(pd, 0); } Loading Loading @@ -1625,10 +1630,6 @@ static void usbpd_sm(struct work_struct *w) if (pd->hard_reset_recvd) { pd->hard_reset_recvd = false; val.intval = 1; power_supply_set_property(pd->usb_psy, POWER_SUPPLY_PROP_PD_IN_HARD_RESET, &val); if (pd->requested_current) { val.intval = pd->requested_current = 0; power_supply_set_property(pd->usb_psy, Loading drivers/usb/pd/qpnp-pdphy.c +18 −1 Original line number Diff line number Diff line Loading @@ -108,6 +108,7 @@ struct usb_pdphy { int tx_status; u8 frame_filter_val; bool in_test_data_mode; bool rx_busy; enum data_role data_role; enum power_role power_role; Loading Loading @@ -492,6 +493,12 @@ int pd_phy_write(u16 hdr, const u8 *data, size_t data_len, return -EINVAL; } ret = pdphy_reg_read(pdphy, &val, USB_PDPHY_RX_ACKNOWLEDGE, 1); if (ret || val || pdphy->rx_busy) { dev_err(pdphy->dev, "%s: RX message pending\n", __func__); return -EBUSY; } pdphy->tx_status = -EINPROGRESS; /* write 2 byte SOP message header */ Loading Loading @@ -664,6 +671,15 @@ static int pd_phy_bist_mode(u8 bist_mode) BIST_MODE_MASK | BIST_ENABLE, bist_mode | BIST_ENABLE); } static irqreturn_t pdphy_msg_rx_irq(int irq, void *data) { struct usb_pdphy *pdphy = data; pdphy->rx_busy = true; return IRQ_WAKE_THREAD; } static irqreturn_t pdphy_msg_rx_irq_thread(int irq, void *data) { u8 size, rx_status, frame_type; Loading Loading @@ -720,6 +736,7 @@ static irqreturn_t pdphy_msg_rx_irq_thread(int irq, void *data) false); pdphy->rx_bytes += size + 1; done: pdphy->rx_busy = false; return IRQ_HANDLED; } Loading Loading @@ -805,7 +822,7 @@ static int pdphy_probe(struct platform_device *pdev) return ret; ret = pdphy_request_irq(pdphy, pdev->dev.of_node, &pdphy->msg_rx_irq, "msg-rx", NULL, &pdphy->msg_rx_irq, "msg-rx", pdphy_msg_rx_irq, pdphy_msg_rx_irq_thread, (IRQF_TRIGGER_RISING | IRQF_ONESHOT)); if (ret < 0) return ret; Loading Loading
drivers/usb/pd/policy_engine.c +5 −4 Original line number Diff line number Diff line Loading @@ -602,6 +602,8 @@ static void kick_sm(struct usbpd *pd, int ms) static void phy_sig_received(struct usbpd *pd, enum pd_sig_type type) { union power_supply_propval val = {1}; if (type != HARD_RESET_SIG) { usbpd_err(&pd->dev, "invalid signal (%d) received\n", type); return; Loading @@ -612,6 +614,9 @@ static void phy_sig_received(struct usbpd *pd, enum pd_sig_type type) /* Force CC logic to source/sink to keep Rp/Rd unchanged */ set_power_role(pd, pd->current_pr); pd->hard_reset_recvd = true; power_supply_set_property(pd->usb_psy, POWER_SUPPLY_PROP_PD_IN_HARD_RESET, &val); kick_sm(pd, 0); } Loading Loading @@ -1625,10 +1630,6 @@ static void usbpd_sm(struct work_struct *w) if (pd->hard_reset_recvd) { pd->hard_reset_recvd = false; val.intval = 1; power_supply_set_property(pd->usb_psy, POWER_SUPPLY_PROP_PD_IN_HARD_RESET, &val); if (pd->requested_current) { val.intval = pd->requested_current = 0; power_supply_set_property(pd->usb_psy, Loading
drivers/usb/pd/qpnp-pdphy.c +18 −1 Original line number Diff line number Diff line Loading @@ -108,6 +108,7 @@ struct usb_pdphy { int tx_status; u8 frame_filter_val; bool in_test_data_mode; bool rx_busy; enum data_role data_role; enum power_role power_role; Loading Loading @@ -492,6 +493,12 @@ int pd_phy_write(u16 hdr, const u8 *data, size_t data_len, return -EINVAL; } ret = pdphy_reg_read(pdphy, &val, USB_PDPHY_RX_ACKNOWLEDGE, 1); if (ret || val || pdphy->rx_busy) { dev_err(pdphy->dev, "%s: RX message pending\n", __func__); return -EBUSY; } pdphy->tx_status = -EINPROGRESS; /* write 2 byte SOP message header */ Loading Loading @@ -664,6 +671,15 @@ static int pd_phy_bist_mode(u8 bist_mode) BIST_MODE_MASK | BIST_ENABLE, bist_mode | BIST_ENABLE); } static irqreturn_t pdphy_msg_rx_irq(int irq, void *data) { struct usb_pdphy *pdphy = data; pdphy->rx_busy = true; return IRQ_WAKE_THREAD; } static irqreturn_t pdphy_msg_rx_irq_thread(int irq, void *data) { u8 size, rx_status, frame_type; Loading Loading @@ -720,6 +736,7 @@ static irqreturn_t pdphy_msg_rx_irq_thread(int irq, void *data) false); pdphy->rx_bytes += size + 1; done: pdphy->rx_busy = false; return IRQ_HANDLED; } Loading Loading @@ -805,7 +822,7 @@ static int pdphy_probe(struct platform_device *pdev) return ret; ret = pdphy_request_irq(pdphy, pdev->dev.of_node, &pdphy->msg_rx_irq, "msg-rx", NULL, &pdphy->msg_rx_irq, "msg-rx", pdphy_msg_rx_irq, pdphy_msg_rx_irq_thread, (IRQF_TRIGGER_RISING | IRQF_ONESHOT)); if (ret < 0) return ret; Loading