2023-03-20 10:08:51

by Frank Wang

[permalink] [raw]
Subject: [PATCH v2 0/3] Fix some defects related Type-C TCPM

This series fix some defects of TCPM like port reset error, SVIDs
discover error and etc.

Tested on Rockchip EVB board integrated with FUSB302 or HUSB311 Type-C
controller.

Changes in v2:
- Make some tweaking based on Guenter and Heikki's comments for [PATCH 1/3] and [PATCH 2/3].
- Abandon [PATCH 4/4] in v1.

Frank Wang (3):
usb: typec: tcpm: fix cc role at port reset
usb: typec: tcpm: fix multiple times discover svids error
usb: typec: tcpm: add get max power support

drivers/usb/typec/tcpm/tcpm.c | 43 +++++++++++++++++++++++++++++++++--
1 file changed, 41 insertions(+), 2 deletions(-)

--
2.17.1



2023-03-20 10:08:56

by Frank Wang

[permalink] [raw]
Subject: [PATCH v2 1/3] usb: typec: tcpm: fix cc role at port reset

In the current implementation, the tcpm set CC1/CC2 role to open when
it do port reset would cause the VBUS removed by the Type-C partner.

This sets CC1/CC2 according to the default state of port to fix it.

Signed-off-by: Frank Wang <[email protected]>
---
drivers/usb/typec/tcpm/tcpm.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c
index a0d943d785800..56782dd05e2ec 100644
--- a/drivers/usb/typec/tcpm/tcpm.c
+++ b/drivers/usb/typec/tcpm/tcpm.c
@@ -4851,7 +4851,8 @@ static void run_state_machine(struct tcpm_port *port)
break;
case PORT_RESET:
tcpm_reset_port(port);
- tcpm_set_cc(port, TYPEC_CC_OPEN);
+ tcpm_set_cc(port, tcpm_default_state(port) == SNK_UNATTACHED ?
+ TYPEC_CC_RD : tcpm_rp_cc(port));
tcpm_set_state(port, PORT_RESET_WAIT_OFF,
PD_T_ERROR_RECOVERY);
break;
--
2.17.1


2023-04-25 03:05:22

by Frank Wang

[permalink] [raw]
Subject: Re: [PATCH v2 1/3] usb: typec: tcpm: fix cc role at port reset

Hi Guenter and Heikki,

On 2023/3/20 18:07, Frank Wang wrote:
> In the current implementation, the tcpm set CC1/CC2 role to open when
> it do port reset would cause the VBUS removed by the Type-C partner.
>
> This sets CC1/CC2 according to the default state of port to fix it.
>
> Signed-off-by: Frank Wang <[email protected]>
> ---
> drivers/usb/typec/tcpm/tcpm.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c
> index a0d943d785800..56782dd05e2ec 100644
> --- a/drivers/usb/typec/tcpm/tcpm.c
> +++ b/drivers/usb/typec/tcpm/tcpm.c
> @@ -4851,7 +4851,8 @@ static void run_state_machine(struct tcpm_port *port)
> break;
> case PORT_RESET:
> tcpm_reset_port(port);
> - tcpm_set_cc(port, TYPEC_CC_OPEN);
> + tcpm_set_cc(port, tcpm_default_state(port) == SNK_UNATTACHED ?
> + TYPEC_CC_RD : tcpm_rp_cc(port));
> tcpm_set_state(port, PORT_RESET_WAIT_OFF,
> PD_T_ERROR_RECOVERY);
> break;

Can you help to review this patch again?

BR.
Frank