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
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
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