priv->write(priv, AR8316_REG_POSTRIP, newval);
+ if (priv->port4_phy &&
+ priv->phy->interface == PHY_INTERFACE_MODE_RGMII) {
+ /* work around for phy4 rgmii mode */
+ ar8216_phy_dbg_write(priv, 4, 0x12, 0x480c);
+ /* rx delay */
+ ar8216_phy_dbg_write(priv, 4, 0x0, 0x824e);
+ /* tx delay */
+ ar8216_phy_dbg_write(priv, 4, 0x5, 0x3d47);
+ msleep(1000);
+ }
+
/* Initialize the ports */
bus = priv->mii_bus;
for (i = 0; i < 5; i++) {
- if ((i == 4) && priv->port4_phy &&
- priv->phy->interface == PHY_INTERFACE_MODE_RGMII) {
- /* work around for phy4 rgmii mode */
- ar8216_phy_dbg_write(priv, i, 0x12, 0x480c);
- /* rx delay */
- ar8216_phy_dbg_write(priv, i, 0x0, 0x824e);
- /* tx delay */
- ar8216_phy_dbg_write(priv, i, 0x5, 0x3d47);
- msleep(1000);
- }
-
/* initialize the port itself */
mdiobus_write(bus, i, MII_ADVERTISE,
ADVERTISE_ALL | ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM);
{
struct ar8216_priv *priv = phydev->priv;
struct net_device *dev = phydev->attached_dev;
- struct switch_dev *swdev;
int ret;
if (WARN_ON(!priv))
return 0;
}
- swdev = &priv->dev;
- swdev->alias = dev_name(&priv->mii_bus->dev);
- ret = register_switch(swdev, NULL);
- if (ret)
- goto err;
-
- pr_info("%s: %s switch registered on %s\n",
- swdev->devname, swdev->name, dev_name(&priv->mii_bus->dev));
-
priv->init = true;
ret = priv->chip->hw_init(priv);
if (ret)
- goto err_unregister_switch;
+ return ret;
ret = ar8216_sw_reset_switch(&priv->dev);
if (ret)
- goto err_unregister_switch;
+ return ret;
/* VID fixup only needed on ar8216 */
if (chip_is_ar8216(priv)) {
ar8xxx_mib_start(priv);
return 0;
-
-err_unregister_switch:
- unregister_switch(&priv->dev);
-err:
- return ret;
}
static int
ar8216_probe(struct phy_device *phydev)
{
struct ar8216_priv *priv;
+ struct switch_dev *swdev;
int ret;
/* skip PHYs at unused adresses */
if (ret)
goto free_priv;
+ swdev = &priv->dev;
+ swdev->alias = dev_name(&priv->mii_bus->dev);
+ ret = register_switch(swdev, NULL);
+ if (ret)
+ goto free_priv;
+
+ pr_info("%s: %s switch registered on %s\n",
+ swdev->devname, swdev->name, dev_name(&priv->mii_bus->dev));
+
found:
if (phydev->addr == 0) {
if (ar8xxx_has_gige(priv)) {