diff options
author | Johann Neuhauser <johann@it-neuhauser.de> | 2019-12-19 13:07:17 +0100 |
---|---|---|
committer | Petr Štetiar <ynezz@true.cz> | 2020-02-23 08:27:32 +0100 |
commit | c9b6bb43ce4582706b5d9aed5b64d8f4b186c410 (patch) | |
tree | bdb78e879a303ad830accebc139bc0732014b617 /target/linux | |
parent | b2660e67f0fb9f3398b871ad1fef5725e1b5d7d2 (diff) | |
download | upstream-c9b6bb43ce4582706b5d9aed5b64d8f4b186c410.tar.gz upstream-c9b6bb43ce4582706b5d9aed5b64d8f4b186c410.tar.bz2 upstream-c9b6bb43ce4582706b5d9aed5b64d8f4b186c410.zip |
ath79: phy-ar7200-usb: adapt old behavior of arch/mips/ath79/dev-usb.c
[ Upstream commit 6cca6fffa06b1996f9bcc280f766e8ba4fa97d45 ]
Do not put usb-phy into reset if clearing the usb-phy reset or
setting the suspend_override has failed.
Reorder (de)asserts like in arch/mips/ath79/dev-usb.c.
Add an optional reset_control "usb-phy-analog", which is needed for
ar934x SoCs like in the old mach-driver arch/mips/ath79/dev-usb.c.
Tested-By: Lech Perczak <lech.perczak@gmail.com> [TL-WDR4300]
Signed-off-by: Johann Neuhauser <johann@it-neuhauser.de>
[added reference to upstream commit, Tested-by]
Signed-off-by: Petr Štetiar <ynezz@true.cz>
Diffstat (limited to 'target/linux')
-rw-r--r-- | target/linux/ath79/patches-4.14/0004-phy-add-ath79-usb-phys.patch | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/target/linux/ath79/patches-4.14/0004-phy-add-ath79-usb-phys.patch b/target/linux/ath79/patches-4.14/0004-phy-add-ath79-usb-phys.patch index 6280baf913..fa3487d392 100644 --- a/target/linux/ath79/patches-4.14/0004-phy-add-ath79-usb-phys.patch +++ b/target/linux/ath79/patches-4.14/0004-phy-add-ath79-usb-phys.patch @@ -194,7 +194,7 @@ Signed-off-by: John Crispin <john@phrozen.org> +MODULE_LICENSE("GPL"); --- /dev/null +++ b/drivers/phy/phy-ar7200-usb.c -@@ -0,0 +1,123 @@ +@@ -0,0 +1,135 @@ +/* + * Copyright (C) 2015 Alban Bedel <albeu@free.fr> + * @@ -212,6 +212,7 @@ Signed-off-by: John Crispin <john@phrozen.org> + +struct ar7200_usb_phy { + struct reset_control *rst_phy; ++ struct reset_control *rst_phy_analog; + struct reset_control *suspend_override; + struct phy *phy; + int gpio; @@ -222,12 +223,12 @@ Signed-off-by: John Crispin <john@phrozen.org> + struct ar7200_usb_phy *priv = phy_get_drvdata(phy); + int err = 0; + -+ if (priv->rst_phy) -+ err = reset_control_deassert(priv->rst_phy); -+ if (!err && priv->suspend_override) ++ if (priv->suspend_override) + err = reset_control_assert(priv->suspend_override); -+ if (err && priv->rst_phy) -+ err = reset_control_assert(priv->rst_phy); ++ if (priv->rst_phy) ++ err |= reset_control_deassert(priv->rst_phy); ++ if (priv->rst_phy_analog) ++ err |= reset_control_deassert(priv->rst_phy_analog); + + return err; +} @@ -241,6 +242,8 @@ Signed-off-by: John Crispin <john@phrozen.org> + err = reset_control_deassert(priv->suspend_override); + if (priv->rst_phy) + err |= reset_control_assert(priv->rst_phy); ++ if (priv->rst_phy_analog) ++ err |= reset_control_assert(priv->rst_phy_analog); + + return err; +} @@ -266,6 +269,15 @@ Signed-off-by: John Crispin <john@phrozen.org> + return PTR_ERR(priv->rst_phy); + } + ++ priv->rst_phy_analog = devm_reset_control_get_optional( ++ &pdev->dev, "usb-phy-analog"); ++ if (IS_ERR(priv->rst_phy_analog)) { ++ if (PTR_ERR(priv->rst_phy_analog) == -ENOENT) ++ priv->rst_phy_analog = NULL; ++ else ++ return PTR_ERR(priv->rst_phy_analog); ++ } ++ + priv->suspend_override = devm_reset_control_get_optional( + &pdev->dev, "usb-suspend-override"); + if (IS_ERR(priv->suspend_override)) { |