static int b53_phy_probe(struct phy_device *phydev) { 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 = b53_switch_alloc(&phydev->mdio.dev, &b53_mdio_ops, phydev->mdio.bus); if (!dev) return -ENOMEM; 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 LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0) linkmode_zero(phydev->supported); if (is5325(dev) || is5365(dev)) linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, phydev->supported); else linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT, phydev->supported); linkmode_copy(phydev->advertising, phydev->supported); #else if (is5325(dev) || is5365(dev)) phydev->supported = SUPPORTED_100baseT_Full; else phydev->supported = SUPPORTED_1000baseT_Full; phydev->advertising = phydev->supported; #endif ret = b53_switch_register(dev); if (ret) { dev_err(dev->dev, "failed to register switch: %i\n", ret); return ret; } phydev->priv = dev; return 0; }
static int b53_phy_config_init(struct phy_device *phydev) { struct b53_device *dev; int ret; dev = b53_switch_alloc(&phydev->dev, &b53_mdio_ops, phydev->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); return ret; } phydev->priv = dev; return 0; }