2022-02-09 10:05:00

by Prashant Malani

[permalink] [raw]
Subject: [PATCH v2 3/4] platform/chrome: cros_ec_typec: Configure muxes at start of port update

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 <[email protected]>
---

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



2022-02-15 03:14:32

by Benson Leung

[permalink] [raw]
Subject: Re: [PATCH v2 3/4] platform/chrome: cros_ec_typec: Configure muxes at start of port update

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 <[email protected]>

Reviewed-by: Benson Leung <[email protected]>


> ---
>
> 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.
[email protected]
Chromium OS Project
[email protected]


Attachments:
(No filename) (2.45 kB)
signature.asc (235.00 B)
Download all attachments