From nobody Tue Dec 16 08:48:56 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 0B6342F0C7E; Mon, 15 Dec 2025 12:42:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765802546; cv=none; b=By4bVN2qoeQxitAY+aIsXaP28lgGYkqrrjObQjiPF2BpzFP0/fUffKblUCYmrdxqSJJ6798Wga8b9fe9Rq006OcQeGC/YWzDwsOqD57IDwcBOfLaSaQIEU29On1VaNLH0+4uU46FKNcwpxpEdP8GFD9ffaF1PlH+86EcajAt1TE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765802546; c=relaxed/simple; bh=SxeMj0kCjVSEXQo72aMl0rDZYPINLL8BMuXE1qEGPPI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=V8RDX/LDtbO4f6da+0nqRyrD+dPl9dprkTjfsuwJcO2rlAYvC949uh2r9jK/ls8+fPb4h6Km3euLs+bkOtpQ/BToK2AsUMkvLrtgMU0CF1BDeJGYKzvwoDR+ruoEJADU/DqKVZ4XbRpCVKRDTb3d3fxydDVFzmyXk3ySQF2kG74= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZnJ6DQK5; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ZnJ6DQK5" Received: by smtp.kernel.org (Postfix) with ESMTPS id CF945C2BCB0; Mon, 15 Dec 2025 12:42:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1765802545; bh=SxeMj0kCjVSEXQo72aMl0rDZYPINLL8BMuXE1qEGPPI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=ZnJ6DQK5ot0Tr9XCB4zTXW+1EQyIl5o5Ei0oJj2cbP4omHmubOBR6wu2RaSDTamvm hpT4unC1t9xjuEOYL52HzJnKdPYD5NGXWSi/kOHKosbs/t2i9dm+84OrUcND2IeArJ mdHYxUG3SQLqadKfvjVT6prGXICk6g2Rp/8n+cUwxsnzOmtMosIygnzD4Lc+OWkAL8 gaP0ehJNNGkD0LTgSwVT6LXtv/4d1oI+yzfRJMQebVLLSFWzWgZjRjOLt9brV2R6ZY 1Aw83/xzMYn/tv7Mdlp1LxcIxWuACsOjKnURdoXKesOwbSlgIUz2gwxJRm++5Nx1RJ ggWpybpAN3fyA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id C5395D5B16F; Mon, 15 Dec 2025 12:42:25 +0000 (UTC) From: Xiangxu Yin via B4 Relay Date: Mon, 15 Dec 2025 20:42:04 +0800 Subject: [PATCH v8 08/12] phy: qcom: qmp-usbc: Add TCSR parsing and PHY mode setting Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251215-add-displayport-support-for-qcs615-platform-v8-8-cbc72c88a44e@oss.qualcomm.com> References: <20251215-add-displayport-support-for-qcs615-platform-v8-0-cbc72c88a44e@oss.qualcomm.com> In-Reply-To: <20251215-add-displayport-support-for-qcs615-platform-v8-0-cbc72c88a44e@oss.qualcomm.com> To: Vinod Koul , Neil Armstrong , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-arm-msm@vger.kernel.org, linux-phy@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, fange.zhang@oss.qualcomm.com, yongxing.mou@oss.qualcomm.com, li.liu@oss.qualcomm.com, tingwei.zhang@oss.qualcomm.com, Dmitry Baryshkov , Bjorn Andersson , Konrad Dybcio , Xiangxu Yin X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1765802542; l=2770; i=xiangxu.yin@oss.qualcomm.com; s=20241125; h=from:subject:message-id; bh=TCyU6xV0jZSERKXzLkDpnsdMnjfdzQb/+uM4BPEfHB4=; b=zMlX+0fLr11MpqdlHb3lN6nU/L09NgZNxMYaT2evvudFYzaRy6c2blDAHv5GyJpIDzYYRZZoL gb7+EZQGhlmB7FFAlYt0e4DE3xuBBKFrIqka+SgbKnxeVY7htiK5zzF X-Developer-Key: i=xiangxu.yin@oss.qualcomm.com; a=ed25519; pk=F1TwipJzpywfbt3n/RPi4l/A4AVF+QC89XzCHgZYaOc= X-Endpoint-Received: by B4 Relay for xiangxu.yin@oss.qualcomm.com/20241125 with auth_id=542 X-Original-From: Xiangxu Yin Reply-To: xiangxu.yin@oss.qualcomm.com From: Xiangxu Yin Extend TCSR parsing to read optional dp_phy_mode_reg and add qmp_usbc_set_phy_mode() to switch between USB and DP modes when supported. Reviewed-by: Dmitry Baryshkov Signed-off-by: Xiangxu Yin --- drivers/phy/qualcomm/phy-qcom-qmp-usbc.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-usbc.c b/drivers/phy/qualcom= m/phy-qcom-qmp-usbc.c index c8e0f9574ba6..0a634ec4029a 100644 --- a/drivers/phy/qualcomm/phy-qcom-qmp-usbc.c +++ b/drivers/phy/qualcomm/phy-qcom-qmp-usbc.c @@ -529,6 +529,12 @@ static const struct qmp_phy_cfg qcs615_usb3phy_cfg =3D= { .regs =3D qmp_v3_usb3phy_regs_layout_qcm2290, }; =20 +static void qmp_usbc_set_phy_mode(struct qmp_usbc *qmp, bool is_dp) +{ + if (qmp->tcsr_map && qmp->dp_phy_mode_reg) + regmap_write(qmp->tcsr_map, qmp->dp_phy_mode_reg, is_dp); +} + static int qmp_usbc_com_init(struct phy *phy) { struct qmp_usbc *qmp =3D phy_get_drvdata(phy); @@ -669,6 +675,8 @@ static int qmp_usbc_usb_enable(struct phy *phy) if (ret) goto out_unlock; =20 + qmp_usbc_set_phy_mode(qmp, false); + ret =3D qmp_usbc_usb_power_on(phy); if (ret) { qmp_usbc_com_exit(phy); @@ -1112,6 +1120,7 @@ static int qmp_usbc_typec_switch_set(struct typec_swi= tch_dev *sw, qmp_usbc_com_exit(qmp->usb_phy); =20 qmp_usbc_com_init(qmp->usb_phy); + qmp_usbc_set_phy_mode(qmp, false); qmp_usbc_usb_power_on(qmp->usb_phy); } =20 @@ -1262,15 +1271,16 @@ static int qmp_usbc_parse_dt(struct qmp_usbc *qmp) return 0; } =20 -static int qmp_usbc_parse_vls_clamp(struct qmp_usbc *qmp) +static int qmp_usbc_parse_tcsr(struct qmp_usbc *qmp) { struct of_phandle_args tcsr_args; struct device *dev =3D qmp->dev; - int ret; + int ret, args_count; =20 - /* for backwards compatibility ignore if there is no property */ - ret =3D of_parse_phandle_with_fixed_args(dev->of_node, "qcom,tcsr-reg", 1= , 0, - &tcsr_args); + args_count =3D of_property_count_u32_elems(dev->of_node, "qcom,tcsr-reg"); + args_count =3D args_count - 1; + ret =3D of_parse_phandle_with_fixed_args(dev->of_node, "qcom,tcsr-reg", + args_count, 0, &tcsr_args); if (ret =3D=3D -ENOENT) return 0; else if (ret < 0) @@ -1283,6 +1293,9 @@ static int qmp_usbc_parse_vls_clamp(struct qmp_usbc *= qmp) =20 qmp->vls_clamp_reg =3D tcsr_args.args[0]; =20 + if (args_count > 1) + qmp->dp_phy_mode_reg =3D tcsr_args.args[1]; + return 0; } =20 @@ -1318,7 +1331,7 @@ static int qmp_usbc_probe(struct platform_device *pde= v) if (ret) return ret; =20 - ret =3D qmp_usbc_parse_vls_clamp(qmp); + ret =3D qmp_usbc_parse_tcsr(qmp); if (ret) return ret; =20 --=20 2.34.1