]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: dsa: microchip: hook up ksz_switch_alloc() to chip-specific dsa_switch_ops
authorVladimir Oltean <vladimir.oltean@nxp.com>
Tue, 5 May 2026 14:25:07 +0000 (16:25 +0200)
committerJakub Kicinski <kuba@kernel.org>
Sat, 9 May 2026 02:09:13 +0000 (19:09 -0700)
Now that each switch driver has its own dsa_switch_ops (currently a copy
of ksz_switch_ops), we no longer need ksz_switch_ops and can remove it.

Get to the driver-specific dsa_switch_ops through the ksz_chip_data
structure.
Reorder the alloc()/get_match_data() calls such as to have that
pointer available.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: Bastien Curutchet (Schneider Electric) <bastien.curutchet@bootlin.com>
Link: https://patch.msgid.link/20260505-clean-ksz-driver-v1-7-05d70fa42461@bootlin.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/dsa/microchip/ksz8863_smi.c
drivers/net/dsa/microchip/ksz9477_i2c.c
drivers/net/dsa/microchip/ksz_common.c
drivers/net/dsa/microchip/ksz_common.h
drivers/net/dsa/microchip/ksz_spi.c

index a8bfcd917bf70ff33fe8a495a2092d2fbb10e585..ba08d2cf8e99f43c2834d5092459557f6be2de59 100644 (file)
@@ -140,14 +140,14 @@ static int ksz8863_smi_probe(struct mdio_device *mdiodev)
        int ret;
        int i;
 
-       dev = ksz_switch_alloc(&mdiodev->dev, mdiodev);
-       if (!dev)
-               return -ENOMEM;
-
        chip = device_get_match_data(ddev);
        if (!chip)
                return -EINVAL;
 
