X-Git-Url: https://git.archive.openwrt.org/?a=blobdiff_plain;f=target%2Flinux%2Fgeneric%2Ffiles%2Fdrivers%2Fnet%2Fphy%2Far8216.c;h=c0b51e7c67434d5a3dee70f807d67c06abfcc57d;hb=dbeab3d4f98464c7c67832dbf38e35d5947442dd;hp=492963de1c5d8d92d86eed714a3e444fe45c6614;hpb=0ee6eaa43bf3f462453726729ac6d95f0a475359;p=openwrt.git diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c b/target/linux/generic/files/drivers/net/phy/ar8216.c index 492963de1c..c0b51e7c67 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8216.c +++ b/target/linux/generic/files/drivers/net/phy/ar8216.c @@ -1756,7 +1756,7 @@ ar8xxx_mib_start(struct ar8216_priv *priv) } static void -ar8xxx_mib_cleanup(struct ar8216_priv *priv) +ar8xxx_mib_stop(struct ar8216_priv *priv) { if (!ar8xxx_has_mib_counters(priv)) return; @@ -1803,6 +1803,45 @@ ar8xxx_create_mii(struct mii_bus *bus) } static int +ar8xxx_probe_switch(struct ar8216_priv *priv) +{ + struct switch_dev *swdev; + int ret; + + ret = ar8216_id_chip(priv); + if (ret) + return ret; + + swdev = &priv->dev; + swdev->cpu_port = AR8216_PORT_CPU; + swdev->ops = &ar8216_sw_ops; + + if (chip_is_ar8316(priv)) { + swdev->name = "Atheros AR8316"; + swdev->vlans = AR8X16_MAX_VLANS; + swdev->ports = AR8216_NUM_PORTS; + } else if (chip_is_ar8236(priv)) { + swdev->name = "Atheros AR8236"; + swdev->vlans = AR8216_NUM_VLANS; + swdev->ports = AR8216_NUM_PORTS; + } else if (chip_is_ar8327(priv)) { + swdev->name = "Atheros AR8327"; + swdev->vlans = AR8X16_MAX_VLANS; + swdev->ports = AR8327_NUM_PORTS; + } else { + swdev->name = "Atheros AR8216"; + swdev->vlans = AR8216_NUM_VLANS; + swdev->ports = AR8216_NUM_PORTS; + } + + ret = ar8xxx_mib_init(priv); + if (ret) + return ret; + + return 0; +} + +static int ar8216_config_init(struct phy_device *pdev) { struct ar8216_priv *priv = pdev->priv; @@ -1815,7 +1854,7 @@ ar8216_config_init(struct phy_device *pdev) if (priv == NULL) return -ENOMEM; - ret = ar8216_id_chip(priv); + ret = ar8xxx_probe_switch(priv); if (ret) goto err_free_priv; } @@ -1840,6 +1879,7 @@ ar8216_config_init(struct phy_device *pdev) /* switch device has not been initialized, reuse priv */ if (!pdev->priv) { priv->port4_phy = true; + priv->dev.ports = (AR8216_NUM_PORTS - 1); pdev->priv = priv; return 0; } @@ -1862,35 +1902,6 @@ ar8216_config_init(struct phy_device *pdev) pdev->priv = priv; swdev = &priv->dev; - swdev->cpu_port = AR8216_PORT_CPU; - swdev->ops = &ar8216_sw_ops; - swdev->ports = AR8216_NUM_PORTS; - - if (chip_is_ar8316(priv)) { - swdev->name = "Atheros AR8316"; - swdev->vlans = AR8X16_MAX_VLANS; - - if (priv->port4_phy) { - /* port 5 connected to the other mac, therefore unusable */ - swdev->ports = (AR8216_NUM_PORTS - 1); - } - } else if (chip_is_ar8236(priv)) { - swdev->name = "Atheros AR8236"; - swdev->vlans = AR8216_NUM_VLANS; - swdev->ports = AR8216_NUM_PORTS; - } else if (chip_is_ar8327(priv)) { - swdev->name = "Atheros AR8327"; - swdev->vlans = AR8X16_MAX_VLANS; - swdev->ports = AR8327_NUM_PORTS; - } else { - swdev->name = "Atheros AR8216"; - swdev->vlans = AR8216_NUM_VLANS; - } - - ret = ar8xxx_mib_init(priv); - if (ret) - goto err_free_priv; - ret = register_switch(swdev, pdev->attached_dev); if (ret) goto err_free_priv; @@ -2038,7 +2049,7 @@ ar8216_probe(struct phy_device *pdev) priv->phy = pdev; - ret = ar8216_id_chip(priv); + ret = ar8xxx_probe_switch(priv); ar8xxx_free(priv); return ret; @@ -2071,7 +2082,7 @@ ar8216_remove(struct phy_device *pdev) if (pdev->addr == 0) unregister_switch(&priv->dev); - ar8xxx_mib_cleanup(priv); + ar8xxx_mib_stop(priv); ar8xxx_free(priv); }