From: Rosen Penev <rosenp@gmail.com>
To: linux-phy@lists.infradead.org
Cc: Alban Bedel <albeu@free.fr>, Vinod Koul <vkoul@kernel.org>,
Neil Armstrong <neil.armstrong@linaro.org>,
Manivannan Sadhasivam <mani@kernel.org>,
Philipp Zabel <p.zabel@pengutronix.de>,
linux-arm-msm@vger.kernel.org (open list:ARM/QUALCOMM MAILING
LIST), linux-kernel@vger.kernel.org (open list)
Subject: [PATCH] phy: ath79-usb: support the analog reset
Date: Thu, 5 Nov 2026 17:42:54 -0800 [thread overview]
Message-ID: <20261106014254.544923-1-rosenp@gmail.com> (raw)
From AR934x on, the analog part of the USB PHY has its own reset. The
old platform code released it after the PHY reset on AR934x, and left
it to the bootloader on QCA955x.
Take it as an optional "phy-analog" reset, release it after the PHY one
when powering on, and assert it first when powering off. This is the
reset handling OpenWrt has used on its AR934x, QCA955x and QCA956x
boards.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/phy/qualcomm/phy-ath79-usb.c | 33 +++++++++++++++++++++++++---
1 file changed, 30 insertions(+), 3 deletions(-)
diff --git a/drivers/phy/qualcomm/phy-ath79-usb.c b/drivers/phy/qualcomm/phy-ath79-usb.c
index 8e9565846b2f..1e7868fc0b5f 100644
--- a/drivers/phy/qualcomm/phy-ath79-usb.c
+++ b/drivers/phy/qualcomm/phy-ath79-usb.c
@@ -12,6 +12,7 @@
struct ath79_usb_phy {
struct reset_control *reset;
+ struct reset_control *analog_reset;
/* The suspend override logic is inverted, hence the no prefix
* to make the code a bit easier to understand.
*/
@@ -30,7 +31,19 @@ static int ath79_usb_phy_power_on(struct phy *phy)
}
err = reset_control_deassert(priv->reset);
- if (err && priv->no_suspend_override)
+ if (err)
+ goto err_suspend_override;
+
+ err = reset_control_deassert(priv->analog_reset);
+ if (err) {
+ reset_control_assert(priv->reset);
+ goto err_suspend_override;
+ }
+
+ return 0;
+
+err_suspend_override:
+ if (priv->no_suspend_override)
reset_control_deassert(priv->no_suspend_override);
return err;
@@ -41,14 +54,22 @@ static int ath79_usb_phy_power_off(struct phy *phy)
struct ath79_usb_phy *priv = phy_get_drvdata(phy);
int err = 0;
- err = reset_control_assert(priv->reset);
+ err = reset_control_assert(priv->analog_reset);
if (err)
return err;
+ err = reset_control_assert(priv->reset);
+ if (err) {
+ reset_control_deassert(priv->analog_reset);
+ return err;
+ }
+
if (priv->no_suspend_override) {
err = reset_control_deassert(priv->no_suspend_override);
- if (err)
+ if (err) {
reset_control_deassert(priv->reset);
+ reset_control_deassert(priv->analog_reset);
+ }
}
return err;
@@ -78,6 +99,12 @@ static int ath79_usb_phy_probe(struct platform_device *pdev)
if (IS_ERR(priv->no_suspend_override))
return PTR_ERR(priv->no_suspend_override);
+ /* AR934x and later also hold the analog part in reset */
+ priv->analog_reset = devm_reset_control_get_optional(&pdev->dev,
+ "phy-analog");
+ if (IS_ERR(priv->analog_reset))
+ return PTR_ERR(priv->analog_reset);
+
phy = devm_phy_create(&pdev->dev, NULL, &ath79_usb_phy_ops);
if (IS_ERR(phy))
return PTR_ERR(phy);
--
2.56.0
next reply other threads:[~2026-11-06 1:42 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-06 1:42 Rosen Penev [this message]
2026-11-06 8:42 ` Philipp Zabel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261106014254.544923-1-rosenp@gmail.com \
--to=rosenp@gmail.com \
--cc=albeu@free.fr \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-phy@lists.infradead.org \
--cc=mani@kernel.org \
--cc=neil.armstrong@linaro.org \
--cc=p.zabel@pengutronix.de \
--cc=vkoul@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®