net: phy: qcom: move the WoL function to shared library
authorLuo Jie <quic_luoj@quicinc.com>
Fri, 4 Jul 2025 05:31:13 +0000 (13:31 +0800)
committerJakub Kicinski <kuba@kernel.org>
Mon, 7 Jul 2025 23:43:47 +0000 (16:43 -0700)
Move the WoL (Wake-on-LAN) functionality to a shared library to enable
its reuse by the QCA808X PHY driver, incorporating support for WoL
functionality similar to the implementation in at8031_set_wol().

Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Signed-off-by: Luo Jie <quic_luoj@quicinc.com>
Link: https://patch.msgid.link/20250704-qcom_phy_wol_support-v1-1-053342b1538d@quicinc.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/phy/qcom/at803x.c
drivers/net/phy/qcom/qcom-phy-lib.c
drivers/net/phy/qcom/qcom.h

index 26350b962890b0321153d74758b13d817407d094..8f26e395e39f9aef31cd7c428418123b78708feb 100644 (file)
@@ -26,9 +26,6 @@
 
 #define AT803X_LED_CONTROL                     0x18
 
-#define AT803X_PHY_MMD3_WOL_CTRL               0x8012
-#define AT803X_WOL_EN                          BIT(5)
-
 #define AT803X_REG_CHIP_CONFIG                 0x1f
 #define AT803X_BT_BX_REG_SEL                   0x8000
 
@@ -866,30 +863,6 @@ static int at8031_config_init(struct phy_device *phydev)
        return at803x_config_init(phydev);
 }
 
-static int at8031_set_wol(struct phy_device *phydev,
-                         struct ethtool_wolinfo *wol)
-{
-       int ret;
-
-       /* First setup MAC address and enable WOL interrupt */
-       ret = at803x_set_wol(phydev, wol);
-       if (ret)
-               return ret;
-
-       if (wol->wolopts & WAKE_MAGIC)
-               /* Enable WOL function for 1588 */
-               ret = phy_modify_mmd(phydev, MDIO_MMD_PCS,
-                                    AT803X_PHY_MMD3_WOL_CTRL,
-                                    0, AT803X_WOL_EN);
-       else
-               /* Disable WoL function for 1588 */
-               ret = phy_modify_mmd(phydev, MDIO_MMD_PCS,
-                                    AT803X_PHY_MMD3_WOL_CTRL,
-                                    AT803X_WOL_EN, 0);
-
-       return ret;
-}
-
 static int at8031_config_intr(struct phy_device *phydev)
 {
        struct at803x_priv *priv = phydev->priv;
index d28815ef56bbf3987a5f613234ec27a40e50d778..af7d0d8e81be5cd3ff8e38b65d0d52552d6945f7 100644 (file)
@@ -115,6 +115,31 @@ int at803x_set_wol(struct phy_device *phydev,
 }
 EXPORT_SYMBOL_GPL(at803x_set_wol);
 
+int at8031_set_wol(struct phy_device *phydev,
+                  struct ethtool_wolinfo *wol)
+{
+       int ret;
+
+       /* First setup MAC address and enable WOL interrupt */
+       ret = at803x_set_wol(phydev, wol);
+       if (ret)
+               return ret;
+
+       if (wol->wolopts & WAKE_MAGIC)
+               /* Enable WOL function for 1588 */
+               ret = phy_modify_mmd(phydev, MDIO_MMD_PCS,
+                                    AT803X_PHY_MMD3_WOL_CTRL,
+                                    0, AT803X_WOL_EN);
+       else
+               /* Disable WoL function for 1588 */
+               ret = phy_modify_mmd(phydev, MDIO_MMD_PCS,
+                                    AT803X_PHY_MMD3_WOL_CTRL,
+                                    AT803X_WOL_EN, 0);
+
+       return ret;
+}
+EXPORT_SYMBOL_GPL(at8031_set_wol);
+
 void at803x_get_wol(struct phy_device *phydev,
                    struct ethtool_wolinfo *wol)
 {
index 4bb541728846d3b92efe50c213cf13fb0df0980b..7f7151c8bacaa5d8cdc15e5629d0c329e4f20a25 100644 (file)
 #define AT803X_LOC_MAC_ADDR_16_31_OFFSET       0x804B
 #define AT803X_LOC_MAC_ADDR_32_47_OFFSET       0x804A
 
+#define AT803X_PHY_MMD3_WOL_CTRL               0x8012
+#define AT803X_WOL_EN                          BIT(5)
+
 #define AT803X_DEBUG_ADDR                      0x1D
 #define AT803X_DEBUG_DATA                      0x1E
 
@@ -215,6 +218,8 @@ int at803x_debug_reg_mask(struct phy_device *phydev, u16 reg,
 int at803x_debug_reg_write(struct phy_device *phydev, u16 reg, u16 data);
 int at803x_set_wol(struct phy_device *phydev,
                   struct ethtool_wolinfo *wol);
+int at8031_set_wol(struct phy_device *phydev,
+                  struct ethtool_wolinfo *wol);
 void at803x_get_wol(struct phy_device *phydev,
                    struct ethtool_wolinfo *wol);
 int at803x_ack_interrupt(struct phy_device *phydev);