realtek: mdio: move read/write functions to config structure
authorMarkus Stockhausen <markus.stockhausen@gmx.de>
Wed, 24 Dec 2025 11:32:34 +0000 (12:32 +0100)
committerRobert Marko <robimarko@gmail.com>
Mon, 29 Dec 2025 11:57:05 +0000 (12:57 +0100)
Move the read/write functions to where they belong.

Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
Link: https://github.com/openwrt/openwrt/pull/21274
Signed-off-by: Robert Marko <robimarko@gmail.com>
target/linux/realtek/files-6.12/drivers/net/mdio/mdio-realtek-otto.c

index 97f8ae1a70fbf42ba560c7c9e844ff29364d5ad6..14f3e1668e56a2698f0b88563eed6d6ec78ff345 100644 (file)
@@ -163,17 +163,17 @@ struct rtmdio_bus_priv {
        bool smi_bus_isc45[RTMDIO_MAX_SMI_BUS];
        bool phy_is_internal[RTMDIO_MAX_PORT];
        phy_interface_t interfaces[RTMDIO_MAX_PORT];
-       int (*read_mmd_phy)(u32 port, u32 addr, u32 reg, u32 *val);
-       int (*write_mmd_phy)(u32 port, u32 addr, u32 reg, u32 val);
-       int (*read_phy)(u32 port, u32 page, u32 reg, u32 *val);
-       int (*write_phy)(u32 port, u32 page, u32 reg, u32 val);
-       int (*read_sds_phy)(int sds, int page, int regnum);
-       int (*write_sds_phy)(int sds, int page, int regnum, u16 val);
 };
 
 struct rtmdio_config {
        int cpu_port;
        int raw_page;
+       int (*read_mmd_phy)(u32 port, u32 addr, u32 reg, u32 *val);
+       int (*read_phy)(u32 port, u32 page, u32 reg, u32 *val);
+       int (*read_sds_phy)(int sds, int page, int regnum);
+       int (*write_mmd_phy)(u32 port, u32 addr, u32 reg, u32 val);
+       int (*write_phy)(u32 port, u32 page, u32 reg, u32 val);
+       int (*write_sds_phy)(int sds, int page, int regnum, u16 val);
 };
 
 /* SerDes reader/writer functions for the ports without external phy. */
