From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id DA86AFF8876 for ; Tue, 28 Apr 2026 16:14:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References :Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=bnI6Y3JKtqPDtsca3ZY4Q5sp/nyTJbzCm31uGwYBiGs=; b=FaUzFGWLXA/nNhVqRfOlF3Catp hEqEZHkMa/kJrD/yyXeg74vbE8pWuCKu082vXjdAokZzwrsf0lMpeODP7bXgvAn7N9xiuhaEYKldA gE/UX0c1wkg/rO96BUveuGxDCAE2vSTWUKw+ZqKGNxuzF/JlCisxrfZ1PxNYV1HiBfjuJt85Znmw/ KfHX4p5ICgl44HDCO39qBZz3GlVapnFTthcImo5WRo44vcgn83WSS9D64Ds/qOHfccb2G5p7ooWkM 9aIlJosp9s5N6x/bDdXXqkd+R/7oGYsZc+3lbyhBNBDZ7DRUa1Pd+mrzD5KYTHLP55vF8ZFvYF7x3 8vQTkFsA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1wHl4w-00000001tMr-1nXg; Tue, 28 Apr 2026 16:14:30 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1wHl4i-00000001st6-0y9o; Tue, 28 Apr 2026 16:14:16 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Cc:To:In-Reply-To:References: Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Sender:Reply-To:Content-ID:Content-Description; bh=bnI6Y3JKtqPDtsca3ZY4Q5sp/nyTJbzCm31uGwYBiGs=; b=D9YYgRBdG52SmlXFAnCgf2xJa2 /qP410W0VbbBg2azpvxxdlznsOLI6w8P4BWVsezmxj1Novi6SfySdL0Cf4sy9Yu+5/bYYWANuufIF RGzLamF+OF2S92LZza+V8H0K+HZwCbaGxBuKQ9qZbSnl4CzRTam92hjGdXZwoKAnKYW5tsHrod4oo 0cahM7LphT4wdUj7hc9srZFNNhfFnDRyO7V49YqmTJsf6kwgqtwawKPNYUtNV5Yvu69VXvolXr5On ky6yEluWp9Dzz3x1jx9fL+m2qWoOYuXDhME9/j5qB9fH/lrHu0kaSm+rjd4wuXASztxebYPzBEpzF VRhHGbHQ==; Received: from bali.collaboradmins.com ([148.251.105.195]) by desiato.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1wHl4b-00000003ZLl-2JdS; Tue, 28 Apr 2026 16:14:14 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1777392842; bh=F+/X9KX/MbPYEGdlL8kpGC62tIqMCkZjsXpPGb1baWg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=cwk5+PMpOR9B73PuUr6E5MisgAfno/toLQMjIEqk9MN5oRYF24GhmZI1ZK8DMzxl8 bHarRyuSlw0I5Q0aNdmZLieRKBMgkcFCrYWb9DE6BTB724VF6cL4tKNDZvL+uOnrC9 rKe+YmIdkzV2syf1X1X4XthRFCTkARS0d23ELC1THmL1hBeJfItw88GWrdLO+o2hmT smw49iRL86QfmHFkVFiEwMUkjEko5VCY3k+i/kX0mrivzJLnAzTWGhHHqkJtGVlyhF 8j9r+c2RXq+fbfI1wK/Txf52qE0lBkBRnDODtIqvvsNWqd1mO84pgqXFrn9499Ftxd yJqcBZUdClgiw== Received: from jupiter.universe (unknown [100.64.1.62]) (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 2C94617E157E; Tue, 28 Apr 2026 18:14:02 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id 89A2D48003D; Tue, 28 Apr 2026 18:14:01 +0200 (CEST) From: Sebastian Reichel Date: Tue, 28 Apr 2026 18:13:46 +0200 Subject: [PATCH v4 07/16] phy: rockchip: usbdp: Support single-lane DP MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260428-rockchip-usbdp-cleanup-v4-7-7775671ece22@collabora.com> References: <20260428-rockchip-usbdp-cleanup-v4-0-7775671ece22@collabora.com> In-Reply-To: <20260428-rockchip-usbdp-cleanup-v4-0-7775671ece22@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=b37g3sREdBGDY7tFDKeV5U/vMOZkhC2Y7QMIV7WXbE0=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGnw3MnQ2wLMLAm/FnDWS23LSIY9nJ9TCqSdY 6z/yqiCC1chC4kCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJp8NzJAAoJENju1/PI O/qas+wQAJt6s6I3BRb6AULYaK7NWIDjQ3mLl68u/xaDeOEn3EfQ2hUo7MIiXANODzw83HWd+Mp aRYTXmOmK6NginPw+R5pZpx6O2Y959nFS9Q0/Yl+lYtOg1/k79n5ocypZU96DnJYq7fUL7E2FF8 I32k029YUUmDN1gf7yT8OxBPiPpaEN6BBfubVZLpgN4kcuYQ122kpKKfpfLBOehjHjyIhyl04Eh O3bDQ9Q3Zb2N2a7fyuJhz1XUsjiZpfaRqY2tvXejIWKDRYAy99KkrAhUIUvYAisEeAvzxLTBo3A P7IFxdKZAfdo5hUC1Zschxdd2yN/D+CrkBDJgiGBWi3m9rjr2rnNW3GC9XOLrISXFvI8j9URf+h vNTrkuj7quceTG+lNQ25ymQeJLpQlLxf2gQS5mkIg5SexNSE9TRQHt/ifAiZBrWHI5YzVVP2GbV EWdX4B9r/JBYDNZSLAKm/Lugxxk+AxOGEiQFI+nuBKs6eLE+D/hipMNmt3kNuYBRSiFw3QdS6ik fS6KFbNRbTRn8iO/PBW3vHEvJHKqeuW/2OUNxDvNc4ItI3cOeefDZ76I3EJZCVxtUqqdxDdjG8K Dh5QAdaFzNkUXIk70si/omihmJtAw+wGAwK98U+kx9FCGEBhxYrFFeZSbE22xC46amjNWyM8AA7 nyJy5HYGAOldJC17/kScrzg== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260428_171411_796109_FB46A179 X-CRM114-Status: GOOD ( 13.70 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org 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/rockchip/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; bool dp_in_use; + int dp_lanes; /* 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 = ; + * 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 + * --------------------------------------------------------------------------- */ static void rk_udphy_dplane_select(struct rk_udphy *udphy) @@ -544,18 +552,18 @@ static void rk_udphy_dplane_select(struct rk_udphy *udphy) const struct rk_udphy_cfg *cfg = udphy->cfgs; u32 value = 0; - switch (udphy->mode) { - case UDPHY_MODE_DP: - value |= 2 << udphy->dp_lane_sel[2] * 2; + switch (udphy->dp_lanes) { + case 4: value |= 3 << udphy->dp_lane_sel[3] * 2; + value |= 2 << udphy->dp_lane_sel[2] * 2; fallthrough; - case UDPHY_MODE_DP_USB: - value |= 0 << udphy->dp_lane_sel[0] * 2; + case 2: value |= 1 << udphy->dp_lane_sel[1] * 2; - break; + fallthrough; - case UDPHY_MODE_USB: + case 1: + value |= 0 << udphy->dp_lane_sel[0] * 2; break; default: @@ -568,28 +576,6 @@ static void rk_udphy_dplane_select(struct rk_udphy *udphy) FIELD_PREP(DP_AUX_DOUT_SEL, udphy->dp_aux_dout_sel) | value); } -static int rk_udphy_dplane_get(struct rk_udphy *udphy) -{ - int dp_lanes; - - switch (udphy->mode) { - case UDPHY_MODE_DP: - dp_lanes = 4; - break; - - case UDPHY_MODE_DP_USB: - dp_lanes = 2; - break; - - case UDPHY_MODE_USB: - default: - dp_lanes = 0; - break; - } - - return dp_lanes; -} - static void rk_udphy_dplane_enable(struct rk_udphy *udphy, int dp_lanes) { u32 val = 0; @@ -659,6 +645,7 @@ static void rk_udphy_set_typec_default_mapping(struct rk_udphy *udphy) } rk_udphy_mode_set(udphy, UDPHY_MODE_DP_USB); + udphy->dp_lanes = 2; } 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; } - if (num_lanes != 2 && num_lanes != 4) + if (num_lanes != 1 && num_lanes != 2 && num_lanes != 4) return dev_err_probe(udphy->dev, -EINVAL, "invalid number of lane mux\n"); @@ -923,7 +910,8 @@ static int rk_udphy_parse_lane_mux_data(struct rk_udphy *udphy) } udphy->mode = UDPHY_MODE_DP; - if (num_lanes == 2) { + udphy->dp_lanes = num_lanes; + if (num_lanes == 1 || num_lanes == 2) { udphy->mode |= UDPHY_MODE_USB; udphy->flip = (udphy->lane_mux_sel[0] == 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 = phy_get_drvdata(phy); - int ret, dp_lanes; + int ret; mutex_lock(&udphy->mutex); - dp_lanes = rk_udphy_dplane_get(udphy); - phy_set_bus_width(phy, dp_lanes); + phy_set_bus_width(phy, udphy->dp_lanes); ret = rk_udphy_power_on(udphy, UDPHY_MODE_DP); if (ret) goto unlock; - rk_udphy_dplane_enable(udphy, dp_lanes); + rk_udphy_dplane_enable(udphy, udphy->dp_lanes); rk_udphy_dplane_select(udphy); @@ -1365,6 +1352,7 @@ static int rk_udphy_typec_mux_set(struct typec_mux_dev *mux, udphy->lane_mux_sel[2] = PHY_LANE_MUX_DP; udphy->lane_mux_sel[3] = PHY_LANE_MUX_DP; mode = UDPHY_MODE_DP; + udphy->dp_lanes = 4; break; case TYPEC_DP_STATE_D: @@ -1381,6 +1369,7 @@ static int rk_udphy_typec_mux_set(struct typec_mux_dev *mux, udphy->lane_mux_sel[3] = PHY_LANE_MUX_DP; } mode = UDPHY_MODE_DP_USB; + udphy->dp_lanes = 2; break; } @@ -1529,7 +1518,7 @@ static int rk_udphy_probe(struct platform_device *pdev) ret = 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 = 8100; phy_set_drvdata(udphy->phy_dp, udphy); -- 2.53.0