]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
platform/chrome: cros_ec_typec: Avoid setting usb role twice during disconnect
authorAzhar Shaikh <azhar.shaikh@intel.com>
Fri, 21 Aug 2020 21:47:23 +0000 (14:47 -0700)
committerEnric Balletbo i Serra <enric.balletbo@collabora.com>
Mon, 24 Aug 2020 10:45:56 +0000 (12:45 +0200)
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>
drivers/platform/chrome/cros_ec_typec.c

index 739a1c8469494b7ba568692fee97dbcb7dd68466..39989069decf7760ff44127d7d1b283642907eaf 100644 (file)
@@ -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)