@@ -1073,7 +1073,7 @@ static int rtmdio_read_c45(struct mii_bus *bus, int addr, int devnum, int regnum
        if (addr >= priv->cfg->cpu_port)
                return -ENODEV;
 
-       err = (*priv->read_mmd_phy)(addr, devnum, regnum, &val);
+       err = (*priv->cfg->read_mmd_phy)(addr, devnum, regnum, &val);
        pr_debug("rd_MMD(adr=%d, dev=%d, reg=%d) = %d, err = %d\n",
                 addr, devnum, regnum, val, err);
        return err ? err : val;
@@ -1113,7 +1113,7 @@ static int rtmdio_read_sds_phy(struct rtmdio_bus_priv *priv, int sds, int page,
 
        ret = rtmdio_map_sds_register(page, regnum, &sds_page, &sds_regnum);
        if (ret)
-               ret = priv->read_sds_phy(sds, sds_page, sds_regnum);
+               ret = priv->cfg->read_sds_phy(sds, sds_page, sds_regnum);
        pr_debug("rd_SDS(sds=%d, pag=%d, reg=%d) = %d\n", sds, page, regnum, ret);
 
        return ret;
@@ -1125,7 +1125,7 @@ static int rtmdio_write_sds_phy(struct rtmdio_bus_priv *priv, int sds, int page,
 
        ret = rtmdio_map_sds_register(page, regnum, &sds_page, &sds_regnum);
        if (ret)
-               ret = priv->write_sds_phy(sds, sds_page, sds_regnum, val);
+               ret = priv->cfg->write_sds_phy(sds, sds_page, sds_regnum, val);
        pr_debug("wr_SDS(sds=%d, pag=%d, reg=%d, val=%d) err = %d\n", sds, page, regnum, val, ret);
 
        return ret;
@@ -1147,7 +1147,7 @@ static int rtmdio_read(struct mii_bus *bus, int addr, int regnum)
                return rtmdio_read_sds_phy(priv, priv->sds_id[addr],
                                           priv->page[addr], regnum);
 
-       err = (*priv->read_phy)(addr, priv->page[addr], regnum, &val);
+       err = (*priv->cfg->read_phy)(addr, priv->page[addr], regnum, &val);
        pr_debug("rd_PHY(adr=%d, pag=%d, reg=%d) = %d, err = %d\n",
                 addr, priv->page[addr], regnum, val, err);
        return err ? err : val;
@@ -1161,7 +1161,7 @@ static int rtmdio_write_c45(struct mii_bus *bus, int addr, int devnum, int regnu
        if (addr >= priv->cfg->cpu_port)
                return -ENODEV;
 
-       err = (*priv->write_mmd_phy)(addr, devnum, regnum, val);
+       err = (*priv->cfg->write_mmd_phy)(addr, devnum, regnum, val);
        pr_debug("wr_MMD(adr=%d, dev=%d, reg=%d, val=%d) err = %d\n",
                 addr, devnum, regnum, val, err);
        return err;
@@ -1186,7 +1186,7 @@ static int rtmdio_write(struct mii_bus *bus, int addr, int regnum, u16 val)
                        return rtmdio_write_sds_phy(priv, priv->sds_id[addr],
                                                    priv->page[addr], regnum, val);
 
-               err = (*priv->write_phy)(addr, page, regnum, val);
+               err = (*priv->cfg->write_phy)(addr, page, regnum, val);
                pr_debug("wr_PHY(adr=%d, pag=%d, reg=%d, val=%d) err = %d\n",
                         addr, page, regnum, val, err);
                return err;
@@ -1441,42 +1441,18 @@ static int rtmdio_probe(struct platform_device *pdev)
        case RTMDIO_838X_FAMILY_ID:
                bus->name = "rtl838x-eth-mdio";
                bus->reset = rtmdio_838x_reset;
-               priv->read_sds_phy = rtmdio_838x_read_sds_phy;
-               priv->write_sds_phy = rtmdio_838x_write_sds_phy;
-               priv->read_mmd_phy = rtmdio_838x_read_mmd_phy;
-               priv->write_mmd_phy = rtmdio_838x_write_mmd_phy;
-               priv->read_phy = rtmdio_838x_read_phy;
-               priv->write_phy = rtmdio_838x_write_phy;
                break;
        case RTMDIO_839X_FAMILY_ID:
                bus->name = "rtl839x-eth-mdio";
                bus->reset = rtmdio_839x_reset;
-               priv->read_sds_phy = rtmdio_839x_read_sds_phy;
-               priv->write_sds_phy = rtmdio_839x_write_sds_phy;
-               priv->read_mmd_phy = rtmdio_839x_read_mmd_phy;
-               priv->write_mmd_phy = rtmdio_839x_write_mmd_phy;
-               priv->read_phy = rtmdio_839x_read_phy;
-               priv->write_phy = rtmdio_839x_write_phy;
                break;
        case RTMDIO_930X_FAMILY_ID:
                bus->name = "rtl930x-eth-mdio";
                bus->reset = rtmdio_930x_reset;
-               priv->read_sds_phy = rtmdio_930x_read_sds_phy;
-               priv->write_sds_phy = rtmdio_930x_write_sds_phy;
-               priv->read_mmd_phy = rtmdio_930x_read_mmd_phy;
-               priv->write_mmd_phy = rtmdio_930x_write_mmd_phy;
-               priv->read_phy = rtmdio_930x_read_phy;
-               priv->write_phy = rtmdio_930x_write_phy;
                break;
        case RTMDIO_931X_FAMILY_ID:
                bus->name = "rtl931x-eth-mdio";
                bus->reset = rtmdio_931x_reset;
-               priv->read_sds_phy = rtsds_931x_read;
-               priv->write_sds_phy = rtsds_931x_write;
-               priv->read_mmd_phy = rtmdio_931x_read_mmd_phy;
-               priv->write_mmd_phy = rtmdio_931x_write_mmd_phy;
-               priv->read_phy = rtmdio_931x_read_phy;
-               priv->write_phy = rtmdio_931x_write_phy;
                break;
        }
 
@@ -1557,21 +1533,45 @@ static int rtmdio_probe(struct platform_device *pdev)
 static const struct rtmdio_config rtmdio_838x_cfg = {
        .cpu_port       = 28,
        .raw_page       = 4095,
+       .read_mmd_phy   = rtmdio_838x_read_mmd_phy,
+       .read_phy       = rtmdio_838x_read_phy,
+       .read_sds_phy   = rtmdio_838x_read_sds_phy,
+       .write_mmd_phy  = rtmdio_838x_write_mmd_phy,
+       .write_phy      = rtmdio_838x_write_phy,
+       .write_sds_phy  = rtmdio_838x_write_sds_phy,
 };
 
 static const struct rtmdio_config rtmdio_839x_cfg = {
        .cpu_port       = 52,
        .raw_page       = 8191,
+       .read_mmd_phy   = rtmdio_839x_read_mmd_phy,
+       .read_phy       = rtmdio_839x_read_phy,
+       .read_sds_phy   = rtmdio_839x_read_sds_phy,
+       .write_mmd_phy  = rtmdio_839x_write_mmd_phy,
+       .write_phy      = rtmdio_839x_write_phy,
+       .write_sds_phy  = rtmdio_839x_write_sds_phy,
 };
 
 static const struct rtmdio_config rtmdio_930x_cfg = {
        .cpu_port       = 28,
        .raw_page       = 4095,
+       .read_mmd_phy   = rtmdio_930x_read_mmd_phy,
+       .read_phy       = rtmdio_930x_read_phy,
+       .read_sds_phy   = rtmdio_930x_read_sds_phy,
+       .write_mmd_phy  = rtmdio_930x_write_mmd_phy,
+       .write_phy      = rtmdio_930x_write_phy,
+       .write_sds_phy  = rtmdio_930x_write_sds_phy,
 };
 
 static const struct rtmdio_config rtmdio_931x_cfg = {
        .cpu_port       = 56,
        .raw_page       = 8191,
+       .read_mmd_phy   = rtmdio_931x_read_mmd_phy,
+       .read_phy       = rtmdio_931x_read_phy,
+       .read_sds_phy   = rtsds_931x_read,
+       .write_mmd_phy  = rtmdio_931x_write_mmd_phy,
+       .write_phy      = rtmdio_931x_write_phy,
+       .write_sds_phy  = rtsds_931x_write,
 };
 
 static const struct of_device_id rtmdio_ids[] = {