From b5e374dda921bb604bcff2c98460195b36b4c0dc Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 30 Aug 2024 16:00:09 +0200 Subject: [PATCH] FROMLIST: usb: typec: fix up incorrectly backported "usb: typec: tcpm: unregister existing source caps before re-registration" In commit cfcd544a9974 ("usb: typec: tcpm: unregister existing source caps before re-registration"), quilt, and git, applied the diff to the incorrect function, which would cause bad problems if exercised in a device with these capabilities. Fix this all up to be in the correct function. Fixes: cfcd544a9974 ("usb: typec: tcpm: unregister existing source caps before re-registration") Reported-by: Charles Yo Cc: Kyle Tso Cc: Amit Sunil Dhamne Cc: Ondrej Jirman Cc: Heikki Krogerus Cc: Dmitry Baryshkov Signed-off-by: Greg Kroah-Hartman Link: https://lore.kernel.org/linux-usb/2024083008-granddad-unmoving-828c@gregkh/ Bug: 363121994 [ note, only 1/3 of the upstream commit is needed here due to half already being present due to manual UPSTREAM changes made to the tree, and a second follow-up fix not being merged from LTS here yet - gregkh] Signed-off-by: Greg Kroah-Hartman Change-Id: I33b07fcb8d1e64e7f0424b9a7b7d056aa9e44b2f --- drivers/usb/typec/tcpm/tcpm.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c index 6648b0a7ad7e..a820e3e24d7a 100644 --- a/drivers/usb/typec/tcpm/tcpm.c +++ b/drivers/usb/typec/tcpm/tcpm.c @@ -2453,7 +2453,7 @@ static int tcpm_register_sink_caps(struct tcpm_port *port) { struct usb_power_delivery_desc desc = { port->negotiated_rev }; struct usb_power_delivery_capabilities_desc caps = { }; - struct usb_power_delivery_capabilities *cap = port->partner_source_caps; + struct usb_power_delivery_capabilities *cap; if (!port->partner_pd) port->partner_pd = usb_power_delivery_register(NULL, &desc); @@ -2463,9 +2463,6 @@ static int tcpm_register_sink_caps(struct tcpm_port *port) memcpy(caps.pdo, port->sink_caps, sizeof(u32) * port->nr_sink_caps); caps.role = TYPEC_SINK; - if (cap) - usb_power_delivery_unregister_capabilities(cap); - cap = usb_power_delivery_register_capabilities(port->partner_pd, &caps); if (IS_ERR(cap)) return PTR_ERR(cap);