summaryrefslogtreecommitdiff
path: root/drivers/usb/typec/bus.c
diff options
context:
space:
mode:
authorHeikki Krogerus <heikki.krogerus@linux.intel.com>2019-12-30 17:25:57 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-01-09 10:48:19 +0100
commitcf2f58fb88d9494ceff4516ad4bddc54bf56f426 (patch)
treeab92add78f96a3f8d7892d96f253bc4df401c4ef /drivers/usb/typec/bus.c
parent497210f27b8ccc38c03c679237a4fc766fbc3aba (diff)
usb: typec: Block mode entry if the port has the mode disabled
Originally the port drivers were expected to check does the connector have the mode enabled or disabled when the alt mode drivers attempted to enter the mode, but since typec_altmode_enter() puts the connector into USB Safe State before calling the port driver, it really has to do the check on its own, and before changing the state. Otherwise the connector may be left in USB Safe State if the port driver does not move it back to normal USB operation when the mode is disabled. Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Link: https://lore.kernel.org/r/20191230142611.24921-2-heikki.krogerus@linux.intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/typec/bus.c')
-rw-r--r--drivers/usb/typec/bus.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/usb/typec/bus.c b/drivers/usb/typec/bus.c
index 7e94e8c46ab3..8f6d8933d72e 100644
--- a/drivers/usb/typec/bus.c
+++ b/drivers/usb/typec/bus.c
@@ -101,6 +101,9 @@ int typec_altmode_enter(struct typec_altmode *adev)
if (!pdev->ops || !pdev->ops->enter)
return -EOPNOTSUPP;
+ if (is_typec_port(pdev->dev.parent) && !pdev->active)
+ return -EPERM;
+
/* Moving to USB Safe State */
ret = typec_altmode_set_state(adev, TYPEC_STATE_SAFE);
if (ret)