From nobody Mon Feb 9 19:05:36 2026 Received: from mail-ej1-f66.google.com (mail-ej1-f66.google.com [209.85.218.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 874813904C8 for ; Tue, 13 Jan 2026 13:05:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768309561; cv=none; b=raGMzhTzoip5/PIKuXq3LzQx9xJRdpmLkTA4XUyIkTkg1gBqV9iP1Dys8cjJO/OM9Qf6TsWZ8T7R0Mjeq4wtAxpkz4N+1hvqqB0CGWmb6+9nDsspvhtOCIwEcsHn//F0MEsYmjJpjaO0SDl285fL5f6T61xntwh7tE1mxEF7V4E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768309561; c=relaxed/simple; bh=PBxq1XtnNJDHu6QLFTPbS6fcZBdgfVFC9T9kO3oXU8s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Fmy76yqjBJkIgrY4sTkkO4Fr2eiYXU8inLE8FgCGkAfigCiWMCn3OTzQJMbvNEs8RfTER3imMewxas/1ePJhrkLxYToegwmZcbJ+pZbuleacmS7PzY5bprVYrVAd3pL9QEjjirHRw3ec51ZH+qvSbrCckeOhIacI5FEWMKFeIH4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=Mj5Fjztq; arc=none smtp.client-ip=209.85.218.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="Mj5Fjztq" Received: by mail-ej1-f66.google.com with SMTP id a640c23a62f3a-b86f3e88d4dso389306366b.0 for ; Tue, 13 Jan 2026 05:05:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1768309556; x=1768914356; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=JexYB6ufnP2njfyWsSs8jFTtDnvJKYKAr3d1TGCGR/Q=; b=Mj5FjztqrNZA8BrHquTm+eMBlOH5i2XkFHbTVDZHWD/SNYBZ/LIieUdFS5tva1t5S+ mgrk7X+XNiVhgvi+miJOnVulbOjRYic0S2L+ZIiHsegNmJx8f/EpejtBq0qN7+aLiD1U A/R0qFaCiaY8yg1y8NQlT/9MEs8sUsXYkhPfY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768309556; x=1768914356; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=JexYB6ufnP2njfyWsSs8jFTtDnvJKYKAr3d1TGCGR/Q=; b=d8FjoQD2U5/nMT9QNI21TLn7DviWXkFXJNABuTV63nv6WRrg/hxHVMRHi2VMtSQwjs 1EvFiikyn9oIVmgiHzFLVSf8KBMIjtUcH9zm1OnTu7l2z3M/wQig+XpdjPvio1Z8R6z6 Q2P0X6TmkAQPHRWy9hIw9L/CYVScebv2NZwTLvTWCueh9Xlf5AqU3eL9ViZJLMCezxBV X+HkKHjp4V/j9yM5zhu4e/0sPNOw/G4MWTg5xRIt7hJsmtKrXDurOZIZuXcngHlgjgfL a2oevKNPSPvVop6JDfmG7f4yUabWx1fvyx1dX9uGsiddIrgl38kr4GsoQ6f4+l4jr/Gd neZw== X-Forwarded-Encrypted: i=1; AJvYcCV22cM2EgSTnDrPrRgqZhgRp1i7MtM4okDYi87SdDkuGme3i8eI3b1Ifz8upyGZ8HYp+NTl5J8iL4LNGjE=@vger.kernel.org X-Gm-Message-State: AOJu0Yywof2nHdYix1RfF8R6miFwpIYnQIkKLjDP8gxE9RhcKhnzFpdo +qrrFRFafDUxL8rBeDIdTmGITt55NCMEUyqaJm/w/+fEf0Ex5h02KY1eLwDBgTTAoA== X-Gm-Gg: AY/fxX4sZTmZ56g5AgheDm4xxfqqb75uoeHIn203WF67qpwjz4dwzc1HQsPO2Ypz5Ok mQxV8OZI+yT+DK8NLNQD0vnTIu4Ya5deDHzCUMWJ7z6EV4wAPxF0mFwB9uyWrabLNTblHbhEoyR wMDb87c9Kn2MMsIiZjaU91W5vl5DMAS3erFs+rYHIHN1RRoG/1DtBdetBHiHUJSu49zbDpwOq8u GUWu+8wAH69qtsrGw7dSpqKjgbDJb7sTQAOJC9uIvnRb1/FiakDKAlrn+BcHZ9XmTP1HYwWUaxA TJZmfIZ1+sgC46mKF71kdG+WCucPIi2TiY3HYxvQM0V42+28k2gprb6H46VsO95WRZKOZthAhx8 s+6pm2KVWrXmwBrrZS9SfLhZl8mejU+V2Vk3JKp+8FD0UgQXXIbfZ1VsLfE6EEnUypCABexRgCe aFGFTIzH5dXIccBKQ7F5L9RQbbqMcMet9wv8MfM6w/e6YvSEdl+Yn3NA9sKDKj13/XhHXBlvHmY YapammPSfdOeF51FyM= X-Google-Smtp-Source: AGHT+IFTvE3kPXoaMFaHVoxvyk8+opt2tAgG+Q3yLoEc+MEmRNu8mDVwkVmFMuobpUoOnxGKBIsrcQ== X-Received: by 2002:a17:907:702:b0:b80:3846:d46 with SMTP id a640c23a62f3a-b8444caab67mr2155678166b.20.1768309555953; Tue, 13 Jan 2026 05:05:55 -0800 (PST) Received: from akuchynski.c.googlers.com.com (150.230.32.34.bc.googleusercontent.com. [34.32.230.150]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b871b5e60dasm586217266b.63.2026.01.13.05.05.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 13 Jan 2026 05:05:55 -0800 (PST) From: Andrei Kuchynski To: Heikki Krogerus , Abhishek Pandit-Subedi , Benson Leung , Jameson Thies , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, chrome-platform@lists.linux.dev Cc: Tzung-Bi Shih , Guenter Roeck , Greg Kroah-Hartman , Dmitry Baryshkov , =?UTF-8?q?=C5=81ukasz=20Bartosik?= , Abel Vesa , Pooja Katiyar , Johan Hovold , Hsin-Te Yuan , Madhu M , Venkat Jayaraman , Andrei Kuchynski Subject: [PATCH v4 6/8] usb: typec: Introduce mode_selection bit Date: Tue, 13 Jan 2026 13:05:34 +0000 Message-ID: <20260113130536.3068311-7-akuchynski@chromium.org> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog In-Reply-To: <20260113130536.3068311-1-akuchynski@chromium.org> References: <20260113130536.3068311-1-akuchynski@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The port driver sets this bit for an alternate mode description to indicate support for the mode selection feature. Once set, individual Alt Mode drivers will no longer attempt to activate their respective modes within their probe functions. This prevents race conditions and non-prioritized activation. The bit is not set by default. If left unset, the system retains the current behavior where Alt Mode drivers manage their own activation logic. Signed-off-by: Andrei Kuchynski --- drivers/usb/typec/altmodes/displayport.c | 6 ++++-- drivers/usb/typec/altmodes/thunderbolt.c | 2 +- drivers/usb/typec/class.c | 1 + include/linux/usb/typec.h | 1 + include/linux/usb/typec_altmode.h | 1 + 5 files changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/usb/typec/altmodes/displayport.c b/drivers/usb/typec/a= ltmodes/displayport.c index d96ab106a980b..d185688a16b13 100644 --- a/drivers/usb/typec/altmodes/displayport.c +++ b/drivers/usb/typec/altmodes/displayport.c @@ -804,8 +804,10 @@ int dp_altmode_probe(struct typec_altmode *alt) if (plug) typec_altmode_set_drvdata(plug, dp); =20 - dp->state =3D plug ? DP_STATE_ENTER_PRIME : DP_STATE_ENTER; - schedule_work(&dp->work); + if (!alt->mode_selection) { + dp->state =3D plug ? DP_STATE_ENTER_PRIME : DP_STATE_ENTER; + schedule_work(&dp->work); + } =20 return 0; } diff --git a/drivers/usb/typec/altmodes/thunderbolt.c b/drivers/usb/typec/a= ltmodes/thunderbolt.c index 6eadf7835f8f6..c4c5da6154da9 100644 --- a/drivers/usb/typec/altmodes/thunderbolt.c +++ b/drivers/usb/typec/altmodes/thunderbolt.c @@ -307,7 +307,7 @@ static int tbt_altmode_probe(struct typec_altmode *alt) typec_altmode_set_drvdata(alt, tbt); typec_altmode_set_ops(alt, &tbt_altmode_ops); =20 - if (tbt_ready(alt)) { + if (!alt->mode_selection && tbt_ready(alt)) { if (tbt->plug[TYPEC_PLUG_SOP_P]) tbt->state =3D TBT_STATE_SOP_P_ENTER; else if (tbt->plug[TYPEC_PLUG_SOP_PP]) diff --git a/drivers/usb/typec/class.c b/drivers/usb/typec/class.c index 1fb5450c0a2f2..9b9254350733d 100644 --- a/drivers/usb/typec/class.c +++ b/drivers/usb/typec/class.c @@ -655,6 +655,7 @@ typec_register_altmode(struct device *parent, alt->adev.svid =3D desc->svid; alt->adev.mode =3D desc->mode; alt->adev.vdo =3D desc->vdo; + alt->adev.mode_selection =3D desc->mode_selection; alt->roles =3D desc->roles; alt->id =3D id; =20 diff --git a/include/linux/usb/typec.h b/include/linux/usb/typec.h index dbb259d885266..d61ec38216fa9 100644 --- a/include/linux/usb/typec.h +++ b/include/linux/usb/typec.h @@ -155,6 +155,7 @@ struct typec_altmode_desc { /* Only used with ports */ enum typec_port_data roles; bool inactive; + bool mode_selection; }; =20 void typec_partner_set_pd_revision(struct typec_partner *partner, u16 pd_r= evision); diff --git a/include/linux/usb/typec_altmode.h b/include/linux/usb/typec_al= tmode.h index 89b285a4ee7e6..4bde80e4c9b0b 100644 --- a/include/linux/usb/typec_altmode.h +++ b/include/linux/usb/typec_altmode.h @@ -37,6 +37,7 @@ struct typec_altmode { u32 vdo; unsigned int active:1; u8 priority; + bool mode_selection; =20 char *desc; const struct typec_altmode_ops *ops; --=20 2.52.0.457.g6b5491de43-goog