]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
usb: typec: ucsi: Invert DisplayPort role assignment
authorAndrei Kuchynski <akuchynski@chromium.org>
Mon, 1 Jun 2026 14:28:37 +0000 (14:28 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Jun 2026 14:11:41 +0000 (15:11 +0100)
The existing implementation assigned these flags backwards, configuring
the partner's DisplayPort role to match the port's role instead of
complementing it.
This prevents proper configuration during DP altmode activation, often
causing `pin_assignment` to remain 0 in `dp_altmode_configure()` and
resulting in VDM negotiation failures:

    [  583.328246] typec port1.1: VDM 0xff01a150 failed

Additionally, the fix ensures that the `pin_assignment` sysfs attribute
displays the correct values.

Cc: stable <stable@kernel.org>
Fixes: af8622f6a585 ("usb: typec: ucsi: Support for DisplayPort alt mode")
Signed-off-by: Andrei Kuchynski <akuchynski@chromium.org>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Link: https://patch.msgid.link/20260601142837.3240207-1-akuchynski@chromium.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/typec/ucsi/displayport.c

index 67a0991a7b76907aa483c4ce0e811af0a762f7ea..c44da2fae81fbc9145b2d8530f5680678d90a9eb 100644 (file)
@@ -166,12 +166,12 @@ static int ucsi_displayport_status_update(struct ucsi_dp *dp)
         * that Multi-function is preferred.
         */
        if (DP_CAP_CAPABILITY(cap) & DP_CAP_UFP_D) {
-               dp->data.status |= DP_STATUS_CON_UFP_D;
+               dp->data.status |= DP_STATUS_CON_DFP_D;
 
                if (DP_CAP_UFP_D_PIN_ASSIGN(cap) & BIT(DP_PIN_ASSIGN_D))
                        dp->data.status |= DP_STATUS_PREFER_MULTI_FUNC;
        } else {
-               dp->data.status |= DP_STATUS_CON_DFP_D;
+               dp->data.status |= DP_STATUS_CON_UFP_D;
 
                if (DP_CAP_DFP_D_PIN_ASSIGN(cap) & BIT(DP_PIN_ASSIGN_D))
                        dp->data.status |= DP_STATUS_PREFER_MULTI_FUNC;