aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux
diff options
context:
space:
mode:
authorJohann Neuhauser <johann@it-neuhauser.de>2019-12-19 13:07:17 +0100
committerPetr Štetiar <ynezz@true.cz>2020-02-23 08:27:32 +0100
commitc9b6bb43ce4582706b5d9aed5b64d8f4b186c410 (patch)
treebdb78e879a303ad830accebc139bc0732014b617 /target/linux
parentb2660e67f0fb9f3398b871ad1fef5725e1b5d7d2 (diff)
downloadupstream-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.patch24
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)) {