c2c741ccce
Initial backport of at803x PHY driver cleanup. This is in preparation for split and addition of new PHY Family based on at803x needed for ipq807x and other IPQ Series SoC. Other affected patch are automatically refreshed with make target/linux/refresh Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
87 lines
2.6 KiB
Diff
87 lines
2.6 KiB
Diff
From 3ae3bc426eaf57ca8f53d75777d9a5ef779bc7b7 Mon Sep 17 00:00:00 2001
|
|
From: Christian Marangi <ansuelsmth@gmail.com>
|
|
Date: Fri, 8 Dec 2023 15:51:54 +0100
|
|
Subject: [PATCH 07/13] net: phy: at803x: move specific at8031 config_init to
|
|
dedicated function
|
|
|
|
Move specific at8031 config_init to dedicated function to make
|
|
at803x_config_init more generic and tidy things up.
|
|
|
|
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
|
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
---
|
|
drivers/net/phy/at803x.c | 45 ++++++++++++++++++++++------------------
|
|
1 file changed, 25 insertions(+), 20 deletions(-)
|
|
|
|
--- a/drivers/net/phy/at803x.c
|
|
+++ b/drivers/net/phy/at803x.c
|
|
@@ -951,27 +951,8 @@ static int at803x_hibernation_mode_confi
|
|
|
|
static int at803x_config_init(struct phy_device *phydev)
|
|
{
|
|
- struct at803x_priv *priv = phydev->priv;
|
|
int ret;
|
|
|
|
- if (phydev->drv->phy_id == ATH8031_PHY_ID) {
|
|
- /* Some bootloaders leave the fiber page selected.
|
|
- * Switch to the appropriate page (fiber or copper), as otherwise we
|
|
- * read the PHY capabilities from the wrong page.
|
|
- */
|
|
- phy_lock_mdio_bus(phydev);
|
|
- ret = at803x_write_page(phydev,
|
|
- priv->is_fiber ? AT803X_PAGE_FIBER :
|
|
- AT803X_PAGE_COPPER);
|
|
- phy_unlock_mdio_bus(phydev);
|
|
- if (ret)
|
|
- return ret;
|
|
-
|
|
- ret = at8031_pll_config(phydev);
|
|
- if (ret < 0)
|
|
- return ret;
|
|
- }
|
|
-
|
|
/* The RX and TX delay default is:
|
|
* after HW reset: RX delay enabled and TX delay disabled
|
|
* after SW reset: RX delay enabled, while TX delay retains the
|
|
@@ -1604,6 +1585,30 @@ static int at8031_probe(struct phy_devic
|
|
AT803X_WOL_EN, 0);
|
|
}
|
|
|
|
+static int at8031_config_init(struct phy_device *phydev)
|
|
+{
|
|
+ struct at803x_priv *priv = phydev->priv;
|
|
+ int ret;
|
|
+
|
|
+ /* Some bootloaders leave the fiber page selected.
|
|
+ * Switch to the appropriate page (fiber or copper), as otherwise we
|
|
+ * read the PHY capabilities from the wrong page.
|
|
+ */
|
|
+ phy_lock_mdio_bus(phydev);
|
|
+ ret = at803x_write_page(phydev,
|
|
+ priv->is_fiber ? AT803X_PAGE_FIBER :
|
|
+ AT803X_PAGE_COPPER);
|
|
+ phy_unlock_mdio_bus(phydev);
|
|
+ if (ret)
|
|
+ return ret;
|
|
+
|
|
+ ret = at8031_pll_config(phydev);
|
|
+ if (ret < 0)
|
|
+ return ret;
|
|
+
|
|
+ return at803x_config_init(phydev);
|
|
+}
|
|
+
|
|
static int qca83xx_config_init(struct phy_device *phydev)
|
|
{
|
|
u8 switch_revision;
|
|
@@ -2113,7 +2118,7 @@ static struct phy_driver at803x_driver[]
|
|
.name = "Qualcomm Atheros AR8031/AR8033",
|
|
.flags = PHY_POLL_CABLE_TEST,
|
|
.probe = at8031_probe,
|
|
- .config_init = at803x_config_init,
|
|
+ .config_init = at8031_config_init,
|
|
.config_aneg = at803x_config_aneg,
|
|
.soft_reset = genphy_soft_reset,
|
|
.set_wol = at803x_set_wol,
|