From patchwork Sat Jun 21 18:12:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 899026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 63CD4269880 for ; Sat, 21 Jun 2025 18:14:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750529658; cv=none; b=oBaz1V1c5G9gRmnxu8jlEB+jsRSr/lgTruOpEuj3u2ES+HcGVE0DWUzkn5WUhErk1ZHz/4HzknYmOldPS0/EVEvhlBxUIArayeDQorahT2c5ZBTf626dxy8LV6HLshweRdGZrNAlHY/XTw+JYgIjSLACUlI+bqmwkNcA0f2Pwbs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750529658; c=relaxed/simple; bh=dSQFGNWG/Zf26SyfOt589O9Vx61eV+28LRkpnswAKEg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TgEmzIVgTdweus1NGmgT7ez7oTpEihXdaYzLtnNERRsr8Hh1n5XkbkkdUKBAAeP8bkyCLxlUnL/3/sFMlk6ETy+hyxKbsnVNMYSzOD8RJ24aiHhX33EarlGsy1qL/y0N/gybxvyZ6/2UNBLsEzEWMQSbC5lGcsx/da4YSNyA0Vc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=oA3Ww1VI; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="oA3Ww1VI" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 55LHpbbW027514 for ; Sat, 21 Jun 2025 18:14:16 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= bcQ/uB31Z3cDOfD3eWsCLPpsYTWEx+9S9C+nOkqBYN0=; b=oA3Ww1VIz1cpKZBe eTPM1nXYt16Hh2oYYoOKjy+sWt13kCla5iloWldXzSlUU5RnFFegMLiH0FxM/KVF 8QTHeo4phR7rONv3mwUKY/nkhjG9xq8X3MUmp+GPy5pEAKQdYaHYu/2KyxIw/4Dn 1If83H1hDgHpxClV84RvR3rIxctIjqpk5OwafT0U0YCPK5Y8MJ1krpHhgQm4qacE SqeGdeyWvr3ACHh4sCMHlsVh5gc3gtgD8MHKAtv+NWBHfZzm3Np1ExwBl+T0WKqF tWQckPZ1L1uDcYc5ZqvqMcd6N8aKsmzwJ9JFAqE1hy2CyKlU6tFk6jNpba4r+YG1 E6pDyw== Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 47dyjhg54n-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Sat, 21 Jun 2025 18:14:16 +0000 (GMT) Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-7c760637fe5so425668285a.0 for ; Sat, 21 Jun 2025 11:14:15 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750529655; x=1751134455; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=bcQ/uB31Z3cDOfD3eWsCLPpsYTWEx+9S9C+nOkqBYN0=; b=AJR0Gsv57nF87JuaEyHGJc+E4lb4ynYL/yGIV0kjiW+tvhoqclOFlRdHxR0ABtZLaa ZDc11iU1h7E/neU9rWVQjE4uiGxz4qTODsUrtrEpDSFejLzf41UYimsKmDx73fDPGHhU 0erC+dIB+7q/Zzto6BWEFsxtJKt55EVSQhvEbzODnUJUPhdqAmlQZR66ebpcXLr81hr9 oVPvQQKT3End6SxJfkotIIRhDA3SwlFBLHy4QmK/8S8w9X/bAMcP2dRASjA9Ssj253ws 4oa2zecn8cIrRlGArMalgDyPlgoE0cvKv0bm6GGF/MbD37OLyMuma57Nix/x5JpY9s6W uFCA== X-Gm-Message-State: AOJu0YyFdsEzjM91LuT47t2tHbD3dZFXPvYfIeaBw2F+ty6tERu4V4IY 3n8RYdIjIkmOiZSnXN5snKdo/tOMooDoIJT9YSkzw5BiKDvHE+gtwCMBLckh2vOtP6ejAVFDXp8 T+Rl3Zej6DSV2N1IuZI09AkZRM1RAekaCogb/xWAKl0DDAmvaqInCj7Oh4gFCYRY= X-Gm-Gg: ASbGnctOIaTS+qperaiz3YJXcOryIKKoEFz2uaHWPdCnBmM6Q80b15Tqea4uf64T7Nr CM51kgA41RpiSPoJS3QAzGsxz6XxuV8/Czk95kRs8e5YSWL0JeHCHpT+99o5H7UM4i566yTzBvq 9ggNkhhCDIZDQGDvO14riWhQ8vam6n11ABCxQhbW0gI26QsIrdnuWyu6pxwDIGSKLqB32muxjfk 9I7xmxw5tolEv1Yy6seludRhFm+rFiFcywHCf6C6IbAt4E7BGFzKbyy59FhBvxGc05Boh89fng9 w2hmki41eZCOI2JzNq/PxZOEpbyEFr5fyU282x+2pdjvIiKara4F+XC9cWl8cQDZvfA8J9p0rnL FQJJQ9AOSi3jzp7NwlmiXxwdZNEIG92UiCCg= X-Received: by 2002:a05:620a:29d2:b0:7ca:c9cb:ab1 with SMTP id af79cd13be357-7d3f98c77e6mr1102347185a.7.1750529655173; Sat, 21 Jun 2025 11:14:15 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE9y42uVOGByHIC2CBh6Ap0nz7GpIfl5u/D03eThzuzRkDRz+TR/dzqSjl234RVIJ6r6Kel8Q== X-Received: by 2002:a05:620a:29d2:b0:7ca:c9cb:ab1 with SMTP id af79cd13be357-7d3f98c77e6mr1102343785a.7.1750529654719; Sat, 21 Jun 2025 11:14:14 -0700 (PDT) Received: from umbar.lan (2001-14ba-a0c3-3a00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a0c3:3a00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-553e414cf36sm752336e87.86.2025.06.21.11.14.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 21 Jun 2025 11:14:13 -0700 (PDT) From: Dmitry Baryshkov Date: Sat, 21 Jun 2025 21:12:56 +0300 Subject: [PATCH 1/8] usb: typec: ucsi: yoga-c630: fix error and remove paths Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250621-c630-ucsi-v1-1-a86de5e11361@oss.qualcomm.com> References: <20250621-c630-ucsi-v1-0-a86de5e11361@oss.qualcomm.com> In-Reply-To: <20250621-c630-ucsi-v1-0-a86de5e11361@oss.qualcomm.com> To: Heikki Krogerus , Greg Kroah-Hartman , Bryan O'Donoghue , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Bjorn Andersson , Konrad Dybcio Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1645; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=dSQFGNWG/Zf26SyfOt589O9Vx61eV+28LRkpnswAKEg=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBoVvZyR3x2JVzH9HD3TQI4ofjUDHoHGx3Andr9b pMKv6svuPKJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCaFb2cgAKCRCLPIo+Aiko 1dNyB/4xVhi2i3qRu/UXloyqlOmjwZXkfGnQKJA19/28sTSvZSmYqkUwVjPR+rlBYXeD5ri+W+z hpgtM7ZFzm8FtToy6XwR/eDi6EA0ruS5wNCJ7GzXmcaI7+YwjBIyK5UDMMx8RdQ7RTYxBJ0Olhw ISyiLrr3hhXrHUb/hiRDI4igTussRWtKuK9hMUQ/4IB+4Fj5uN4/NcgbUkMzp6PYInoxS4WrKmX xP2ji4GdYqxa2FPbejzIiysLYe/qmiu3ih/2P7g9sS0W2Y05BTcDO7ckpjrUAZ7QJqyQx3Rdin5 yklMXFcRY3QBW6pBERSfc79DHn0vzzRalx9ozwzEj8aZyo4N X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-ORIG-GUID: kpfjndtRtQqtL4QPHZcpnfSa2RC79m1W X-Authority-Analysis: v=2.4 cv=f9pIBPyM c=1 sm=1 tr=0 ts=6856f678 cx=c_pps a=50t2pK5VMbmlHzFWWp8p/g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=6IFa9wvqVegA:10 a=EUspDBNiAAAA:8 a=6GRmOlDtAtgjFoD-o_4A:9 a=QEXdDO2ut3YA:10 a=IoWCM6iH3mJn3m4BftBB:22 X-Proofpoint-GUID: kpfjndtRtQqtL4QPHZcpnfSa2RC79m1W X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNjIxMDExNSBTYWx0ZWRfX8DQIK/XvQGhF CxdfFXSDgL/0klsdyI820RrGPtBgqLi7LPAvcJzMAeYg45Db77YLrcMoylQ4wgLxQIgAHQXrfNQ zqdVdMIU9qLLYwl2QW/ARSYzzbrOemXNB7vFh0TDpxQgm9WdxYmWmN77Wa3yj5j9UWBmf/5MuFw pGcTedApQB1pJK0z+VJXJj0O+SO6MXKjEe+rD+auCR3ixjvhfD9vTjytVo1lym7HZVb1KXl1KxP b+GqtdETnMFltlycT8ZZ2J4TT/mlYVjyTeJ+K+Wu6m+mgcGzV4XSvR8fN7MZNl+kmliKpsT2De8 zlCK59pFhQLzrhjA2QLgL82IhUOhHfLuLjyqXjfFkPoMKo1Y6Ac/M3J9lVHE/VEP2I48FT8Zliv IRZRmK8Do+1bswlmzxbr4ikd+NsjLp4+QP4cK8L14QJg7y6YqyNmUmOsLUOL8Qq0F/82j2kz X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-06-21_06,2025-06-20_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 priorityscore=1501 adultscore=0 suspectscore=0 clxscore=1015 mlxscore=0 mlxlogscore=999 lowpriorityscore=0 impostorscore=0 malwarescore=0 phishscore=0 spamscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2506210115 Fix memory leak and call ucsi_destroy() from the driver's remove function and probe's error path in order to remove debugfs files and free the memory. Also call yoga_c630_ec_unregister_notify() in the probe's error path. Fixes: 2ea6d07efe53 ("usb: typec: ucsi: add Lenovo Yoga C630 glue driver") Signed-off-by: Dmitry Baryshkov --- drivers/usb/typec/ucsi/ucsi_yoga_c630.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/drivers/usb/typec/ucsi/ucsi_yoga_c630.c b/drivers/usb/typec/ucsi/ucsi_yoga_c630.c index d33e3f2dd1d80f7b49d9c5e7355fb14a97c74dd5..47e8dd5b255b2b306dd9c3d6ac8c3b896954981a 100644 --- a/drivers/usb/typec/ucsi/ucsi_yoga_c630.c +++ b/drivers/usb/typec/ucsi/ucsi_yoga_c630.c @@ -133,17 +133,30 @@ static int yoga_c630_ucsi_probe(struct auxiliary_device *adev, ret = yoga_c630_ec_register_notify(ec, &uec->nb); if (ret) - return ret; + goto err_destroy; + + ret = ucsi_register(uec->ucsi); + if (ret) + goto err_unregister; + + return 0; - return ucsi_register(uec->ucsi); +err_unregister: + yoga_c630_ec_unregister_notify(uec->ec, &uec->nb); + +err_destroy: + ucsi_destroy(uec->ucsi); + + return ret; } static void yoga_c630_ucsi_remove(struct auxiliary_device *adev) { struct yoga_c630_ucsi *uec = auxiliary_get_drvdata(adev); - yoga_c630_ec_unregister_notify(uec->ec, &uec->nb); ucsi_unregister(uec->ucsi); + yoga_c630_ec_unregister_notify(uec->ec, &uec->nb); + ucsi_destroy(uec->ucsi); } static const struct auxiliary_device_id yoga_c630_ucsi_id_table[] = { From patchwork Sat Jun 21 18:12:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 899185 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E59BC26FA4B for ; Sat, 21 Jun 2025 18:14:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750529660; cv=none; b=lUsC3OmHk3Fmefum5iz7zFznMdtPBH6s1LFJ8+XprJmM/8S4dwpr1ltmp4Wz41DPKhTmPLbCx8M84LczpFPAhcqTb3hn2LFSieWZS6OEERBDPYO8yPOPDkJcz6uUyLmbtzYPO2o+1zspFpDTORobTIXLQ5D+U14wl8SofrTxMX8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750529660; c=relaxed/simple; bh=X82NT0To0cHHxEVthOIl3cobJlSNDagM+IRg4TmYzKc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=D0poxP1UXfkvDmDZPs3Eos/46KN9Pe4GQ1Fm7TkGWYmOWRdXs7rlRnFrihQ5LoutQHQULnFfcr9FPVoVVMuXEVCZ3DJpF6T7Z2DHo2Mzu6WbNIqS538yzLU2fE6atlf1cmLGnnHc491gAYSdLFqbLF2EgLIt2ZbMoWW9pVuBCR4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=EiXymH2y; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="EiXymH2y" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 55LHnASA012184 for ; Sat, 21 Jun 2025 18:14:18 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= avdnB+hgZU9bp52v1KCtyf6jWRUeqQMF8YsHerstNhY=; b=EiXymH2yfLB9uYE0 2rLUx8XLym0Pl2pwFuYUS9CPeR+QTHWDr3zaqWWM4oBPANCun9pSU+VszDB+Z5tI 32wGlZq5F29yJLFcLYn9rNkHpK3V6Fz3cxy7GYsC5J/181KpWDZzJejHHzFzeGGr 0L0xAVB6KBkXowqkkNHNgeB69p+wYbGyrCGoKPKZ+EgekpSy0GPvd7sur7I6jX6k Rj8Ai4L/ybEgoMxT0tM41BlVeOnZbsqNWcStd9ADUSlKricsun/iQmRhPKa6TtAy aPg8luqwvVPyBJz3joXneqO5aw3o6xiTzYf0m3Lvn5rft0bp/+WcGN+7BkHsNk6N TDme/g== Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 47ducj0ep2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Sat, 21 Jun 2025 18:14:17 +0000 (GMT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-7c790dc38b4so462046485a.0 for ; Sat, 21 Jun 2025 11:14:17 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750529657; x=1751134457; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=avdnB+hgZU9bp52v1KCtyf6jWRUeqQMF8YsHerstNhY=; b=u7UUt4y+GqILw2DsexGM7rGN4BikvihvfxwJOm//RuGaGszhd6yEB3F9iO0tTV4CSZ 4ijbz4o0b5A+ifGPJXVPm91i0QkkoJE/PzADTOmnbN4biiLE7zq+VUP8oIqqdW3GWDC9 0KX/V/2bG2PON5Ql96CRfq+ALxYA8vysbA2JiGXP+7P1cevZjOxI/LJ8nezLrZhCwVzp ewU3tg+dSgGHDzF9wjfw8xI/c6yqJ02UkcRBa51BgHLCrpMV/jjtnjutyyYj1c6NwNK2 B3K79MeCnZRI4nBbaMYLb7Y8aErQUlPqNmKgK3QvbRMu0nqyjJZ89hlcxnh41cZPrFfD i6Qw== X-Gm-Message-State: AOJu0YzSsQ3H8Ihmv9n3kfDm9wCnRGakLo6TuppHqEqSo+0GsgSHAHvp FcAurtnuIWBMAKVConB3YCLHjyYb48aKk3mL+Kek2Thu37sBkAmyIfgOxkUEPYVgjxbCAgmGl/E QuoACBSe41ZzpC7CeB2F6359SIt7PL842lWzpbXK1J0dgZPZ3DCmY4jzrmGvFN5k= X-Gm-Gg: ASbGncuxrHL0dfUsmB+LBdrKHFdzWXRFijiff0Mj4LKEoP96qvaiUraCqUbwsje7Zvd lyfGIyJ0YN+I70xdUXYNIcu3NEiX1jGtnAqRDYrCNhtZDjcPL52Y/hDsM3JKONG7hjFNFBMF/9S ccD/O/7D7RlGPJEjIirwijSDNSMNmaXXwTvMHTS1rXkJSk8Ia8hee+hWYa1FdUIKhk2T41fl74j C8fUGnFnMP2FE+KvkUTfAhpFD+s1QlqxIwsR88RqNcAY2efgDPRgMhYuBlegxraeh4QTogq4KvD 7pLG76pZr7uHElfBxla6ulIuYr1v27yCoed9As4tZP0hDZpEzZH7rwwu+/Zk1z2gomq7URRJ7La bNch6irmLw0s9oCnxjhsIxCxvAgZ6mOPC+kQ= X-Received: by 2002:a05:620a:17a1:b0:7d3:acfa:de46 with SMTP id af79cd13be357-7d3fc0560cfmr791242985a.21.1750529656832; Sat, 21 Jun 2025 11:14:16 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFrCCipgLc+IJfwkcgPlL/s5L64oH8qO7m3lUECqimODLjYk4FQkVFIcnMxqeDLNaXnR2l5NA== X-Received: by 2002:a05:620a:17a1:b0:7d3:acfa:de46 with SMTP id af79cd13be357-7d3fc0560cfmr791240485a.21.1750529656379; Sat, 21 Jun 2025 11:14:16 -0700 (PDT) Received: from umbar.lan (2001-14ba-a0c3-3a00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a0c3:3a00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-553e414cf36sm752336e87.86.2025.06.21.11.14.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 21 Jun 2025 11:14:15 -0700 (PDT) From: Dmitry Baryshkov Date: Sat, 21 Jun 2025 21:12:57 +0300 Subject: [PATCH 2/8] usb: typec: ucsi: add recipient arg to update_altmodes() callback Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250621-c630-ucsi-v1-2-a86de5e11361@oss.qualcomm.com> References: <20250621-c630-ucsi-v1-0-a86de5e11361@oss.qualcomm.com> In-Reply-To: <20250621-c630-ucsi-v1-0-a86de5e11361@oss.qualcomm.com> To: Heikki Krogerus , Greg Kroah-Hartman , Bryan O'Donoghue , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Bjorn Andersson , Konrad Dybcio Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3071; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=X82NT0To0cHHxEVthOIl3cobJlSNDagM+IRg4TmYzKc=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBoVvZyrcF9ULbQVUsBpsvflMQvumIJQN8uUjujx ol4kEFWh2aJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCaFb2cgAKCRCLPIo+Aiko 1UIQB/9zdlNNR3KBaDfKW01XEjTdzJ8V2naxLu8sdm+UKjdlYij6WoovE4TdJ4SFbfAHfCFFfk1 3SnqbRf2zjM3irQ68anQQoEsX9ehyNBatJFeL6y4WaH2LDyhaipwNxq1vGTbYRqIvoegKlKwOvx Lc//d31F8Ggjy9c7rajuN5Tt4Dsu/92kIN06dfEZa0uhRYZWrO1arc0FT1N4zygvHaEUgBn86Ku rtNFNgTmdKuGXi6jdmoqWxpVhJNZgm38+5JMsyCUpl6j3RbpIPeHNZyw1iqEbGhNDnS1W9EMSNC SYCkTZO1KS2fxkQgsPcEH8IC+fn1xhIGlyFc+8CMW49xd+0J X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNjIxMDExNSBTYWx0ZWRfXwcZhIdU4K2+k ZG765KJyhsHQNFME1JpefRDZkQMF0CYI4CvN09CjO2oXriDmDOAopFFFF8Cl/gVFGkETR2wAFwF 8687RtTKUaNFTpGRRIVRCMUq8MItFpsmFLfqEPBZq69b8CmOIm6kC6LbrQd2DqqqZNiNccafiDk gYRFZ9Plvh47RrMLXciIg+3v8rrG4yqgOzib3f9SGvDZv2eqL9aNcwyHXGaSlJo9TsU6rIBrsdH lYCeJWxd1MLZX1CZCuqm5FltmgYJ1KLUZsUw8hIWQg3s9F+L4RKCzIJLoVcRmQ9lYRNPQGbcKzg ptSnsMGZ/x2sHF/WORcCqsBcI+3cz7Umd4PCJzONA+8ltmF2flNDFcYrDMCoTWsHybUm2imU6bF W2KB3tAK7qV5RvYtziLa3MHliuu5bQDChGpyIGK36x4+OqKG9cK2lq/4eDXLm2hfsjasijLS X-Authority-Analysis: v=2.4 cv=MPdgmNZl c=1 sm=1 tr=0 ts=6856f679 cx=c_pps a=HLyN3IcIa5EE8TELMZ618Q==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=6IFa9wvqVegA:10 a=EUspDBNiAAAA:8 a=E64p1VqjvP21rIaO_JEA:9 a=QEXdDO2ut3YA:10 a=bTQJ7kPSJx9SKPbeHEYW:22 X-Proofpoint-GUID: oPCXcxe907KP-SSfi6XTe1OgdIKNxyRC X-Proofpoint-ORIG-GUID: oPCXcxe907KP-SSfi6XTe1OgdIKNxyRC X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-06-21_06,2025-06-20_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 clxscore=1015 impostorscore=0 mlxscore=0 phishscore=0 priorityscore=1501 suspectscore=0 spamscore=0 lowpriorityscore=0 malwarescore=0 mlxlogscore=999 adultscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2506210115 The update_altmodes() is executed only for connetor's AltModes, because that's what required on the CCG platforms. Other platforms (like Lenovo Yoga C630) requires similar fix for partner's AltModes. Extend update_altmodes() callback to accept the recipient as an argument and move corresponding check to the CCG UCSI driver. Signed-off-by: Dmitry Baryshkov --- drivers/usb/typec/ucsi/ucsi.c | 5 ++--- drivers/usb/typec/ucsi/ucsi.h | 3 ++- drivers/usb/typec/ucsi/ucsi_ccg.c | 4 ++++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c index 01ce858a1a2b3466155db340e213c767d1e79479..e913d099f934c7728cb678fc8e21e75ab0a00cce 100644 --- a/drivers/usb/typec/ucsi/ucsi.c +++ b/drivers/usb/typec/ucsi/ucsi.c @@ -531,13 +531,12 @@ ucsi_register_altmodes_nvidia(struct ucsi_connector *con, u8 recipient) * Update the original altmode table as some ppms may report * multiple DP altmodes. */ - if (recipient == UCSI_RECIPIENT_CON) - multi_dp = ucsi->ops->update_altmodes(ucsi, orig, updated); + multi_dp = ucsi->ops->update_altmodes(ucsi, recipient, orig, updated); /* now register altmodes */ for (i = 0; i < max_altmodes; i++) { memset(&desc, 0, sizeof(desc)); - if (multi_dp && recipient == UCSI_RECIPIENT_CON) { + if (multi_dp) { desc.svid = updated[i].svid; desc.vdo = updated[i].mid; } else { diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h index 5a8f947fcece29f98c0458f9eb05c0c5ede2d244..d02f6a3e2f50a4044eb3f22276931017cc624532 100644 --- a/drivers/usb/typec/ucsi/ucsi.h +++ b/drivers/usb/typec/ucsi/ucsi.h @@ -82,7 +82,8 @@ struct ucsi_operations { int (*sync_control)(struct ucsi *ucsi, u64 command, u32 *cci, void *data, size_t size); int (*async_control)(struct ucsi *ucsi, u64 command); - bool (*update_altmodes)(struct ucsi *ucsi, struct ucsi_altmode *orig, + bool (*update_altmodes)(struct ucsi *ucsi, u8 recipient, + struct ucsi_altmode *orig, struct ucsi_altmode *updated); void (*update_connector)(struct ucsi_connector *con); void (*connector_status)(struct ucsi_connector *con); diff --git a/drivers/usb/typec/ucsi/ucsi_ccg.c b/drivers/usb/typec/ucsi/ucsi_ccg.c index e9a9df1431af3a52c00cc456f5c920b9077a1ade..d83a0051c737336af2543fc2f6d53a131ffe9583 100644 --- a/drivers/usb/typec/ucsi/ucsi_ccg.c +++ b/drivers/usb/typec/ucsi/ucsi_ccg.c @@ -394,6 +394,7 @@ static void ucsi_ccg_update_get_current_cam_cmd(struct ucsi_ccg *uc, u8 *data) } static bool ucsi_ccg_update_altmodes(struct ucsi *ucsi, + u8 recipient, struct ucsi_altmode *orig, struct ucsi_altmode *updated) { @@ -402,6 +403,9 @@ static bool ucsi_ccg_update_altmodes(struct ucsi *ucsi, int i, j, k = 0; bool found = false; + if (recipient != UCSI_RECIPIENT_CON) + return false; + alt = uc->orig; new_alt = uc->updated; memset(uc->updated, 0, sizeof(uc->updated)); From patchwork Sat Jun 21 18:12:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 899025 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 628EB26FDA5 for ; Sat, 21 Jun 2025 18:14:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750529661; cv=none; b=RNqjtuAIRvDrWQgujJI4wgKzYpKcb8PjCjvrsB5tQZIjW+BhN5UpfXN7Q3g71wqCvRivLflSR8BIpWIDcGbqWkkq5vQBTJsrdyn89qrOJCN4Rv0C70GpGo34cqi7dH6Fab+MPql6MwzZVxr5yyJSZJ7ZnvObR+wVSoGmijZlz0k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750529661; c=relaxed/simple; bh=4CYOA9AagDnQlzLO8jvRE7LipR/5rn+iPGyR5z/1opc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pdAqNn/F4YjTVzTxJAiPoio/kMu84fEEyHbhAo6v9TmSpaZN+p/E4omkYIX1nGqKiVz5EbIOC47JfQaBjjBDwj9ZMncPSfA+KaAGI3ZO+DedURsUtTvkM6obWLc7IQTgeIjl0/w3BdzKfOiruYOBQ5iSQrRA4XRGf6dmEmyYia4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=MkWpKB4N; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="MkWpKB4N" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 55LEN1Zq007788 for ; Sat, 21 Jun 2025 18:14:19 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= zowIyNUEyO7rt+gljYGoF/edvYqN+vq2B4rXcDP0lxM=; b=MkWpKB4NGOYwGE5i 5Kqzq4iziOFtR228nkHelZnK4XWLVSZmphg/p54UqhzNH1wWU1DN+RG7qsNk5x0d 3Szm84sTJVRRnvF15IYTGFYWf/NmoaB6pQ7C+njcOqMA2PfKVrCv4origrBKnHSa ONrSat6u7iGAcfGEYtU6wNYcySqI1/SlGQP0syWUk6s8qYW3C20W1la5Ve+xPqR1 b3rFysi9R6xA+iF3osCtpN5UFccZDUxN56+9Vl6qAoZeD3DPH+YKpYaTGWlyKWMf ErhZlFG/0S6lW3U/j9VqYU79gLsJwGu7IY6neo4RWSdRuh/zmJHsuP+HBG5kM3lv UrX1ww== Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 47dxejr7p9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Sat, 21 Jun 2025 18:14:19 +0000 (GMT) Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-7d3cbf784acso774642885a.0 for ; Sat, 21 Jun 2025 11:14:19 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750529658; x=1751134458; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zowIyNUEyO7rt+gljYGoF/edvYqN+vq2B4rXcDP0lxM=; b=Wjr2ZdHQ6W9b2oUxBuAPRqQsb5TCJeqeRyowYn6BcfOA0iQBYoBubozn88NCnTuqXN e+DSO4vA6e0/vh9i+if/n+cOyiLsGOhElVmXb5+vPcQgp5Q6SCUzB2TGOXu8K5DSAv3p go8E+mbZyrC1RsQAcXCHRrE260VmbAXKXIkhBXLW3ftcwGE0ZGw7fTg0aSWAkRnRyc3e 7GfyMSKaN6FBRdfnFV2zuQ38phibJNfDQBpzgFhKJInciF/mJevcQ2XOtHDahp2bC+I+ rk4hziheW5uuc874CEpwHsKbkb+Nl04B5wT9V4bzJd3GmszCzs4GDHsKgJdvRbj3F2th jywQ== X-Gm-Message-State: AOJu0YyEQKVoEPtcAUuhUvSMbJBXQUzkYrOycRZHlyNrQF2PE3n9Cv4m PdtVpOQgo8KBLwRwrbsDo9BNoCYbl2PO3iiBNnmW9FPFKZS5n1IR18Xh1VbL17WIR18fxPfCG7k 2AGsvWTVOGLo4OnXASsTQupCixzgDH6tCKBlZbXzytd4HoH1fJX6juddMjiHmZC0= X-Gm-Gg: ASbGncsK6neS9nSU0aJfQ/6uFz+qROLIaDdA9L2dLoWfBXAlj1pLV4iKDtYwaCpsXIb cml1kPLm0WbuejvNNwec+wS/03d8HCwrPnApIRYXZEPBPplaqiutRdJDPh7crId34I1WGto/JBi IdgFRZ6C8BhP50OlJUIO6Qv+q+axYPRm1lcN5U+qcN2qtm8ZmnLxmLA3Q0BtcEIMUP6lHYEVao0 h/cBU8M2D8lcq+JQxf9ePGWxPeZq/SWHCuMU3wIhiXpjE1j+qAqBPgrBWXC9S6M8Xf0MqxLbXso pgtv/8gf3Bc3FSxLmw/miEgVj84rEtv1iXQ0JCrPMHzl+kbBTWTSHVsX4L7DocQOFVJDvm2CXpe 2CoLrNbqup9qjHZfgavSvE+JlR9mOQuljMUI= X-Received: by 2002:a05:620a:1906:b0:7d0:a1d2:436 with SMTP id af79cd13be357-7d3f9932ab0mr942601285a.33.1750529658154; Sat, 21 Jun 2025 11:14:18 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE1/0MhQYuKfBpzeVErFNYZh8FZs6s89lsKMD66pGJWLmGvzYlwhn1nDZIEbwBmB1PBHWKAUw== X-Received: by 2002:a05:620a:1906:b0:7d0:a1d2:436 with SMTP id af79cd13be357-7d3f9932ab0mr942598985a.33.1750529657781; Sat, 21 Jun 2025 11:14:17 -0700 (PDT) Received: from umbar.lan (2001-14ba-a0c3-3a00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a0c3:3a00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-553e414cf36sm752336e87.86.2025.06.21.11.14.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 21 Jun 2025 11:14:16 -0700 (PDT) From: Dmitry Baryshkov Date: Sat, 21 Jun 2025 21:12:58 +0300 Subject: [PATCH 3/8] usb: typec: ucsi: yoga-c630: remove duplicate AltModes Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250621-c630-ucsi-v1-3-a86de5e11361@oss.qualcomm.com> References: <20250621-c630-ucsi-v1-0-a86de5e11361@oss.qualcomm.com> In-Reply-To: <20250621-c630-ucsi-v1-0-a86de5e11361@oss.qualcomm.com> To: Heikki Krogerus , Greg Kroah-Hartman , Bryan O'Donoghue , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Bjorn Andersson , Konrad Dybcio Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2145; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=4CYOA9AagDnQlzLO8jvRE7LipR/5rn+iPGyR5z/1opc=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBoVvZzEwCSquoV5Q2Y0LnJ2z5hijlfP4HmCo0CY WaWygQHwP6JATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCaFb2cwAKCRCLPIo+Aiko 1UWdB/9erkAZ/EL2NpUqbd0w3OylzoPIom7LGhqMTEJFDyP2tBqOczET09Z+xyhim9bUXRRvoM2 VSaa23CqxqeoilfJMB67B/BTP06kqCv07Mum81lER5PQoqeLh5MiKfKLjhupdFeHxUt/umpkmoR nwMW0W3NtoedisLaIv+r68ZLWHMQhU/nxOW72rMU/5QshyNtZ92+VbaMffjE+uo8miBDynSaAEu btb1zSAgosSHqaOu0+9Hd9WJ4V5Ep0/bHZQVowFqjGI/8zoBpV9UMBaodNJ86Lc1SOLBNlHNux3 M7VZpB0tHP4flQMmrqaFNMgWuzozAfvPzzx8CArzMlLyZNbB X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: LvGdc9L1OPO9UIureqt4sn2tP5naORH5 X-Proofpoint-ORIG-GUID: LvGdc9L1OPO9UIureqt4sn2tP5naORH5 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNjIxMDExNSBTYWx0ZWRfXxugwTFFK/QK4 Y4Cd50sjUNjZ9l7AFWGHLL4Y337tlcXWlsY0HRx01BFgVrCj5OFHGiVlIzUPt2yUzxt3ug4y8nZ aEFgmBHJLUm1SLYAbEezbQWu+dmfBMeTOFypJOBUDE/R3zFkT08jltNehiWksQoT2JWDgObeJDz UzNZPjW8q+W8vLO5ZrRVJ1LPXSauR3wvsdYOfZ585rpBF0IivapZlEbfiF3+FBbJFyEWLecIyia 3bBaDJ2Yo78lAKvDx6qoMZBpdssSX+NklEqpClESwu3M7X93BJQUioFLe0HYvEldve49cfo71C9 fTh4ZB4J2mubG9j43HHzv+mvDtjl61eqRIZGqUkQU8qLdfqvPRvDS4bqN0INAk+k+r10Uf9zXmC 8ViwDTYu/HnSnPhc2og5QT1XH6u8miNB2g/peddX+Xpu43hYQ5k8gfnsM5fq4d1htT0nLSWe X-Authority-Analysis: v=2.4 cv=GcwXnRXL c=1 sm=1 tr=0 ts=6856f67b cx=c_pps a=50t2pK5VMbmlHzFWWp8p/g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=6IFa9wvqVegA:10 a=EUspDBNiAAAA:8 a=AZjPiHVZ31VRnYr7GT0A:9 a=QEXdDO2ut3YA:10 a=IoWCM6iH3mJn3m4BftBB:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-06-21_06,2025-06-20_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 priorityscore=1501 phishscore=0 spamscore=0 suspectscore=0 malwarescore=0 impostorscore=0 clxscore=1015 bulkscore=0 adultscore=0 mlxlogscore=999 lowpriorityscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2506210115 On Lenovo Yoga C630 the EC firmware is buggy and it returns duplicate AltModes over and over again instead of returning an empty one, as demanded by the spec. Ignore extra altmodes by zeroing them in the update_altmodes() callback. It is not possible to shortcut that in the sync_control() callback since we need to know if the AltMode matches the first reported AltMode or not. Signed-off-by: Dmitry Baryshkov --- drivers/usb/typec/ucsi/ucsi_yoga_c630.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/usb/typec/ucsi/ucsi_yoga_c630.c b/drivers/usb/typec/ucsi/ucsi_yoga_c630.c index 47e8dd5b255b2b306dd9c3d6ac8c3b896954981a..7cc1342d6e2f1d2c6f5b95caa48a711a280b91d3 100644 --- a/drivers/usb/typec/ucsi/ucsi_yoga_c630.c +++ b/drivers/usb/typec/ucsi/ucsi_yoga_c630.c @@ -71,6 +71,28 @@ static int yoga_c630_ucsi_async_control(struct ucsi *ucsi, u64 command) return yoga_c630_ec_ucsi_write(uec->ec, (u8*)&command); } +static bool yoga_c630_ucsi_update_altmodes(struct ucsi *ucsi, + u8 recipient, + struct ucsi_altmode *orig, + struct ucsi_altmode *updated) +{ + int i; + + if (orig[0].svid == 0 || recipient != UCSI_RECIPIENT_SOP) + return false; + + /* EC is nice and repeats altmodes again and again. Ignore copies. */ + for (i = 1; i < UCSI_MAX_ALTMODES; i++) { + if (orig[i].svid == orig[0].svid) { + dev_dbg(ucsi->dev, "Found duplicate altmodes, starting from %d\n", i); + memset(&orig[i], 0, (UCSI_MAX_ALTMODES - i) * sizeof(*orig)); + break; + } + } + + return false; +} + static const struct ucsi_operations yoga_c630_ucsi_ops = { .read_version = yoga_c630_ucsi_read_version, .read_cci = yoga_c630_ucsi_read_cci, @@ -78,6 +100,7 @@ static const struct ucsi_operations yoga_c630_ucsi_ops = { .read_message_in = yoga_c630_ucsi_read_message_in, .sync_control = ucsi_sync_control_common, .async_control = yoga_c630_ucsi_async_control, + .update_altmodes = yoga_c630_ucsi_update_altmodes, }; static int yoga_c630_ucsi_notify(struct notifier_block *nb, From patchwork Sat Jun 21 18:12:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 899184 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A6BB42701D2 for ; Sat, 21 Jun 2025 18:14:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750529663; cv=none; b=DUwaEmMq3PZ1s71e/h4cJRyNDf29IJueFgstw0OSPZllOA1tjodlkNdg1KSW0nmYVgA6Qnmt/jf93nWqjocwOzyte933Vpb/gFsH0451ZmXM8+Qf08Yagb2fYTGGGsU3GkmwVxPiMHR8PVMqBG2kRsUHv1Cs4tuUg0Hs/vpH/bg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750529663; c=relaxed/simple; bh=JNYxpLLFOBRtvMlzQKm/ZNif0iwVlobtKiwFXihfikY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JTIdacYm4BaOrEiFJNh+083nt7X3PTZ/nPaQOhMjxlgKEz8TXfOyBqRWRcP09lZ35qUKR9SIwVARnTOdHpBqEh/SBvvM6eFhcSi9Z9tiUwVwVY1ssiWnqEUQ/nZZhhiRcQ8aOvVyXamtCYS/CtcBtS7azygE7+XMLyrMw1XDuzo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=aRDdACQs; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="aRDdACQs" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 55LHuE72028405 for ; Sat, 21 Jun 2025 18:14:21 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= oirU1+a/+8yORbmhMEzS0Sl226rFq5hViGnYuTM/r30=; b=aRDdACQsnsIKaPsC 6EZNmwi6rj2coudCih1V8klJVqj86soO3SEdo7N3QcThVWq9zCL/Ok0AgjQDprBZ wLa7VQ8+Ma61A45+ZrN2kim6u6Z5FocCufIEQ6NlgBlRU5i1M474Pd23FQuEpKWc bkS4OyaX04vTHy+BG6xwGfowwQvtecDUoXQtjzcHVLjB45ltYY6mvf8nKjgSoSQp 00JloOXa6c5e+SL9s0MpbWgdjpe3cn536etUE3XcsS+ZQMK/nxYvnvIHWZWNq3rr YcX85/P/hMtn8VfPT7J72i6elHDHBK+Xyg4RmwDEoklbueL+dCQDDbp/y+7jD1N8 OUtz9Q== Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 47ds7s0km8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Sat, 21 Jun 2025 18:14:20 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-7c760637fe5so425672685a.0 for ; Sat, 21 Jun 2025 11:14:20 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750529659; x=1751134459; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=oirU1+a/+8yORbmhMEzS0Sl226rFq5hViGnYuTM/r30=; b=w5s+3eg4GE4K+/Fg4jiuBrNF2VQ6xpTfU3NEzON4lckzqeR3aBUyKOufMHSWx7VFc7 A0KCxpHNhrzDtBXiBSI2aQdIVoIHDu+a1tAmFeJeohBWh/YJNBC6IA/U/ZNuFypUy/bA Al2xQbWvFUsjxp6gLa2yiwblZsv1dEHhDgSXkQsPIdF01+2rBEjs4B6eiKXxdPEE6BWS InCTwCKZSeIDzKOB7J3yNcBhn1FtMJ9xhQaWKlV/PVyY724uwnu1Ea6p6MrmG6GjF5wF 2HSAVyIFH4rIuxBCG/GVMGpSEuTKlO3BVri0Cq3jd8gne9Y3U6k8guyr3ympsugtfXbu F2Ng== X-Gm-Message-State: AOJu0Yy8tpkqYKaongucZXhjXuycMPnYOWTw4lyKUT9PSYmdge798Moi HxJFQUdeBLQQGPl+BbOsGhSNk1W+oP9xTORIqzPbnrxenEdmD9jYq9g7LMeYNDcVtq4P/r2ukXv 5OF/By8H2Usyn6lCnzs45KKGYCv67qEAvTIp+XLH6Qb/ETWmcNCxabwZ+u8t80Oo= X-Gm-Gg: ASbGncvKWis1dau581ymSOVKbrBzWdBwAd3yXJ+UI08JKyIc3SuD7vS91YCxMAp9Q8f 8CT5kV+8G6QpWLkE4Bf1LVXb+v4a5K+zP5a5JkSsSHgIdtF7iUR+GjMc8nXPJZVGmBqxLbDAac5 oBfWU2D78ZFoBvplNEGVc0MUep8zd9eq5vmqmWGZPdOuGxHZmvAsv4pbQ3a+NrAU0nndC+JyjOw cGc5Ta1AQuF/PFiQ3KRRX6sIz4irujZErvj8wgst/ONsE7lbl7gKf6zxrKi5cSdS2rzsxsJLb4T h/HW4163GEoTMSIGFu0o/PdXH+SzQ/2VjeRp9D8HTEsb1XcWk/AjYbLt+24kz6cE//rM/eDA0nH 0tPsR1n7dFU9t+C9XNWm3tQruiX1eGn5Yfto= X-Received: by 2002:a05:620a:8087:b0:7d3:a7a7:27ad with SMTP id af79cd13be357-7d3f9923f29mr1085888685a.37.1750529659589; Sat, 21 Jun 2025 11:14:19 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGBm728IxfVCsHScLqUKxUSwnu6QjuV90MNM2egI9dUzP6ktUhVo2klu+wAiUSpjtngW1id+A== X-Received: by 2002:a05:620a:8087:b0:7d3:a7a7:27ad with SMTP id af79cd13be357-7d3f9923f29mr1085885285a.37.1750529659186; Sat, 21 Jun 2025 11:14:19 -0700 (PDT) Received: from umbar.lan (2001-14ba-a0c3-3a00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a0c3:3a00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-553e414cf36sm752336e87.86.2025.06.21.11.14.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 21 Jun 2025 11:14:18 -0700 (PDT) From: Dmitry Baryshkov Date: Sat, 21 Jun 2025 21:12:59 +0300 Subject: [PATCH 4/8] usb: typec: ucsi: yoga-c630: remove extra AltModes for port 1 Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250621-c630-ucsi-v1-4-a86de5e11361@oss.qualcomm.com> References: <20250621-c630-ucsi-v1-0-a86de5e11361@oss.qualcomm.com> In-Reply-To: <20250621-c630-ucsi-v1-0-a86de5e11361@oss.qualcomm.com> To: Heikki Krogerus , Greg Kroah-Hartman , Bryan O'Donoghue , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Bjorn Andersson , Konrad Dybcio Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2166; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=JNYxpLLFOBRtvMlzQKm/ZNif0iwVlobtKiwFXihfikY=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBoVvZzb6rUS5eMMljhrS0Q+E/0bKqx4EhaapoTC S/gAg8Wn3mJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCaFb2cwAKCRCLPIo+Aiko 1cxcB/9Cy6IVelfifZerWEZXrYultMWDVJdyoWiBy6c0sL9bdpy6ECtRtiIw5OaGPpz0F6cwEYE x44jPn8Lz3vuShxXYwFwp1mFWQIJeidrdEKh5elCZDfvRVdXZqMCvQL6zFkUtuXP/wkBIAIZgIL Ipo3XzsKrczew5P7JvHGrYWtPIE3+pr6VZY4KNym4wxbjxXYlZkxeTzSRpc2SzG2NyxpNSIAf6T UMU9j+jmu3iacNjuVkjTrJJDuvurdsBq1rVYzH9mK0yBK8r3/JAWUES/Bc1q9bbBgXd28dpRdm/ tRNp6uTiYNnpB3SWqkgUMhk01YUo3xCInk21AWqsJ5CAqimA X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: dD0tcFG0ZiT2UzgEhc8I0gNwyjv9XCCl X-Authority-Analysis: v=2.4 cv=cIPgskeN c=1 sm=1 tr=0 ts=6856f67c cx=c_pps a=hnmNkyzTK/kJ09Xio7VxxA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=6IFa9wvqVegA:10 a=EUspDBNiAAAA:8 a=L9Ihpj2tn0joOnW3KS4A:9 a=QEXdDO2ut3YA:10 a=PEH46H7Ffwr30OY-TuGO:22 X-Proofpoint-ORIG-GUID: dD0tcFG0ZiT2UzgEhc8I0gNwyjv9XCCl X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNjIxMDExNSBTYWx0ZWRfX7hwkDz3yjJOl 5BUtBk9tDVaFmGlkyCsQchvsr6MxJ54xqk1C2uSr/kMvkThx8mwJsdEHgbx+/zxVPQFTp39Uocl K8d0BYq6RANhn0XX5kYdWA8cXqCiOZMyMMg4YHwAQuEfvJZjV9WTLj4PbSYAa/zxVw7JuQkpFTt geVmwi5lvrV44WUf0RCOGp2I/mb/HQbqu7Yes/O+9cEVQketZv7kgJEjtfLgzctGCqOkDOu70A0 BdgTrgP0iz/mWWeC1Q90FJUK/jjJ2seac6eBiW1SRzBXKP1VeRojtUv6BPb4m6Zl4gOIiBlsbMr mzumbjxuzMMo1H/A5ukD0eMZ94LIH4eBwLN/VKHQ5XaKj5l2ANXxxrYwYTcFlJpUqA0dYFdX7If LF1e3eURrH+/bqqC7pFBIvIMhzXNbNJIX5tAfX2g68dRtMMiDm2rwQW+pz/HNCbWM0f72UNO X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-06-21_06,2025-06-20_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 lowpriorityscore=0 clxscore=1015 suspectscore=0 impostorscore=0 phishscore=0 bulkscore=0 priorityscore=1501 malwarescore=0 adultscore=0 mlxlogscore=999 spamscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2506210115 On Lenovo Yoga C630 the EC firmware is buggy and it cat return altmodes for a device pushed into the port 0 (right) when the driver asks for altmodes for port 1 (left). Since the left Type-C port doesn't support DP anyway, ignore all UCSI_GET_ALTERNATE_MODES commands destined to the port 1. Signed-off-by: Dmitry Baryshkov --- drivers/usb/typec/ucsi/ucsi_yoga_c630.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/drivers/usb/typec/ucsi/ucsi_yoga_c630.c b/drivers/usb/typec/ucsi/ucsi_yoga_c630.c index 7cc1342d6e2f1d2c6f5b95caa48a711a280b91d3..2005f64ebfe43ca2bcada2231ff99c578fdce877 100644 --- a/drivers/usb/typec/ucsi/ucsi_yoga_c630.c +++ b/drivers/usb/typec/ucsi/ucsi_yoga_c630.c @@ -71,6 +71,27 @@ static int yoga_c630_ucsi_async_control(struct ucsi *ucsi, u64 command) return yoga_c630_ec_ucsi_write(uec->ec, (u8*)&command); } +static int yoga_c630_ucsi_sync_control(struct ucsi *ucsi, + u64 command, + u32 *cci, + void *data, size_t size) +{ + /* + * EC can return AltModes present on CON1 (port0, right) for CON2 + * (port1, left) too. Ignore all requests going to CON2 (it doesn't + * support DP anyway). + */ + if (UCSI_COMMAND(command) == UCSI_GET_ALTERNATE_MODES && + UCSI_GET_ALTMODE_GET_CONNECTOR_NUMBER(command) == 2) { + dev_dbg(ucsi->dev, "ignoring altmodes for con2\n"); + memset(data, 0, size); + *cci = UCSI_CCI_COMMAND_COMPLETE; + return 0; + } + + return ucsi_sync_control_common(ucsi, command, cci, data, size); +} + static bool yoga_c630_ucsi_update_altmodes(struct ucsi *ucsi, u8 recipient, struct ucsi_altmode *orig, @@ -98,7 +119,7 @@ static const struct ucsi_operations yoga_c630_ucsi_ops = { .read_cci = yoga_c630_ucsi_read_cci, .poll_cci = yoga_c630_ucsi_read_cci, .read_message_in = yoga_c630_ucsi_read_message_in, - .sync_control = ucsi_sync_control_common, + .sync_control = yoga_c630_ucsi_sync_control, .async_control = yoga_c630_ucsi_async_control, .update_altmodes = yoga_c630_ucsi_update_altmodes, }; From patchwork Sat Jun 21 18:13:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 899024 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 91883270EA8 for ; Sat, 21 Jun 2025 18:14:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750529665; cv=none; b=TU4CMOv2D9DXBQ0+WJ0FDrZ1QOXIcsQgs+RED02FlGTo+hm2swwEcNY2ByZjHze2A9oHSeL5Fx0A2NQUxwu3wPmM2s+0bK6mWTC97U/lnjTwmGRZX+3xmNAW6XdKSZu/S4Pc5CgCjlrct0GYG0XpaYrl1h8fSrwghjzD/8bNs2o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750529665; c=relaxed/simple; bh=MULVME50ezTJwjsRCNi4oguat38TlOEQQoYSE9mtnJs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Zk+IRLJJLGXgH4nPPmZ4aaUOTVs3RmwB3BWkAtT3Xs7jP2+P5opBYkVq5I1pVFq/7D8UMEf5iEGiTR+F6IG5KFAlsAar3GLrdZb7IbOWBPiMQ3soxgJvaAZNj2eYSQYrvgTTXxKyldwlFSP8z3k3zbcbesTDyakZhKoxyXQUxgk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=KSGak9gr; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="KSGak9gr" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 55LHuE6S015261 for ; Sat, 21 Jun 2025 18:14:22 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= dDHxHk18JOqx0nTuxFkbc1Jn6lI5tYF4hSfLOq+sH78=; b=KSGak9grsqFsME1A yyM4ChOU28J95059wf5iJPt+T2ar1UFjU28a2Pjo50OyytORfCs2uQwtRQgXXp1N RPvYi7vwdTZm8zDrvft6pUjWh6jDM025/O+n/daWJ2e94U0jZqFtoF2bMqsLnblU BxnRgjoyfBdwXdyNwdl5tIJGmVWeYl/Mpqglw7gBhJNe8/4gsbVSOT4QefIRIlEr OWibeAVRjb9fBr6rP7pEnbONpgpUcsieucu9J+6e4/PyqqkTQ1smrhzV5raIhdt5 tpU3Ixl5gNuDCiM6b2ayjQb6YhDD3zc7GljxN6B30Ze6uazUK9gTgXWFYHpbpVfw sRY3IA== Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 47ds1a8mm7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Sat, 21 Jun 2025 18:14:22 +0000 (GMT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-7d3dcac892bso444284885a.1 for ; Sat, 21 Jun 2025 11:14:22 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750529661; x=1751134461; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=dDHxHk18JOqx0nTuxFkbc1Jn6lI5tYF4hSfLOq+sH78=; b=tpSNYvpIl5zUcXIiffK98W9D3bX0lQPtnoMaDONo9x2L2HoG0w+OFCKTRkGJergeCe 4EDMVRZRISVMEvYRidhVyQmV7jf+0rvgS/jggcrcAFy31q8kch5jsKztkivDYkHOX79Q RXC8gTuybaYxXw3iv3htDErQeRebwRmxv2FglSggx6XhaUqa1Asl8DjT9vrzpRZTz3AR fXKjFDUlEFG6fQIKbCUudnvO+z8BykaGQBrnMU3emsR/it62ygltaauNuhr7YRqP9Txv HPU7AJFjtOC3dNsQHHs0+2jJMmjAA5X8nW4bBCnhFOlN0NKFWv95jgWPs444+2K8mbpz 9pVg== X-Gm-Message-State: AOJu0YxxI71g68BpYxkSHAhCC++QxdnbbDSCPK8JBITTN408XhJwqnG4 ITBBfeZbz21qr/FLmy16Vg6o8lUuCqN4G0fu60+bl52QPh8qU42tc+Vm2bAQUCquBDWS++F87/U 73KdY0kse8YsylM3nfI//B2bvthSqHGxRSGDr1j44MBf2XKUHqu9ol6hNv3RPNZ4= X-Gm-Gg: ASbGncu0BX8BgCD0lK/40kYnU48uZ8zIPZlSyjQ/jnOlNpH8JdSwMV6+ppR8uKfEvkI 6nsOB4iyQRzWeGESZpvKYxqqqKTve4W/3nZFHMJrWNT0+tTx91EeMDSPvlSNRtFwbrnTrv27IVe ahRhNSh3sjNDsc1Y8KEtgjpymUsS5Z0xE/U+9jAkja8q76MsRM6dIXqWGvq3Pp+4htZVyLCov9H NaQFPgTkZ+mFaxVDTJuuoWxZVnwR/EyCssfYeN4yr9psg8hSY1lkCNGQem0MpwDEJGrkxpDmFjP a0SQym6yByTvO8RIyDazwJpzhLHimCtjQbqYDeFtVKqjsNOSxCrBBW9H3EEawkPrX1hyvscWKFf Rsx6HLV5Zxz5/JuCevFIywh5G5w2bMnlxTik= X-Received: by 2002:a05:620a:2b94:b0:7ce:ea9d:5967 with SMTP id af79cd13be357-7d3fc02d9b9mr965399485a.15.1750529661115; Sat, 21 Jun 2025 11:14:21 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGIIGisK+ntmvZYvKQNh3iR3tO+luthxByBUMIc+I29rTikd3A4VMB6uu9xiBW8m3JmQts4UQ== X-Received: by 2002:a05:620a:2b94:b0:7ce:ea9d:5967 with SMTP id af79cd13be357-7d3fc02d9b9mr965395985a.15.1750529660725; Sat, 21 Jun 2025 11:14:20 -0700 (PDT) Received: from umbar.lan (2001-14ba-a0c3-3a00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a0c3:3a00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-553e414cf36sm752336e87.86.2025.06.21.11.14.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 21 Jun 2025 11:14:19 -0700 (PDT) From: Dmitry Baryshkov Date: Sat, 21 Jun 2025 21:13:00 +0300 Subject: [PATCH 5/8] usb: typec: ucsi: yoga-c630: fake AltModes for port 0 Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250621-c630-ucsi-v1-5-a86de5e11361@oss.qualcomm.com> References: <20250621-c630-ucsi-v1-0-a86de5e11361@oss.qualcomm.com> In-Reply-To: <20250621-c630-ucsi-v1-0-a86de5e11361@oss.qualcomm.com> To: Heikki Krogerus , Greg Kroah-Hartman , Bryan O'Donoghue , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Bjorn Andersson , Konrad Dybcio Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2419; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=MULVME50ezTJwjsRCNi4oguat38TlOEQQoYSE9mtnJs=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBoVvZzPdJRglsGaRqUfmMC4gZNM1SYbEIfH7lW0 sJ6e5L770qJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCaFb2cwAKCRCLPIo+Aiko 1dh9B/4rga50gzKHMm+2fHIeEu00WRUMyq4GwbB1ytQ6p+PNsDp2JbPXQP9HsbuZkv4wPVoUxgZ h+bexTXZNS16WHt2JwBN3ry/jNsH0vVya3DTydbC1p1oFelUBZnCfupLGUkf9Ct10VpOL41DT8h LcP75iKMyulsPwUZHADhMATecht3g2CFz7xEZ9+itC2PParDxJz+VkO+vij2T1g8EpDASdh0dqC ZbUv72bKypU7loxxS7RyNmlU3uBVVnn2TFZwpi1Nkr0Dv8rIHgz+F2nIPaQO6zrauD9ejya/CE5 y4SYpTpr124VkpeI60dW2gprY07SDz46Xl3SPya7JfN/bvKX X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Authority-Analysis: v=2.4 cv=Pej/hjhd c=1 sm=1 tr=0 ts=6856f67e cx=c_pps a=HLyN3IcIa5EE8TELMZ618Q==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=6IFa9wvqVegA:10 a=EUspDBNiAAAA:8 a=O-xtLUNLgrTPA20joi0A:9 a=QEXdDO2ut3YA:10 a=bTQJ7kPSJx9SKPbeHEYW:22 X-Proofpoint-GUID: obCk-dH2xAIr_dwOpSXcaAH4Dk--r-Tw X-Proofpoint-ORIG-GUID: obCk-dH2xAIr_dwOpSXcaAH4Dk--r-Tw X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNjIxMDExNSBTYWx0ZWRfX+9wWIpBpeKdp y+r+cHv44IBxU1CL1fuIYHFR4OjhRjR0RiV19XQSRgl8ujEzY3cU3rTffylkae7qcv4a703M24W 1vJxN66ejQrAKHiNo2qd6gSMdDhqFpY4QLXdl7RI2pdAiXOfShpxrUWCD3D8Fj5EPl3m9pPmOv9 FqCyrWDKb0fILpPEPnRkN+nKcFB+ziy0R9KmAMsFvwRsoZ9zECE0xIsR8B3bkwHL9yCqyvOFXF2 VAY5Z3ti9Lq0Zwx3ksZqxVvt0U2Xov70XbR6p31vsVpngNHiHn1+zOxDsdcuHVTmB2HSKaw20oD l/LVOShFrf79mbR6QGSlDbT+DYDFEKHKZJBTxNsN+wKiIF3s+TjpEj2FgMoNamLaGmLESaH41Q6 9HhUpc1repQN05aLS7gYLr1M9EpdCSc86IA+HIJBR/S8aBJYGVr6kD8ZsnBlDV6b5OPKYvoK X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-06-21_06,2025-06-20_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 impostorscore=0 mlxlogscore=999 phishscore=0 malwarescore=0 priorityscore=1501 lowpriorityscore=0 mlxscore=0 bulkscore=0 adultscore=0 spamscore=0 suspectscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2506210115 EC firmware provides information about partner AltModes and handles the DisplayPort AltMode internally, however it doesn't report AltModes of the port to the host. Fake the DP AltMode for port0 in order to let Linux bind displayport AltMode driver. Signed-off-by: Dmitry Baryshkov --- drivers/usb/typec/ucsi/ucsi.h | 1 + drivers/usb/typec/ucsi/ucsi_yoga_c630.c | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h index d02f6a3e2f50a4044eb3f22276931017cc624532..b711e1ecc3785eeb34e407e58df939f2d29bdb38 100644 --- a/drivers/usb/typec/ucsi/ucsi.h +++ b/drivers/usb/typec/ucsi/ucsi.h @@ -50,6 +50,7 @@ struct dentry; /* Command Status and Connector Change Indication (CCI) bits */ #define UCSI_CCI_CONNECTOR(_c_) (((_c_) & GENMASK(7, 1)) >> 1) #define UCSI_CCI_LENGTH(_c_) (((_c_) & GENMASK(15, 8)) >> 8) +#define UCSI_SET_CCI_LENGTH(_c_) ((_c_) << 8) #define UCSI_CCI_NOT_SUPPORTED BIT(25) #define UCSI_CCI_CANCEL_COMPLETE BIT(26) #define UCSI_CCI_RESET_COMPLETE BIT(27) diff --git a/drivers/usb/typec/ucsi/ucsi_yoga_c630.c b/drivers/usb/typec/ucsi/ucsi_yoga_c630.c index 2005f64ebfe43ca2bcada2231ff99c578fdce877..506faf31b6e3a056e067f2bb69f5e9e5ea40e514 100644 --- a/drivers/usb/typec/ucsi/ucsi_yoga_c630.c +++ b/drivers/usb/typec/ucsi/ucsi_yoga_c630.c @@ -76,6 +76,28 @@ static int yoga_c630_ucsi_sync_control(struct ucsi *ucsi, u32 *cci, void *data, size_t size) { + int ret; + + /* + * EC doesn't return connector's DP mode even though it is supported. + * Fake it. + */ + if (UCSI_COMMAND(command) == UCSI_GET_ALTERNATE_MODES && + UCSI_GET_ALTMODE_GET_CONNECTOR_NUMBER(command) == 1 && + UCSI_ALTMODE_RECIPIENT(command) == UCSI_RECIPIENT_CON && + UCSI_ALTMODE_OFFSET(command) == 0) { + static const struct ucsi_altmode alt = { + .svid = USB_TYPEC_DP_SID, + .mid = USB_TYPEC_DP_MODE, + }; + + dev_dbg(ucsi->dev, "faking DP altmode for con1\n"); + memset(data, 0, size); + memcpy(data, &alt, min(sizeof(alt), size)); + *cci = UCSI_CCI_COMMAND_COMPLETE | UCSI_SET_CCI_LENGTH(sizeof(alt)); + return 0; + } + /* * EC can return AltModes present on CON1 (port0, right) for CON2 * (port1, left) too. Ignore all requests going to CON2 (it doesn't From patchwork Sat Jun 21 18:13:01 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 899183 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ED1A9271464 for ; Sat, 21 Jun 2025 18:14:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750529667; cv=none; b=XmiUA5QVAGie5R/w+eC28n5Mw/rfVDUBAm6hzIi9j/6cBanu81/ax+z5AzcBpVIuvbEgaI9bJIzo5VV285in9vaOS9ckFn1LL2ByrzZdep3jWAieyz4nSTT5iHPZarKZ0NGOhnt+EzUbUXJzVvtCknge6SHDYXNc6lL9w3qZMsM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750529667; c=relaxed/simple; bh=Run+O2mI2A76noQdH2tqShWLEpuGZIuywf14cmX4Kk8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Kjd3vJXyfVeB2ooXvnZJ1grLjqOAFScPWRxCdPCL6NexA0tc/E8LsRxisIcUqNAjCsdUWxQnDYaVMaJUjVg37h0YxsjuSa4gRGRGu+9IEaop+MWXNc3FnS24sRp3VA66hE96U5MfLuctPmx/Rjznhk3jyNjfyN37iTehiexLMzY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=ZSq5Uatp; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="ZSq5Uatp" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 55LHoJiX007784 for ; Sat, 21 Jun 2025 18:14:24 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 1aqIaLvUpP1zFWPwZcv8zHZi9hcPKnIY5YKRhPTvJuk=; b=ZSq5Uatp+fG9ELBr RRwTAdWxWNSz4z6UtG5++e+SRg5K4sGGGnzchc7TkXzBZjKYFSDXdL+FymHxFJW6 S8Xlrm44tjahnBo/NVKVH06HOsYtT3gyP3ZAc1Jf948YfVeN1F/DzXKMhDh9djSD IIhrDSDVsjf8vWXx+KApWNY/oUwsgzRiDdmgo4UXWUO7J0Ls5lN8AE1mW+CDqbFv c1ZN2i4LuI0bYCHBTPtBPaO6TfgdsrthGJG3R9wt3H+14AWS3MwBEYn0vhu03cCj i2wICl4stcHVS8rF+EnwihaCGV1WNu044e6h8DJsbL28ra0pv5eNTSBJcBTo7wiq pdpEqA== Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 47dw9wraks-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Sat, 21 Jun 2025 18:14:24 +0000 (GMT) Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-7d3e90c3a81so242170885a.1 for ; Sat, 21 Jun 2025 11:14:24 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750529664; x=1751134464; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1aqIaLvUpP1zFWPwZcv8zHZi9hcPKnIY5YKRhPTvJuk=; b=nRDTJ9ypojUJnBZmxAd6ltukbXf7dah2owHrzMMiB1JC8lbb/0IH7BDh6tqEwr/fxX zZa2X+rJnxTc1haTSYD2k8bfvbKtwdJJeop21FRWO8zHXgEpptmPKRoFYwU4OxdgoOYX O35BCGNS1n+UCaYjB+CPSQfj27T3HN0FyMZk66/EdrT7HiicH4H/x7kwUXkUrWdWZKVb sh5KZX3iD9Jrn9yLkHDz+rtpWhzHgK9UX/kZZYrOEh1WnropH1wqSht1CvxrOAq8xmDO 89sv8SWWiaVhayGDJPNoCVXSbZtDMSt9DP00kWzeKyVBsv7bCmoV7LMT44WO8OWne/Jt zv9w== X-Gm-Message-State: AOJu0Yz29tmE2BjBXjqCc9MBTmooMctgp1lYIxxY+Uo6WMmKQjQT/K2O PDXQ4I1ChG0b4imFUafwKZPA5OeWKDLO5jYEVbPEsBXwvG95CyGiioFMrvdMHLws50TvT/dzi+g TSfCCrLnrLTNtAsu6KkQ2cmGmYba/yU62hJu7x6bSf0KULPfuo1yLSDni90yIYPJA1aTXsraaNA == X-Gm-Gg: ASbGnct+QNbT+GwNoDC9l9ixOT209bAEnLkv8/31Y3vUu68StFKbUQTWFtBDsGz8066 DpVlJh1yqX+6WXQwBmuQ6Z8h2lVDGlKyhiE2ug1uKmsfLavw0XJ7urR2L5t2jIaw3frYP6lg0lt 6cOV5TrY+PyBInxt3xfcVyCimEcwhyEskLCiUMJ8aGjFasBMGUEglBeN0tRIr1z9P0aRwTaLJzq vW7nMp1LxZW1WvxRxhq2ZA7dAzNGJC5feXiW0U2HBkbFRLJtxoej/DxYE/+ltRuu0z5XBPTnc2n k6qPS/4g0RpXnNuxrwknErbMiUnlQQLTB9frJCEYwsqRVPI7O6si7TtCzmK5yJBp//hTt2b5Vox /GEbpNYTmgmYyNs5K5mNYaSC3NuDqHpumdB0= X-Received: by 2002:a05:620a:2693:b0:7d3:ed4c:fe84 with SMTP id af79cd13be357-7d3f991d7d9mr1216213685a.31.1750529663620; Sat, 21 Jun 2025 11:14:23 -0700 (PDT) X-Google-Smtp-Source: AGHT+IELim/6+6aSoh9DCQhdH9yeSt9LxI2hvvLw6WOJeokVXk9fuz4Lf6Jl1owf+XMfbDNvPIp+vw== X-Received: by 2002:a05:620a:2693:b0:7d3:ed4c:fe84 with SMTP id af79cd13be357-7d3f991d7d9mr1216210585a.31.1750529663236; Sat, 21 Jun 2025 11:14:23 -0700 (PDT) Received: from umbar.lan (2001-14ba-a0c3-3a00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a0c3:3a00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-553e414cf36sm752336e87.86.2025.06.21.11.14.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 21 Jun 2025 11:14:21 -0700 (PDT) From: Dmitry Baryshkov Date: Sat, 21 Jun 2025 21:13:01 +0300 Subject: [PATCH 6/8] usb: typec: ucsi: yoga-c630: correct response for GET_CURRENT_CAM Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250621-c630-ucsi-v1-6-a86de5e11361@oss.qualcomm.com> References: <20250621-c630-ucsi-v1-0-a86de5e11361@oss.qualcomm.com> In-Reply-To: <20250621-c630-ucsi-v1-0-a86de5e11361@oss.qualcomm.com> To: Heikki Krogerus , Greg Kroah-Hartman , Bryan O'Donoghue , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Bjorn Andersson , Konrad Dybcio Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1228; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=Run+O2mI2A76noQdH2tqShWLEpuGZIuywf14cmX4Kk8=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBoVvZzwGwXYpmPvXDx4iRsvi9cjZU0WfvZSDkRh IDMJvCJeDyJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCaFb2cwAKCRCLPIo+Aiko 1RSLB/4obyjbVEnnrgRFrKXyP8J/IIWxADau7nzq5Ef21hBWZml2P4EjvzYsPPBuYZSTClzcuAj i9NZEYyViwIasFDsQU9aDXQ36I65lGrnjnnTl1ii2BiHQggjgHDrBkcvET281KnEXY/1CemYaIq o5gMtd+k4A2/zRLotSO3SH6SC/yulmYj7ESWJxLmwllFHF4SWEM5XqSgmklCvheY2QxYdFJjCms 5enH57R56RTgJYT8bkt2k0GGIOSkW+1R7s3ZVFdLw4xeBHlp5oDjDucDFKS0KHIPvBM3Nuj5BEO kHqLWEgb46YmdGXSNyV5WOCM40B7wuDuRBgucsJl25ETxJax X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: ZTVIkk2SNweKf1Xn_SGOxEthFfJMNY4D X-Authority-Analysis: v=2.4 cv=HcEUTjE8 c=1 sm=1 tr=0 ts=6856f680 cx=c_pps a=qKBjSQ1v91RyAK45QCPf5w==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=6IFa9wvqVegA:10 a=EUspDBNiAAAA:8 a=btjbPSU_vhCAQAxPhXgA:9 a=QEXdDO2ut3YA:10 a=NFOGd7dJGGMPyQGDc5-O:22 X-Proofpoint-ORIG-GUID: ZTVIkk2SNweKf1Xn_SGOxEthFfJMNY4D X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNjIxMDExNSBTYWx0ZWRfX5jC7cjSDoUT7 iV7dqlyMq3IszLEh5vJuJnZTx4Gu9hL2FwYuqSS6EF1/WCBGVO9Lsu8rVB1oWDOV98kd/86gBxO h0DsAuBV7g+zcKMkuxE8bk5FxnWtBQ0eCCnyTlVzJcftVnEt8XsjFDJAeQTZU4d7GjJkCo9t1zF QIyWYv3WaZDcXcAc1j0TS/vophf859pC8mflUQWKEVUBFkFOaaUFmt1WRh2Bv03pxIcA3MDsYXc XBVXONO9aLVw1MoY8m6hjTEKvsh79nqaPVjMXmFRTb/pSlwHunX7gyI0zasC7OzCq4SS2SqzofL Zn7YdZRp0KLT+Jb9i/Ehdk0+dgtnbpQ0U7F4uwP4alHAtH12r4JhUDjPwsPTTAMOhEkMlq64tsq KgC8Y7lmcdYKktDjmwmpIaBehdIU0b0M508yRwKnGLoRwrASyA1tKog4BY3vXaH3Ns7saTGs X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-06-21_06,2025-06-20_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 priorityscore=1501 impostorscore=0 spamscore=0 phishscore=0 clxscore=1015 mlxscore=0 suspectscore=0 bulkscore=0 adultscore=0 mlxlogscore=743 lowpriorityscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2506210115 On Lenovo Yoga C630 the EC handles GET_CURRENT_CAM command, but it returns 1 if DisplayPort is active and 0 otherwise. However in order to let UCSI drivers handle AltModes correctly, it should return 0 / 0xff. Correct returned value. Signed-off-by: Dmitry Baryshkov --- drivers/usb/typec/ucsi/ucsi_yoga_c630.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/usb/typec/ucsi/ucsi_yoga_c630.c b/drivers/usb/typec/ucsi/ucsi_yoga_c630.c index 506faf31b6e3a056e067f2bb69f5e9e5ea40e514..76afd128d42a2573ff55433f815c2773462a6426 100644 --- a/drivers/usb/typec/ucsi/ucsi_yoga_c630.c +++ b/drivers/usb/typec/ucsi/ucsi_yoga_c630.c @@ -111,7 +111,15 @@ static int yoga_c630_ucsi_sync_control(struct ucsi *ucsi, return 0; } - return ucsi_sync_control_common(ucsi, command, cci, data, size); + ret = ucsi_sync_control_common(ucsi, command, cci, data, size); + if (ret < 0) + return ret; + + /* UCSI_GET_CURRENT_CAM is off-by-one on all ports */ + if (UCSI_COMMAND(command) == UCSI_GET_CURRENT_CAM && data) + ((u8 *)data)[0]--; + + return ret; } static bool yoga_c630_ucsi_update_altmodes(struct ucsi *ucsi, From patchwork Sat Jun 21 18:13:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 899023 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 170BB271477 for ; Sat, 21 Jun 2025 18:14:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750529669; cv=none; b=o5njZIn4dbaZ70myIn22eK1Mc/5ohySh631/YIqynwrEpWB3zutx2tUCUxpIHy4/DM7EGUcLUwRld7711AZkESkm3cGYzbwIDwFLIazWdiDgYzx3any0peIDydAisC2OzB3ll6I5H0f56TUhlYC9njo4wC3qGN+rt65+7Wu8IFs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750529669; c=relaxed/simple; bh=Vp5Fme7/3hYqg8ZC4exosk/7eg4G/1nTlZJs2jkgM98=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qbiTLxhn3DQpcVvuL8PMTpzNJbLtTtXx3DFDJd6bf4q0LFFrG1qjpHG8gS2vUo1svL574/l0SMlZsLXooCHpfqm709r8fBtFUgdP/EXW7IXRElnbRA5ZNyY8daHMWMqx722cAqyLxmEMv+yjQ+2aCAbaK35D0wfNtIVzWvmxa7I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=b2XRLuwa; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="b2XRLuwa" Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 55LFwCEa027726 for ; Sat, 21 Jun 2025 18:14:26 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= i0hBPSYquU2It6N5un/PFHS9t4oxEjLZu7nUhJVo2lc=; b=b2XRLuwaub69Oghr /816m92bzejA8lRQvpA6x+ay5CRJfD2HiP5dXDUt1x2YuxXF9pZ1zUq7wYWWp5qJ ys9GO0NzWJb/MRkkQTxDE94KYPS8i3IU0YoH47iELWxBP97OqkYfRh8aGppLLlGc +K2ExuMmk0Lkq6Kmvqpqe7fR1rYADQMCUS1tXhmvssu6l3OE8AChWJS1lS+BepcB EFGh7o4WsdkuUcmQRwABPLWrVIPkAzbhKoqiC+CkWMaE+UV6OtVaTJWLnyuZIENU fPsJSV+RyqRVRP+pzbmgx8/Sj0PWtpm8RVjK+bdERat/QgIYe+qWso1ePzxHt+mS XTA9oQ== Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 47dpqtruh0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Sat, 21 Jun 2025 18:14:26 +0000 (GMT) Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-7d22790afd2so381053285a.2 for ; Sat, 21 Jun 2025 11:14:26 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750529665; x=1751134465; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=i0hBPSYquU2It6N5un/PFHS9t4oxEjLZu7nUhJVo2lc=; b=wMBYvOZDK4ggPn8Dc9v2oEsJh5CjpN47PdfmK3gktQp88sZ4hT4QrwYcJ42oiEHIYB 01UnV3tF8L/1AqR6TLbEVFjeeFNWC6kagH1kd1V6LZEJ8MzSm+U2NvslbSIeDfvswfWt 94tm0FdUaecBdFMJ1/NL6i68+SW/PwTBPII/dhIsdH8FM03uESI/rjsQnpmjhOdRAgZS UUP6LZPUXoS6kUQ2E55SKrrO/qgeOon9wJiO5nr04EJ0XURzj6DHOYaaeKC+BKPiKUOk IpqJvMnyEefJkCnLWq36YNS4R3h4qOeAc4g5u66/2uGkYZoVK3nipmlwBXJ7EC5Vc3Rh j6Sw== X-Gm-Message-State: AOJu0YwoJwqMqJArxPOy4rtrgjW4/N4AzEJdsiDPVLWc+JzZeaN6nOqE BQXOf7X2yVF4/9XtcDfcM0qq12j15KnY0NxGXwlutHsvoC2bz52yzm7pUlFbquMhi1TlgKPYb+l Avik6xv1C9tk98rdQBeOGNIz3PX4Ua1z3Y1pLc3Ax5EwX407Jk3cKm/fyqEZzAsw= X-Gm-Gg: ASbGnctujdAudKvkOhPAIHAVWfn46qv3uNcY6mkG1tPijqpiUcn2E/nzAMHHW22MJZg JHZyCd/94sno2Zai8pAmrKfmoYpRrXM8ZSAAtEUEcv+pOll4OCAkdzRVmWn0zEPNkk3nsfCuc/Q Y7oA5SZh71q5I5ba3L13KoFaLpFxYeluFDU05L8aIc0NQFWqXOmD7BGNP8RVyDwL6nFDYUJO1kj 2zH/PfLO6UPKjdxw1my9qY7krayZLSnSseKCJoNtxTODETgIvmyHn4trbOBv5L6ZwErmGAE2fyb wGB0OnnZIphUQsAp8VS3sEbm2Z321nswaVkqdTSqlU3MxNKM7CKNEX49q81UWTiJKTQgFFGm2Q7 UZvKYcmWCKvd1+msH0ZjClfyAiVt8qyCMmEQ= X-Received: by 2002:a05:620a:1997:b0:7c7:bb3f:fd40 with SMTP id af79cd13be357-7d3f98c335emr1054952385a.5.1750529664999; Sat, 21 Jun 2025 11:14:24 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE+BLvp55Mks0cd0omIsX9xEno7K+V+qTVjIWAp23+UGVrowvzZ6fUThgqonkqEHlZPASIb2g== X-Received: by 2002:a05:620a:1997:b0:7c7:bb3f:fd40 with SMTP id af79cd13be357-7d3f98c335emr1054949285a.5.1750529664603; Sat, 21 Jun 2025 11:14:24 -0700 (PDT) Received: from umbar.lan (2001-14ba-a0c3-3a00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a0c3:3a00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-553e414cf36sm752336e87.86.2025.06.21.11.14.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 21 Jun 2025 11:14:23 -0700 (PDT) From: Dmitry Baryshkov Date: Sat, 21 Jun 2025 21:13:02 +0300 Subject: [PATCH 7/8] usb: typec: ucsi: yoga-c630: handle USB / HPD messages to set port orientation Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250621-c630-ucsi-v1-7-a86de5e11361@oss.qualcomm.com> References: <20250621-c630-ucsi-v1-0-a86de5e11361@oss.qualcomm.com> In-Reply-To: <20250621-c630-ucsi-v1-0-a86de5e11361@oss.qualcomm.com> To: Heikki Krogerus , Greg Kroah-Hartman , Bryan O'Donoghue , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Bjorn Andersson , Konrad Dybcio Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3261; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=Vp5Fme7/3hYqg8ZC4exosk/7eg4G/1nTlZJs2jkgM98=; b=owGbwMvMwMXYbdNlx6SpcZXxtFoSQ0bYt2L957xak3P43952cZ0rvWh+R+586RNWWVfPhH1// 0LbNJq/k9GYhYGRi0FWTJHFp6Blasym5LAPO6bWwwxiZQKZwsDFKQATkTLiYFioUWFX7Llx0X8n 6QsC7fH3+P707I13XfkqPIZ77k9ugd60Y33MOvkzj3k98HndNGP1cb6WGZvmdugbv3uoGNB2+I5 x1ztvT+17eoWKBj6lBgIXcpNe+DyLatcR58vhnKV6MEHO667GlG9PWWpjr1Qe/JE1babJUabuhv Q9PMnrNLd+uiV8jmPO2n190ycIzXbYP2OZqETSOl/Tn4x6/UJXlCqmujoUWbJPF7M/4eRzZfX8d hmObZdq1/A4rw5ac+asvhHTu0KjTefyGGdbSfWwxYu3FFvEftvbWBfTrbX0zryJf7++OxS9pqKo QX7958JrwY9fNhQ0z9BwnNckziFnl80xseJIa8jHxFcfAQ== X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNjIxMDExNCBTYWx0ZWRfXwpSOcGOdNgfU KpsKnIX3lTbFC+FE98s8e2D9NOvL0UxPhvCUS7V6LjrqGVRWR+ZrTeylh/3O8wdqwjKEUfQVWbQ bQ7LMFkK8KFHMfIa6R0SEfD784RG5xTBxI4BXvxInN+EC6zgLh9upqg8rIDlDHaJKl3r8ViB3di VSvCCsC34v5gbeQUyAQbPl0nKkBeNcbuS2E/A/8ROk15621EdIQUOQp9LnepUPT3ZiqkD+zYyAi z5EAGQArKjRhcJ2BOqWd7Fs8Za+JjMcr7h16lI9HzzkG7fHRzERFcS2caaxNOGgtTKh659sNWTz IP1ZiLdsGmE5E7MsgEGlVoN8EkYpWupJtnZGRQrejzIMoy8xXo08PvW1ikQWCoFh9CuJARwKauV pgzLEDR9cVDN0NGkpdaYZJtyWoPRksVNuu7rD/t2juuve22Zo1j2cxpRY9P6onDTFSu0PpP6 X-Proofpoint-ORIG-GUID: 6XjATGSjq3-U3OBImhRRxWOWhHljfYzN X-Authority-Analysis: v=2.4 cv=cbPSrmDM c=1 sm=1 tr=0 ts=6856f682 cx=c_pps a=qKBjSQ1v91RyAK45QCPf5w==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=6IFa9wvqVegA:10 a=EUspDBNiAAAA:8 a=KtUMi8uSWGBWOuXQcx8A:9 a=QEXdDO2ut3YA:10 a=NFOGd7dJGGMPyQGDc5-O:22 X-Proofpoint-GUID: 6XjATGSjq3-U3OBImhRRxWOWhHljfYzN X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-06-21_06,2025-06-20_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 clxscore=1015 spamscore=0 lowpriorityscore=0 malwarescore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 priorityscore=1501 phishscore=0 mlxscore=0 adultscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2506210114 Parse USB / HPD messages from EC in order to set the orientation of the corresponding Type-C port, letting connected USB 3 devices to enjoy SuperSpeed connection rather than beign limited to HighSpeed only (if the orientation didn't match). Signed-off-by: Dmitry Baryshkov --- drivers/usb/typec/ucsi/ucsi_yoga_c630.c | 42 +++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/drivers/usb/typec/ucsi/ucsi_yoga_c630.c b/drivers/usb/typec/ucsi/ucsi_yoga_c630.c index 76afd128d42a2573ff55433f815c2773462a6426..f85170417d19cdc5ae39a15e2f97010259ef12f6 100644 --- a/drivers/usb/typec/ucsi/ucsi_yoga_c630.c +++ b/drivers/usb/typec/ucsi/ucsi_yoga_c630.c @@ -7,15 +7,25 @@ */ #include #include +#include #include #include #include #include #include #include +#include #include "ucsi.h" +#define LENOVO_EC_USB_MUX 0x08 + +#define USB_MUX_MUXC GENMASK(1, 0) +#define USB_MUX_CCST GENMASK(3, 2) +#define USB_MUX_DPPN GENMASK(7, 4) +#define USB_MUX_HPDS BIT(8) +#define USB_MUX_HSFL GENMASK(11, 9) + struct yoga_c630_ucsi { struct yoga_c630_ec *ec; struct ucsi *ucsi; @@ -144,6 +154,12 @@ static bool yoga_c630_ucsi_update_altmodes(struct ucsi *ucsi, return false; } +static void yoga_c630_ucsi_update_connector(struct ucsi_connector *con) +{ + if (con->num == 1) + con->typec_cap.orientation_aware = true; +} + static const struct ucsi_operations yoga_c630_ucsi_ops = { .read_version = yoga_c630_ucsi_read_version, .read_cci = yoga_c630_ucsi_read_cci, @@ -152,8 +168,33 @@ static const struct ucsi_operations yoga_c630_ucsi_ops = { .sync_control = yoga_c630_ucsi_sync_control, .async_control = yoga_c630_ucsi_async_control, .update_altmodes = yoga_c630_ucsi_update_altmodes, + .update_connector = yoga_c630_ucsi_update_connector, }; +static void yoga_c630_ucsi_read_port0_status(struct yoga_c630_ucsi *uec) +{ + int val; + unsigned int muxc, ccst, dppn, hpds, hsfl; + + val = yoga_c630_ec_read16(uec->ec, LENOVO_EC_USB_MUX); + + muxc = FIELD_GET(USB_MUX_MUXC, val); + ccst = FIELD_GET(USB_MUX_CCST, val); + dppn = FIELD_GET(USB_MUX_DPPN, val); + hpds = FIELD_GET(USB_MUX_HPDS, val); + hsfl = FIELD_GET(USB_MUX_HSFL, val); + + dev_dbg(uec->ucsi->dev, " mux %04x (muxc %d ccst %d dppn %d hpds %d hsfl %d)\n", + val, + muxc, ccst, dppn, hpds, hsfl); + + if (uec->ucsi->connector && uec->ucsi->connector[0].port) + typec_set_orientation(uec->ucsi->connector[0].port, + ccst == 1 ? + TYPEC_ORIENTATION_REVERSE : + TYPEC_ORIENTATION_NORMAL); +} + static int yoga_c630_ucsi_notify(struct notifier_block *nb, unsigned long action, void *data) { @@ -164,6 +205,7 @@ static int yoga_c630_ucsi_notify(struct notifier_block *nb, switch (action) { case LENOVO_EC_EVENT_USB: case LENOVO_EC_EVENT_HPD: + yoga_c630_ucsi_read_port0_status(uec); ucsi_connector_change(uec->ucsi, 1); return NOTIFY_OK; From patchwork Sat Jun 21 18:13:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 899182 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6808617736 for ; Sat, 21 Jun 2025 18:14:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750529670; cv=none; b=fXc5SIzCDC5vgFEiMbl+dLBtlWex4SV1bC/s/9yLmrWoaUjiQRChm+WNqZ/gqPkrhoF/9jSepHtVF1xOOSsw310FQO1wlo7ucxnKn3q2lIYBdu2sRd1qeNYgr49Kr3PzUF3q38OlUMbM25Dv+an9hZOzC5nzazGRGp7DpWQwU0I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750529670; c=relaxed/simple; bh=FpW79T9YvftggI3m1nG4aTepTbBBYG8c+lDmZC/zvy8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Vg/HuivcWVUSSIFkyqm1NN+Ic3tPPjW6krtrWjRxlWKHcIXTEbhI+mSKWrtfaUm2ukwzKnkLm0/SSzl6rLQ03pIp0G/Z6gP4VGmumaOmLusHAClZc5r0Xj7u9RrqXmnYNOPxA4OoIUeKpYHMF63XP4cjqvZwNWA1e81BTRLXxks= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=pSQQbo2N; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="pSQQbo2N" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 55LHoY9E008517 for ; Sat, 21 Jun 2025 18:14:27 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 6W7bz7mumVKjkQi3vedorRqnABekWR1kRWVKvxBpQYs=; b=pSQQbo2NxtSZglt2 IKG9FzI57m0lbu6GkQyas+xghftyNTqeJ3KfqzdzQdnXH7VjZrk3HESksmcRzIS7 SqxFZJ06tx/AwWwg48Z5LK9n48id+Thi9wI7SDSCqU8hFfYMO72eiXCqMGNyahRW 88/ihr1ZtqpuoCMEGQCuuKiRY3FcHrEEUyNIuRxmOeJtvxFMS0z/IcVG8JrttVb2 60eU9UblrNHKjShsZb32+jK0OZnLSkwCww3kTOPcY46j95Kta+cpcJM7w816Cju/ Q1hNaFk34yPIcKbmWLio3i2TR35TF8r9IvQXWvwHbgB1aAfu8xSttyvgvqZNGAFD 5+xPEg== Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 47dw9wrakw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Sat, 21 Jun 2025 18:14:27 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-7d40d2308a4so21130585a.0 for ; Sat, 21 Jun 2025 11:14:27 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750529666; x=1751134466; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6W7bz7mumVKjkQi3vedorRqnABekWR1kRWVKvxBpQYs=; b=CjkTZFDBxl9Gj6sb58ScefUH3sK5rtPaxMdQ8DmeG3EdF4hGJj/SNWgYYR0VI81bXr b4QxI95hz9fUVOwi5DVZZWjxQlmCIARY2edxiUhiVnB4IxEti4biFRkh0gXbQAvfkkWE Xu+7OnDswxiwK24AOWWA8W2dN02D9hg7OIjfWHbyXyPB8f3tjwNnCubvBCaNddC+9/Ix pwVez0ycaNScCwfAp3d/HiJGGCmvCWLcoxPah1hNKtOc+Wb2wedQnKVqX/34bPRIZ7NO 327vrAsBgGBHh3J8Y0lbGckmln0i2hDJN1Js1oh0QbQ6E+ti3H8fkRsT6rTnNtmrrbY4 GmcA== X-Gm-Message-State: AOJu0YyYhZIy7NsFrtz0yn0HgbGbhw+++NBE2GOHHtxVUEaD477K6/+A P5KqFy+ncXUj7uoLwqyV3TqaubxyeN8z1YqWfnkC020/OsZ69dl04LeX8QVTr/H4ZxVZ6rb+Nll Ao3ieJp4MetGYtEhE1hhyvEhnHSvibe4XCEIjq4C8qcc2n+R0b3YbDTULGHkFzmo= X-Gm-Gg: ASbGncumLl3uKx59ODofsKZx562+9cRZrk6DkCMScNkDMeHTN2v871TrGbdDRG6EWEw rI/R+bdqZUjtbKjJzCNoJP2Q3QzKvHAnGRXPcI+cIrSp6NUpctjg2SWuhVILDL7BQpKS0kNeOul 7qk1PbisL651yQ9paCvUio+0U7UMJLPSQL/4IaVHS60qy8/U8UwHJk1fUBbPBZsymaaZ3HEJiqb K4YlA1xNxmVZ0sGQTkwI/GRMJBZnernFEsZ0pBzqupSH1/XPe3xTBTgZIOuQtNimCcxm10QHGIi h6XgmDhnWqNWU59cnmH0ZSXV6YaiyX++d1hOhZFS47M9ill4D6OTSIg8ZgmPG6IeF7deJT1ioYf 3B+FdS9Xe47IQtfDSBl7v7/eOZk/XbuRck1c= X-Received: by 2002:a05:620a:4711:b0:7d3:f0b0:3923 with SMTP id af79cd13be357-7d3f98c058cmr794840285a.11.1750529666478; Sat, 21 Jun 2025 11:14:26 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGNu3e+Vqi/twA6YrEVVy5gvr3OvSabeNJNWBdMJf9Nc3t7dBPNmwhVHngVNg58YjWOkm3g1w== X-Received: by 2002:a05:620a:4711:b0:7d3:f0b0:3923 with SMTP id af79cd13be357-7d3f98c058cmr794837585a.11.1750529666039; Sat, 21 Jun 2025 11:14:26 -0700 (PDT) Received: from umbar.lan (2001-14ba-a0c3-3a00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a0c3:3a00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-553e414cf36sm752336e87.86.2025.06.21.11.14.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 21 Jun 2025 11:14:25 -0700 (PDT) From: Dmitry Baryshkov Date: Sat, 21 Jun 2025 21:13:03 +0300 Subject: [PATCH 8/8] usb: typec: ucsi: yoga-c630: register DRM HPD bridge Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250621-c630-ucsi-v1-8-a86de5e11361@oss.qualcomm.com> References: <20250621-c630-ucsi-v1-0-a86de5e11361@oss.qualcomm.com> In-Reply-To: <20250621-c630-ucsi-v1-0-a86de5e11361@oss.qualcomm.com> To: Heikki Krogerus , Greg Kroah-Hartman , Bryan O'Donoghue , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Bjorn Andersson , Konrad Dybcio Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3461; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=FpW79T9YvftggI3m1nG4aTepTbBBYG8c+lDmZC/zvy8=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBoVvZzIqHyyr70rdlkR2ynE+980npLhS9AnFqt6 48F5PPvF/+JATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCaFb2cwAKCRCLPIo+Aiko 1acnB/9NmCptu0kBEeP30DyUCAMSo1tFZMXGQ0MnaP11ImnSRZ78l+nehBzl2wZFKmSH1tlyXRv VTRUtBAkt61D7csum9Mqp7qLHsb1fBFFdnVOCafQRNGngXFcNI03wcCzvg3x4QQ5dSjXRYLeFI9 9XOK2lnYEJpSZJ1Qa2sE4d+lHf4tabQ44cGvYHE3URRdZIzqwcRhqA0EHbtPAk8MnQzpHgfBFL/ XK7wx2ETVGeH4GbNbkXwyj3Hhd316On6ZIChDR7yWA0ja1sV7PuiPtXxMjtfQh3GZ6XdBCamoU0 k2vNfS0l6QvnQLiFtAZZmYR3OaXo2ByvBLg6KhKZ77a1uTvN X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: rtYhP2_kZa7pzoTxA1MR1ZAl8gTCWf9l X-Authority-Analysis: v=2.4 cv=HcEUTjE8 c=1 sm=1 tr=0 ts=6856f683 cx=c_pps a=hnmNkyzTK/kJ09Xio7VxxA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=6IFa9wvqVegA:10 a=EUspDBNiAAAA:8 a=6fbo0VkVZcmtXeJ5A9EA:9 a=QEXdDO2ut3YA:10 a=PEH46H7Ffwr30OY-TuGO:22 X-Proofpoint-ORIG-GUID: rtYhP2_kZa7pzoTxA1MR1ZAl8gTCWf9l X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNjIxMDExNSBTYWx0ZWRfXwZpPXPgjnB+r zkckQqxXdkqX7Evag7acxu6PN15Gj0Ptu4b8kPIx6TJuJUOPm4m7Fa8it0Qe7hXoDiGnuqjFWJh mqK7d48lj4OAEgHpEN3VbgVyfvf8S5o1W3jgg53mvIbmhS24FwS87/PYexIM/ZfXgO6PqBQ+jzy 86ARXPzv9TGn1J5TjPQl0zWcpnoJ/nVbxMVFpVFRBjVSr4Lz9jYIUh/C6QtnMpD5OyMFCDfKu9n cY9am3QJ9wVVdHFhYMrKkFotiFOxLQ/9eT7RecVd4+XihZmg8Vlpfq6w3ofzE5WUduXQyOncUml HwMKq0Eb31w7oUMTCdUTwUJdcgqYyxpmqvI9tFKcjJ6AnZci/SLIKi5ryf8GfgWpUAE02g85V0U hkq3kPHmd2iuIBjwKpAUI7YI6dgUwCk6PLoEAQ0zuYHhUo/ZxoT/6/FDnwRsGoDewOLq8Iwo X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-06-21_06,2025-06-20_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 priorityscore=1501 impostorscore=0 spamscore=0 phishscore=0 clxscore=1015 mlxscore=0 suspectscore=0 bulkscore=0 adultscore=0 mlxlogscore=999 lowpriorityscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2506210115 On Qualcomm platforms DisplayPort driver expects to have a drm bridge in the final device on the USB-C chain. Register the DRM HPD bridge in order to fulfill this requirement and to send HPD events to the DRM driver. Signed-off-by: Dmitry Baryshkov --- drivers/usb/typec/ucsi/Kconfig | 1 + drivers/usb/typec/ucsi/ucsi_yoga_c630.c | 39 +++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/drivers/usb/typec/ucsi/Kconfig b/drivers/usb/typec/ucsi/Kconfig index 8bf8fefb4f07bccc4be90a4b7f771d91294386b0..52b53bb6dfed28c4272f8ccc5e31601aede29911 100644 --- a/drivers/usb/typec/ucsi/Kconfig +++ b/drivers/usb/typec/ucsi/Kconfig @@ -85,6 +85,7 @@ config CROS_EC_UCSI config UCSI_LENOVO_YOGA_C630 tristate "UCSI Interface Driver for Lenovo Yoga C630" depends on EC_LENOVO_YOGA_C630 + select DRM_AUX_HPD_BRIDGE if DRM_BRIDGE && OF help This driver enables UCSI support on the Lenovo Yoga C630 laptop. diff --git a/drivers/usb/typec/ucsi/ucsi_yoga_c630.c b/drivers/usb/typec/ucsi/ucsi_yoga_c630.c index f85170417d19cdc5ae39a15e2f97010259ef12f6..0187c1c4b21abc7b5429526ebb4538c28b2e2e77 100644 --- a/drivers/usb/typec/ucsi/ucsi_yoga_c630.c +++ b/drivers/usb/typec/ucsi/ucsi_yoga_c630.c @@ -12,10 +12,14 @@ #include #include #include +#include +#include #include #include #include +#include + #include "ucsi.h" #define LENOVO_EC_USB_MUX 0x08 @@ -29,6 +33,7 @@ struct yoga_c630_ucsi { struct yoga_c630_ec *ec; struct ucsi *ucsi; + struct auxiliary_device *bridge; struct notifier_block nb; u16 version; }; @@ -193,6 +198,13 @@ static void yoga_c630_ucsi_read_port0_status(struct yoga_c630_ucsi *uec) ccst == 1 ? TYPEC_ORIENTATION_REVERSE : TYPEC_ORIENTATION_NORMAL); + + if (uec->bridge) + drm_aux_hpd_bridge_notify(&uec->bridge->dev, + dppn != 0 ? + connector_status_connected : + connector_status_disconnected); + } static int yoga_c630_ucsi_notify(struct notifier_block *nb, @@ -237,6 +249,24 @@ static int yoga_c630_ucsi_probe(struct auxiliary_device *adev, uec->ec = ec; uec->nb.notifier_call = yoga_c630_ucsi_notify; + device_for_each_child_node_scoped(&adev->dev, fwnode) { + u32 port; + + ret = fwnode_property_read_u32(fwnode, "reg", &port); + if (ret < 0) { + dev_err(&adev->dev, "missing reg property of %pfwP\n", fwnode); + return ret; + } + + /* DP is only on port0 */ + if (port != 0) + continue; + + uec->bridge = devm_drm_dp_hpd_bridge_alloc(&adev->dev, to_of_node(fwnode)); + if (IS_ERR(uec->bridge)) + return PTR_ERR(uec->bridge); + } + uec->ucsi = ucsi_create(&adev->dev, &yoga_c630_ucsi_ops); if (IS_ERR(uec->ucsi)) return PTR_ERR(uec->ucsi); @@ -255,8 +285,17 @@ static int yoga_c630_ucsi_probe(struct auxiliary_device *adev, if (ret) goto err_unregister; + if (uec->bridge) { + ret = devm_drm_dp_hpd_bridge_add(&adev->dev, uec->bridge); + if (ret) + goto err_ucsi_unregister; + } + return 0; +err_ucsi_unregister: + ucsi_unregister(uec->ucsi); + err_unregister: yoga_c630_ec_unregister_notify(uec->ec, &uec->nb);