From 562eca38dcfeee1d986b616ad2a1a496f8afde47 Mon Sep 17 00:00:00 2001 From: Gabor Juhos Date: Fri, 15 Mar 2013 16:06:28 +0000 Subject: 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 git-svn-id: svn://svn.openwrt.org/openwrt/trunk@36050 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- target/linux/generic/files/drivers/net/phy/ar8216.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'target/linux/generic/files') 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: -- cgit v1.2.3