net: phy: qcom: create and move functions to shared library
authorChristian Marangi <ansuelsmth@gmail.com>
Mon, 29 Jan 2024 14:15:20 +0000 (15:15 +0100)
committerJakub Kicinski <kuba@kernel.org>
Thu, 1 Feb 2024 00:25:17 +0000 (16:25 -0800)
Create and move functions to shared library in preparation for qca83xx
PHY Family to be detached from at803x driver.

Only the shared defines are moved to the shared qcom.h header.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://lore.kernel.org/r/20240129141600.2592-3-ansuelsmth@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/phy/qcom/Kconfig
drivers/net/phy/qcom/Makefile
drivers/net/phy/qcom/at803x.c
drivers/net/phy/qcom/qcom-phy-lib.c [new file with mode: 0644]
drivers/net/phy/qcom/qcom.h [new file with mode: 0644]

index 2c274fbbe410df4827add1f54b0ea8dd5cace77e..fe47cc7c94d2a9ecede07c2ff5aa88a33f5b9803 100644 (file)
@@ -1,6 +1,10 @@
 # SPDX-License-Identifier: GPL-2.0-only
+config QCOM_NET_PHYLIB
+       tristate
+
 config AT803X_PHY
        tristate "Qualcomm Atheros AR803X PHYs and QCA833x PHYs"
+       select QCOM_NET_PHYLIB
        depends on REGULATOR
        help
          Currently supports the AR8030, AR8031, AR8033, AR8035 and internal
index 6a68da8aaa7bfde6d93f4dc21c9c6ff0f601f97a..bfba2ed7db279b47c9b5ff35b9f275e3cce0dc4b 100644 (file)
@@ -1,2 +1,3 @@
 # SPDX-License-Identifier: GPL-2.0
+obj-$(CONFIG_QCOM_NET_PHYLIB)  += qcom-phy-lib.o
 obj-$(CONFIG_AT803X_PHY)       += at803x.o
index 9c07a6cc6e677a0e51438887900e2327692faf76..8194618c086570fce39b2b2b4d03b63a9c40f3bb 100644 (file)
@@ -22,6 +22,8 @@
 #include <linux/sfp.h>
 #include <dt-bindings/net/qca-ar803x.h>
 
+#include "qcom.h"
+
 #define AT803X_SPECIFIC_FUNCTION_CONTROL       0x10
 #define AT803X_SFC_ASSERT_CRS                  BIT(11)
 #define AT803X_SFC_FORCE_LINK                  BIT(10)
@@ -84,9 +86,6 @@
 #define AT803X_REG_CHIP_CONFIG                 0x1f
 #define AT803X_BT_BX_REG_SEL                   0x8000
 
-#define AT803X_DEBUG_ADDR                      0x1D
-#define AT803X_DEBUG_DATA                      0x1E
-
 #define AT803X_MODE_CFG_MASK                   0x0F
 #define AT803X_MODE_CFG_BASET_RGMII            0x00
 #define AT803X_MODE_CFG_BASET_SGMII            0x01
 #define AT803X_PSSR                            0x11    /*PHY-Specific Status Register*/
 #define AT803X_PSSR_MR_AN_COMPLETE             0x0200
 
-#define AT803X_DEBUG_ANALOG_TEST_CTRL          0x00
-#define QCA8327_DEBUG_MANU_CTRL_EN             BIT(2)
-#define QCA8337_DEBUG_MANU_CTRL_EN             GENMASK(3, 2)
-#define AT803X_DEBUG_RX_CLK_DLY_EN             BIT(15)
-
-#define AT803X_DEBUG_SYSTEM_CTRL_MODE          0x05
-#define AT803X_DEBUG_TX_CLK_DLY_EN             BIT(8)
-
-#define AT803X_DEBUG_REG_HIB_CTRL              0x0b
-#define   AT803X_DEBUG_HIB_CTRL_SEL_RST_80U    BIT(10)
-#define   AT803X_DEBUG_HIB_CTRL_EN_ANY_CHANGE  BIT(13)
-#define   AT803X_DEBUG_HIB_CTRL_PS_HIB_EN      BIT(15)
-
 #define AT803X_DEBUG_REG_3C                    0x3C
 
 #define AT803X_DEBUG_REG_GREEN                 0x3D
@@ -393,18 +379,6 @@ MODULE_DESCRIPTION("Qualcomm Atheros AR803x and QCA808X PHY driver");
 MODULE_AUTHOR("Matus Ujhelyi");
 MODULE_LICENSE("GPL");
 
