summaryrefslogtreecommitdiffstats
path: root/drivers/platform
diff options
context:
space:
mode:
authorAzhar Shaikh <azhar.shaikh@intel.com>2020-08-21 23:47:23 +0200
committerEnric Balletbo i Serra <enric.balletbo@collabora.com>2020-08-24 12:45:56 +0200
commitb12e4fd5f3e4852cdb1fa11d1a48498bea9e92cf (patch)
tree834c818d47417f0af924e02aa3377d2635fa2758 /drivers/platform
parentplatform/chrome: cros_ec_typec: Send enum values to usb_role_switch_set_role() (diff)
downloadlinux-b12e4fd5f3e4852cdb1fa11d1a48498bea9e92cf.tar.xz
linux-b12e4fd5f3e4852cdb1fa11d1a48498bea9e92cf.zip
platform/chrome: cros_ec_typec: Avoid setting usb role twice during disconnect
On disconnect port partner is removed and usb role is set to NONE. But then in cros_typec_port_update() the role is set again. Avoid this by moving usb_role_switch_set_role() to cros_typec_configure_mux(). Suggested-by: Prashant Malani <pmalani@chromium.org> Signed-off-by: Azhar Shaikh <azhar.shaikh@intel.com> Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
Diffstat (limited to 'drivers/platform')
-rw-r--r--drivers/platform/chrome/cros_ec_typec.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/platform/chrome/cros_ec_typec.c b/drivers/platform/chrome/cros_ec_typec.c
index 739a1c846949..39989069decf 100644
--- a/drivers/platform/chrome/cros_ec_typec.c
+++ b/drivers/platform/chrome/cros_ec_typec.c
@@ -564,7 +564,12 @@ static int cros_typec_configure_mux(struct cros_typec_data *typec, int port_num,
ret = -ENOTSUPP;
}
- return ret;
+ if (ret)
+ return ret;
+
+ return usb_role_switch_set_role(typec->ports[port_num]->role_sw,
+ pd_ctrl->role & PD_CTRL_RESP_ROLE_DATA
+ ? USB_ROLE_HOST : USB_ROLE_DEVICE);
}
static int cros_typec_port_update(struct cros_typec_data *typec, int port_num)
@@ -621,9 +626,7 @@ static int cros_typec_port_update(struct cros_typec_data *typec, int port_num)
if (ret)
dev_warn(typec->dev, "Configure muxes failed, err = %d\n", ret);
- return usb_role_switch_set_role(typec->ports[port_num]->role_sw,
- resp.role & PD_CTRL_RESP_ROLE_DATA
- ? USB_ROLE_HOST : USB_ROLE_DEVICE);
+ return ret;
}
static int cros_typec_get_cmd_version(struct cros_typec_data *typec)