usb: typec: tcpm: unregister existing source caps before re-registration
[linux-2.6-block.git] / drivers / usb / typec / tcpm / tcpm.c
index a0e0ffd5a64b6c409c945bf7c6220eff5c0214f6..77e632ea6872111b36e56684ad28a411b842cf12 100644 (file)
@@ -2996,7 +2996,7 @@ static int tcpm_register_source_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;
+       struct usb_power_delivery_capabilities *cap = port->partner_source_caps;
 
        if (!port->partner_pd)
                port->partner_pd = usb_power_delivery_register(NULL, &desc);
@@ -3006,6 +3006,9 @@ static int tcpm_register_source_caps(struct tcpm_port *port)
        memcpy(caps.pdo, port->source_caps, sizeof(u32) * port->nr_source_caps);
        caps.role = TYPEC_SOURCE;
 
+       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);