-enum stat_access_type {
-       PHY,
-       MMD
-};
-
-struct at803x_hw_stat {
-       const char *string;
-       u8 reg;
-       u32 mask;
-       enum stat_access_type access_type;
-};
-
 static struct at803x_hw_stat qca83xx_hw_stats[] = {
        { "phy_idle_errors", 0xa, GENMASK(7, 0), PHY},
        { "phy_receive_errors", 0x15, GENMASK(15, 0), PHY},
@@ -439,45 +413,6 @@ struct at803x_context {
        u16 led_control;
 };
 
-static int at803x_debug_reg_write(struct phy_device *phydev, u16 reg, u16 data)
-{
-       int ret;
-
-       ret = phy_write(phydev, AT803X_DEBUG_ADDR, reg);
-       if (ret < 0)
-               return ret;
-
-       return phy_write(phydev, AT803X_DEBUG_DATA, data);
-}
-
-static int at803x_debug_reg_read(struct phy_device *phydev, u16 reg)
-{
-       int ret;
-
-       ret = phy_write(phydev, AT803X_DEBUG_ADDR, reg);
-       if (ret < 0)
-               return ret;
-
-       return phy_read(phydev, AT803X_DEBUG_DATA);
-}
-
-static int at803x_debug_reg_mask(struct phy_device *phydev, u16 reg,
-                                u16 clear, u16 set)
-{
-       u16 val;
-       int ret;
-
-       ret = at803x_debug_reg_read(phydev, reg);
-       if (ret < 0)
-               return ret;
-
-       val = ret & 0xffff;
-       val &= ~clear;
-       val |= set;
-
-       return phy_write(phydev, AT803X_DEBUG_DATA, val);
-}
-
 static int at803x_write_page(struct phy_device *phydev, int page)
 {
        int mask;
diff --git a/drivers/net/phy/qcom/qcom-phy-lib.c b/drivers/net/phy/qcom/qcom-phy-lib.c
new file mode 100644 (file)
index 0000000..7192184
--- /dev/null
@@ -0,0 +1,53 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <linux/phy.h>
+#include <linux/module.h>
+
+#include "qcom.h"
+
+MODULE_DESCRIPTION("Qualcomm PHY driver Common Functions");
+MODULE_AUTHOR("Matus Ujhelyi");
+MODULE_AUTHOR("Christian Marangi <ansuelsmth@gmail.com>");
+MODULE_LICENSE("GPL");
+
+int at803x_debug_reg_read(struct phy_device *phydev, u16 reg)
+{
+       int ret;
+
+       ret = phy_write(phydev, AT803X_DEBUG_ADDR, reg);
+       if (ret < 0)
+               return ret;
+
+       return phy_read(phydev, AT803X_DEBUG_DATA);
+}
+EXPORT_SYMBOL_GPL(at803x_debug_reg_read);
+
+int at803x_debug_reg_mask(struct phy_device *phydev, u16 reg,
+                         u16 clear, u16 set)
+{
+       u16 val;
+       int ret;
+
+       ret = at803x_debug_reg_read(phydev, reg);
+       if (ret < 0)
+               return ret;
+
+       val = ret & 0xffff;
+       val &= ~clear;
+       val |= set;
+
+       return phy_write(phydev, AT803X_DEBUG_DATA, val);
+}
+EXPORT_SYMBOL_GPL(at803x_debug_reg_mask);
+
+int at803x_debug_reg_write(struct phy_device *phydev, u16 reg, u16 data)
+{
+       int ret;
+
+       ret = phy_write(phydev, AT803X_DEBUG_ADDR, reg);
+       if (ret < 0)
+               return ret;
+
+       return phy_write(phydev, AT803X_DEBUG_DATA, data);
+}
+EXPORT_SYMBOL_GPL(at803x_debug_reg_write);
diff --git a/drivers/net/phy/qcom/qcom.h b/drivers/net/phy/qcom/qcom.h
new file mode 100644 (file)
index 0000000..8eb476d
--- /dev/null
@@ -0,0 +1,34 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#define AT803X_DEBUG_ADDR                      0x1D
+#define AT803X_DEBUG_DATA                      0x1E
+
+#define AT803X_DEBUG_ANALOG_TEST_CTRL          0x00
+#define QCA8327_DEBUG_MANU_CTRL_EN             BIT(2)
+#define QCA8337_DEBUG_MANU_CTRL_EN             GENMASK(3, 2)
+#define AT803X_DEBUG_RX_CLK_DLY_EN             BIT(15)
+
+#define AT803X_DEBUG_SYSTEM_CTRL_MODE          0x05
+#define AT803X_DEBUG_TX_CLK_DLY_EN             BIT(8)
+
+#define AT803X_DEBUG_REG_HIB_CTRL              0x0b
+#define   AT803X_DEBUG_HIB_CTRL_SEL_RST_80U    BIT(10)
+#define   AT803X_DEBUG_HIB_CTRL_EN_ANY_CHANGE  BIT(13)
+#define   AT803X_DEBUG_HIB_CTRL_PS_HIB_EN      BIT(15)
+
+enum stat_access_type {
+       PHY,
+       MMD
+};
+
+struct at803x_hw_stat {
+       const char *string;
+       u8 reg;
+       u32 mask;
+       enum stat_access_type access_type;
+};
+
+int at803x_debug_reg_read(struct phy_device *phydev, u16 reg);
+int at803x_debug_reg_mask(struct phy_device *phydev, u16 reg,
+                         u16 clear, u16 set);
+int at803x_debug_reg_write(struct phy_device *phydev, u16 reg, u16 data);