generic: ar8216: start AR8327 switch from the probe routine
[librecmc/librecmc.git] / target / linux / generic / files / drivers / net / phy / ar8216.c
index f1b74362473372c3b51be385070da829d07e0edf..ccc074fdec99b2046f932ffe6b7991812c8d4a81 100644 (file)
@@ -1945,6 +1945,9 @@ ar8xxx_phy_config_init(struct phy_device *phydev)
        if (WARN_ON(!priv))
                return -ENODEV;
 
+       if (chip_is_ar8327(priv))
+               return 0;
+
        priv->phy = phydev;
 
        if (phydev->addr != 0) {
@@ -2103,6 +2106,8 @@ ar8xxx_phy_probe(struct phy_device *phydev)
                swdev->devname, swdev->name, dev_name(&priv->mii_bus->dev));
 
 found:
+       priv->use_count++;
+
        if (phydev->addr == 0) {
                if (ar8xxx_has_gige(priv)) {
                        phydev->supported = SUPPORTED_1000baseT_Full;
@@ -2111,6 +2116,14 @@ found:
                        phydev->supported = SUPPORTED_100baseT_Full;
                        phydev->advertising = ADVERTISED_100baseT_Full;
                }
+
+               if (chip_is_ar8327(priv)) {
+                       priv->phy = phydev;
+
+                       ret = ar8xxx_start(priv);
+                       if (ret)
+                               goto err_unregister_switch;
+               }
        } else {
                if (ar8xxx_has_gige(priv)) {
                        phydev->supported |= SUPPORTED_1000baseT_Full;
@@ -2119,7 +2132,6 @@ found:
        }
 
        phydev->priv = priv;
-       priv->use_count++;
 
        list_add(&priv->list, &ar8xxx_dev_list);
 
@@ -2127,6 +2139,12 @@ found:
 
        return 0;
 
+err_unregister_switch:
+       if (--priv->use_count)
+               goto unlock;
+
+       unregister_switch(&priv->dev);
+
 free_priv:
        ar8xxx_free(priv);
 unlock: