diff mbox series

[1/1] usb: typec: tcpci: don't handle vSafe0V event if it's not enabled

Message ID 20210926101415.3775058-1-xu.yang_2@nxp.com (mailing list archive)
State Accepted
Commit 05300871c0e21c288bd5c30ac6f9b1da6ddeed22
Headers show
Series [1/1] usb: typec: tcpci: don't handle vSafe0V event if it's not enabled | expand

Commit Message

Xu Yang Sept. 26, 2021, 10:14 a.m. UTC
USB TCPCI Spec, 4.4.3 Mask Registers:
"A masked register will still indicate in the ALERT register, but shall
not set the Alert# pin low."

Thus, the Extended Status will still indicate in ALERT register if vSafe0V
is detected by TCPC even though being masked. In current code, howerer,
this event will not be handled in detection time. Rather it will be
handled when next ALERT event coming(CC evnet, PD event, etc).

Tcpm might transition to a wrong state in this situation. Thus, the vSafe0V
event should not be handled when it's masked.

Fixes: 766c485b86ef ("usb: typec: tcpci: Add support to report vSafe0V")
cc: <stable@vger.kernel.org>
Signed-off-by: Xu Yang <xu.yang_2@nxp.com>
---
 drivers/usb/typec/tcpm/tcpci.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Heikki Krogerus Sept. 27, 2021, 10:06 a.m. UTC | #1
On Sun, Sep 26, 2021 at 06:14:15PM +0800, Xu Yang wrote:
> USB TCPCI Spec, 4.4.3 Mask Registers:
> "A masked register will still indicate in the ALERT register, but shall
> not set the Alert# pin low."
> 
> Thus, the Extended Status will still indicate in ALERT register if vSafe0V
> is detected by TCPC even though being masked. In current code, howerer,
> this event will not be handled in detection time. Rather it will be
> handled when next ALERT event coming(CC evnet, PD event, etc).
> 
> Tcpm might transition to a wrong state in this situation. Thus, the vSafe0V
> event should not be handled when it's masked.
> 
> Fixes: 766c485b86ef ("usb: typec: tcpci: Add support to report vSafe0V")
> cc: <stable@vger.kernel.org>
> Signed-off-by: Xu Yang <xu.yang_2@nxp.com>

Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>

> ---
>  drivers/usb/typec/tcpm/tcpci.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/typec/tcpm/tcpci.c b/drivers/usb/typec/tcpm/tcpci.c
> index 9858716698df..c15eec9cc460 100644
> --- a/drivers/usb/typec/tcpm/tcpci.c
> +++ b/drivers/usb/typec/tcpm/tcpci.c
> @@ -696,7 +696,7 @@ irqreturn_t tcpci_irq(struct tcpci *tcpci)
>  		tcpm_pd_receive(tcpci->port, &msg);
>  	}
>  
> -	if (status & TCPC_ALERT_EXTENDED_STATUS) {
> +	if (tcpci->data->vbus_vsafe0v && (status & TCPC_ALERT_EXTENDED_STATUS)) {
>  		ret = regmap_read(tcpci->regmap, TCPC_EXTENDED_STATUS, &raw);
>  		if (!ret && (raw & TCPC_EXTENDED_STATUS_VSAFE0V))
>  			tcpm_vbus_change(tcpci->port);
> -- 
> 2.25.1
Guenter Roeck Oct. 1, 2021, 1:05 p.m. UTC | #2
On Sun, Sep 26, 2021 at 06:14:15PM +0800, Xu Yang wrote:
> USB TCPCI Spec, 4.4.3 Mask Registers:
> "A masked register will still indicate in the ALERT register, but shall
> not set the Alert# pin low."
> 
> Thus, the Extended Status will still indicate in ALERT register if vSafe0V
> is detected by TCPC even though being masked. In current code, howerer,
> this event will not be handled in detection time. Rather it will be
> handled when next ALERT event coming(CC evnet, PD event, etc).
> 
> Tcpm might transition to a wrong state in this situation. Thus, the vSafe0V
> event should not be handled when it's masked.
> 
> Fixes: 766c485b86ef ("usb: typec: tcpci: Add support to report vSafe0V")
> cc: <stable@vger.kernel.org>
> Signed-off-by: Xu Yang <xu.yang_2@nxp.com>

Reviewed-by: Guenter Roeck <linux@roeck-us.net>

> ---
>  drivers/usb/typec/tcpm/tcpci.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/typec/tcpm/tcpci.c b/drivers/usb/typec/tcpm/tcpci.c
> index 9858716698df..c15eec9cc460 100644
> --- a/drivers/usb/typec/tcpm/tcpci.c
> +++ b/drivers/usb/typec/tcpm/tcpci.c
> @@ -696,7 +696,7 @@ irqreturn_t tcpci_irq(struct tcpci *tcpci)
>  		tcpm_pd_receive(tcpci->port, &msg);
>  	}
>  
> -	if (status & TCPC_ALERT_EXTENDED_STATUS) {
> +	if (tcpci->data->vbus_vsafe0v && (status & TCPC_ALERT_EXTENDED_STATUS)) {
>  		ret = regmap_read(tcpci->regmap, TCPC_EXTENDED_STATUS, &raw);
>  		if (!ret && (raw & TCPC_EXTENDED_STATUS_VSAFE0V))
>  			tcpm_vbus_change(tcpci->port);
> -- 
> 2.25.1
>
diff mbox series

Patch

diff --git a/drivers/usb/typec/tcpm/tcpci.c b/drivers/usb/typec/tcpm/tcpci.c
index 9858716698df..c15eec9cc460 100644
--- a/drivers/usb/typec/tcpm/tcpci.c
+++ b/drivers/usb/typec/tcpm/tcpci.c
@@ -696,7 +696,7 @@  irqreturn_t tcpci_irq(struct tcpci *tcpci)
 		tcpm_pd_receive(tcpci->port, &msg);
 	}
 
-	if (status & TCPC_ALERT_EXTENDED_STATUS) {
+	if (tcpci->data->vbus_vsafe0v && (status & TCPC_ALERT_EXTENDED_STATUS)) {
 		ret = regmap_read(tcpci->regmap, TCPC_EXTENDED_STATUS, &raw);
 		if (!ret && (raw & TCPC_EXTENDED_STATUS_VSAFE0V))
 			tcpm_vbus_change(tcpci->port);