From nobody Tue Dec 2 00:26:37 2025 Received: from mail-ej1-f50.google.com (mail-ej1-f50.google.com [209.85.218.50]) (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 26D023002DE for ; Mon, 24 Nov 2025 12:46:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763988410; cv=none; b=ejsAGEscP+O+zFBrxmdTzMtcqAQzV6HS02Vc4wPYrHm5VNDaLOYci/B99Z50t733Lht4MXlRDn4VaJTBJBuch9clAFzEn6zWYRNZoKiFuc5TztdRt29HYR1gRIXfeXj0+fto5sSpJS0+fyQu/OuzZlUVmwcEsC1EYEEczwr0Vfw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763988410; c=relaxed/simple; bh=fxEbaz6w0uMCGJivWLfG+scyIrw8SEt71KrJ1bqrzW8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qw5YGZE1Tw6ndjOmBfdGrf5ZRNbcoYaQV5HWoCNfAqKNGYnoKS25cB/cRtHrVY0KAW+eJu3uAsqtIAia4PNyKC/iZ2rHtM8uzRVjr+pQJdrgXm3VEi64f9w6Bj8kFU0D/XANNIYeFI6VGH65aiXnE6ffJDp4GawEFBVbM/cplNo= 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=jCewDmK6; arc=none smtp.client-ip=209.85.218.50 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="jCewDmK6" Received: by mail-ej1-f50.google.com with SMTP id a640c23a62f3a-b7291af7190so620780366b.3 for ; Mon, 24 Nov 2025 04:46:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1763988406; x=1764593206; 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=MnwvCDgrr4841IDmxQlulqzHQNtUVlEwFIhs0bIly3A=; b=jCewDmK6wy7OcmPCyDr7gUfwKzJMuOgt3+V/t3CKBZGA61adXuCCv+/BB7akbNqY8t FogPSceo0Cs2FXXEvK5rRtAPPCznPTFt+yCifJVVJd19tYIy8irsrvhjzDS791anbOM0 4sbunm4yQL35SAPmm2Qzquen7QpT0oMAmeung= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763988406; x=1764593206; 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=MnwvCDgrr4841IDmxQlulqzHQNtUVlEwFIhs0bIly3A=; b=krn0vXbDpXQAiriuuro2aJgxcDTqm4WKrzpzaOtK6lhoeOWwRdb3jTKt1WAl4KrH5H RcAa/55uxYQHMpew45nRT8JlxtyX27A61RyP+1PG2D91y8HZJbAKXUA9Ls6nUXTHJ0/3 ENur4ZKpjdnf2wMMO+qWmeXDJ21S/sxHVhZF3XaIl3MELfRUwsvdBDZ4Z7RCO/1ysyzA XsOCNRk0eQbK/WVT3HX8G2ToQbWGQWBzeIc5zMQ+B5Zdn1e9zw6M/3mdhhlzMo4uOI3u dDB5+6NnaykJFv0dGZtF2zk1LkXWX9NWb2aLIFTDh16Vix8raFw+612V2h2RT0tpSyVO ANkQ== X-Forwarded-Encrypted: i=1; AJvYcCVzDnNjVvEAuXrmIR/9t+UzcTFqpxTPWuKyK3kBF/uDF9DRBT1h+OoXvqZljpzLhh9ObvEqeXCpmWAScMg=@vger.kernel.org X-Gm-Message-State: AOJu0YzIBxQ70TxS/Llp9Ar+To7rKddW04F99pjZU5wpOpLZqIwffxeE uxynfy7HAdjGA3eRJSrokIKUaL3tuGYsaKPEkMKr186itjo/Tifd28hN1cvS298mYA== X-Gm-Gg: ASbGnctr4+6v8MJc5WdeZFjKPiJpzRXVVt9B12p7xGri6j+jc7o0sW2p0oqsnTI4BcT HUjVpIttMh6XKdLrSjQoBN6sdM/d3ff6cFVGCPauqab09TBx9tIOB4dQ00lf+MxMD8e8hKgfNUQ NNAZywUzqmU7L07FYaI64YdFt7luwpkY84aEPYx43Hs1YJIT4IipGZMVjDznjt56G7btZGRQouG 3+rsXJLFrSCVbmRzDWho0LlVRfU9mk1MMXuc/JT7ONQ3Vuk5c3aA+c8VEDp9RLcedhlu63edNaV bIy0k0LRJ+zWXsYJLtCF1wRXhPtVVMaE5euYoiLrgPMKZt5DRclYqdIzqcFjecBoSBaPIk8OI3b fs8e06GLIqBXhRbgQr/Z8MuvllnjPFK6UksVZ1Z8bd0usfFeaRfGkr86cp8ar647t2BAPeLLcyF Gik+xvBhG/UB6fjAKf4Pt4w1EhJqSaQDLA7PL4u0JXVI5YCOKWBwVEMIf8xNOI7QoX/bBfDvdlO oHMM/8sXp8= X-Google-Smtp-Source: AGHT+IEBkgh8AVlO5hu3L84i66IimEV3HBFW93RnnCjQGKAdtwiKbIMtcj0XYTbEpogMfTr251MMCA== X-Received: by 2002:a17:907:3cc5:b0:b71:51b:bd4c with SMTP id a640c23a62f3a-b767170c7dbmr1109856466b.50.1763988406487; Mon, 24 Nov 2025 04:46:46 -0800 (PST) Received: from akuchynski.c.googlers.com.com (224.138.204.35.bc.googleusercontent.com. [35.204.138.224]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-64536460ea9sm13342599a12.35.2025.11.24.04.46.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Nov 2025 04:46:45 -0800 (PST) From: Andrei Kuchynski To: Heikki Krogerus , Abhishek Pandit-Subedi , Benson Leung , Jameson Thies , Tzung-Bi Shih , linux-usb@vger.kernel.org, chrome-platform@lists.linux.dev Cc: Guenter Roeck , Greg Kroah-Hartman , Dmitry Baryshkov , "Christian A. Ehrhardt" , Abel Vesa , Pooja Katiyar , Venkat Jayaraman , linux-kernel@vger.kernel.org, Andrei Kuchynski Subject: [PATCH v5 1/4] usb: typec: Add mode_control field to port property Date: Mon, 24 Nov 2025 12:46:36 +0000 Message-ID: <20251124124639.1101335-2-akuchynski@chromium.org> X-Mailer: git-send-email 2.52.0.rc2.455.g230fcf2819-goog In-Reply-To: <20251124124639.1101335-1-akuchynski@chromium.org> References: <20251124124639.1101335-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" This new field in the port properties dictates whether the Platform Policy Manager (PPM) allows the OS Policy Manager (OPM) to change the currently active, negotiated alternate mode. Signed-off-by: Andrei Kuchynski Reviewed-by: Heikki Krogerus Reviewed-by: Benson Leung --- drivers/usb/typec/class.c | 9 ++++++--- drivers/usb/typec/class.h | 1 + include/linux/usb/typec.h | 2 ++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/usb/typec/class.c b/drivers/usb/typec/class.c index 9b2647cb199b..a5327e444265 100644 --- a/drivers/usb/typec/class.c +++ b/drivers/usb/typec/class.c @@ -457,11 +457,13 @@ static umode_t typec_altmode_attr_is_visible(struct k= object *kobj, struct attribute *attr, int n) { struct typec_altmode *adev =3D to_typec_altmode(kobj_to_dev(kobj)); + struct typec_port *port =3D typec_altmode2port(adev); =20 if (attr =3D=3D &dev_attr_active.attr) - if (!is_typec_port(adev->dev.parent) && - (!adev->ops || !adev->ops->activate)) - return 0444; + if (!is_typec_port(adev->dev.parent)) { + if (!port->mode_control || !adev->ops || !adev->ops->activate) + return 0444; + } =20 return attr->mode; } @@ -2694,6 +2696,7 @@ struct typec_port *typec_register_port(struct device = *parent, } =20 port->pd =3D cap->pd; + port->mode_control =3D !cap->no_mode_control; =20 ret =3D device_add(&port->dev); if (ret) { diff --git a/drivers/usb/typec/class.h b/drivers/usb/typec/class.h index db2fe96c48ff..2e89a83c2eb7 100644 --- a/drivers/usb/typec/class.h +++ b/drivers/usb/typec/class.h @@ -62,6 +62,7 @@ struct typec_port { struct mutex partner_link_lock; =20 enum typec_orientation orientation; + bool mode_control; struct typec_switch *sw; struct typec_mux *mux; struct typec_retimer *retimer; diff --git a/include/linux/usb/typec.h b/include/linux/usb/typec.h index 309251572e2e..59d5fd7e4ff4 100644 --- a/include/linux/usb/typec.h +++ b/include/linux/usb/typec.h @@ -287,6 +287,7 @@ enum usb_pd_svdm_ver { * @prefer_role: Initial role preference (DRP ports). * @accessory: Supported Accessory Modes * @usb_capability: Supported USB Modes + * @no_mode_control: Ability to manage Alternate Modes * @fwnode: Optional fwnode of the port * @driver_data: Private pointer for driver specific info * @pd: Optional USB Power Delivery Support @@ -304,6 +305,7 @@ struct typec_capability { enum typec_accessory accessory[TYPEC_MAX_ACCESSORY]; unsigned int orientation_aware:1; u8 usb_capability; + bool no_mode_control; =20 struct fwnode_handle *fwnode; void *driver_data; --=20 2.52.0.rc2.455.g230fcf2819-goog From nobody Tue Dec 2 00:26:37 2025 Received: from mail-ej1-f42.google.com (mail-ej1-f42.google.com [209.85.218.42]) (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 5AEDA30149C for ; Mon, 24 Nov 2025 12:46:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763988412; cv=none; b=uApID/QKXJ1jIgcE5pgMbnZUt3PXFA90gr9sch2BZySStyQw22wXgMypF6apKVatDHIcsvPy4kWI95FOed/ZMhGK+M9i7VvabEM1zDgRPNB797QoNP7NnbBx1V7rkeMUPTvMgVylimztmpvoUB4erTzpsLW+QpIRvtCrbzyCAfY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763988412; c=relaxed/simple; bh=AfTRfVR6FqansvGC0ZbCDHLMi4UPrZY5zWFqtR4JCOQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jo53LWpBMeSd+G4kyxMpLsexybR52ZtW9N/3DIpOJgir550UuPahif9ovQAmjxrKelNSFTnoNG/VYyA2kt/yc0QVhQQb4z6prNtmSQq1xgMyWWnlNDGMjRYbV6k6PtPs0QLfkDw+FBdOEGmSSWpZsO0lzw1y5uFLst/DApwJDHo= 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=mKy0tklM; arc=none smtp.client-ip=209.85.218.42 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="mKy0tklM" Received: by mail-ej1-f42.google.com with SMTP id a640c23a62f3a-b736d883ac4so784459766b.2 for ; Mon, 24 Nov 2025 04:46:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1763988409; x=1764593209; 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=KcNKygSH663Cq7ccIPy1yee59jsF3OcZatBL8KE+sKc=; b=mKy0tklM/B5hYBaAEyhadolxZZyUkU3GKokRmKC6rqo1QIJ+wGw8Xx8wqMWv5uUmmz XIobtGFsyJrDxL+hhlxc9HuxsjPsruhI6ByBan/rqA4vLHdCXN2zZfEFeWvmsld9kt+v Ymq16iGtBYpNW8GCR3BY/QW4C8PIdRdXkyCjU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763988409; x=1764593209; 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=KcNKygSH663Cq7ccIPy1yee59jsF3OcZatBL8KE+sKc=; b=W3SnVPAUuxvQ4wbs1RsCfZAnefFmaXLXmKE2aOhVZofokioNqJv8oL2FbfT0E1ouJD K90EnPfuO2NCw/CxTYKrc9zDcjql2bV+zDK0vK2/emsWXc5XzROq3R0ZPtPcO6ZYH98a 9SjlX1i7gCBzjfNELePfK+70NRdnqzJa68EZwuDqLdk+oHOeTo8IhtRiU5ppp9J38tAb e/fcspG6xpY0XW8vxskI3iDN9z9cgEY95nLx3NRZ8RU5pKniJBts8mNbuQf6gf/5C2M4 n3jT+JO8ROHSD36znCVPLjcR2sxuzFVA4bZp2B7H3sWoLzj1zU/FUNxZxOBOWKHCTC+1 kjxQ== X-Forwarded-Encrypted: i=1; AJvYcCWFnW0CuYvcdtiCeEqmXLpSFlSzlhwF/bjOxHjw3QAIkKwygCKMyitgLYQkTcgiuOVYXa/FfwQm9gdp5+w=@vger.kernel.org X-Gm-Message-State: AOJu0Yxj6nVgF5p9bb7JD+0aT1AqiY2+WQwQOttqok1AyNxntGi5kY7Z DR7IyuY9zbDTZux/wv53KUB/JS5MyB1P4P3t9n9Uz/VwBUJ5pqp1/57pbwU+dyNpHg== X-Gm-Gg: ASbGncv5Y7PsPe3lU01GUY/CabfLP0jQHYfj7RLYS6ITiurtsx7Gz4HjtR52janpVKB frXIsDXOm4/jcHQUi2nm3RloK+r7NAsWhUQuzOnt4acRICkWqeNuPsObLz5XkOlLjnmor6VWQkI E+rZ1gKdojlCUqE3oHWrI45/YUmZHUBVBybP8wwvxwbi+gM+qJEiTOurDFm3MgKv8JRv1iSCCc5 9ogpzWMxmIk40llMHGi9WDb4bWfw82tTcuO7zOHXSYHJssLp6fCc6q59BR/IKOsybnnDiQ+PPBE OGsTn56e0J6f/KcglWHNr2puuLRUCOpZ4Slv2bY+IUkkakGECVyNJ5liwHP1z1BaQC+dg7+YMaH WU2P/H7OsrTujw+KDhuLIwL1+QELtnWZINcnAY1T8ldQBDOlYyg7cPhX59vkkGoc0vu6Blpaep/ M+rqAdT2zgmR2JA/bu2yrzu2EDpqmNg9WdUlVdaHSBkB3Fgal5mXXbGcN4tCFIyjIb/P1T3iFh5 +EQ0czs2XY= X-Google-Smtp-Source: AGHT+IE4LIQdRqEDZF6wZq0Q+W5lQArq5CFAWkZqHjvIypeEj3xstLPCx4WOLYpXdzHH0SS1oqU1nA== X-Received: by 2002:a17:906:fa0c:b0:b76:8077:4eaa with SMTP id a640c23a62f3a-b7680774fecmr698118466b.6.1763988408735; Mon, 24 Nov 2025 04:46:48 -0800 (PST) Received: from akuchynski.c.googlers.com.com (224.138.204.35.bc.googleusercontent.com. [35.204.138.224]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-64536460ea9sm13342599a12.35.2025.11.24.04.46.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Nov 2025 04:46:48 -0800 (PST) From: Andrei Kuchynski To: Heikki Krogerus , Abhishek Pandit-Subedi , Benson Leung , Jameson Thies , Tzung-Bi Shih , linux-usb@vger.kernel.org, chrome-platform@lists.linux.dev Cc: Guenter Roeck , Greg Kroah-Hartman , Dmitry Baryshkov , "Christian A. Ehrhardt" , Abel Vesa , Pooja Katiyar , Venkat Jayaraman , linux-kernel@vger.kernel.org, Andrei Kuchynski Subject: [PATCH v5 2/4] platform/chrome: cros_ec_typec: Set no_mode_control flag Date: Mon, 24 Nov 2025 12:46:37 +0000 Message-ID: <20251124124639.1101335-3-akuchynski@chromium.org> X-Mailer: git-send-email 2.52.0.rc2.455.g230fcf2819-goog In-Reply-To: <20251124124639.1101335-1-akuchynski@chromium.org> References: <20251124124639.1101335-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" This flag specifies that the Embedded Controller (EC) must receive explicit approval from the Application Processor (AP) before initiating Type-C alternate modes or USB4 mode. Signed-off-by: Andrei Kuchynski Reviewed-by: Heikki Krogerus Acked-by: Tzung-Bi Shih Reviewed-by: Benson Leung --- drivers/platform/chrome/cros_ec_typec.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/platform/chrome/cros_ec_typec.c b/drivers/platform/chr= ome/cros_ec_typec.c index b712bcff6fb2..c0806c562bb9 100644 --- a/drivers/platform/chrome/cros_ec_typec.c +++ b/drivers/platform/chrome/cros_ec_typec.c @@ -491,6 +491,7 @@ static int cros_typec_init_ports(struct cros_typec_data= *typec) =20 cap->driver_data =3D cros_port; cap->ops =3D &cros_typec_usb_mode_ops; + cap->no_mode_control =3D !typec->ap_driven_altmode; =20 cros_port->port =3D typec_register_port(dev, cap); if (IS_ERR(cros_port->port)) { --=20 2.52.0.rc2.455.g230fcf2819-goog From nobody Tue Dec 2 00:26:37 2025 Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) (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 959C23019B5 for ; Mon, 24 Nov 2025 12:46:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763988414; cv=none; b=DiUnhb+AY7m+dXDd25Wa9YWsEiA+8k0LexsI3Zo8D+he1HwvbThLs4DBp4Eu951eIPvJz9EbvoJ9004cN717PjihmHlT6dqR2Aty2E2wuxjOigB6OhAsOfJhu4T8iRwCJgSSXcHbqHd9uwn8x2R0icT7TKaFoNiX52b12sTuhdY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763988414; c=relaxed/simple; bh=WiqBNXOl3cRjaCJAYVsy21ddsz+svXl8bRrhWSOeHSU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SkIkF4eM5/0Z/MepqftNw/aa4+HXlVzaKGywy0W9JSUv3+pweQ09BlvBIept8XpYtCFBDPCjl+OBpJokRlzAjapDpDy3mwyXclgLn/zL3SEVHUH+8E/q0jXwAVjxjuxDjh9R9C3Rzu1M0qD8hqviqP4x4JUnfHLTvSf1ByrUm5A= 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=dc6VnD0W; arc=none smtp.client-ip=209.85.208.48 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="dc6VnD0W" Received: by mail-ed1-f48.google.com with SMTP id 4fb4d7f45d1cf-640c6577120so7424503a12.1 for ; Mon, 24 Nov 2025 04:46:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1763988411; x=1764593211; 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=20W+VePrDZCUNpW6oks/2DqF0UJGlQouxoOcp4kUQPw=; b=dc6VnD0WJeNYTYvaDihdVjyiBRiWbI4wM1cEhyi7qCUUwG56Iz25W5lWDqjiTrJngg uoBZC/D6Uw57KuI7PNoUtPq1aTSr2Xui2HjYsvotsp+W4mJHDeah4OzBgTxyoBtNt+2/ vhfUZTzFyePlh4PnahJWfN8g0p0iOZZMKD+tw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763988411; x=1764593211; 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=20W+VePrDZCUNpW6oks/2DqF0UJGlQouxoOcp4kUQPw=; b=ZqsrF/8DoNRNTwfNd9hDFc/gFf7pnOyEztzMoN9QA/YUVTkUxzMoZTWh2E0XTNNbag LRuACqFnWJb64UsSWI3DV7Vb6H8pcK9xk5QUdXMrw8g9gY2s67Idz1x/Za59A/kThJAh zd4kxHFSsMT/8/xaTBF8+UnCFwhSJYJbctiMm9iu2iK8NftcfW5hTgV3IF3BkrSzFkNs CnQTMaD+zgRwRPnkdF2UEYhTopSXvjesSLO+fF3mroPXTWyOIhhoaHr1aKfGmP56qBh1 mFKUF6nT7KD195PtbSV77p9m9jlAAARNGpu3qA2F+xyobKM5o2BtAZSVJLPrvicG7iG0 3LUA== X-Forwarded-Encrypted: i=1; AJvYcCXtaFQpoVXJkgMax/+P0pLE5zVOehtM9ZR8DWGGhghwGdo3dxCv6rqt3DY1U0WIsoSQy9SXWQDFeikE/xw=@vger.kernel.org X-Gm-Message-State: AOJu0YyO/oGELrPUuZ4cwBBAMJxamCrPCUgswmTIC4I/rLMFfYc43SYM lwtynWZqyZHS7zIXTxibdEdZz2J6u0JvM4ASbxCqRZEzjrGkqPnssGlH1G/vtdbgiA== X-Gm-Gg: ASbGnctefUDOvK9FjCeeFZs7j3qiIRM59ajw/fWcInuZSnCljYwLR5iZy2EiDlc8CAE NQi9tQ2n/yExGZ5SyJcwM4jD3kjdIVcI9vZj8+KaqgQPnPb2uZPOC2jQgCv6Ci6gSlu58Of21W2 XYn0CHm3ESjmw0uGnY5N+dfSiCr1EKqobhoWhKQumP2hg8w9PYHQtKI2B7BclpSJ9sQUrLolmQo vmJOyNdXmodXSTlZj8HEJArCNCWQtCx868CyCedruyFWUlLnYvSoG8YGdkSx4cPfGysXuH5ksGa rRGs6ScfWMRgJczgCmqip4RIBH30FA1cDjQlFut5A6Ku5+SblvOxqhQYVdlwvrj06wSjb1f5sbp jLtbCuxcT+4GttdUJWKFMDHaUYGPDhgzvc53OhxyLCTvA9Cnsm6eET4upe0lis0esLOGyRGLeqU c6jb2JNe5Kpqr2+FAEuFu/+xaHwtlfC1s091hPOGh2Vk/HTbxXqvYL0yF6/maWK7rc941I0WNya Xml+Ge69rg= X-Google-Smtp-Source: AGHT+IFBc5f43ZGu6GEElbBrb99VGVIcJ0+CIqsv4BCyTkBuMMbiuLeutPFKmbIx7Sw8GvAwIvAE3A== X-Received: by 2002:a05:6402:3246:20b0:640:c640:98c5 with SMTP id 4fb4d7f45d1cf-6455469d112mr8681807a12.34.1763988410986; Mon, 24 Nov 2025 04:46:50 -0800 (PST) Received: from akuchynski.c.googlers.com.com (224.138.204.35.bc.googleusercontent.com. [35.204.138.224]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-64536460ea9sm13342599a12.35.2025.11.24.04.46.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Nov 2025 04:46:50 -0800 (PST) From: Andrei Kuchynski To: Heikki Krogerus , Abhishek Pandit-Subedi , Benson Leung , Jameson Thies , Tzung-Bi Shih , linux-usb@vger.kernel.org, chrome-platform@lists.linux.dev Cc: Guenter Roeck , Greg Kroah-Hartman , Dmitry Baryshkov , "Christian A. Ehrhardt" , Abel Vesa , Pooja Katiyar , Venkat Jayaraman , linux-kernel@vger.kernel.org, Andrei Kuchynski Subject: [PATCH v5 3/4] usb: typec: ucsi: Set no_mode_control flag Date: Mon, 24 Nov 2025 12:46:38 +0000 Message-ID: <20251124124639.1101335-4-akuchynski@chromium.org> X-Mailer: git-send-email 2.52.0.rc2.455.g230fcf2819-goog In-Reply-To: <20251124124639.1101335-1-akuchynski@chromium.org> References: <20251124124639.1101335-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" This flag indicates that the PPM allows the OPM to change the currently negotiated alternate mode using the SET_NEW_CAM command. Signed-off-by: Andrei Kuchynski Reviewed-by: Benson Leung --- drivers/usb/typec/ucsi/ucsi.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c index 9b3df776137a..82c3efd72639 100644 --- a/drivers/usb/typec/ucsi/ucsi.c +++ b/drivers/usb/typec/ucsi/ucsi.c @@ -1700,6 +1700,7 @@ static int ucsi_register_port(struct ucsi *ucsi, stru= ct ucsi_connector *con) =20 cap->driver_data =3D con; cap->ops =3D &ucsi_ops; + cap->no_mode_control =3D !(con->ucsi->cap.features & UCSI_CAP_ALT_MODE_OV= ERRIDE); =20 if (ucsi->version >=3D UCSI_VERSION_2_0) con->typec_cap.orientation_aware =3D true; --=20 2.52.0.rc2.455.g230fcf2819-goog From nobody Tue Dec 2 00:26:37 2025 Received: from mail-ed1-f43.google.com (mail-ed1-f43.google.com [209.85.208.43]) (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 D47D6303A04 for ; Mon, 24 Nov 2025 12:46:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763988416; cv=none; b=VLiKttydBJolFs0xGSabBDD/3ivZECaP01jY9KyGGQVru8NQtdj5ejeksDUpDXSuImx+tgIOeViAbmoTTYyQXDxqGbzYaT/VBfX+S7V32wtA5i20mwcR66bmHS+qFtQQ5dwNHcmcTM1CIfbaV8NotY7xpggPIiXyE6kvB4Nvrks= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763988416; c=relaxed/simple; bh=ZcWRPSvnJY7j9sksuKnADdwDhkWT5l383JVkKi48Y4A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gW12jrf1Ns+u6nUe3s+DmSRn7sjGdg4gqmaC70vPwsSFVZB3XqUh5gmXoV0kB9YYlap/nmyF+lklQ3uuGKT4eRmnUugjnJA2YMeLk3lzMYp7FwrPs/wbcB7d6G73xq/cZOFzLQb+qPI6M4cTZm433RPZKySXNsNSkmZOtDswmXE= 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=JVkuaqrt; arc=none smtp.client-ip=209.85.208.43 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="JVkuaqrt" Received: by mail-ed1-f43.google.com with SMTP id 4fb4d7f45d1cf-640ca678745so7075095a12.2 for ; Mon, 24 Nov 2025 04:46:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1763988413; x=1764593213; 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=+tksLNCM9hMN6EA+LRxmgTQx4fghasKcuZYm2c3+N8w=; b=JVkuaqrtODvaUwGJgAO0HPOUNap9RmXpJluCO6w+k4HMPc7gWOJb7G722EJNrTw2Ip 4nyxGF90iNj8KJb4drruzTwJwruiCm+OJLe5iLA3m+GfKw4WzkFtX5q7s1LbUaak1p0v 3y+Aoo5IAWVAGfpXBr+BtIPkrzjYBF91njHqk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763988413; x=1764593213; 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=+tksLNCM9hMN6EA+LRxmgTQx4fghasKcuZYm2c3+N8w=; b=ModjCvA5tapoMYHcPWLYteRCFR/81Mh+MJ7AV76MW2iAfcfVGib4vR/d//7y+rRklH SzQKUg/bKcIlYxqceYrUz9ylJR8BsjeNqx98C5oLfQHCsDQzCX+MHe1ht8Rn4VfA/SH9 NtY7/1HVJVuIEcAX4D4GLlED8pNtmaCCCWV463QngpWy74QFjayi5R58TCdSaAInW3tL pHKxTm0nMT0sSGwXYCzQy6eXbeWWUsxWVs1fDsLapJLUvkDV2iuDut0ghI7PWfRoKque 39q/XlsKWXi0+l0CBUnJWB1MBWn9fadD9zZdsbVQaDH15RAcnIfVnsJlYHG3aEQlb3hU 6QUQ== X-Forwarded-Encrypted: i=1; AJvYcCVlHvkr4i3zU/7NhAU/AXyjf6jXRn8drkDUb3lP/N0+/6skI4KbnCer2mr3xapQIjxRMEqV1gFauatYemE=@vger.kernel.org X-Gm-Message-State: AOJu0YzGCn0d3QE/5Q0rUf7ZQc1Z+MZcnaZpuIyybvbe3C25WrRP/8el +B2Rk1ibNBcv45EBAK1Ea/Lcj8y1lo66LdSkApMCS8DhQ3emM9RUZOSBi87AIsmMww== X-Gm-Gg: ASbGncsM5FV5Ocmq/MN4Bx2AL23In2XHbsrdU4ufIGALpZs86SPv95aAzPqWJDR2T2u SsOn99OTsAoDoKL3OcovQBOtX1CmY5OAat0wUEb2NYrIJ/z8P0eqy5HiZfT0sxGWW93lMyVcmn1 WqfLoZP3jurrkpKZhYlsDxNCblnW0Y4tL4evpwC+deImMe00wGHjPRuTUS58tNMmlCu8zQqQv/h 2n90T26sFHGrX7FfitilzYBVvkwtJxHesccZ60aMLsOjTZkU+DkEIVsnrRSGfJSzUxqrkyYCRdm jTSy+NfNKutd7Hyy84XGkazuCutecItdeKQwfAHo6KhCAm6aws7PrqawzHjYEycPKb3g/mg93Sz GHHKURMHVbDauYrjvW09xHm878HYiNELUILDqKUhthfuCXMS6rJH3c4z1SH5YytfCXXt4qBnlUG xaVD+vFkJkr/rstAGyAwoxYrNgxf9AgMCOWPpVrIIL5xxXHJOjJfIzPol92AitJZY82njAh8WYO rsy5/uv/0c= X-Google-Smtp-Source: AGHT+IEfcpbzsOCnT/x6NbrGmqhHYN1EwoeFU1i5kVHhF/kjyV0FZnqLTamKpVXxQGhmoo7XnU917g== X-Received: by 2002:a05:6402:13ce:b0:640:947e:70ce with SMTP id 4fb4d7f45d1cf-64555b85acamr10495350a12.5.1763988413169; Mon, 24 Nov 2025 04:46:53 -0800 (PST) Received: from akuchynski.c.googlers.com.com (224.138.204.35.bc.googleusercontent.com. [35.204.138.224]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-64536460ea9sm13342599a12.35.2025.11.24.04.46.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Nov 2025 04:46:52 -0800 (PST) From: Andrei Kuchynski To: Heikki Krogerus , Abhishek Pandit-Subedi , Benson Leung , Jameson Thies , Tzung-Bi Shih , linux-usb@vger.kernel.org, chrome-platform@lists.linux.dev Cc: Guenter Roeck , Greg Kroah-Hartman , Dmitry Baryshkov , "Christian A. Ehrhardt" , Abel Vesa , Pooja Katiyar , Venkat Jayaraman , linux-kernel@vger.kernel.org, Andrei Kuchynski Subject: [PATCH v5 4/4] usb: typec: Expose alternate mode priority via sysfs Date: Mon, 24 Nov 2025 12:46:39 +0000 Message-ID: <20251124124639.1101335-5-akuchynski@chromium.org> X-Mailer: git-send-email 2.52.0.rc2.455.g230fcf2819-goog In-Reply-To: <20251124124639.1101335-1-akuchynski@chromium.org> References: <20251124124639.1101335-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" This patch introduces a priority sysfs attribute to the USB Type-C alternate mode port interface. This new attribute allows user-space to configure the numeric priority of alternate modes managing their preferred order of operation. If a new priority value conflicts with an existing mode's priority, the priorities of the conflicting mode and all subsequent modes are automatically incremented to ensure uniqueness. Signed-off-by: Andrei Kuchynski Reviewed-by: Benson Leung --- Documentation/ABI/testing/sysfs-class-typec | 11 +++ drivers/usb/typec/class.c | 90 ++++++++++++++++++++- include/linux/usb/typec_altmode.h | 1 + 3 files changed, 101 insertions(+), 1 deletion(-) diff --git a/Documentation/ABI/testing/sysfs-class-typec b/Documentation/AB= I/testing/sysfs-class-typec index 38e101c17a00..737b76828b50 100644 --- a/Documentation/ABI/testing/sysfs-class-typec +++ b/Documentation/ABI/testing/sysfs-class-typec @@ -162,6 +162,17 @@ Description: Lists the supported USB Modes. The defaul= t USB mode that is used - usb3 (USB 3.2) - usb4 (USB4) =20 +What: /sys/class/typec///priority +Date: July 2025 +Contact: Andrei Kuchynski +Description: + Displays and allows setting the priority for a specific alternate mode. + The priority is an integer in the range 0-255. A lower numerical value + indicates a higher priority (0 is the highest). + If the new value is already in use by another mode, the priority of the + conflicting mode and any subsequent modes will be incremented until they + are all unique. + USB Type-C partner devices (eg. /sys/class/typec/port0-partner/) =20 What: /sys/class/typec/-partner/accessory_mode diff --git a/drivers/usb/typec/class.c b/drivers/usb/typec/class.c index a5327e444265..049d1829be98 100644 --- a/drivers/usb/typec/class.c +++ b/drivers/usb/typec/class.c @@ -445,11 +445,88 @@ svid_show(struct device *dev, struct device_attribute= *attr, char *buf) } static DEVICE_ATTR_RO(svid); =20 +static int increment_duplicated_priority(struct device *dev, void *data) +{ + if (is_typec_altmode(dev)) { + struct typec_altmode **alt_target =3D (struct typec_altmode **)data; + struct typec_altmode *alt =3D to_typec_altmode(dev); + + if (alt !=3D *alt_target && alt->priority =3D=3D (*alt_target)->priority= ) { + alt->priority++; + *alt_target =3D alt; + return 1; + } + } + return 0; +} + +static int find_duplicated_priority(struct device *dev, void *data) +{ + if (is_typec_altmode(dev)) { + struct typec_altmode **alt_target =3D (struct typec_altmode **)data; + struct typec_altmode *alt =3D to_typec_altmode(dev); + + if (alt !=3D *alt_target && alt->priority =3D=3D (*alt_target)->priority) + return 1; + } + return 0; +} + +static int typec_mode_set_priority(struct typec_altmode *alt, const u8 pri= ority) +{ + struct typec_port *port =3D to_typec_port(alt->dev.parent); + const u8 old_priority =3D alt->priority; + int res =3D 1; + + alt->priority =3D priority; + while (res) { + res =3D device_for_each_child(&port->dev, &alt, find_duplicated_priority= ); + if (res) { + alt->priority++; + if (alt->priority =3D=3D 0) { + alt->priority =3D old_priority; + return -EOVERFLOW; + } + } + } + + res =3D 1; + alt->priority =3D priority; + while (res) + res =3D device_for_each_child(&port->dev, &alt, + increment_duplicated_priority); + + return 0; +} + +static ssize_t priority_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t size) +{ + u8 val; + int err =3D kstrtou8(buf, 10, &val); + + if (!err) + err =3D typec_mode_set_priority(to_typec_altmode(dev), val); + + if (!err) + return size; + return err; +} + +static ssize_t priority_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return sysfs_emit(buf, "%u\n", to_typec_altmode(dev)->priority); +} +static DEVICE_ATTR_RW(priority); + static struct attribute *typec_altmode_attrs[] =3D { &dev_attr_active.attr, &dev_attr_mode.attr, &dev_attr_svid.attr, &dev_attr_vdo.attr, + &dev_attr_priority.attr, NULL }; =20 @@ -459,11 +536,15 @@ static umode_t typec_altmode_attr_is_visible(struct k= object *kobj, struct typec_altmode *adev =3D to_typec_altmode(kobj_to_dev(kobj)); struct typec_port *port =3D typec_altmode2port(adev); =20 - if (attr =3D=3D &dev_attr_active.attr) + if (attr =3D=3D &dev_attr_active.attr) { if (!is_typec_port(adev->dev.parent)) { if (!port->mode_control || !adev->ops || !adev->ops->activate) return 0444; } + } else if (attr =3D=3D &dev_attr_priority.attr) { + if (!is_typec_port(adev->dev.parent) || !port->mode_control) + return 0; + } =20 return attr->mode; } @@ -2484,6 +2565,7 @@ typec_port_register_altmode(struct typec_port *port, struct typec_altmode *adev; struct typec_mux *mux; struct typec_retimer *retimer; + int ret; =20 mux =3D typec_mux_get(&port->dev); if (IS_ERR(mux)) @@ -2502,6 +2584,12 @@ typec_port_register_altmode(struct typec_port *port, } else { to_altmode(adev)->mux =3D mux; to_altmode(adev)->retimer =3D retimer; + + ret =3D typec_mode_set_priority(adev, 0); + if (ret) { + typec_unregister_altmode(adev); + return ERR_PTR(ret); + } } =20 return adev; diff --git a/include/linux/usb/typec_altmode.h b/include/linux/usb/typec_al= tmode.h index f7db3bd4c90e..2c3b6bec2eca 100644 --- a/include/linux/usb/typec_altmode.h +++ b/include/linux/usb/typec_altmode.h @@ -28,6 +28,7 @@ struct typec_altmode { int mode; u32 vdo; unsigned int active:1; + u8 priority; =20 char *desc; const struct typec_altmode_ops *ops; --=20 2.52.0.rc2.455.g230fcf2819-goog