mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-29 10:08:59 +00:00
6ced8cad8e
Adds support for GPON SFP modules based on the Realtek RTL8672 and
RTL9601C chips, including but not limited to:
* V-SOL V2801F
* C-Data FD511GX-RM0
* OPTON GP801R
* BAUDCOM BD-1234-SFM
* CPGOS03-0490 v2.0
* Ubiquiti U-Fiber Instant
* EXOT EGS1
Signed-off-by: Vladimir Markovets <abam_a@yahoo.com>
(cherry picked from commit f032601ed7
)
73 lines
2.1 KiB
Diff
73 lines
2.1 KiB
Diff
From e2dc261b872a92a055eb2e86ac136baf9b20f2f2 Mon Sep 17 00:00:00 2001
|
|
From: Russell King <rmk+kernel@armlinux.org.uk>
|
|
Date: Thu, 21 Nov 2019 17:21:33 +0000
|
|
Subject: [PATCH 647/660] net: sfp: move phy_start()/phy_stop() to phylink
|
|
|
|
Move phy_start() and phy_stop() into the module_start and module_stop
|
|
notifications in phylink, rather than having them in the SFP code.
|
|
This gives phylink responsibility for controlling the PHY, rather
|
|
than having SFP start and stop the PHY state machine.
|
|
|
|
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
|
---
|
|
drivers/net/phy/phylink.c | 22 ++++++++++++++++++++++
|
|
drivers/net/phy/sfp.c | 2 --
|
|
2 files changed, 22 insertions(+), 2 deletions(-)
|
|
|
|
--- a/drivers/net/phy/phylink.c
|
|
+++ b/drivers/net/phy/phylink.c
|
|
@@ -1772,6 +1772,26 @@ static int phylink_sfp_module_insert(voi
|
|
return ret;
|
|
}
|
|
|
|
+static int phylink_sfp_module_start(void *upstream)
|
|
+{
|
|
+ struct phylink *pl = upstream;
|
|
+
|
|
+ /* If this SFP module has a PHY, start the PHY now. */
|
|
+ if (pl->phydev)
|
|
+ phy_start(pl->phydev);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static void phylink_sfp_module_stop(void *upstream)
|
|
+{
|
|
+ struct phylink *pl = upstream;
|
|
+
|
|
+ /* If this SFP module has a PHY, stop it. */
|
|
+ if (pl->phydev)
|
|
+ phy_stop(pl->phydev);
|
|
+}
|
|
+
|
|
static void phylink_sfp_link_down(void *upstream)
|
|
{
|
|
struct phylink *pl = upstream;
|
|
@@ -1807,6 +1827,8 @@ static const struct sfp_upstream_ops sfp
|
|
.attach = phylink_sfp_attach,
|
|
.detach = phylink_sfp_detach,
|
|
.module_insert = phylink_sfp_module_insert,
|
|
+ .module_start = phylink_sfp_module_start,
|
|
+ .module_stop = phylink_sfp_module_stop,
|
|
.link_up = phylink_sfp_link_up,
|
|
.link_down = phylink_sfp_link_down,
|
|
.connect_phy = phylink_sfp_connect_phy,
|
|
--- a/drivers/net/phy/sfp.c
|
|
+++ b/drivers/net/phy/sfp.c
|
|
@@ -1412,7 +1412,6 @@ static void sfp_sm_mod_next(struct sfp *
|
|
|
|
static void sfp_sm_phy_detach(struct sfp *sfp)
|
|
{
|
|
- phy_stop(sfp->mod_phy);
|
|
sfp_remove_phy(sfp->sfp_bus);
|
|
phy_device_remove(sfp->mod_phy);
|
|
phy_device_free(sfp->mod_phy);
|
|
@@ -1443,7 +1442,6 @@ static void sfp_sm_probe_phy(struct sfp
|
|
}
|
|
|
|
sfp->mod_phy = phy;
|
|
- phy_start(phy);
|
|
}
|
|
|
|
static void sfp_sm_link_up(struct sfp *sfp)
|