From nobody Sat Oct 4 15:57:14 2025 Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.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 8B09E2309B0 for ; Thu, 14 Aug 2025 18:45:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755197106; cv=none; b=NhbpSHplwwn/aIaT8jKuUsMa6I8JoWF+JheMvPT3kLvRdg55ulFOFnbn8KTOa2M++QMQA+/fGx7PtyWaim7hN/eSQdZhLm8ohEypWXTKybR/GGHPqKJubBY5NJgZ386dv+i12RD9JZZnHjuVF5cLu6BY6FZzdEnQRNlyHA9COa8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755197106; c=relaxed/simple; bh=eUBNjC8QE0qeN7YbjDptuSSINLe1oW6vNYbL6Ks8GS8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EyHfswV/OLDl0CsNnXpmT84MlFIQOrA1g0QZYinFEa1csuZWVeYAf2WNimqQnme/j2vim2NxmgzwB+QtUK9T/Xijxuis7iOfd8FUHD5E2H+hHTdzb18v95G3kyu3f9p4BUed7SC969tyU+YcS/9jr2Hi2kzaoA+USAItirRZXUg= 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=B04Rs5wP; arc=none smtp.client-ip=209.85.218.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="B04Rs5wP" Received: by mail-ej1-f48.google.com with SMTP id a640c23a62f3a-afcb732eee6so232548766b.0 for ; Thu, 14 Aug 2025 11:45:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1755197102; x=1755801902; 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=RR3Vo6gytGVX7qnZsp8KSoWCmMGj6HFPr8g7tZMKrMk=; b=B04Rs5wP3dNwf/b1PwQScMAhfPZPaNuj9yMFcvLsGh5OndXA5aqRTEPZf1kuywUeK8 6c/NKxTza9fa6utr+TQ/AdjCyrSw2c8oS5oj3ZDF906JvNvgoRsl14gJjy+vLLrUOnpA iXKzg05reVn8hMyIGlG5sMp7Qqog7HogB1Qx0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755197102; x=1755801902; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=RR3Vo6gytGVX7qnZsp8KSoWCmMGj6HFPr8g7tZMKrMk=; b=NIIWwLgiIKhhBSIEAMdoKumEdbCopljRzjDfkJQgBGO+3uX2MRKEL70Toxlz0lwByv hHPwvuC1HBq0D8G11YbWCUlai+uKwonMQi9lPhL39litS+Vz0BpBZazzeYCVitRqQqW8 4QeYnL7rQ6JtmYz1MM2NELz91t5QoEHBELk5UGhC7V7UJMIaAodrE88EMoqjYlsuq7Zu 1ecpXH1OzCjU81zrVcl5d8TjY303DKmvwO8tifjW+OR7vkINi8T/7zvVdcKIc2cJpMlu 4g8U+7z3Rfq/4kHzR7b8t0Ez29CrVvfvwEHkEfTPEAJJqlqurr6lAj6nqEsjgLZu2eFh RH4A== X-Forwarded-Encrypted: i=1; AJvYcCVQc0uFXgaVf0MSflrCzEA/CRJ5Pvp4ebIZ9w9Xii7/RVJhoIcXIXslBhYleKJdv5+gWgfqLW7Ccbs5HIY=@vger.kernel.org X-Gm-Message-State: AOJu0YxThxxZ9nzjp1omsKq9Ja70i+Zp5AoYd9ciQjTmZ3fCFyylYrDX neCECQ1zYNQjzzf05M16eUQ5JVRLldxkw3kIkagZSDgOkcnXBU1i8pFScIX02GrTxA== X-Gm-Gg: ASbGncs/7nDyqLeFIbvOR1e+KiPZnRcPUgqdBxZXFvTEA8ipW9ovmnL8PrdaWuWitOS lQCOHY8OcRFzoLZjC5lRGq6o8jwz6mN4raABLmZ2BNRBuu5/lHrCIS+ECAcFIZwBSpWH7AJSXYD ETxFBdc36HMRMcIlfR1Pg5Q9yrjtloH1HydvTjIeKMAPUXjxXQ9KI93egCynSF0SaINeerovo7D AmJeAgJ/M6H0aBT/Q1/WPFb61ypW3zBbF5ke2IzewjKVJOq+YurB6rCnQznhJsCJP860YvJ3DhX rIgPP9qxe3WjEApmtjEipzxoJiwQqgh87nJXSrTiTqa3qkAR9zmD8NgO/8SpMbUpbq92ATfkqMm T7bHrFtW298QDSE8RNb9ubhMKxVcu1XD7ISCf+KnNYAS/lt5TOUH5ZzJBkXW2VlDhRFkKuTCF/9 VaeD1XiiVttQ42 X-Google-Smtp-Source: AGHT+IF+BYCHuUTwdpdjVvLvUjz9fJvW2obdjNL293EGpVlweKHP0tzpD6mVfCW4djoRh1UoGciBdQ== X-Received: by 2002:a17:907:7fa5:b0:ad5:8412:1c9 with SMTP id a640c23a62f3a-afcb996f1aamr380512666b.59.1755197101896; Thu, 14 Aug 2025 11:45:01 -0700 (PDT) Received: from akuchynski.c.googlers.com.com (37.247.91.34.bc.googleusercontent.com. [34.91.247.37]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-af91a21c0f4sm2614772466b.106.2025.08.14.11.45.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 14 Aug 2025 11:45:01 -0700 (PDT) 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" , Venkat Jayaraman , linux-kernel@vger.kernel.org, Andrei Kuchynski Subject: [PATCH v1 1/5] usb: typec: Add alt_mode_override field to port property Date: Thu, 14 Aug 2025 18:44:51 +0000 Message-ID: <20250814184455.723170-2-akuchynski@chromium.org> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog In-Reply-To: <20250814184455.723170-1-akuchynski@chromium.org> References: <20250814184455.723170-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 --- drivers/usb/typec/class.c | 14 +++++++++++--- drivers/usb/typec/class.h | 2 ++ include/linux/usb/typec.h | 1 + 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/drivers/usb/typec/class.c b/drivers/usb/typec/class.c index 67a533e35150..a72325ff099a 100644 --- a/drivers/usb/typec/class.c +++ b/drivers/usb/typec/class.c @@ -459,9 +459,16 @@ static umode_t typec_altmode_attr_is_visible(struct ko= bject *kobj, struct typec_altmode *adev =3D to_typec_altmode(kobj_to_dev(kobj)); =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)) { + struct typec_partner *partner =3D + to_typec_partner(adev->dev.parent); + struct typec_port *port =3D + to_typec_port(partner->dev.parent); + + if (!port->alt_mode_override || !adev->ops || + !adev->ops->activate) + return 0444; + } =20 return attr->mode; } @@ -2681,6 +2688,7 @@ struct typec_port *typec_register_port(struct device = *parent, } =20 port->pd =3D cap->pd; + port->alt_mode_override =3D cap->alt_mode_override; =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..f05d9201c233 100644 --- a/drivers/usb/typec/class.h +++ b/drivers/usb/typec/class.h @@ -80,6 +80,8 @@ struct typec_port { */ struct device *usb2_dev; struct device *usb3_dev; + + bool alt_mode_override; }; =20 #define to_typec_port(_dev_) container_of(_dev_, struct typec_port, dev) diff --git a/include/linux/usb/typec.h b/include/linux/usb/typec.h index 252af3f77039..6e09e68788dd 100644 --- a/include/linux/usb/typec.h +++ b/include/linux/usb/typec.h @@ -304,6 +304,7 @@ struct typec_capability { enum typec_accessory accessory[TYPEC_MAX_ACCESSORY]; unsigned int orientation_aware:1; u8 usb_capability; + bool alt_mode_override; =20 struct fwnode_handle *fwnode; void *driver_data; --=20 2.51.0.rc0.215.g125493bb4a-goog From nobody Sat Oct 4 15:57:14 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 CB25F239E9D for ; Thu, 14 Aug 2025 18:45:04 +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=1755197106; cv=none; b=N2NTeg4V59Qt4CZ3nIaik80JNQfduSgYVI3A3cY/pJrFTwZbMUnoNtWh9TrlM84p/A8T0NYS8wfDa6vA9CWLABtNDBbct5wfyqPMikE7sHemmMwzE5i+jR22ZNXKNyl9qgC97xybyluz+uaTpv4/Tx7nSMS+sK2pgbwZI05AbNg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755197106; c=relaxed/simple; bh=E3gkZiMJy3Qekd4+VwlRIk3WdC/Pz+bTehDrLOXH3ZE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Dtxtx2sx4LzVEQ5ib3Ns0wGosz5wXKopn0GrPnrVE/E/Qq6Z6wcNoyb//w1F/xXSF4emtLHKJvtsTJBKSD+t2TOK7oVbUCivvu9gVnVpGb4B2BkCEEv8aEqFYH3+98suIsgCPxbZhefFAlZGpfWS56F+6ka8zcCBh+6+3MpXCx4= 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=JtFmhMsV; 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="JtFmhMsV" Received: by mail-ej1-f42.google.com with SMTP id a640c23a62f3a-afcb79f659aso196493166b.2 for ; Thu, 14 Aug 2025 11:45:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1755197103; x=1755801903; 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=GuaFAn8mD8lF/OW0DQcqSD5HNRrV4Il3w/RtqwKWzZ4=; b=JtFmhMsVn0wR42xfLk5wFPhpavl/Fqp1ZzbQqgJOtOx+PL9kwc33Izqekd+RyMsl4f +8/LK47jDfM5pJWgD6Rr7KJLekE64dmJ9HLRQ/dEPQo6NAufD1Y4tGrqnvl/UZbtK65R yB2e1bY/L35fVCJKH/A4Bef1N64KZusOCY3SU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755197103; x=1755801903; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=GuaFAn8mD8lF/OW0DQcqSD5HNRrV4Il3w/RtqwKWzZ4=; b=UyYL38Zj1nawxkiN1eGjyHEAjbRo5AlLBK1DRCQxLUwJr9gr0dGp4la6f0PCp9fVoO 2+Vr5K+owOSSbMnB44SAZuZ+gsI5p/EP6nIZtVzCYl8L9uw4sWN+KWwIh2/RTX83vee9 5mGol1gNygudAES8kHMcCIDidpkuGjmClxtNkB8U8i4D5zEowiUH0n4/lxWddrPzPjt8 hHcVlmnb50ydNshkJod+TpvVnObVFwS6EmwJalV/wQ/xTssVs8I7SBull2wdRqrOCvOr bWGqW9CaFHwxXvFExli20UUVvcrddS/FtA7TC2cHZdsKJay2Imz6KCADaiaDNcfX2Wwg 33kQ== X-Forwarded-Encrypted: i=1; AJvYcCUcAOp9ZKcgopMWjheXi28dtSbZEVMwTayzJXw9W9Y2MfIT2BcuBzI/UBU9t1pUyEW5NVt3LHEZ1cFoKzs=@vger.kernel.org X-Gm-Message-State: AOJu0YxOkRR5ntLPJANd277zCH0z/VEhlSifNr095KOzBcVnawPbU2zl heoK6Iy1Ju8Mb/Dzvn4TSMoUcyev2q7s2ZsO3QMvXNSc9e9jrU25vrtcTTEGx13/yw== X-Gm-Gg: ASbGncvyfnd5ki1dDTTW+p5x2bE2Irfj1dQrE86ls/OUmxdjgoBtEevmv+BhZ6a9h+h 8GyHeRur4r+y/YebWP4WTsSkODkLUKs2vESh6RFDnV5UZJWd7OfGPRMmISLCzWauGZsSOXxXExq uk0mgrEUq9AZ1QsFaw2TgLmVdaRWzXIys4BIJCEYKoQlqKM0FwRwwdjeaiBLpYgCIPf0Uh6iukh BiZeP6TUNhtuQPf6rAPSMFvwmXtVWrMlo/RCZAwU7d+lJH44AMX4lt531B28xJi5pCY03QmClL9 lMEjbMqvDNzRnbeMtS/eQFMbf0SkDtA0akrVJhzmW5SDs6y0Z/G0TDhqvYdQ0lHLJQvsi3zha5n t3vkwMY1bnhcD0bzSNcii3uwCaQjJ1HKghNrDsuNiMTTHj262suOKldNKk5AQOZ7HP7XwMTJryI BYIYjaGb1u7QLPSUlhc7+ptR0= X-Google-Smtp-Source: AGHT+IEqCZJqh3teh+GhByw+v1VIC6n/AQos6jbLx57TxiI9cPnPVwtbFarEeGQNwPBfnwrymbSlRw== X-Received: by 2002:a17:907:97d0:b0:af9:2bb9:ea36 with SMTP id a640c23a62f3a-afcb9395356mr407563366b.7.1755197103114; Thu, 14 Aug 2025 11:45:03 -0700 (PDT) Received: from akuchynski.c.googlers.com.com (37.247.91.34.bc.googleusercontent.com. [34.91.247.37]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-af91a21c0f4sm2614772466b.106.2025.08.14.11.45.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 14 Aug 2025 11:45:02 -0700 (PDT) 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" , Venkat Jayaraman , linux-kernel@vger.kernel.org, Andrei Kuchynski Subject: [PATCH v1 2/5] platform/chrome: cros_ec_typec: Set alt_mode_override flag Date: Thu, 14 Aug 2025 18:44:52 +0000 Message-ID: <20250814184455.723170-3-akuchynski@chromium.org> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog In-Reply-To: <20250814184455.723170-1-akuchynski@chromium.org> References: <20250814184455.723170-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 --- 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..99f549263c37 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->alt_mode_override =3D typec->ap_driven_altmode; =20 cros_port->port =3D typec_register_port(dev, cap); if (IS_ERR(cros_port->port)) { --=20 2.51.0.rc0.215.g125493bb4a-goog From nobody Sat Oct 4 15:57:14 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 1AAAA23E32E for ; Thu, 14 Aug 2025 18:45:05 +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=1755197107; cv=none; b=TGMUyl9iD44iS7EzRP3ns9yz/DggezxVo9GrurF9BXvJGrrl5AiesivijXgIyQTEEHbonvBI5GWBlgMqD1dSsFFfYEn1NIDdH1fmzA0XEAsMoli8c8c9Eh7I9dGkjSZPMpxkUs4gwWZJnEllPZkctqy/unfMG273Z8xSbBAfIz4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755197107; c=relaxed/simple; bh=IIWLTCm4iM4o2ycYzWp3RSfJLjwCX7bGklc9T/Y3Grk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pfPQmKv+G2ITg5n4Q28ANLPvs6mM1ncuatT/iFDC1UFIYbZxvc9mIh+IXHYsWeOZF22BN/drtseTM/ATAQhY80kuXHue/0EFaA/W0+s77zVltYVIPFfj2Ysz2Kz1CFX4T/UdwAHm3gf9LmANgQM+JTICTuQj+gOMM7QT05ZboEE= 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=h6aaJ7XJ; 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="h6aaJ7XJ" Received: by mail-ej1-f50.google.com with SMTP id a640c23a62f3a-afcb78fb04cso209138866b.1 for ; Thu, 14 Aug 2025 11:45:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1755197104; x=1755801904; 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=sgWNu/lsijOtg6th5ui9qnvyOY7w+iUxq5UAg/411GA=; b=h6aaJ7XJ7TrWfcHWSnnAY5AATbQNWFemFGrQtm0S2+mP7jwJ5bJS+TMCaptdh1n2F4 D95jO+uhwHsUoQheh7FYKnDEVNBWnmTL895CXDIgeo+fMoPk0ECJISXOqZpF8uilWrdD U9/P0LmHxAit1cqb59q6Ow1KP1jMt6v8dvOLk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755197104; x=1755801904; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sgWNu/lsijOtg6th5ui9qnvyOY7w+iUxq5UAg/411GA=; b=O8hO3rccwqrAYaPZzIeSwxVZX3/INxT0qXaE5lBanq+ygCcTzLNdr6/tJeNXfjd50l bhSqWvMUbT1taq/AzH79syx4QkMIAqbCNvub5eCoND6rQL5L3tLWWeIvF/NBE9NPUNly VvzoQhUNRPg98QpJQm77Nr+aIiF07Ej2BN7FvuN5FzvCywT9vzKD1sCt8IHTGzzX1TJC 8SwimFw3q+FXFKU7p5p+FUvrLrrKW402d9yMHASyYxfsWWh3PMtkRpWc9xYceMIcAKXy oIBoCqeoIWNdzxHxTpGXESGCzmSp5gIuDZ3yicdiXGXVyMREsZEy92qH/HYDheXvT/Lw LC8g== X-Forwarded-Encrypted: i=1; AJvYcCXXJ6U+mO2g9KO/G8yYabtEZGm0IZeBIWmvHYU084CSblHz8q41kXO79lC+2S/tTI702BIYiqdj1+iJCtQ=@vger.kernel.org X-Gm-Message-State: AOJu0YwMN/LKj1C8q71jXyhhwIpK9SC+1rTGOfhXj2jH5UZmSDU7LPnq bQ6/IobpMhtxYZokKTasLV0Kn3aZ8eroclRt4B06+VJm2nDfvBDtXuUCND/ey9erWQ== X-Gm-Gg: ASbGncttDV7y4Uck2dDu5+cTJbtNUf9sTgCwDahRXbfyq9xCWGU/aCOK6YD4gF29yku 9H0bYvYV3+cNOLvColn1YhuShmYzlRMAqQzWuLnKhX+itiP9M4B5xi9Ml4Ri+P3s2zpSqinOnNE ou0hxcRwNaVoJFleHQF+ovcxmPwyqQu/LRpQ9EP4DISE9jkLtd/bwfzlrdl+uE6LSDpTPuyBagy 3M+qNEuNIZ7ga8Oi0qYSnkW1qjLH0Zy3LWI0CJ40PBM1mzM6vAp2QmHKtgosS2lvrJR+k9eoTS6 NYl9UCeV7Ia8bo+KFbr+MVi86pjdQr+w6xdJBTNt+X7YvnMDNhJFzQL8jUdWI9qJj217kcJBwSE vEbZtTZWlpwemXm7mlp3F1suhNd7/D5O3DC27wLMC+vTkxPBXs/qgcSO0k1TWUpS0B/akMzAaTf hQCbJu0ukZs2bd X-Google-Smtp-Source: AGHT+IG7W1HQOHW0+HQd1j2RDcUydykQcA+021giU1BAHPPN8iXToIIj0I2at9PJj19MrWet4LHEkA== X-Received: by 2002:a17:906:7308:b0:ad8:a935:b908 with SMTP id a640c23a62f3a-afcb996e8d9mr387128866b.30.1755197104266; Thu, 14 Aug 2025 11:45:04 -0700 (PDT) Received: from akuchynski.c.googlers.com.com (37.247.91.34.bc.googleusercontent.com. [34.91.247.37]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-af91a21c0f4sm2614772466b.106.2025.08.14.11.45.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 14 Aug 2025 11:45:03 -0700 (PDT) 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" , Venkat Jayaraman , linux-kernel@vger.kernel.org, Andrei Kuchynski Subject: [PATCH v1 3/5] usb: typec: ucsi: Set alt_mode_override flag Date: Thu, 14 Aug 2025 18:44:53 +0000 Message-ID: <20250814184455.723170-4-akuchynski@chromium.org> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog In-Reply-To: <20250814184455.723170-1-akuchynski@chromium.org> References: <20250814184455.723170-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 --- drivers/usb/typec/ucsi/ucsi.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c index 5739ea2abdd1..5ba8b1bc874b 100644 --- a/drivers/usb/typec/ucsi/ucsi.c +++ b/drivers/usb/typec/ucsi/ucsi.c @@ -1616,6 +1616,8 @@ 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->alt_mode_override =3D + !!(con->ucsi->cap.features & UCSI_CAP_ALT_MODE_OVERRIDE); =20 if (ucsi->ops->update_connector) ucsi->ops->update_connector(con); --=20 2.51.0.rc0.215.g125493bb4a-goog From nobody Sat Oct 4 15:57:14 2025 Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (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 28471233149 for ; Thu, 14 Aug 2025 18:45:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755197109; cv=none; b=bYj7XvhmTwzZpZpiPjfoog4rP5VjMzraCy6V3Yb92QyVBbobp9jL5aoCT00MpQDD9ZZM7kajo8d9sTRF84tnpVZnuonvr9fYFmqX+zTIGh8Ce+jXaG4Qz5euD8N0LI/9hw0iuYmK2biiX0A0QWGUR3PZufJWyZIGV0hU3IzvVnM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755197109; c=relaxed/simple; bh=30zjWy/jj97FoKyfLjbsSZTkzTbcjQ4czjm4EU8wGs8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eiw+IZxWM93Rpp/JZn5zv4lo0ouPPdAXUR14neup9tguE6DBEPM5btjH2pLJzrmSLB1qqnTUujUs/ZfAVa2ZeSs+/yVxyQxbJ1iv6APKSoPVeP8ZNrwQabqfKsbLOddGY7WoadzgXLPfsWocj4W2vpRJOnrXfl1cMSFBsHWt+t8= 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=CkGSrXmp; arc=none smtp.client-ip=209.85.218.54 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="CkGSrXmp" Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-afcb732eee6so232559866b.0 for ; Thu, 14 Aug 2025 11:45:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1755197105; x=1755801905; 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=vtcHdgDQ94Hb+lE3OrQOh7GvxJZixH0xu7gYTYaPGEQ=; b=CkGSrXmplqHUXcVQDgIfONVsgNjDIO+jubGbdS2yjZspt2hBlwpRoJg5mQTleqFB2v sHuGqA/zktvMwXextcoJGmBqk0r//nP5C7UdjekzHrvf+89Ko99iCZCLOBvXuknVZvj6 nmE4v3XKeszQ4PVBtZ/69cqv2BJ9VRG2rEh80= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755197105; x=1755801905; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vtcHdgDQ94Hb+lE3OrQOh7GvxJZixH0xu7gYTYaPGEQ=; b=as6AP8EIUf40/9jvLldHQq7E4LWk2nqk77V0f80k71mhW+AHT+6vGjaQPobInlopl5 gQdrJ67a92M+hNaHzCSs9wsB/MaUSZhpb+RPWOw2Zl/eIkZPEx1I0J3n0nKa7hv/nOGc nUuspKbFXrNp5Ndn8kjnWSVxyy17LNuT11qBYBpaWHn5ON6bfAVMbhFxcpTpKMWkyEQ6 XDMjHFFt+j9A+SWy2yBAm5KF6+U2iQrr+ElHFfKzrpjosDacBMhstCXcVwOXAL2bzCao surZ8Z0dcGwl5s4xg1acLhraSdH3YCftCcAoRZ6xZYklwR+SIWEBz37jFO/YuC/7BSGr LUdg== X-Forwarded-Encrypted: i=1; AJvYcCVpzgh35O8acAzMMFOAzIjn6kOApGVejCfveAHSv686v/VuyUFEpBOclCaFcImRfYHhh3qssAWp0A7Vx8o=@vger.kernel.org X-Gm-Message-State: AOJu0Yx3X45N59ItsYSG4rnw8tDjFCeuMb4MYwqFvgeKNVatjDelQvNM eEkwY4j+UuzqxOcAwWQYDNn4ocYuAQBHLvOM62et1EwugkCSOcWnnkuO6QGdbhFP/Q== X-Gm-Gg: ASbGnctzhDe2Lwg6IYPy5eaRNWrDKwo5Tw6qKcQ0+PNAlwK9DpLeW1pwOviPZitOZ/D ONgRdsoIXBcbsmDcjCukhDI++bSEbuJQqviTYsxlXtnEJg7strtiMayNQcIhiPnRBQwCxJ4oUr+ ixRpPGTiJe+uQWhGmdSLHH26Cxnyc9ap+ChBoz86P5da1WYYAkxk5nof4cm+dVazd0oSfo5+kn5 EkqAM0Q/B79AITuQnuX6hSqw2YkkjYznQZy58C2L23vpo1pmWvHBfXCVWWdz1W1FHcnhfSlcWom 0YPadwLX5U3o+Po8VjCvksKxboq90zifcfeHzI1lnEgkKmlmec+uEYy5nniLQqzBTCNhWHrOBUz kwuVpAQZZsc3DlE3xRMvrDq7Q67cbVoixhUl7ghytwk0oJC2sxsgxK+QLrkU45ER3YGPlVS1lA2 7j0GsXBMmJ5j1Z X-Google-Smtp-Source: AGHT+IHoIrfJieVmQqqm3tABVLHMdomEesJIxLp5AlDzkO4kP3URJ9mRpKR3pWGnoYuK6U7MbaKtaA== X-Received: by 2002:a17:907:2d1e:b0:ae3:5368:be85 with SMTP id a640c23a62f3a-afcb990124fmr316622966b.47.1755197105489; Thu, 14 Aug 2025 11:45:05 -0700 (PDT) Received: from akuchynski.c.googlers.com.com (37.247.91.34.bc.googleusercontent.com. [34.91.247.37]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-af91a21c0f4sm2614772466b.106.2025.08.14.11.45.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 14 Aug 2025 11:45:05 -0700 (PDT) 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" , Venkat Jayaraman , linux-kernel@vger.kernel.org, Andrei Kuchynski Subject: [PATCH v1 4/5] usb: typec: Implement alternate mode priority handling Date: Thu, 14 Aug 2025 18:44:54 +0000 Message-ID: <20250814184455.723170-5-akuchynski@chromium.org> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog In-Reply-To: <20250814184455.723170-1-akuchynski@chromium.org> References: <20250814184455.723170-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 APIs to manage the priority of USB Type-C alternate modes. These APIs allow for setting and retrieving a priority number for each mode. 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 --- drivers/usb/typec/Makefile | 2 +- drivers/usb/typec/class.h | 1 + drivers/usb/typec/mode_selection.c | 127 +++++++++++++++++++++++++++++ drivers/usb/typec/mode_selection.h | 8 ++ include/linux/usb/typec_altmode.h | 9 ++ 5 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 drivers/usb/typec/mode_selection.c create mode 100644 drivers/usb/typec/mode_selection.h diff --git a/drivers/usb/typec/Makefile b/drivers/usb/typec/Makefile index 7a368fea61bc..8a6a1c663eb6 100644 --- a/drivers/usb/typec/Makefile +++ b/drivers/usb/typec/Makefile @@ -1,6 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 obj-$(CONFIG_TYPEC) +=3D typec.o -typec-y :=3D class.o mux.o bus.o pd.o retimer.o +typec-y :=3D class.o mux.o bus.o pd.o retimer.o mode_selection.o typec-$(CONFIG_ACPI) +=3D port-mapper.o obj-$(CONFIG_TYPEC) +=3D altmodes/ obj-$(CONFIG_TYPEC_TCPM) +=3D tcpm/ diff --git a/drivers/usb/typec/class.h b/drivers/usb/typec/class.h index f05d9201c233..c6467e576569 100644 --- a/drivers/usb/typec/class.h +++ b/drivers/usb/typec/class.h @@ -82,6 +82,7 @@ struct typec_port { struct device *usb3_dev; =20 bool alt_mode_override; + struct list_head mode_list; }; =20 #define to_typec_port(_dev_) container_of(_dev_, struct typec_port, dev) diff --git a/drivers/usb/typec/mode_selection.c b/drivers/usb/typec/mode_se= lection.c new file mode 100644 index 000000000000..8a54639b86bf --- /dev/null +++ b/drivers/usb/typec/mode_selection.c @@ -0,0 +1,127 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright 2025 Google LLC. + */ + +#include +#include +#include +#include "mode_selection.h" +#include "class.h" + +static const char * const mode_names[TYPEC_ALTMODE_MAX] =3D { + [TYPEC_ALTMODE_DP] =3D "DisplayPort", + [TYPEC_ALTMODE_TBT] =3D "Thunderbolt3", + [TYPEC_ALTMODE_USB4] =3D "USB4", +}; + +static const int default_priorities[TYPEC_ALTMODE_MAX] =3D { + [TYPEC_ALTMODE_DP] =3D 2, + [TYPEC_ALTMODE_TBT] =3D 1, + [TYPEC_ALTMODE_USB4] =3D 0, +}; + +static inline enum typec_mode_type typec_svid_to_altmode(const u16 svid) +{ + switch (svid) { + case USB_TYPEC_DP_SID: + return TYPEC_ALTMODE_DP; + case USB_TYPEC_TBT_SID: + return TYPEC_ALTMODE_TBT; + case USB_TYPEC_USB4_SID: + return TYPEC_ALTMODE_USB4; + } + return TYPEC_ALTMODE_MAX; +} + +/** + * struct mode_selection_state - State tracking for a specific Type-C mode + * @mode: The type of mode this instance represents + * @priority: The mode priority. Lower values indicate a more preferred mo= de. + * @list: List head to link this mode state into a prioritized list. + */ +struct mode_selection_state { + enum typec_mode_type mode; + int priority; + struct list_head list; +}; + +/* -----------------------------------------------------------------------= --- */ +/* port 'mode_priorities' attribute */ + +int typec_mode_set_priority(struct typec_altmode *adev, const int priority) +{ + struct typec_port *port =3D to_typec_port(adev->dev.parent); + const enum typec_mode_type mode =3D typec_svid_to_altmode(adev->svid); + struct mode_selection_state *ms_target =3D NULL; + struct mode_selection_state *ms, *tmp; + + if (mode >=3D TYPEC_ALTMODE_MAX || !mode_names[mode]) + return -EOPNOTSUPP; + + list_for_each_entry_safe(ms, tmp, &port->mode_list, list) { + if (ms->mode =3D=3D mode) { + ms_target =3D ms; + list_del(&ms->list); + break; + } + } + + if (!ms_target) { + ms_target =3D kzalloc(sizeof(struct mode_selection_state), GFP_KERNEL); + if (!ms_target) + return -ENOMEM; + ms_target->mode =3D mode; + INIT_LIST_HEAD(&ms_target->list); + } + + if (priority >=3D 0) + ms_target->priority =3D priority; + else + ms_target->priority =3D default_priorities[mode]; + + while (ms_target) { + struct mode_selection_state *ms_peer =3D NULL; + + list_for_each_entry(ms, &port->mode_list, list) + if (ms->priority >=3D ms_target->priority) { + if (ms->priority =3D=3D ms_target->priority) + ms_peer =3D ms; + break; + } + + list_add_tail(&ms_target->list, &ms->list); + ms_target =3D ms_peer; + if (ms_target) { + ms_target->priority++; + list_del(&ms_target->list); + } + } + + return 0; +} + +int typec_mode_get_priority(struct typec_altmode *adev, int *priority) +{ + struct typec_port *port =3D to_typec_port(adev->dev.parent); + const enum typec_mode_type mode =3D typec_svid_to_altmode(adev->svid); + struct mode_selection_state *ms; + + list_for_each_entry(ms, &port->mode_list, list) + if (ms->mode =3D=3D mode) { + *priority =3D ms->priority; + return 0; + } + + return -EOPNOTSUPP; +} + +void typec_mode_selection_destroy(struct typec_port *port) +{ + struct mode_selection_state *ms, *tmp; + + list_for_each_entry_safe(ms, tmp, &port->mode_list, list) { + list_del(&ms->list); + kfree(ms); + } +} diff --git a/drivers/usb/typec/mode_selection.h b/drivers/usb/typec/mode_se= lection.h new file mode 100644 index 000000000000..69adfcf39d7c --- /dev/null +++ b/drivers/usb/typec/mode_selection.h @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#include +#include + +int typec_mode_set_priority(struct typec_altmode *adev, const int priority= ); +int typec_mode_get_priority(struct typec_altmode *adev, int *priority); +void typec_mode_selection_destroy(struct typec_port *port); diff --git a/include/linux/usb/typec_altmode.h b/include/linux/usb/typec_al= tmode.h index b3c0866ea70f..318858fc7bec 100644 --- a/include/linux/usb/typec_altmode.h +++ b/include/linux/usb/typec_altmode.h @@ -145,6 +145,15 @@ enum { =20 #define TYPEC_MODAL_STATE(_state_) ((_state_) + TYPEC_STATE_MODAL) =20 +#define USB_TYPEC_USB4_SID 0xff00 + +enum typec_mode_type { + TYPEC_ALTMODE_DP =3D 0, + TYPEC_ALTMODE_TBT, + TYPEC_ALTMODE_USB4, + TYPEC_ALTMODE_MAX, +}; + struct typec_altmode *typec_altmode_get_plug(struct typec_altmode *altmode, enum typec_plug_index index); void typec_altmode_put_plug(struct typec_altmode *plug); --=20 2.51.0.rc0.215.g125493bb4a-goog From nobody Sat Oct 4 15:57:14 2025 Received: from mail-ed1-f54.google.com (mail-ed1-f54.google.com [209.85.208.54]) (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 5FB0129D290 for ; Thu, 14 Aug 2025 18:45:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755197110; cv=none; b=ivuXjWeppaznBxmHH+Vp3x6rD72Fq3C0SdFGeOssKdMEhrs26e57aHR6Uhv9QF2P6i9oQWlRdungMXpTkyzUbkzytDWEDi0CBxbdU7uDbnD1qJlI+cL6AuoMDpZ3AiKMreNFvWqPrx1+ksQ9QXLTW7BLznLX+DigaETKqj9QSYE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755197110; c=relaxed/simple; bh=JYJuJJtKbSbwoGNn2vGBU0HeE/q6/qLRN8ZG3a0DukM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Pd7MQwor3/otBz3yfuco6/R1PWC7fPHohCG4bimzD55bTNV0qitXIEbzl7KnwI52LE2j+M1q+Fkb5/MWYdZBqcUYGuHPk1YNcjiCNsoZs+MoVKspfABJVQhp2YjQySkVhJ1MWX5zJ2lVtp/HhMnL4mVxzytud9k1U6qdBE4+a4o= 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=ETowu+CQ; arc=none smtp.client-ip=209.85.208.54 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="ETowu+CQ" Received: by mail-ed1-f54.google.com with SMTP id 4fb4d7f45d1cf-6188b793d21so2018411a12.3 for ; Thu, 14 Aug 2025 11:45:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1755197107; x=1755801907; 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=qG0lIEyNnJu30xpAJGFwUH4NJAVmrpYlXCdXMGkL4NE=; b=ETowu+CQkhF9YTbVDcVyDmgazi+zp4AncQEHJT5XDpYRRFI3WTmluLo+UFRT5yIqJc DY67AG5sgiOuu0ddH9itw40kbMBFxYJZGizhYvtXMKuE9+QPU2wyYuJqQur6WbocGm5N wg89DL8op4agFGWeIypV3P6rAFPHYe0LnmB5k= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755197107; x=1755801907; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qG0lIEyNnJu30xpAJGFwUH4NJAVmrpYlXCdXMGkL4NE=; b=oIgS0HD/7xlJy+lfPCPqIIbZ+bvAKUZatnxfgoeX60///UfcFvBe8aqSzNiCTYZOh6 wn9VjCnHNS4kbE9d7Q0BId+tiDDuv6xizEsHJSI1onWVZ/eRFfQYGZ5RxFtVlCV9yOwl t0joGHnNP+PoiwczV1lMiNax7KFpkdCY6WvhKK7Oc/g5QHAEBUr/9X/OkGxCoPJjvvRt 3dOa+Nigz+eoa0RFIQBLVuJGZ6643YRvXX2vkKvjmZSwGvGMo4lYex4hfyDiOZ86s3mt 9Gnm6QW8K9FBERmEF8R0Cc/0OlA1y7n3bYeEM4xMiURGXnB1ph4y+4dlpG3Wc+q8bNAR lJMA== X-Forwarded-Encrypted: i=1; AJvYcCXKXh3POqdmLkYqIu5Knz2TpTjWrl3oUafO1PJqV8pQr6pFAEvjYFcl5D5mvdXLou54j6Esaqm71sZNtyo=@vger.kernel.org X-Gm-Message-State: AOJu0YzvTrvP2goaBitQVBVfHHmbZzNUzDMcCNyhmDBNQcuU4y72ux8o xWvwEBOEzwb/IPNVJRKIE9T8mOS1XJVA2Nddmz/MBgmz69qaqF2JDUKy8DWPaHRoYQ== X-Gm-Gg: ASbGncuzOUy+bvRZRr514kHgB/Gfvwwc7Kmta4BdHGYATp7/coGaC14x+NHhSGhbjHi OHyMSNxsTBT0hi2JpBksArEcZq2bCQuKwS16Mw4CJhr+0wENQggsKpE646IGjs2E3/d1W8UAu0x zUM6LhawN0HpjIASESpLTD6q1UEUKeSw7xTpHfgCSJzNg1kxazffvfq4gbyVTq9ilF6rmTP2S+Q JF7wvh2DVMHand2u6uQhRO7J6u1/Ms9WZ6Lhzv/HB0yxIVcDTRHduIvrZREA8wpqTEOD4EFQ0zi evQPE4iIyYOPE/okdGDLNVPTetAUmKt7zspT9jYEgTB3CjTCpUhvGvPShwKXs9PabI7uxG5N8qD z3QHlYEOPO57ld3ZXwdQYkJGWeG5riuH4DkI+DhVv9Q+ZLSFTJfjZ4KsNNOJrv5p0MGxZhDffiQ vPpLzMl2ObCUwsF8Z3TDPzirGCSJhEK+VAuQ== X-Google-Smtp-Source: AGHT+IF5+9Rm5CQWAnwcUIzR8+1SMRvn/532XJx42aw5G3W3xEpn8yRTB8aPidZXpklreIMFUWH/CA== X-Received: by 2002:a17:907:6d12:b0:af9:3ad2:6930 with SMTP id a640c23a62f3a-afcb97cb1f3mr385072666b.24.1755197106660; Thu, 14 Aug 2025 11:45:06 -0700 (PDT) Received: from akuchynski.c.googlers.com.com (37.247.91.34.bc.googleusercontent.com. [34.91.247.37]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-af91a21c0f4sm2614772466b.106.2025.08.14.11.45.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 14 Aug 2025 11:45:06 -0700 (PDT) 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" , Venkat Jayaraman , linux-kernel@vger.kernel.org, Andrei Kuchynski Subject: [PATCH v1 5/5] usb: typec: Expose alternate mode priority via sysfs Date: Thu, 14 Aug 2025 18:44:55 +0000 Message-ID: <20250814184455.723170-6-akuchynski@chromium.org> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog In-Reply-To: <20250814184455.723170-1-akuchynski@chromium.org> References: <20250814184455.723170-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. Signed-off-by: Andrei Kuchynski --- Documentation/ABI/testing/sysfs-class-typec | 12 ++++++ drivers/usb/typec/class.c | 47 ++++++++++++++++++++- 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/Documentation/ABI/testing/sysfs-class-typec b/Documentation/AB= I/testing/sysfs-class-typec index 38e101c17a00..001202d651fa 100644 --- a/Documentation/ABI/testing/sysfs-class-typec +++ b/Documentation/ABI/testing/sysfs-class-typec @@ -162,6 +162,18 @@ 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 alt-mode. + When read, it shows the current integer priority value. Lower numerical + values indicate higher priority (0 is the highest priority). + 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. + This attribute is visible only if the kernel supports mode selection. + 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 a72325ff099a..708f3487222a 100644 --- a/drivers/usb/typec/class.c +++ b/drivers/usb/typec/class.c @@ -19,6 +19,7 @@ #include "bus.h" #include "class.h" #include "pd.h" +#include "mode_selection.h" =20 static DEFINE_IDA(typec_index_ida); =20 @@ -445,11 +446,41 @@ svid_show(struct device *dev, struct device_attribute= *attr, char *buf) } static DEVICE_ATTR_RO(svid); =20 +static ssize_t priority_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t size) +{ + unsigned int val; + int err =3D kstrtouint(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) +{ + int val; + const int err =3D typec_mode_get_priority(to_typec_altmode(dev), &val); + + if (err) + return err; + + return sprintf(buf, "%d\n", val); +} +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 @@ -458,7 +489,7 @@ static umode_t typec_altmode_attr_is_visible(struct kob= ject *kobj, { struct typec_altmode *adev =3D to_typec_altmode(kobj_to_dev(kobj)); =20 - if (attr =3D=3D &dev_attr_active.attr) + if (attr =3D=3D &dev_attr_active.attr) { if (!is_typec_port(adev->dev.parent)) { struct typec_partner *partner =3D to_typec_partner(adev->dev.parent); @@ -469,6 +500,15 @@ static umode_t typec_altmode_attr_is_visible(struct ko= bject *kobj, !adev->ops->activate) return 0444; } + } else if (attr =3D=3D &dev_attr_priority.attr) { + if (is_typec_port(adev->dev.parent)) { + struct typec_port *port =3D to_typec_port(adev->dev.parent); + + if (!port->alt_mode_override) + return 0; + } else + return 0; + } =20 return attr->mode; } @@ -2029,6 +2069,7 @@ static void typec_release(struct device *dev) typec_mux_put(port->mux); typec_retimer_put(port->retimer); kfree(port->cap); + typec_mode_selection_destroy(port); kfree(port); } =20 @@ -2496,6 +2537,8 @@ typec_port_register_altmode(struct typec_port *port, to_altmode(adev)->retimer =3D retimer; } =20 + typec_mode_set_priority(adev, -1); + return adev; } EXPORT_SYMBOL_GPL(typec_port_register_altmode); @@ -2645,6 +2688,8 @@ struct typec_port *typec_register_port(struct device = *parent, port->con.attach =3D typec_partner_attach; port->con.deattach =3D typec_partner_deattach; =20 + INIT_LIST_HEAD(&port->mode_list); + if (cap->usb_capability & USB_CAPABILITY_USB4) port->usb_mode =3D USB_MODE_USB4; else if (cap->usb_capability & USB_CAPABILITY_USB3) --=20 2.51.0.rc0.215.g125493bb4a-goog