|
@@ -312,6 +312,18 @@ static int dsa_ds_apply(struct dsa_switch_tree *dst, struct dsa_switch *ds)
|
|
|
if (err < 0)
|
|
|
return err;
|
|
|
|
|
|
+ if (!ds->slave_mii_bus && ds->drv->phy_read) {
|
|
|
+ ds->slave_mii_bus = devm_mdiobus_alloc(ds->dev);
|
|
|
+ if (!ds->slave_mii_bus)
|
|
|
+ return -ENOMEM;
|
|
|
+
|
|
|
+ dsa_slave_mii_bus_init(ds);
|
|
|
+
|
|
|
+ err = mdiobus_register(ds->slave_mii_bus);
|
|
|
+ if (err < 0)
|
|
|
+ return err;
|
|
|
+ }
|
|
|
+
|
|
|
for (index = 0; index < DSA_MAX_PORTS; index++) {
|
|
|
port = ds->ports[index].dn;
|
|
|
if (!port)
|
|
@@ -361,6 +373,9 @@ static void dsa_ds_unapply(struct dsa_switch_tree *dst, struct dsa_switch *ds)
|
|
|
|
|
|
dsa_user_port_unapply(port, index, ds);
|
|
|
}
|
|
|
+
|
|
|
+ if (ds->slave_mii_bus && ds->drv->phy_read)
|
|
|
+ mdiobus_unregister(ds->slave_mii_bus);
|
|
|
}
|
|
|
|
|
|
static int dsa_dst_apply(struct dsa_switch_tree *dst)
|