From nobody Mon Feb 9 16:01:06 2026 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 DB56F392C5B for ; Thu, 5 Feb 2026 09:21:14 +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=1770283275; cv=none; b=k20fiJlOO3XTxr1/KNbJhPSHlQikOsyOjSOn4NK2LQduJb2gm3e/+bR4ebSKP1B618lfowPCkfUqp/FuKRctbSnEKF0JWojmuOl2dmt/UVfJIWLTjqw84fO7GNMLXQDIadZMXY/hKyqjx5cvQsRhQcfjMns7s1tcHw6RCsh72jY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770283275; c=relaxed/simple; bh=0safHmvjAF5Dl2bJ32O0Wb8Fy67lbHdFK61KTGNQChU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GpIOImBHZHvwrKEni2kcWG3734dK8smRT0KIwjiZPF6xzkKrqB8Ftk2GJRMXMOi8eohot40EnLtLlzUE1AXZzWphKWJcLFtSV4XPqT8GGAtxFXRtEkjz3V2HhSFw4UmEvzoFigzdI89HcNHK/YcHqkifbqf6bPhDMKUdEKAA2tM= 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=oaysqcZQ; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=eB4sYVnu; 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="oaysqcZQ"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="eB4sYVnu" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6153dlRs2712978 for ; Thu, 5 Feb 2026 09:21:14 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= 2kz66T+V0rtwnMGBDRu8aeEFpABci/zcGgd00rNWRwU=; b=oaysqcZQO9Ai89FV 7B8EZvAHjtNkUJEZBE1V1Aw2Q1YrgBMnjm6euiMDsZerSnzeUM4i/sMiF5ZUSA/9 mpbsE1kh4VRSNro8k/grwJjYBAP7cNAw6uywsriPXJdmou+JQVLaoMFDImYj9wpg B11hZDZmHwe6ytPH/dcsa9XEARDB7IZSaeQ2/B8HlExjtCwCndnb9fYP+HqO6b3H 8zSZsqOLevco5rhHKxcFRHm/2IAcns+Rxauqcgl8bC1dv44jkVrp/8UP6S25jEP5 2NDZ1BJ+ckhPGtAT837WBpjMufQEfzGeq8De7hjY2K878zaZ6E2rqseOEDzoAC/C jN+csQ== 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 4c47ja385t-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 05 Feb 2026 09:21:13 +0000 (GMT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-8c71655aa11so215566985a.3 for ; Thu, 05 Feb 2026 01:21:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1770283273; x=1770888073; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=2kz66T+V0rtwnMGBDRu8aeEFpABci/zcGgd00rNWRwU=; b=eB4sYVnuT92XIgUxA4lMHWXfglPPb/3rImOXy+lq8N9dho2bsLymGT1HrEUzPndxPX tOFVfbk5pjcmgn0sFG4nsrwmFVVW9tbbbnC17SPSft0kl81GrTyGMjgs9COMYgMeV0p7 x2lv1qc8RPkGi8bGtt7SbVT5LDhhLQdAV6yiQ8EN557MkjrwvqMdZl4himytSS6VQItK /h6HjiWiyXdaFX2Gr+lzRQ6XR8qYB02zRQLIrJK9TzqyF+yPBOSBNsVMTp7jUKktKg/Z a8h6YiuzqTXzIdNZ8lST4sw/pptw/kcRAU5G8KtYh2Yr53Hkm6jCfig+WG4FxhpVt/8+ 3Lyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770283273; x=1770888073; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=2kz66T+V0rtwnMGBDRu8aeEFpABci/zcGgd00rNWRwU=; b=M+IdpoVABhbmxkoGScM03C76rUWEKmfTvWHF2/oxnxW0WGcxtRYJJqzVQyBhZB0/aA RkE4HQrmQ/Sj/u4XYXCfuM9YMn0fQHrpYTzamyYDybGLrDHc+mxMsyTbewAWOudcYtE/ HrovJvWxxdTHYyFxyyZElQwqND7doRfCm8efp5glQql63VXMBQucUcdFjyttEf2C+zKT tmfVT701Wy9ILcdlKrBayNTvcDoi2RYgyJSr9dF7NT3FVjY5IqxWeJoaifuNNDwcOcZD 10BAwP7Y3Lc1kYK93kDGJx9SU3rrTYmJdYr2CaD47jH/V886sEnAZTfoNfveca7kRefK r+xQ== X-Forwarded-Encrypted: i=1; AJvYcCXH3NdYI6y9BV0yiOds6AroQ+y1Jr/Cb6+zzJOEFt0j6p0h9P590sdMbTo/rJHerxQcaImuduAg3PW3x2s=@vger.kernel.org X-Gm-Message-State: AOJu0Yw/i6jYpSc4byt/TMQD1S2E8+DwrG+d+Yc9L7STJcA+5w/NnfyM TiiAUDstskB7P92EZtsqp4Rx57ZFguw1ahAFPFHWIb8G/xU7INpdS0I3gtb6qj+hVTvsEfoQ5qg eiHiaD2K390IWCbrHIAxQLV8DOOgM+QYKxtA+H772q2dQSq1NYQrZnagYFbVJjRdc293f8h3MXD I= X-Gm-Gg: AZuq6aKBw7x8JUyOb+0dTnYpb/jadY66hwv0Ack0eFD+/gUSRE5muMxk478gE0YCDka FX1ZKg6kafsmK0x6YQpYuPf5w+tzjy1uf8gZ/T+NOTCmpVlm4sb05UscrYJCq6hd8Df8RDAREYf ywqWTJYSEEBIOew1LhQIv0AqjMIe1u/EP8hnGc8mOdyoOY3Rbu1DzaZZ69BlZoCWMSsGB+CgAum yqn5wy1RfFZaKO50G1quYjGxrL1XCRVZj9meeucPIUpUgfC6eNrMyjAnlqWKa/GctSdAbL8/7C8 HiEqOwXDDFlYbq4zlIzoXd8sSQ0EFBl40fmNylx7kJtUY6Pf6qKwVbTRHFYbhq8p4z51VysuZys AzxDq9JIyH/QORarpITMFSfviIpBMk6rNqMoni0VnxbbNWgGdNbbo+pZLqSgl1DYPTR7mzlc= X-Received: by 2002:a05:620a:8301:b0:8c7:17b3:ae1a with SMTP id af79cd13be357-8ca2f9b71admr527873885a.45.1770283273068; Thu, 05 Feb 2026 01:21:13 -0800 (PST) X-Received: by 2002:a05:620a:8301:b0:8c7:17b3:ae1a with SMTP id af79cd13be357-8ca2f9b71admr527872685a.45.1770283272631; Thu, 05 Feb 2026 01:21:12 -0800 (PST) Received: from yongmou2.ap.qualcomm.com (Global_NAT1_IAD_FW.qualcomm.com. [129.46.232.65]) by smtp.gmail.com with ESMTPSA id af79cd13be357-8ca2fd2c3easm353674885a.32.2026.02.05.01.21.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Feb 2026 01:21:12 -0800 (PST) From: Yongxing Mou Date: Thu, 05 Feb 2026 17:20:55 +0800 Subject: [PATCH 3/3] phy: qcom: edp: Add eDP phy mode switch support 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: <20260205-edp_phy-v1-3-231882bbf3f1@oss.qualcomm.com> References: <20260205-edp_phy-v1-0-231882bbf3f1@oss.qualcomm.com> In-Reply-To: <20260205-edp_phy-v1-0-231882bbf3f1@oss.qualcomm.com> To: Vinod Koul , Neil Armstrong Cc: linux-arm-msm@vger.kernel.org, linux-phy@lists.infradead.org, linux-kernel@vger.kernel.org, Yongxing Mou X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1770283262; l=6361; i=yongxing.mou@oss.qualcomm.com; s=20250910; h=from:subject:message-id; bh=0safHmvjAF5Dl2bJ32O0Wb8Fy67lbHdFK61KTGNQChU=; b=LxoAlPOd5KyXUKpqF5UgKAM/Bmy4B6FstzpfXjLB42qMA5avYihFxiB1FReCgRX15mjn+xiKD bE9DcO69SwlBYzUNqXVE7URHZcvx2O6JmDa64Nyl8ZU0fp5tT0z/zeO X-Developer-Key: i=yongxing.mou@oss.qualcomm.com; a=ed25519; pk=rAy5J1eP+V7OXqH5FJ7ngMCtUrnHhut30ZTldOj52UM= X-Proofpoint-ORIG-GUID: MkPVR1KIK6LvEJhHxGHmuqVLD974AsKB X-Proofpoint-GUID: MkPVR1KIK6LvEJhHxGHmuqVLD974AsKB X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjA1MDA2NyBTYWx0ZWRfX/eORTLpMOh8X eAALNzCgb5ayH8L7PeLLxUIyInO2/cws1jrgApKAYQEBdM01XRzNH6Qzx+R5FmfS2AoKyV5lx+L ns9/trLzxkyzbsPEkzjkDyzvW3uqUEVdtiUoRwS4SGgi0lOqujRenTzCHSUVQyDu9QLzACDI4rJ 7K4MpeE4Gi3yofmcscLjqe5h9TBdNK/jP+JxlW1W1pxlUTi9b90K5ImbUpGtO6i3m1FNGcRGLzI ojr6p0itAlB9cWWJET/RVvd5BNkPRbtwz+lIw+L6qvygR7uZqFnd/BCJ7uNS0dvVHx8pqnw9Wsd bEb4mNuVEyzeQx4RD0VKFwu+Xtct2t2QElcP52ZRfzw194aT2V1U9hUoz0OLJf2aOVzSfARpDem CJroH10KMzeue0d0UWkKeqQOfkK1xnGaO/ZIj17CK8Zp1gDSudP9LZeTk/4wCZEJ4FHLDvMAMxE N1fZdaLGoPbuhosaoSA== X-Authority-Analysis: v=2.4 cv=a8E9NESF c=1 sm=1 tr=0 ts=69846109 cx=c_pps a=HLyN3IcIa5EE8TELMZ618Q==:117 a=C3Dk8TwHQYyIj7nOf9RCJw==:17 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=GUg6TPUWjBfrtBjo8qYA:9 a=QEXdDO2ut3YA:10 a=bTQJ7kPSJx9SKPbeHEYW:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-05_01,2026-02-05_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 phishscore=0 priorityscore=1501 bulkscore=0 malwarescore=0 spamscore=0 adultscore=0 lowpriorityscore=0 suspectscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602050067 Add DP/eDP switch support by splitting the PHY swing/pre-emphasis tables into separate DP and eDP configurations. This allows the driver to select the correct table based on the is_edp flag. Add a dedicated table for the SC7280/glymur platforms, as they are not compatible with the others. Signed-off-by: Yongxing Mou --- drivers/phy/qualcomm/phy-qcom-edp.c | 72 ++++++++++++++++++++++++++++-----= ---- 1 file changed, 56 insertions(+), 16 deletions(-) diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy= -qcom-edp.c index 388226dbad7f..85caa869a8c0 100644 --- a/drivers/phy/qualcomm/phy-qcom-edp.c +++ b/drivers/phy/qualcomm/phy-qcom-edp.c @@ -88,7 +88,8 @@ struct qcom_edp_phy_cfg { bool is_edp; const u8 *aux_cfg; const u8 *vco_div_cfg; - const struct qcom_edp_swing_pre_emph_cfg *swing_pre_emph_cfg; + const struct qcom_edp_swing_pre_emph_cfg *dp_swing_pre_emph_cfg; + const struct qcom_edp_swing_pre_emph_cfg *edp_swing_pre_emph_cfg; const struct phy_ver_ops *ver_ops; }; =20 @@ -151,6 +152,20 @@ static const struct qcom_edp_swing_pre_emph_cfg dp_phy= _swing_pre_emph_cfg =3D { .pre_emphasis_hbr3_hbr2 =3D &dp_pre_emp_hbr2_hbr3, }; =20 +static const u8 dp_pre_emp_hbr_rbr_v8[4][4] =3D { + { 0x00, 0x0e, 0x15, 0x1a }, + { 0x00, 0x0e, 0x15, 0xff }, + { 0x00, 0x0e, 0xff, 0xff }, + { 0x00, 0xff, 0xff, 0xff } +}; + +static const struct qcom_edp_swing_pre_emph_cfg dp_phy_swing_pre_emph_cfg_= v8 =3D { + .swing_hbr_rbr =3D &dp_swing_hbr_rbr, + .swing_hbr3_hbr2 =3D &dp_swing_hbr2_hbr3, + .pre_emphasis_hbr_rbr =3D &dp_pre_emp_hbr_rbr_v8, + .pre_emphasis_hbr3_hbr2 =3D &dp_pre_emp_hbr2_hbr3, +}; + static const u8 edp_swing_hbr_rbr[4][4] =3D { { 0x07, 0x0f, 0x16, 0x1f }, { 0x0d, 0x16, 0x1e, 0xff }, @@ -186,6 +201,27 @@ static const struct qcom_edp_swing_pre_emph_cfg edp_ph= y_swing_pre_emph_cfg =3D { .pre_emphasis_hbr3_hbr2 =3D &edp_pre_emp_hbr2_hbr3, }; =20 +static const u8 edp_swing_hbr2_hbr3_v3[4][4] =3D { + { 0x0b, 0x11, 0x16, 0x1b }, + { 0x0b, 0x19, 0x1f, 0xff }, + { 0x18, 0x1f, 0xff, 0xff }, + { 0x1f, 0xff, 0xff, 0xff } +}; + +static const u8 edp_pre_emp_hbr2_hbr3_v3[4][4] =3D { + { 0x0c, 0x15, 0x19, 0x1e }, + { 0x09, 0x14, 0x19, 0xff }, + { 0x0f, 0x14, 0xff, 0xff }, + { 0x0d, 0xff, 0xff, 0xff } +}; + +static const struct qcom_edp_swing_pre_emph_cfg edp_phy_swing_pre_emph_cfg= _v3 =3D { + .swing_hbr_rbr =3D &edp_swing_hbr_rbr, + .swing_hbr3_hbr2 =3D &edp_swing_hbr2_hbr3_v3, + .pre_emphasis_hbr_rbr =3D &edp_pre_emp_hbr_rbr, + .pre_emphasis_hbr3_hbr2 =3D &edp_pre_emp_hbr2_hbr3_v3, +}; + static const u8 edp_phy_aux_cfg_v4[DP_AUX_CFG_SIZE] =3D { 0x00, 0x13, 0x24, 0x00, 0x0a, 0x26, 0x0a, 0x03, 0x37, 0x03, 0x02, 0x02, 0= x00, }; @@ -242,12 +278,7 @@ static int qcom_edp_phy_init(struct phy *phy) DP_PHY_PD_CTL_PLL_PWRDN | DP_PHY_PD_CTL_DP_CLAMP_EN, edp->edp + DP_PHY_PD_CTL); =20 - /* - * TODO: Re-work the conditions around setting the cfg8 value - * when more information becomes available about why this is - * even needed. - */ - if (edp->cfg->swing_pre_emph_cfg && !edp->is_edp) + if (!edp->is_edp) aux_cfg[8] =3D 0xb7; =20 writel(0xfc, edp->edp + DP_PHY_MODE); @@ -271,7 +302,7 @@ static int qcom_edp_phy_init(struct phy *phy) =20 static int qcom_edp_set_voltages(struct qcom_edp *edp, const struct phy_co= nfigure_opts_dp *dp_opts) { - const struct qcom_edp_swing_pre_emph_cfg *cfg =3D edp->cfg->swing_pre_emp= h_cfg; + const struct qcom_edp_swing_pre_emph_cfg *cfg; unsigned int v_level =3D 0; unsigned int p_level =3D 0; int ret; @@ -279,12 +310,14 @@ static int qcom_edp_set_voltages(struct qcom_edp *edp= , const struct phy_configur u8 emph; int i; =20 + if (edp->is_edp) + cfg =3D edp->cfg->edp_swing_pre_emph_cfg; + else + cfg =3D edp->cfg->dp_swing_pre_emph_cfg; + if (!cfg) return 0; =20 - if (edp->is_edp) - cfg =3D &edp_phy_swing_pre_emph_cfg; - for (i =3D 0; i < dp_opts->lanes; i++) { v_level =3D max(v_level, dp_opts->voltage[i]); p_level =3D max(p_level, dp_opts->pre[i]); @@ -591,20 +624,24 @@ static const struct qcom_edp_phy_cfg sa8775p_dp_phy_c= fg =3D { .is_edp =3D false, .aux_cfg =3D edp_phy_aux_cfg_v5, .vco_div_cfg =3D edp_phy_vco_div_cfg_v4, - .swing_pre_emph_cfg =3D &edp_phy_swing_pre_emph_cfg, + .dp_swing_pre_emph_cfg =3D &dp_phy_swing_pre_emph_cfg, + .edp_swing_pre_emph_cfg =3D &edp_phy_swing_pre_emph_cfg, .ver_ops =3D &qcom_edp_phy_ops_v4, }; =20 static const struct qcom_edp_phy_cfg sc7280_dp_phy_cfg =3D { .aux_cfg =3D edp_phy_aux_cfg_v4, .vco_div_cfg =3D edp_phy_vco_div_cfg_v4, + .dp_swing_pre_emph_cfg =3D &dp_phy_swing_pre_emph_cfg, + .edp_swing_pre_emph_cfg =3D &edp_phy_swing_pre_emph_cfg_v3, .ver_ops =3D &qcom_edp_phy_ops_v3, }; =20 static const struct qcom_edp_phy_cfg sc8280xp_dp_phy_cfg =3D { .aux_cfg =3D edp_phy_aux_cfg_v4, .vco_div_cfg =3D edp_phy_vco_div_cfg_v4, - .swing_pre_emph_cfg =3D &dp_phy_swing_pre_emph_cfg, + .dp_swing_pre_emph_cfg =3D &dp_phy_swing_pre_emph_cfg, + .edp_swing_pre_emph_cfg =3D &edp_phy_swing_pre_emph_cfg, .ver_ops =3D &qcom_edp_phy_ops_v4, }; =20 @@ -612,7 +649,8 @@ static const struct qcom_edp_phy_cfg sc8280xp_edp_phy_c= fg =3D { .is_edp =3D true, .aux_cfg =3D edp_phy_aux_cfg_v4, .vco_div_cfg =3D edp_phy_vco_div_cfg_v4, - .swing_pre_emph_cfg =3D &edp_phy_swing_pre_emph_cfg, + .dp_swing_pre_emph_cfg =3D &dp_phy_swing_pre_emph_cfg, + .edp_swing_pre_emph_cfg =3D &edp_phy_swing_pre_emph_cfg, .ver_ops =3D &qcom_edp_phy_ops_v4, }; =20 @@ -811,7 +849,8 @@ static const struct phy_ver_ops qcom_edp_phy_ops_v6 =3D= { static struct qcom_edp_phy_cfg x1e80100_phy_cfg =3D { .aux_cfg =3D edp_phy_aux_cfg_v4, .vco_div_cfg =3D edp_phy_vco_div_cfg_v4, - .swing_pre_emph_cfg =3D &dp_phy_swing_pre_emph_cfg, + .dp_swing_pre_emph_cfg =3D &dp_phy_swing_pre_emph_cfg, + .edp_swing_pre_emph_cfg =3D &edp_phy_swing_pre_emph_cfg, .ver_ops =3D &qcom_edp_phy_ops_v6, }; =20 @@ -991,7 +1030,8 @@ static const struct phy_ver_ops qcom_edp_phy_ops_v8 = =3D { static struct qcom_edp_phy_cfg glymur_phy_cfg =3D { .aux_cfg =3D edp_phy_aux_cfg_v8, .vco_div_cfg =3D edp_phy_vco_div_cfg_v8, - .swing_pre_emph_cfg =3D &edp_phy_swing_pre_emph_cfg, + .dp_swing_pre_emph_cfg =3D &dp_phy_swing_pre_emph_cfg_v8, + .edp_swing_pre_emph_cfg =3D &edp_phy_swing_pre_emph_cfg, .ver_ops =3D &qcom_edp_phy_ops_v8, }; =20 --=20 2.43.0