+       dev = ksz_switch_alloc(&mdiodev->dev, chip, mdiodev);
+       if (!dev)
+               return -ENOMEM;
+
        for (i = 0; i < __KSZ_NUM_REGMAPS; i++) {
                rc = ksz8863_regmap_config[i];
                rc.lock_arg = &dev->regmap_mutex;
index a2beb27459f18cabb222b1b3d44aaedbc25b8856..8e9d08f2e1d659c3cd444d0314118a4dd17111a1 100644 (file)
@@ -22,14 +22,14 @@ static int ksz9477_i2c_probe(struct i2c_client *i2c)
        struct ksz_device *dev;
        int i, ret;
 
-       dev = ksz_switch_alloc(&i2c->dev, i2c);
-       if (!dev)
-               return -ENOMEM;
-
        chip = device_get_match_data(ddev);
        if (!chip)
                return -EINVAL;
 
+       dev = ksz_switch_alloc(&i2c->dev, chip, i2c);
+       if (!dev)
+               return -ENOMEM;
+
        /* Save chip id to do special initialization when probing. */
        dev->chip_id = chip->chip_id;
        for (i = 0; i < __KSZ_NUM_REGMAPS; i++) {
index e48b9d5c0630118bfeef30b9b93e3157247028cf..37e575bf4e14d72e59afe2df82c1406be037dd01 100644 (file)
@@ -4640,68 +4640,9 @@ int ksz_resume(struct dsa_switch *ds)
        return 0;
 }
 
-static const struct dsa_switch_ops ksz_switch_ops = {
-       .get_tag_protocol       = ksz_get_tag_protocol,
-       .connect_tag_protocol   = ksz_connect_tag_protocol,
-       .get_phy_flags          = ksz_get_phy_flags,
-       .setup                  = ksz_setup,
-       .teardown               = ksz_teardown,
-       .phy_read               = ksz_phy_read16,
-       .phy_write              = ksz_phy_write16,
-       .phylink_get_caps       = ksz_phylink_get_caps,
-       .port_setup             = ksz_port_setup,
-       .set_ageing_time        = ksz_set_ageing_time,
-       .get_strings            = ksz_get_strings,
-       .get_ethtool_stats      = ksz_get_ethtool_stats,
-       .get_sset_count         = ksz_sset_count,
-       .port_bridge_join       = ksz_port_bridge_join,
-       .port_bridge_leave      = ksz_port_bridge_leave,
-       .port_hsr_join          = ksz_hsr_join,
-       .port_hsr_leave         = ksz_hsr_leave,
-       .port_set_mac_address   = ksz_port_set_mac_address,
-       .port_stp_state_set     = ksz_port_stp_state_set,
-       .port_teardown          = ksz_port_teardown,
-       .port_pre_bridge_flags  = ksz_port_pre_bridge_flags,
-       .port_bridge_flags      = ksz_port_bridge_flags,
-       .port_fast_age          = ksz_port_fast_age,
-       .port_vlan_filtering    = ksz_port_vlan_filtering,
-       .port_vlan_add          = ksz_port_vlan_add,
-       .port_vlan_del          = ksz_port_vlan_del,
-       .port_fdb_dump          = ksz_port_fdb_dump,
-       .port_fdb_add           = ksz_port_fdb_add,
-       .port_fdb_del           = ksz_port_fdb_del,
-       .port_mdb_add           = ksz_port_mdb_add,
-       .port_mdb_del           = ksz_port_mdb_del,
-       .port_mirror_add        = ksz_port_mirror_add,
-       .port_mirror_del        = ksz_port_mirror_del,
-       .get_stats64            = ksz_get_stats64,
-       .get_pause_stats        = ksz_get_pause_stats,
-       .port_change_mtu        = ksz_change_mtu,
-       .port_max_mtu           = ksz_max_mtu,
-       .get_wol                = ksz_get_wol,
-       .set_wol                = ksz_set_wol,
-       .suspend                = ksz_suspend,
-       .resume                 = ksz_resume,
-       .get_ts_info            = ksz_get_ts_info,
-       .port_hwtstamp_get      = ksz_hwtstamp_get,
-       .port_hwtstamp_set      = ksz_hwtstamp_set,
-       .port_txtstamp          = ksz_port_txtstamp,
-       .port_rxtstamp          = ksz_port_rxtstamp,
-       .cls_flower_add         = ksz_cls_flower_add,
-       .cls_flower_del         = ksz_cls_flower_del,
-       .port_setup_tc          = ksz_setup_tc,
-       .support_eee            = ksz_support_eee,
-       .set_mac_eee            = ksz_set_mac_eee,
-       .port_get_default_prio  = ksz_port_get_default_prio,
-       .port_set_default_prio  = ksz_port_set_default_prio,
-       .port_get_dscp_prio     = ksz_port_get_dscp_prio,
-       .port_add_dscp_prio     = ksz_port_add_dscp_prio,
-       .port_del_dscp_prio     = ksz_port_del_dscp_prio,
-       .port_get_apptrust      = ksz_port_get_apptrust,
-       .port_set_apptrust      = ksz_port_set_apptrust,
-};
-
-struct ksz_device *ksz_switch_alloc(struct device *base, void *priv)
+struct ksz_device *ksz_switch_alloc(struct device *base,
+                                   const struct ksz_chip_data *chip,
+                                   void *priv)
 {
        struct dsa_switch *ds;
        struct ksz_device *swdev;
@@ -4712,7 +4653,7 @@ struct ksz_device *ksz_switch_alloc(struct device *base, void *priv)
 
        ds->dev = base;
        ds->num_ports = DSA_MAX_PORTS;
-       ds->ops = &ksz_switch_ops;
+       ds->ops = chip->switch_ops;
 
        swdev = devm_kzalloc(base, sizeof(*swdev), GFP_KERNEL);
        if (!swdev)
index 125740deb5a21d12a3ae0b527d337135ea23760e..37923a1c43d80aab94e752b36db1a075e55c8eba 100644 (file)
@@ -460,7 +460,9 @@ struct ksz_dev_ops {
        int (*pcs_create)(struct ksz_device *dev);
 };
 
-struct ksz_device *ksz_switch_alloc(struct device *base, void *priv);
+struct ksz_device *ksz_switch_alloc(struct device *base,
+                                   const struct ksz_chip_data *chip,
+                                   void *priv);
 int ksz_switch_register(struct ksz_device *dev);
 void ksz_switch_remove(struct ksz_device *dev);
 int ksz_switch_suspend(struct device *dev);
index d8001734b05741446fa78a1e88c2f82e894835ce..373e9054947cb766b5c57f3de136d0be268bad89 100644 (file)
@@ -143,14 +143,14 @@ static int ksz_spi_probe(struct spi_device *spi)
        struct ksz_device *dev;
        int i, ret = 0;
 
-       dev = ksz_switch_alloc(&spi->dev, spi);
-       if (!dev)
-               return -ENOMEM;
-
        chip = device_get_match_data(ddev);
        if (!chip)
                return -EINVAL;
 
+       dev = ksz_switch_alloc(&spi->dev, chip, spi);
+       if (!dev)
+               return -ENOMEM;
+
        /* Save chip id to do special initialization when probing. */
        dev->chip_id = chip->chip_id;
        if (chip->chip_id == KSZ88X3_CHIP_ID)