aboutsummaryrefslogtreecommitdiffstats
path: root/target
diff options
context:
space:
mode:
authorGabor Juhos <juhosg@openwrt.org>2013-03-15 16:06:28 +0000
committerGabor Juhos <juhosg@openwrt.org>2013-03-15 16:06:28 +0000
commit72253b907330ab12ffbfca9761e95920579a0ffe (patch)
treeb373b12db1202690164978d6b0bdabe72af9bc5d /target
parent5503686f69810dd42993cf339f98a6bfa4752581 (diff)
downloadupstream-72253b907330ab12ffbfca9761e95920579a0ffe.tar.gz
upstream-72253b907330ab12ffbfca9761e95920579a0ffe.tar.bz2
upstream-72253b907330ab12ffbfca9761e95920579a0ffe.zip
generic: ar8216: start AR8327 switch from the probe routine
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
Diffstat (limited to 'target')
-rw-r--r--target/linux/generic/files/drivers/net/phy/ar8216.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c b/target/linux/generic/files/drivers/net/phy/ar8216.c
index f1b7436247..ccc074fdec 100644
--- a/target/linux/generic/files/drivers/net/phy/ar8216.c
+++ b/target/linux/generic/files/drivers/net/phy/ar8216.c
@@ -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: