From nobody Mon Apr 6 10:44:17 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (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 32F4E3D6CB8; Fri, 13 Mar 2026 17:57:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773424658; cv=none; b=U45aiX13nALdBdjDTmQTOQgFymT1GAuAYacC6neYRjZOwwNpLnubgLMIjElTzfjJgqXPeZ0ns9SymJUuDTvPQ7ei66Iv4LBrJuxhw3A/ZOtmSQAp4XfmS1OtG03owAeSjiUQOpItmwXcWaoa5Y+33o0jjgOnLdQ31V7qemUe/rE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773424658; c=relaxed/simple; bh=qMiM+y23mMIV/O2+DsAFTwCJPGth2zOC8TvDV61Cnco=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=J0lm3doxhB3kgtA/OKRADIkHUW25Egk1mVYrCILrmBHA7nN7LR1YR1U0gJSRYDQUK+B1UjvM2G65f+BomkOWZovqDEYEHIDeFBEt+9KyAARzdoBSCqBc/ntvA8B/adT8NdDLzZz6k1AdKHxjakAshd9c4btrl1euJC/BOakHp+M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=mbMo3aOC; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="mbMo3aOC" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1773424642; bh=qMiM+y23mMIV/O2+DsAFTwCJPGth2zOC8TvDV61Cnco=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=mbMo3aOCpPlqQJSBfLidHC5TV5+BwxFW0ZqWGmpjxOmGjf9l+buyzZkel27jpLywG mT28aVve7FxTzPd7ZsWrHyJRKM7wbXL1ckt/lE9Mz2C/gAaZQXqNG7mT9chXjaT5+k un4yUuyGua3g4bfVBVwE7iicLJtYkPCih4iXZRWQ0BQLSRTW1P/UQadhN95a6eXI2K beGaJyTySo4cZl+oycR8mk0UDno9gx8xSMicENDxXEZ5mbupSR84Ry6fY2yaywaiiM 5UkXBQ+S8D+fSTMBUBNCVJRERHMNgA8k2VIS8hDOv77leO0WktjPrmrMWdL6PBkji3 /QNe6RxE+sgFw== Received: from jupiter.universe (dyndsl-091-248-210-078.ewe-ip-backbone.de [91.248.210.78]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id E75F917E13D6; Fri, 13 Mar 2026 18:57:21 +0100 (CET) Received: by jupiter.universe (Postfix, from userid 1000) id 2C54748002D; Fri, 13 Mar 2026 18:57:21 +0100 (CET) From: Sebastian Reichel Date: Fri, 13 Mar 2026 18:57:16 +0100 Subject: [PATCH v3 07/12] phy: rockchip: usbdp: Support single-lane DP 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: <20260313-rockchip-usbdp-cleanup-v3-7-3e8fe89a35b5@collabora.com> References: <20260313-rockchip-usbdp-cleanup-v3-0-3e8fe89a35b5@collabora.com> In-Reply-To: <20260313-rockchip-usbdp-cleanup-v3-0-3e8fe89a35b5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=5209; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=ioOYbBoPnii0Ssh3FoAynz8BRGrqgJ5P5pyx9vo4JGQ=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGm0UADCgCHU3cp/kQDK0Gx62a9atSdS6o7iK p0WB7VQ8e2xx4kCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJptFAAAAoJENju1/PI O/qauaYP+wUjvP3v/QemWfx/0wY3zO39SdPFaeAm+Iuo5fNRiuAvEwzbe5YhVL4euJsyxedeBYB s5ijnzvAF644ZV85UzAqRU1qyS6NYFj2DBkPbbHJitLrgw4kVdhUIY6IHI8IfORRrChtc7uB4n7 zYno56zlioqcs8YUKonedIVIDsRBeryLlnQuMC50frr3EBwZWIxRW0BSmwi568t9PzhAdCMFJ9W oTInfgl17QbjS/NZ2j2dpc9U70gnLsDzOnpSiiVdaluxMJLpLWFdUBugqbBWdcOoz+qRimlKbbm sW1+BUfYmls0czrUBB5nVEbmwNQJwPgnva0AfhWjmIQrc0PvxkMYxsu8dSksvH3bH/z2g5p00Uj PkCCDmOpPk8g1wm6OFqHWmE1bYJ0eXZJxOb2e+z1XYs21banr7207V31tjTPId16yG7SRLPLY5g wfRM6v3OublX6MDBakukjTE4AjDsZni1qt+by9bp/8U+VgeCaFm5sbvurOJr8M4D9cOUl3lRUqJ W+PbPkZv8AIP3/K+nVdBHL+dMoKNc6MgTENkf76Fc5A6A8E3ckjQjRRhKT/+W0D23xqbCV8rtWP ku47zz7tYqgHDEYx6o2BLrMKHha9aI48yoF99llA88esEe4mE0irmpQkUny2QTifito150ei5/H pCRspd5dMch9SxL/xdWUx5g== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A From: Zhang Yubing Implement support for using just a single DisplayPort line. Signed-off-by: Zhang Yubing Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 61 +++++++++++++--------------= ---- 1 file changed, 25 insertions(+), 36 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index febc148a754e..bf8394174294 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -193,6 +193,7 @@ struct rk_udphy { int id; =20 bool dp_in_use; + int dp_lanes; =20 /* PHY const config */ const struct rk_udphy_cfg *cfgs; @@ -537,6 +538,13 @@ static void rk_udphy_usb_bvalid_enable(struct rk_udphy= *udphy, u8 enable) * <0 1> dpln0 dpln1 usbrx usbtx * <2 3> usbrx usbtx dpln0 dpln1 * -----------------------------------------------------------------------= ---- + * if 1 lane for dp function, 2 lane for usb function, define rockchip,dp-= lane-mux =3D ; + * sample as follow: + * -----------------------------------------------------------------------= ---- + * B11-B10 A2-A3 A11-A10 B2-B3 + * rockchip,dp-lane-mux ln0(tx/rx) ln1(tx) ln2(tx/rx) ln3(tx) + * <0> dpln0 \ usbrx usbtx + * -----------------------------------------------------------------------= ---- */ =20 static void rk_udphy_dplane_select(struct rk_udphy *udphy) @@ -544,18 +552,18 @@ static void rk_udphy_dplane_select(struct rk_udphy *u= dphy) const struct rk_udphy_cfg *cfg =3D udphy->cfgs; u32 value =3D 0; =20 - switch (udphy->mode) { - case UDPHY_MODE_DP: - value |=3D 2 << udphy->dp_lane_sel[2] * 2; + switch (udphy->dp_lanes) { + case 4: value |=3D 3 << udphy->dp_lane_sel[3] * 2; + value |=3D 2 << udphy->dp_lane_sel[2] * 2; fallthrough; =20 - case UDPHY_MODE_DP_USB: - value |=3D 0 << udphy->dp_lane_sel[0] * 2; + case 2: value |=3D 1 << udphy->dp_lane_sel[1] * 2; - break; + fallthrough; =20 - case UDPHY_MODE_USB: + case 1: + value |=3D 0 << udphy->dp_lane_sel[0] * 2; break; =20 default: @@ -568,28 +576,6 @@ static void rk_udphy_dplane_select(struct rk_udphy *ud= phy) FIELD_PREP(DP_AUX_DOUT_SEL, udphy->dp_aux_dout_sel) | value); } =20 -static int rk_udphy_dplane_get(struct rk_udphy *udphy) -{ - int dp_lanes; - - switch (udphy->mode) { - case UDPHY_MODE_DP: - dp_lanes =3D 4; - break; - - case UDPHY_MODE_DP_USB: - dp_lanes =3D 2; - break; - - case UDPHY_MODE_USB: - default: - dp_lanes =3D 0; - break; - } - - return dp_lanes; -} - static void rk_udphy_dplane_enable(struct rk_udphy *udphy, int dp_lanes) { u32 val =3D 0; @@ -659,6 +645,7 @@ static void rk_udphy_set_typec_default_mapping(struct r= k_udphy *udphy) } =20 rk_udphy_mode_set(udphy, UDPHY_MODE_DP_USB); + udphy->dp_lanes =3D 2; } =20 static int rk_udphy_orien_sw_set(struct typec_switch_dev *sw, @@ -897,7 +884,7 @@ static int rk_udphy_parse_lane_mux_data(struct rk_udphy= *udphy) return 0; } =20 - if (num_lanes !=3D 2 && num_lanes !=3D 4) + if (num_lanes !=3D 1 && num_lanes !=3D 2 && num_lanes !=3D 4) return dev_err_probe(udphy->dev, -EINVAL, "invalid number of lane mux\n"); =20 @@ -923,7 +910,8 @@ static int rk_udphy_parse_lane_mux_data(struct rk_udphy= *udphy) } =20 udphy->mode =3D UDPHY_MODE_DP; - if (num_lanes =3D=3D 2) { + udphy->dp_lanes =3D num_lanes; + if (num_lanes =3D=3D 1 || num_lanes =3D=3D 2) { udphy->mode |=3D UDPHY_MODE_USB; udphy->flip =3D (udphy->lane_mux_sel[0] =3D=3D PHY_LANE_MUX_DP); } @@ -1074,18 +1062,17 @@ static int rk_udphy_dp_phy_exit(struct phy *phy) static int rk_udphy_dp_phy_power_on(struct phy *phy) { struct rk_udphy *udphy =3D phy_get_drvdata(phy); - int ret, dp_lanes; + int ret; =20 mutex_lock(&udphy->mutex); =20 - dp_lanes =3D rk_udphy_dplane_get(udphy); - phy_set_bus_width(phy, dp_lanes); + phy_set_bus_width(phy, udphy->dp_lanes); =20 ret =3D rk_udphy_power_on(udphy, UDPHY_MODE_DP); if (ret) goto unlock; =20 - rk_udphy_dplane_enable(udphy, dp_lanes); + rk_udphy_dplane_enable(udphy, udphy->dp_lanes); =20 rk_udphy_dplane_select(udphy); =20 @@ -1365,6 +1352,7 @@ static int rk_udphy_typec_mux_set(struct typec_mux_de= v *mux, udphy->lane_mux_sel[2] =3D PHY_LANE_MUX_DP; udphy->lane_mux_sel[3] =3D PHY_LANE_MUX_DP; mode =3D UDPHY_MODE_DP; + udphy->dp_lanes =3D 4; break; =20 case TYPEC_DP_STATE_D: @@ -1381,6 +1369,7 @@ static int rk_udphy_typec_mux_set(struct typec_mux_de= v *mux, udphy->lane_mux_sel[3] =3D PHY_LANE_MUX_DP; } mode =3D UDPHY_MODE_DP_USB; + udphy->dp_lanes =3D 2; break; } =20 @@ -1529,7 +1518,7 @@ static int rk_udphy_probe(struct platform_device *pde= v) ret =3D PTR_ERR(udphy->phy_dp); return dev_err_probe(dev, ret, "failed to create DP phy\n"); } - phy_set_bus_width(udphy->phy_dp, rk_udphy_dplane_get(udphy)); + phy_set_bus_width(udphy->phy_dp, udphy->dp_lanes); udphy->phy_dp->attrs.max_link_rate =3D 8100; phy_set_drvdata(udphy->phy_dp, udphy); =20 --=20 2.51.0