diff --git a/target/linux/generic/files/drivers/net/phy/b53/b53_mdio.c b/target/linux/generic/files/drivers/net/phy/b53/b53_mdio.c index 75bb4d941c4..5934befc9e0 100644 --- a/target/linux/generic/files/drivers/net/phy/b53/b53_mdio.c +++ b/target/linux/generic/files/drivers/net/phy/b53/b53_mdio.c @@ -273,47 +273,34 @@ static struct b53_io_ops b53_mdio_ops = { static int b53_phy_probe(struct phy_device *phydev) { - struct b53_device dev; + struct b53_device *dev; int ret; /* allow the generic phy driver to take over */ if (phydev->mdio.addr != B53_PSEUDO_PHY && phydev->mdio.addr != 0) return -ENODEV; - dev.current_page = 0xff; - dev.priv = phydev->mdio.bus; - dev.ops = &b53_mdio_ops; - dev.pdata = NULL; - mutex_init(&dev.reg_mutex); + dev = b53_switch_alloc(&phydev->mdio.dev, &b53_mdio_ops, phydev->mdio.bus); + if (!dev) + return -ENOMEM; - ret = b53_switch_detect(&dev); + dev->current_page = 0xff; + dev->priv = phydev->mdio.bus; + dev->ops = &b53_mdio_ops; + dev->pdata = NULL; + mutex_init(&dev->reg_mutex); + + ret = b53_switch_detect(dev); if (ret) return ret; - if (is5325(&dev) || is5365(&dev)) + if (is5325(dev) || is5365(dev)) phydev->supported = SUPPORTED_100baseT_Full; else phydev->supported = SUPPORTED_1000baseT_Full; phydev->advertising = phydev->supported; - return 0; -} - -static int b53_phy_config_init(struct phy_device *phydev) -{ - struct b53_device *dev; - int ret; - - dev = b53_switch_alloc(&phydev->mdio.dev, &b53_mdio_ops, phydev->mdio.bus); - if (!dev) - return -ENOMEM; - - /* we don't use page 0xff, so force a page set */ - dev->current_page = 0xff; - /* force the ethX as alias */ - dev->sw_dev.alias = phydev->attached_dev->name; - ret = b53_switch_register(dev); if (ret) { dev_err(dev->dev, "failed to register switch: %i\n", ret); @@ -325,6 +312,18 @@ static int b53_phy_config_init(struct phy_device *phydev) return 0; } +static int b53_phy_config_init(struct phy_device *phydev) +{ + struct b53_device *dev = phydev->priv; + + /* we don't use page 0xff, so force a page set */ + dev->current_page = 0xff; + /* force the ethX as alias */ + dev->sw_dev.alias = phydev->attached_dev->name; + + return 0; +} + static void b53_phy_remove(struct phy_device *phydev) { struct b53_device *priv = phydev->priv;