| From cb28f941fce6e21adf9ac8a71d5350c8f85353a5 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 1 Feb 2021 02:02:12 -0800 |
| Subject: usb: typec: tcpm: Handle vbus shutoff when in source mode |
| |
| From: Badhri Jagan Sridharan <badhri@google.com> |
| |
| [ Upstream commit 7771bcc7f5a727d6e3f7a80b0b075a75cb664fb2 ] |
| |
| While in source mode, vbus could be shutoff by protections |
| circuits. TCPM does not move back to toggling state to |
| re-initiate connection. Fix this by moving to SRC_UNATTACHED |
| state when vbus shuts off while in source mode. |
| |
| Reviewed-by: Guenter Roeck <linux@roeck-us.net> |
| Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> |
| Signed-off-by: Badhri Jagan Sridharan <badhri@google.com> |
| Link: https://lore.kernel.org/r/20210201100212.49863-1-badhri@google.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/usb/typec/tcpm/tcpm.c | 11 +++++++++++ |
| 1 file changed, 11 insertions(+) |
| |
| diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c |
| index a443094090f1..c2bdfeb60e4f 100644 |
| --- a/drivers/usb/typec/tcpm/tcpm.c |
| +++ b/drivers/usb/typec/tcpm/tcpm.c |
| @@ -4287,6 +4287,17 @@ static void _tcpm_pd_vbus_off(struct tcpm_port *port) |
| /* Do nothing, waiting for sink detection */ |
| break; |
| |
| + case SRC_STARTUP: |
| + case SRC_SEND_CAPABILITIES: |
| + case SRC_SEND_CAPABILITIES_TIMEOUT: |
| + case SRC_NEGOTIATE_CAPABILITIES: |
| + case SRC_TRANSITION_SUPPLY: |
| + case SRC_READY: |
| + case SRC_WAIT_NEW_CAPABILITIES: |
| + /* Force to unattached state to re-initiate connection */ |
| + tcpm_set_state(port, SRC_UNATTACHED, 0); |
| + break; |
| + |
| case PORT_RESET: |
| /* |
| * State set back to default mode once the timer completes. |
| -- |
| 2.30.2 |
| |