--- /dev/null
+From acf5631c239dfc53489f739c4ad47f490c5181ff Mon Sep 17 00:00:00 2001
+From: Bjorn Andersson <bjorn.andersson@linaro.org>
+Date: Sat, 15 May 2021 20:47:30 -0700
+Subject: usb: typec: mux: Fix matching with typec_altmode_desc
+
+From: Bjorn Andersson <bjorn.andersson@linaro.org>
+
+commit acf5631c239dfc53489f739c4ad47f490c5181ff upstream.
+
+In typec_mux_match() "nval" is assigned the number of elements in the
+"svid" fwnode property, then the variable is used to store the success
+of the read and finally attempts to loop between 0 and "success" - i.e.
+not at all - and the code returns indicating that no match was found.
+
+Fix this by using a separate variable to track the success of the read,
+to allow the loop to get a change to find a match.
+
+Fixes: 96a6d031ca99 ("usb: typec: mux: Find the muxes by also matching against the device node")
+Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
+Cc: stable <stable@vger.kernel.org>
+Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
+Link: https://lore.kernel.org/r/20210516034730.621461-1-bjorn.andersson@linaro.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/usb/typec/mux.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+--- a/drivers/usb/typec/mux.c
++++ b/drivers/usb/typec/mux.c
+@@ -191,6 +191,7 @@ static void *typec_mux_match(struct fwno
+ bool match;
+ int nval;
+ u16 *val;
++ int ret;
+ int i;
+
+ /*
+@@ -218,10 +219,10 @@ static void *typec_mux_match(struct fwno
+ if (!val)
+ return ERR_PTR(-ENOMEM);
+
+- nval = fwnode_property_read_u16_array(fwnode, "svid", val, nval);
+- if (nval < 0) {
++ ret = fwnode_property_read_u16_array(fwnode, "svid", val, nval);
++ if (ret < 0) {
+ kfree(val);
+- return ERR_PTR(nval);
++ return ERR_PTR(ret);
+ }
+
+ for (i = 0; i < nval; i++) {