Hi Prashant, On Tue, Feb 08, 2022 at 06:47:22PM +0000, Prashant Malani wrote: > There are situations where the mux state reported by the Embedded > Controller (EC), might lag the partner "connected" state. So, the mux > state might still suggest that a partner is connected, while the PD > "connected" state, being in Try.SNK (for example) suggests that the > partner is disconnected. > > In such a scenario, we will end up sending a disconnect command to the > mux driver, followed by a connect command, since the mux is configured > later. Avoid this by configuring the mux before > registering/disconnecting a partner. > > Signed-off-by: Prashant Malani Reviewed-by: Benson Leung > --- > > Changes in v2: > - Change return at end of port_update() to just return 0. > > drivers/platform/chrome/cros_ec_typec.c | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > > diff --git a/drivers/platform/chrome/cros_ec_typec.c b/drivers/platform/chrome/cros_ec_typec.c > index 3d34ece7f790..3019e29f200d 100644 > --- a/drivers/platform/chrome/cros_ec_typec.c > +++ b/drivers/platform/chrome/cros_ec_typec.c > @@ -965,6 +965,11 @@ static int cros_typec_port_update(struct cros_typec_data *typec, int port_num) > if (ret < 0) > return ret; > > + /* Update the switches if they exist, according to requested state */ > + ret = cros_typec_configure_mux(typec, port_num, &resp); > + if (ret) > + dev_warn(typec->dev, "Configure muxes failed, err = %d\n", ret); > + > dev_dbg(typec->dev, "Enabled %d: 0x%hhx\n", port_num, resp.enabled); > dev_dbg(typec->dev, "Role %d: 0x%hhx\n", port_num, resp.role); > dev_dbg(typec->dev, "Polarity %d: 0x%hhx\n", port_num, resp.polarity); > @@ -980,12 +985,7 @@ static int cros_typec_port_update(struct cros_typec_data *typec, int port_num) > if (typec->typec_cmd_supported) > cros_typec_handle_status(typec, port_num); > > - /* Update the switches if they exist, according to requested state */ > - ret = cros_typec_configure_mux(typec, port_num, &resp); > - if (ret) > - dev_warn(typec->dev, "Configure muxes failed, err = %d\n", ret); > - > - return ret; > + return 0; > } > > static int cros_typec_get_cmd_version(struct cros_typec_data *typec) > -- > 2.35.0.263.gb82422642f-goog > > -- Benson Leung Staff Software Engineer Chrome OS Kernel Google Inc. bleung@google.com Chromium OS Project bleung@chromium.org