From nobody Sat Jun 13 20:20:29 2026 Received: from gloria.sntech.de (gloria.sntech.de [185.11.138.130]) (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 23D0C353EF3; Tue, 5 May 2026 17:04:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.11.138.130 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778000664; cv=none; b=vGLIqDL1ROo/B+sgNjwmux0XqKeAw68rbNgOfHNTP2fTO50ogESMrrokac6qAl8YE2C+qPaYKJKOzmMpIRvZWW+o8RuscJjj3nAKUL7qTc1svmNM8PDb07fuEAossx3tqeUBsATg4COekYXpXqmL8OeRgomwU+YEHTQ5CVeCwLA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778000664; c=relaxed/simple; bh=rC1JAnMcnNlo9GWblhcot0eQjeHFuR3FudhhRiOgZKk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YrndwxuAz4XIFry3j7tSErfZRWMHYBW+j1aXjfJT/9spHDoghriUKq1RuBT9H9iIyXU2KCaAymdWJYxEbDJuxZSK2J7OxYZCRS5arQK4MXMv9nIgqs6cQBgRU/AzrZWg2ZAofVZNoPqI1TEvTSi+F4rwZ5iZeF9tHlyZ1vd4JH0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=sntech.de; spf=pass smtp.mailfrom=sntech.de; dkim=pass (2048-bit key) header.d=sntech.de header.i=@sntech.de header.b=1NOlqDw6; arc=none smtp.client-ip=185.11.138.130 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=sntech.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sntech.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sntech.de header.i=@sntech.de header.b="1NOlqDw6" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sntech.de; s=gloria202408; h=Content-Transfer-Encoding:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-Type; bh=8q2IZq6215HQoBX7glbcRLyovR5wi8eLtrWHqEETf9E=; b=1NOlqDw6rTwmiPp3P/3is+4Cbi fnNd7WWSsTFRJAHmCrTtJT9WIfYL6ZtM4+ydiHyJ+EmOg+K5nlNcxag88C1I/XXrvnrjnmuGTaKI7 0gWhxtecMq0gEnkb2JEEDStfIWU8njd4EdE/7DRy0IhO2ifsIak1VJvwuXXzYc4V2D4ouI9pglwmI /mW/KnArWeZStq/8G2jLM6ugbrwo7knHzT2lSVpG+L6tqEqKBYOGbxBuJ4G401SM/njKjh7nhO8hz mdCBx7veyMwrE/6jXnUiopOR2BOmvWuQ/EoXx6F7HMU7i8zUrnHDogWGGzFmwr++p8YaKlXRFwczq 5pDrEyxw==; From: Heiko Stuebner To: vkoul@kernel.org Cc: neil.armstrong@linaro.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, heiko@sntech.de, linux-phy@lists.infradead.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, jonas@kwiboo.se Subject: [PATCH v2 1/5] dt-bindings: phy: rockchip,inno-usb2phy: Require GRF for RK3568/RV1108 Date: Tue, 5 May 2026 19:04:06 +0200 Message-ID: <20260505170410.3265305-2-heiko@sntech.de> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260505170410.3265305-1-heiko@sntech.de> References: <20260505170410.3265305-1-heiko@sntech.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jonas Karlman Typically these Rockchip USB2 PHYs are fully contained within a single GRF. However, for RK3568 and RV1108 regs to control the USB2 PHY is located in a different GRF compared to the base address. Update this binding to require rockchip,usbgrf for RK3568 and RV1108 to properly reflect that the USB GRF is required to control the USB2 PHYs on these variants. Also disable use of rockchip,usbgrf for variants where it is not required. This should not introduce any breakage as the affected usb2phy nodes for RK3568 and RV1108 were added together with a rockchip,usbgrf phandle in their initial commit. Signed-off-by: Jonas Karlman Acked-by: Rob Herring (Arm) Signed-off-by: Heiko Stuebner --- .../bindings/phy/rockchip,inno-usb2phy.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Documentation/devicetree/bindings/phy/rockchip,inno-usb2phy.ya= ml b/Documentation/devicetree/bindings/phy/rockchip,inno-usb2phy.yaml index 58e735b5dd05..b95c9e3e44fe 100644 --- a/Documentation/devicetree/bindings/phy/rockchip,inno-usb2phy.yaml +++ b/Documentation/devicetree/bindings/phy/rockchip,inno-usb2phy.yaml @@ -145,6 +145,20 @@ anyOf: - host-port =20 allOf: + - if: + properties: + compatible: + contains: + enum: + - rockchip,rk3568-usb2phy + - rockchip,rv1108-usb2phy + then: + required: + - rockchip,usbgrf + else: + properties: + rockchip,usbgrf: false + - if: properties: compatible: --=20 2.47.3 From nobody Sat Jun 13 20:20:29 2026 Received: from gloria.sntech.de (gloria.sntech.de [185.11.138.130]) (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 62A0F3E5572; Tue, 5 May 2026 17:04:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.11.138.130 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778000664; cv=none; b=Pdr0TIWFKBCy4UEQ5ELto61JRZIOYzQFusRXwEtYCsici3UbSVjhFguqbxBQII7J08PLTaiFv7IT46bqLE1EEsTn05vozP9mw2wqd6PcWyJqFNSpUtr2NqGvxh+ZfVuSM0yqVbjEs2i2w7/1e+1I0zHIBLAyLtiV3KuyjT6aPoY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778000664; c=relaxed/simple; bh=YcNTM/I8kC3DkRbj7PNH+YDTD8lQTstL9pSG6FO+CQ4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=paT8PP7rbDA/gPeQ7fglfXxSII77NaNbEXujmtAHhBsBIi4rWh3E9V3TIFJI3tvfyRv7wyAt2ovDzlo8xuv3dFhk+cH3t22sbeb4fE3Q1pobgNELFils7PQQL+2guaCMfcjETD+B7VNocSK0q9Sry9tTCSFcqH39fL0DgKu/vMY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=sntech.de; spf=pass smtp.mailfrom=sntech.de; dkim=pass (2048-bit key) header.d=sntech.de header.i=@sntech.de header.b=G1wRKirk; arc=none smtp.client-ip=185.11.138.130 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=sntech.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sntech.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sntech.de header.i=@sntech.de header.b="G1wRKirk" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sntech.de; s=gloria202408; h=Content-Transfer-Encoding:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-Type; bh=Ws/tCO7WabLbeqQ8hJ2tuff3zVFO2Oni3Ln1XQP7qCk=; b=G1wRKirk5O78gbh1nYtuVmsvLc i2R9B4STcdjhGllq0dIYDr6ikvk+90I8NBHVl5p+S3CiwUQcLXcOojXAhii+HdJIzLNoetwig9ibU kcOnu/rDObetVb0tqor3HLIU1/GX7v5jrW6mDYJL1ebsiE0S2aZDozOt3H1+Vqz0nuMnwzMSTVynT ykIqkRwv6Yy4BcS4D0Zl1A2MgSQaq3ASU1sTdVZpLBymJwCgNZKb3wD01ZOmfWX+8xxXDqk7+f3u2 SU2MM9UMhyQVct0l46cRjNcokwoZhWGQdXwl9bpRKj/GfZuGz70dcMCvto82fIOHf4QJwzCxivHGL HxQvtVCA==; From: Heiko Stuebner To: vkoul@kernel.org Cc: neil.armstrong@linaro.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, heiko@sntech.de, linux-phy@lists.infradead.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, jonas@kwiboo.se Subject: [PATCH v2 2/5] phy: rockchip: inno-usb2: Simplify rockchip,usbgrf handling Date: Tue, 5 May 2026 19:04:07 +0200 Message-ID: <20260505170410.3265305-3-heiko@sntech.de> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260505170410.3265305-1-heiko@sntech.de> References: <20260505170410.3265305-1-heiko@sntech.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jonas Karlman The logic to decide if usbgrf or grf should be used is more complex than it needs to be. For RK3568, RV1108 and soon RK3528 we can assign the rockchip,usbgrf regmap directly to grf instead of doing a usbgrf and grf dance. Simplify the code to only use the grf regmap and handle the logic of what regmap should be used in driver probe instead. The only expected change from this is that RK3528 can be supported because of an addition of a of_property_present() check. Signed-off-by: Jonas Karlman Signed-off-by: Heiko Stuebner Reviewed-by: Neil Armstrong --- drivers/phy/rockchip/phy-rockchip-inno-usb2.c | 68 +++++-------------- 1 file changed, 18 insertions(+), 50 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c b/drivers/phy/ro= ckchip/phy-rockchip-inno-usb2.c index 8f4c08e599aa..7cec45192393 100644 --- a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c +++ b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c @@ -228,7 +228,6 @@ struct rockchip_usb2phy_port { * struct rockchip_usb2phy - usb2.0 phy driver data. * @dev: pointer to device. * @grf: General Register Files regmap. - * @usbgrf: USB General Register Files regmap. * @clks: array of phy input clocks. * @clk480m: clock struct of phy output clk. * @clk480m_hw: clock struct of phy output clk management. @@ -246,7 +245,6 @@ struct rockchip_usb2phy_port { struct rockchip_usb2phy { struct device *dev; struct regmap *grf; - struct regmap *usbgrf; struct clk_bulk_data *clks; struct clk *clk480m; struct clk_hw clk480m_hw; @@ -261,11 +259,6 @@ struct rockchip_usb2phy { struct rockchip_usb2phy_port ports[USB2PHY_NUM_PORTS]; }; =20 -static inline struct regmap *get_reg_base(struct rockchip_usb2phy *rphy) -{ - return rphy->usbgrf =3D=3D NULL ? rphy->grf : rphy->usbgrf; -} - static inline int property_enable(struct regmap *base, const struct usb2phy_reg *reg, bool en) { @@ -323,12 +316,11 @@ static int rockchip_usb2phy_clk480m_prepare(struct cl= k_hw *hw) { struct rockchip_usb2phy *rphy =3D container_of(hw, struct rockchip_usb2phy, clk480m_hw); - struct regmap *base =3D get_reg_base(rphy); int ret; =20 /* turn on 480m clk output if it is off */ - if (!property_enabled(base, &rphy->phy_cfg->clkout_ctl)) { - ret =3D property_enable(base, &rphy->phy_cfg->clkout_ctl, true); + if (!property_enabled(rphy->grf, &rphy->phy_cfg->clkout_ctl)) { + ret =3D property_enable(rphy->grf, &rphy->phy_cfg->clkout_ctl, true); if (ret) return ret; =20 @@ -343,19 +335,17 @@ static void rockchip_usb2phy_clk480m_unprepare(struct= clk_hw *hw) { struct rockchip_usb2phy *rphy =3D container_of(hw, struct rockchip_usb2phy, clk480m_hw); - struct regmap *base =3D get_reg_base(rphy); =20 /* turn off 480m clk output */ - property_enable(base, &rphy->phy_cfg->clkout_ctl, false); + property_enable(rphy->grf, &rphy->phy_cfg->clkout_ctl, false); } =20 static int rockchip_usb2phy_clk480m_prepared(struct clk_hw *hw) { struct rockchip_usb2phy *rphy =3D container_of(hw, struct rockchip_usb2phy, clk480m_hw); - struct regmap *base =3D get_reg_base(rphy); =20 - return property_enabled(base, &rphy->phy_cfg->clkout_ctl); + return property_enabled(rphy->grf, &rphy->phy_cfg->clkout_ctl); } =20 static unsigned long @@ -574,7 +564,6 @@ static int rockchip_usb2phy_power_on(struct phy *phy) { struct rockchip_usb2phy_port *rport =3D phy_get_drvdata(phy); struct rockchip_usb2phy *rphy =3D dev_get_drvdata(phy->dev.parent); - struct regmap *base =3D get_reg_base(rphy); int ret; =20 dev_dbg(&rport->phy->dev, "port power on\n"); @@ -586,7 +575,7 @@ static int rockchip_usb2phy_power_on(struct phy *phy) if (ret) return ret; =20 - ret =3D property_enable(base, &rport->port_cfg->phy_sus, false); + ret =3D property_enable(rphy->grf, &rport->port_cfg->phy_sus, false); if (ret) { clk_disable_unprepare(rphy->clk480m); return ret; @@ -615,7 +604,6 @@ static int rockchip_usb2phy_power_off(struct phy *phy) { struct rockchip_usb2phy_port *rport =3D phy_get_drvdata(phy); struct rockchip_usb2phy *rphy =3D dev_get_drvdata(phy->dev.parent); - struct regmap *base =3D get_reg_base(rphy); int ret; =20 dev_dbg(&rport->phy->dev, "port power off\n"); @@ -623,7 +611,7 @@ static int rockchip_usb2phy_power_off(struct phy *phy) if (rport->suspended) return 0; =20 - ret =3D property_enable(base, &rport->port_cfg->phy_sus, true); + ret =3D property_enable(rphy->grf, &rport->port_cfg->phy_sus, true); if (ret) return ret; =20 @@ -787,28 +775,22 @@ static const char *chg_to_string(enum power_supply_ty= pe chg_type) static void rockchip_chg_enable_dcd(struct rockchip_usb2phy *rphy, bool en) { - struct regmap *base =3D get_reg_base(rphy); - - property_enable(base, &rphy->phy_cfg->chg_det.rdm_pdwn_en, en); - property_enable(base, &rphy->phy_cfg->chg_det.idp_src_en, en); + property_enable(rphy->grf, &rphy->phy_cfg->chg_det.rdm_pdwn_en, en); + property_enable(rphy->grf, &rphy->phy_cfg->chg_det.idp_src_en, en); } =20 static void rockchip_chg_enable_primary_det(struct rockchip_usb2phy *rphy, bool en) { - struct regmap *base =3D get_reg_base(rphy); - - property_enable(base, &rphy->phy_cfg->chg_det.vdp_src_en, en); - property_enable(base, &rphy->phy_cfg->chg_det.idm_sink_en, en); + property_enable(rphy->grf, &rphy->phy_cfg->chg_det.vdp_src_en, en); + property_enable(rphy->grf, &rphy->phy_cfg->chg_det.idm_sink_en, en); } =20 static void rockchip_chg_enable_secondary_det(struct rockchip_usb2phy *rph= y, bool en) { - struct regmap *base =3D get_reg_base(rphy); - - property_enable(base, &rphy->phy_cfg->chg_det.vdm_src_en, en); - property_enable(base, &rphy->phy_cfg->chg_det.idp_sink_en, en); + property_enable(rphy->grf, &rphy->phy_cfg->chg_det.vdm_src_en, en); + property_enable(rphy->grf, &rphy->phy_cfg->chg_det.idp_sink_en, en); } =20 #define CHG_DCD_POLL_TIME (100 * HZ / 1000) @@ -820,7 +802,6 @@ static void rockchip_chg_detect_work(struct work_struct= *work) struct rockchip_usb2phy_port *rport =3D container_of(work, struct rockchip_usb2phy_port, chg_work.work); struct rockchip_usb2phy *rphy =3D dev_get_drvdata(rport->phy->dev.parent); - struct regmap *base =3D get_reg_base(rphy); bool is_dcd, tmout, vout, vbus_attach; unsigned long delay; =20 @@ -834,7 +815,7 @@ static void rockchip_chg_detect_work(struct work_struct= *work) rockchip_usb2phy_power_off(rport->phy); /* put the controller in non-driving mode */ if (!vbus_attach) - property_enable(base, &rphy->phy_cfg->chg_det.opmode, false); + property_enable(rphy->grf, &rphy->phy_cfg->chg_det.opmode, false); /* Start DCD processing stage 1 */ rockchip_chg_enable_dcd(rphy, true); rphy->chg_state =3D USB_CHG_STATE_WAIT_FOR_DCD; @@ -898,7 +879,7 @@ static void rockchip_chg_detect_work(struct work_struct= *work) case USB_CHG_STATE_DETECTED: /* put the controller in normal mode */ if (!vbus_attach) - property_enable(base, &rphy->phy_cfg->chg_det.opmode, true); + property_enable(rphy->grf, &rphy->phy_cfg->chg_det.opmode, true); rockchip_usb2phy_otg_sm_work(&rport->otg_sm_work.work); dev_dbg(&rport->phy->dev, "charger =3D %s\n", chg_to_string(rphy->chg_type)); @@ -1353,27 +1334,14 @@ static int rockchip_usb2phy_probe(struct platform_d= evice *pdev) if (!rphy) return -ENOMEM; =20 - if (!dev->parent || !dev->parent->of_node) { + if (!dev->parent || !dev->parent->of_node || + of_property_present(np, "rockchip,usbgrf")) { rphy->grf =3D syscon_regmap_lookup_by_phandle(np, "rockchip,usbgrf"); - if (IS_ERR(rphy->grf)) { - dev_err(dev, "failed to locate usbgrf\n"); - return PTR_ERR(rphy->grf); - } } else { rphy->grf =3D syscon_node_to_regmap(dev->parent->of_node); - if (IS_ERR(rphy->grf)) - return PTR_ERR(rphy->grf); - } - - if (of_device_is_compatible(np, "rockchip,rv1108-usb2phy")) { - rphy->usbgrf =3D - syscon_regmap_lookup_by_phandle(dev->of_node, - "rockchip,usbgrf"); - if (IS_ERR(rphy->usbgrf)) - return PTR_ERR(rphy->usbgrf); - } else { - rphy->usbgrf =3D NULL; } + if (IS_ERR(rphy->grf)) + return PTR_ERR(rphy->grf); =20 if (of_property_read_u32_index(np, "reg", 0, ®)) { dev_err(dev, "the reg property is not assigned in %pOFn node\n", np); --=20 2.47.3 From nobody Sat Jun 13 20:20:29 2026 Received: from gloria.sntech.de (gloria.sntech.de [185.11.138.130]) (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 C06AA3AD529; Tue, 5 May 2026 17:04:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.11.138.130 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778000664; cv=none; b=BmD55s6MuRl6MxfnIQSOUcFFxj0bqeE9e3hil+y/rQvuW9o96ciD/ZhgEzzGBmWu0/Y49PKJanwNFk5rI2nZxCN/sYqp6bGiFtWFvsDx0mlY6nV6WtdOpDfOROyiFu+TlQHH2PIksP7zZf1XmMKfKeYaDWOEaNtMa2b5P3scQgI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778000664; c=relaxed/simple; bh=8ZoLOe12ID/7uovI00v6wKYmtdjPngoMenv4XujlqAA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EEgJqoksuAoS20Yz89FTsWfhNUO0LSJFpClMO2kTVszubetxjPRVo5RYYjQatr8qTEI4/liVtiPyXo+MxR2AFaplo/OB84ZLCnkYR8fUMMKgEACgx3CFGPp/0NFSep+xQ9LQjZuGG371CRnE3omViZkZ1GyU43N3tlt7cmgJQgs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=sntech.de; spf=pass smtp.mailfrom=sntech.de; dkim=pass (2048-bit key) header.d=sntech.de header.i=@sntech.de header.b=LLQKluJe; arc=none smtp.client-ip=185.11.138.130 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=sntech.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sntech.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sntech.de header.i=@sntech.de header.b="LLQKluJe" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sntech.de; s=gloria202408; h=Content-Transfer-Encoding:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-Type; bh=a7ZZa2fA4GJyEXrtVvhdL02eBrNP1m57y2wG+TdNGvk=; b=LLQKluJeH1HhlGVbCfL3AwRHIL sGFth6sZmW2GTqGnBYAF6i2nMdbP7RRxIvmt5IFOXxB112Me+NrmXsauMNVtPzaz/tpAZFMG3tDMu FwOkbkx7DcaiuWJpkzOF9VSClFLex+iE3d2sLB0EY5b8idLV3P4z57nwer+oT5MpPT8tNFCt/3zqA bR8CA6eCG89onkgWH84Rx/zULqhTBVccH8kRucH7UP/wO+w3X0o/zE5kzJ2MOa0wAbd0TNsrZIU6N Dvl8wS/e4kDXmYgQY9AV6KH9MG68uKfw23rhWkYnr3Hcn6EPc+9CqeQ5Lc3BGvGo3lgVDMp8On3uW 9vOS9W6g==; From: Heiko Stuebner To: vkoul@kernel.org Cc: neil.armstrong@linaro.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, heiko@sntech.de, linux-phy@lists.infradead.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, jonas@kwiboo.se Subject: [PATCH v2 3/5] dt-bindings: phy: rockchip,inno-usb2phy: Add compatible for RK3528 Date: Tue, 5 May 2026 19:04:08 +0200 Message-ID: <20260505170410.3265305-4-heiko@sntech.de> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260505170410.3265305-1-heiko@sntech.de> References: <20260505170410.3265305-1-heiko@sntech.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jonas Karlman The embedded USB2 PHY on RK3528 is very similar to the one in RK3568, the main difference being that it only uses two clocks instead of three. Add compatible to support the USB2 PHY in RK3528. Signed-off-by: Jonas Karlman Reviewed-by: Rob Herring (Arm) Signed-off-by: Heiko Stuebner --- .../bindings/phy/rockchip,inno-usb2phy.yaml | 30 ++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/Documentation/devicetree/bindings/phy/rockchip,inno-usb2phy.ya= ml b/Documentation/devicetree/bindings/phy/rockchip,inno-usb2phy.yaml index b95c9e3e44fe..f50fc69fbbe4 100644 --- a/Documentation/devicetree/bindings/phy/rockchip,inno-usb2phy.yaml +++ b/Documentation/devicetree/bindings/phy/rockchip,inno-usb2phy.yaml @@ -20,6 +20,7 @@ properties: - rockchip,rk3328-usb2phy - rockchip,rk3366-usb2phy - rockchip,rk3399-usb2phy + - rockchip,rk3528-usb2phy - rockchip,rk3562-usb2phy - rockchip,rk3568-usb2phy - rockchip,rk3576-usb2phy @@ -41,11 +42,15 @@ properties: maxItems: 3 =20 clock-names: - minItems: 1 - items: + oneOf: - const: phyclk - - const: aclk - - const: aclk_slv + - items: + - const: phyclk + - const: pclk + - items: + - const: phyclk + - const: aclk + - const: aclk_slv =20 assigned-clocks: description: @@ -65,6 +70,9 @@ properties: description: Muxed interrupt for both ports maxItems: 1 =20 + power-domains: + maxItems: 1 + resets: maxItems: 2 =20 @@ -150,6 +158,7 @@ allOf: compatible: contains: enum: + - rockchip,rk3528-usb2phy - rockchip,rk3568-usb2phy - rockchip,rv1108-usb2phy then: @@ -218,6 +227,19 @@ allOf: clock-names: maxItems: 1 =20 + - if: + properties: + compatible: + contains: + enum: + - rockchip,rk3528-usb2phy + then: + properties: + clocks: + minItems: 2 + clock-names: + minItems: 2 + - if: properties: compatible: --=20 2.47.3 From nobody Sat Jun 13 20:20:29 2026 Received: from gloria.sntech.de (gloria.sntech.de [185.11.138.130]) (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 5D5923AE1B9; Tue, 5 May 2026 17:04:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.11.138.130 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778000664; cv=none; b=NRhgAeQ2hnoVgbr8/Q3BSjOs2gGVxiW9mV0g7l2R0TsdQ9fgWSCFdnU0sdAUJEPjeGak9KNzKgbLWkrpr9bdUzv8yvgTjooAtsHTC15F32un/GXTxmuQNq2YgvnOFXrNpe3LQ97KtP9bRJ16zH+kPNzLdOp2/SpeF2N9WgWxzR4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778000664; c=relaxed/simple; bh=HNBD1IhghCSQSMMS6FSoF1r1MK9vAI8LZE0tx3rurhY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WCngTVvhaZT45MGY7O5eE42MAa0mk5c+O7tiR+6sPq4rJVUrFuHx+S2EQRquc5A31XfWI/8PVkzRXJ/vx+Ztte39NvZ4uE91sHEqpIfvAOJK80okPtNwEjHtMiHdP6YTvLZM7F5JqIASWA1Efr188Hks8YNCIvGtD8d+Q5yXF5M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=sntech.de; spf=pass smtp.mailfrom=sntech.de; dkim=pass (2048-bit key) header.d=sntech.de header.i=@sntech.de header.b=lqrs5Nai; arc=none smtp.client-ip=185.11.138.130 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=sntech.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sntech.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sntech.de header.i=@sntech.de header.b="lqrs5Nai" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sntech.de; s=gloria202408; h=Content-Transfer-Encoding:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-Type; bh=7mMTfDZ4nl8ekfgg7b9H2X02Eg7cD6K21MT96h6gSgM=; b=lqrs5NaiurW/3Qzu8QxAnQ4eZR 7q8u2pxSBzFPxzE0f3Zf5vR3dU2hNLVeKug5EK4Xi52Pyl8qBj1lD/beJxEnb142Tk6qyxdzU/8g8 t4hAq7d1ZR66opWn8q20kdcuXd8it0YlP01CfkZC/LwSzidwHl6Xv5OmaK0u9E24y3hczLfOYvILK gjNjA1S312f5bKTU2qg44u/bcF9z9cdXmW80FPprWCivMi40U1rSob5WHJu2E2tb/dLyG9z6++Oln 8PaDqwxZqWSxhs37g84NqqM+NYUWoz5ufhlGY2qsbkJaKtGthFiSuKSRrcAjUJH1zKnnfuHasFDpl +/6HbvwQ==; From: Heiko Stuebner To: vkoul@kernel.org Cc: neil.armstrong@linaro.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, heiko@sntech.de, linux-phy@lists.infradead.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, jonas@kwiboo.se Subject: [PATCH v2 4/5] phy: rockchip: inno-usb2: Add clkout_ctl_phy support Date: Tue, 5 May 2026 19:04:09 +0200 Message-ID: <20260505170410.3265305-5-heiko@sntech.de> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260505170410.3265305-1-heiko@sntech.de> References: <20260505170410.3265305-1-heiko@sntech.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jonas Karlman The 480m clk is controlled using regs in the PHY address space and not in the USB GRF address space on e.g. RK3528 and RK3506. Add a clkout_ctl_phy usb2phy_reg to handle enable/disable of the 480m clk on these SoCs. Signed-off-by: Jonas Karlman Signed-off-by: Heiko Stuebner Reviewed-by: Neil Armstrong --- drivers/phy/rockchip/phy-rockchip-inno-usb2.c | 47 +++++++++++++++---- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c b/drivers/phy/ro= ckchip/phy-rockchip-inno-usb2.c index 7cec45192393..d8879fcd4291 100644 --- a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c +++ b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c @@ -179,6 +179,7 @@ struct rockchip_usb2phy_cfg { unsigned int num_ports; int (*phy_tuning)(struct rockchip_usb2phy *rphy); struct usb2phy_reg clkout_ctl; + struct usb2phy_reg clkout_ctl_phy; const struct rockchip_usb2phy_port_cfg port_cfgs[USB2PHY_NUM_PORTS]; const struct rockchip_chg_det_reg chg_det; }; @@ -228,6 +229,7 @@ struct rockchip_usb2phy_port { * struct rockchip_usb2phy - usb2.0 phy driver data. * @dev: pointer to device. * @grf: General Register Files regmap. + * @phy_base: USB PHY regmap. * @clks: array of phy input clocks. * @clk480m: clock struct of phy output clk. * @clk480m_hw: clock struct of phy output clk management. @@ -245,6 +247,7 @@ struct rockchip_usb2phy_port { struct rockchip_usb2phy { struct device *dev; struct regmap *grf; + struct regmap *phy_base; struct clk_bulk_data *clks; struct clk *clk480m; struct clk_hw clk480m_hw; @@ -312,15 +315,33 @@ static void rockchip_usb2phy_clk_bulk_disable(void *d= ata) clk_bulk_disable_unprepare(rphy->num_clks, rphy->clks); } =20 -static int rockchip_usb2phy_clk480m_prepare(struct clk_hw *hw) +static void +rockchip_usb2phy_clk480m_clkout_ctl(struct clk_hw *hw, struct regmap **bas= e, + const struct usb2phy_reg **clkout_ctl) { struct rockchip_usb2phy *rphy =3D container_of(hw, struct rockchip_usb2phy, clk480m_hw); + + if (rphy->phy_cfg->clkout_ctl_phy.enable) { + *base =3D rphy->phy_base; + *clkout_ctl =3D &rphy->phy_cfg->clkout_ctl_phy; + } else { + *base =3D rphy->grf; + *clkout_ctl =3D &rphy->phy_cfg->clkout_ctl; + } +} + +static int rockchip_usb2phy_clk480m_prepare(struct clk_hw *hw) +{ + const struct usb2phy_reg *clkout_ctl; + struct regmap *base; int ret; =20 + rockchip_usb2phy_clk480m_clkout_ctl(hw, &base, &clkout_ctl); + /* turn on 480m clk output if it is off */ - if (!property_enabled(rphy->grf, &rphy->phy_cfg->clkout_ctl)) { - ret =3D property_enable(rphy->grf, &rphy->phy_cfg->clkout_ctl, true); + if (!property_enabled(base, clkout_ctl)) { + ret =3D property_enable(base, clkout_ctl, true); if (ret) return ret; =20 @@ -333,19 +354,23 @@ static int rockchip_usb2phy_clk480m_prepare(struct cl= k_hw *hw) =20 static void rockchip_usb2phy_clk480m_unprepare(struct clk_hw *hw) { - struct rockchip_usb2phy *rphy =3D - container_of(hw, struct rockchip_usb2phy, clk480m_hw); + const struct usb2phy_reg *clkout_ctl; + struct regmap *base; + + rockchip_usb2phy_clk480m_clkout_ctl(hw, &base, &clkout_ctl); =20 /* turn off 480m clk output */ - property_enable(rphy->grf, &rphy->phy_cfg->clkout_ctl, false); + property_enable(base, clkout_ctl, false); } =20 static int rockchip_usb2phy_clk480m_prepared(struct clk_hw *hw) { - struct rockchip_usb2phy *rphy =3D - container_of(hw, struct rockchip_usb2phy, clk480m_hw); + const struct usb2phy_reg *clkout_ctl; + struct regmap *base; + + rockchip_usb2phy_clk480m_clkout_ctl(hw, &base, &clkout_ctl); =20 - return property_enabled(rphy->grf, &rphy->phy_cfg->clkout_ctl); + return property_enabled(base, clkout_ctl); } =20 static unsigned long @@ -1336,9 +1361,13 @@ static int rockchip_usb2phy_probe(struct platform_de= vice *pdev) =20 if (!dev->parent || !dev->parent->of_node || of_property_present(np, "rockchip,usbgrf")) { + rphy->phy_base =3D device_node_to_regmap(np); + if (IS_ERR(rphy->phy_base)) + return PTR_ERR(rphy->phy_base); rphy->grf =3D syscon_regmap_lookup_by_phandle(np, "rockchip,usbgrf"); } else { rphy->grf =3D syscon_node_to_regmap(dev->parent->of_node); + rphy->phy_base =3D rphy->grf; } if (IS_ERR(rphy->grf)) return PTR_ERR(rphy->grf); --=20 2.47.3 From nobody Sat Jun 13 20:20:29 2026 Received: from gloria.sntech.de (gloria.sntech.de [185.11.138.130]) (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 A76774A2E3D; Tue, 5 May 2026 17:04:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.11.138.130 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778000667; cv=none; b=gBtReuFhZobe3nnfBGfb6L3gGkydRvJ9medVyxk/sf3z+dtdn+dGU2RwZrWv2p0q2ClkSPC2Rdk3vjb0rhvY/BxCcVRbdTU9OTPoip6LitIDNHAnGqCfsIsm/35FUGRf461SFw7ILiD7VXsYWsNRATtZpI3KeOtRO5gvKIDxDzE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778000667; c=relaxed/simple; bh=13uTom8yHT76udi5ySLbLH1GN72BcLRrSvMrD6KS+Eg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AaaNitrZsNI9Oo5/bP7Ii6hBnqV2U8+N1jLJtG6z8AgNNw+NUac6SzFPsNGijrX3f0HX6yuY58jicmzyNW2LJ16s1Sj4oA/OvsaOi0jPlsiD2ec2tcv0ZltQUL4pSTJz1DKwqFjJXu3Y9pmxi3IwbNo5IYP29hdnCyd7WayQHGQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=sntech.de; spf=pass smtp.mailfrom=sntech.de; dkim=pass (2048-bit key) header.d=sntech.de header.i=@sntech.de header.b=CB+mkdDp; arc=none smtp.client-ip=185.11.138.130 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=sntech.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sntech.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sntech.de header.i=@sntech.de header.b="CB+mkdDp" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sntech.de; s=gloria202408; h=Content-Transfer-Encoding:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-Type; bh=4GLZzOd7tqsEfXhwUP6urB+0MZvi2wv2cou5CsaMxLQ=; b=CB+mkdDpTsUjAeNWM9cf3NK3L6 VjZ8PQgzcpAKpggawT3l12irv2Ab7Lqn5/XGkwgqkvWgeG8vE1LLambaIMGC4Ss9wlQEo/eNNWHsm G8OlZjIJdh0wN4awXTYvOsaOoIqhzU44sEDdjIoOeCbak6vBtzfwXzs3A4DtliNhqHRJyF23yHVmt MXrWsi6w/10t7xiRZbh9AjrU6J8ade3OF/nUZtwwxF6lnW5jFop5sObhkX5awz5v+W2xcl2N6a3lO LhtoZtNrTiwrvfyl33bVh78xRlc9q35ZDiglt+4qLyzZlFF2ARms7TXGi2c+b742N5I7GAXyBs2Y5 OHkuqE7g==; From: Heiko Stuebner To: vkoul@kernel.org Cc: neil.armstrong@linaro.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, heiko@sntech.de, linux-phy@lists.infradead.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, jonas@kwiboo.se, Jianwei Zheng Subject: [PATCH v2 5/5] phy: rockchip: inno-usb2: Add support for RK3528 Date: Tue, 5 May 2026 19:04:10 +0200 Message-ID: <20260505170410.3265305-6-heiko@sntech.de> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260505170410.3265305-1-heiko@sntech.de> References: <20260505170410.3265305-1-heiko@sntech.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jianwei Zheng The RK3528 has a single USB2PHY with a otg and host port. Add support for the RK3528 variant of USB2PHY. PHY tuning for RK3528: - Turn off differential receiver in suspend mode to save power consumption. - Set HS eye-height to 400mV instead of default 450mV. - Choose the Tx fs/ls data as linestate from TX driver for otg port which uses dwc3 controller to improve fs/ls devices compatibility with long cables. Undocumented magic-values are based on the linux-stan-6.1-rkr5 tag of the vendor-kernel. Signed-off-by: Jianwei Zheng Signed-off-by: Jonas Karlman Signed-off-by: Heiko Stuebner Reviewed-by: Neil Armstrong --- drivers/phy/rockchip/phy-rockchip-inno-usb2.c | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c b/drivers/phy/ro= ckchip/phy-rockchip-inno-usb2.c index d8879fcd4291..133cfd6624e8 100644 --- a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c +++ b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c @@ -1511,6 +1511,38 @@ static int rk3128_usb2phy_tuning(struct rockchip_usb= 2phy *rphy) BIT(2) << BIT_WRITEABLE_SHIFT | 0); } =20 +static int rk3528_usb2phy_tuning(struct rockchip_usb2phy *rphy) +{ + int ret; + + /* Turn off otg port differential receiver in suspend mode */ + ret =3D regmap_write(rphy->phy_base, 0x30, BIT(18) | 0x0000); + if (ret) + return ret; + + /* Turn off host port differential receiver in suspend mode */ + ret =3D regmap_write(rphy->phy_base, 0x430, BIT(18) | 0x0000); + if (ret) + return ret; + + /* Set otg port HS eye height to 400mv (default is 450mv) */ + ret =3D regmap_write(rphy->phy_base, 0x30, GENMASK(22, 20) | 0x0000); + if (ret) + return ret; + + /* Set host port HS eye height to 400mv (default is 450mv) */ + ret =3D regmap_write(rphy->phy_base, 0x430, GENMASK(22, 20) | 0x0000); + if (ret) + return ret; + + /* Choose the Tx fs/ls data as linestate from TX driver for otg port */ + ret =3D regmap_write(rphy->phy_base, 0x94, GENMASK(22, 19) | 0x0018); + if (ret) + return ret; + + return 0; +} + static int rk3576_usb2phy_tuning(struct rockchip_usb2phy *rphy) { int ret; @@ -1924,6 +1956,57 @@ static const struct rockchip_usb2phy_cfg rk3399_phy_= cfgs[] =3D { { /* sentinel */ } }; =20 +static const struct rockchip_usb2phy_cfg rk3528_phy_cfgs[] =3D { + { + .reg =3D 0xffdf0000, + .num_ports =3D 2, + .phy_tuning =3D rk3528_usb2phy_tuning, + .clkout_ctl_phy =3D { 0x041c, 7, 2, 0, 0x27 }, + .port_cfgs =3D { + [USB2PHY_PORT_OTG] =3D { + .phy_sus =3D { 0x004c, 8, 0, 0, 0x1d1 }, + .bvalid_det_en =3D { 0x0074, 3, 2, 0, 3 }, + .bvalid_det_st =3D { 0x0078, 3, 2, 0, 3 }, + .bvalid_det_clr =3D { 0x007c, 3, 2, 0, 3 }, + .idfall_det_en =3D { 0x0074, 5, 5, 0, 1 }, + .idfall_det_st =3D { 0x0078, 5, 5, 0, 1 }, + .idfall_det_clr =3D { 0x007c, 5, 5, 0, 1 }, + .idrise_det_en =3D { 0x0074, 4, 4, 0, 1 }, + .idrise_det_st =3D { 0x0078, 4, 4, 0, 1 }, + .idrise_det_clr =3D { 0x007c, 4, 4, 0, 1 }, + .ls_det_en =3D { 0x0074, 0, 0, 0, 1 }, + .ls_det_st =3D { 0x0078, 0, 0, 0, 1 }, + .ls_det_clr =3D { 0x007c, 0, 0, 0, 1 }, + .utmi_avalid =3D { 0x006c, 1, 1, 0, 1 }, + .utmi_bvalid =3D { 0x006c, 0, 0, 0, 1 }, + .utmi_id =3D { 0x006c, 6, 6, 0, 1 }, + .utmi_ls =3D { 0x006c, 5, 4, 0, 1 }, + }, + [USB2PHY_PORT_HOST] =3D { + .phy_sus =3D { 0x005c, 8, 0, 0x1d2, 0x1d1 }, + .ls_det_en =3D { 0x0090, 0, 0, 0, 1 }, + .ls_det_st =3D { 0x0094, 0, 0, 0, 1 }, + .ls_det_clr =3D { 0x0098, 0, 0, 0, 1 }, + .utmi_ls =3D { 0x006c, 13, 12, 0, 1 }, + .utmi_hstdet =3D { 0x006c, 15, 15, 0, 1 }, + } + }, + .chg_det =3D { + .opmode =3D { 0x004c, 3, 0, 5, 1 }, + .cp_det =3D { 0x006c, 19, 19, 0, 1 }, + .dcp_det =3D { 0x006c, 18, 18, 0, 1 }, + .dp_det =3D { 0x006c, 20, 20, 0, 1 }, + .idm_sink_en =3D { 0x0058, 1, 1, 0, 1 }, + .idp_sink_en =3D { 0x0058, 0, 0, 0, 1 }, + .idp_src_en =3D { 0x0058, 2, 2, 0, 1 }, + .rdm_pdwn_en =3D { 0x0058, 3, 3, 0, 1 }, + .vdm_src_en =3D { 0x0058, 5, 5, 0, 1 }, + .vdp_src_en =3D { 0x0058, 4, 4, 0, 1 }, + }, + }, + { /* sentinel */ } +}; + static const struct rockchip_usb2phy_cfg rk3562_phy_cfgs[] =3D { { .reg =3D 0xff740000, @@ -2291,6 +2374,7 @@ static const struct of_device_id rockchip_usb2phy_dt_= match[] =3D { { .compatible =3D "rockchip,rk3328-usb2phy", .data =3D &rk3328_phy_cfgs }, { .compatible =3D "rockchip,rk3366-usb2phy", .data =3D &rk3366_phy_cfgs }, { .compatible =3D "rockchip,rk3399-usb2phy", .data =3D &rk3399_phy_cfgs }, + { .compatible =3D "rockchip,rk3528-usb2phy", .data =3D &rk3528_phy_cfgs }, { .compatible =3D "rockchip,rk3562-usb2phy", .data =3D &rk3562_phy_cfgs }, { .compatible =3D "rockchip,rk3568-usb2phy", .data =3D &rk3568_phy_cfgs }, { .compatible =3D "rockchip,rk3576-usb2phy", .data =3D &rk3576_phy_cfgs }, --=20 2.47.3