generic: ar8216: start AR8327 switch from the probe routine
authorGabor Juhos <juhosg@openwrt.org>
Fri, 15 Mar 2013 16:06:28 +0000 (16:06 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Fri, 15 Mar 2013 16:06:28 +0000 (16:06 +0000)
The AR8327 switch gets its configuration from platform
data or from the device-tree. This allows to start it
from the probe routine. Doing so makes it usable with
ethernet drivers which only connects to the PHY device
when the ethernet interface is opened.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
SVN-Revision: 36050

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: