From 6cca6fffa06b1996f9bcc280f766e8ba4fa97d45 Mon Sep 17 00:00:00 2001
From: Johann Neuhauser <johann@it-neuhauser.de>
Date: Thu, 19 Dec 2019 13:07:17 +0100
Subject: [PATCH] ath79: phy-ar7200-usb: adapt old behavior of
 arch/mips/ath79/dev-usb.c

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.

Signed-off-by: Johann Neuhauser <johann@it-neuhauser.de>
---
 .../0004-phy-add-ath79-usb-phys.patch         | 24 ++++++++++++++-----
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/target/linux/ath79/patches-4.19/0004-phy-add-ath79-usb-phys.patch b/target/linux/ath79/patches-4.19/0004-phy-add-ath79-usb-phys.patch
index 6280baf913ff..fa3487d392e9 100644
--- a/target/linux/ath79/patches-4.19/0004-phy-add-ath79-usb-phys.patch
+++ b/target/linux/ath79/patches-4.19/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)) {
-- 
2.30.2