generic: ar8216: add ar8xxx_probe_switch helper

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

SVN-Revision: 35547
owl
Gabor Juhos 2013-02-10 19:02:01 +00:00
parent 98b13e39ac
commit 617076c613
1 changed files with 42 additions and 31 deletions

View File

@ -1802,6 +1802,45 @@ ar8xxx_create_mii(struct mii_bus *bus)
return priv; return priv;
} }
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 static int
ar8216_config_init(struct phy_device *pdev) ar8216_config_init(struct phy_device *pdev)
{ {
@ -1815,7 +1854,7 @@ ar8216_config_init(struct phy_device *pdev)
if (priv == NULL) if (priv == NULL)
return -ENOMEM; return -ENOMEM;
ret = ar8216_id_chip(priv); ret = ar8xxx_probe_switch(priv);
if (ret) if (ret)
goto err_free_priv; goto err_free_priv;
} }
@ -1840,6 +1879,7 @@ ar8216_config_init(struct phy_device *pdev)
/* switch device has not been initialized, reuse priv */ /* switch device has not been initialized, reuse priv */
if (!pdev->priv) { if (!pdev->priv) {
priv->port4_phy = true; priv->port4_phy = true;
priv->dev.ports = (AR8216_NUM_PORTS - 1);
pdev->priv = priv; pdev->priv = priv;
return 0; return 0;
} }
@ -1862,35 +1902,6 @@ ar8216_config_init(struct phy_device *pdev)
pdev->priv = priv; pdev->priv = priv;
swdev = &priv->dev; 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); ret = register_switch(swdev, pdev->attached_dev);
if (ret) if (ret)
goto err_free_priv; goto err_free_priv;
@ -2038,7 +2049,7 @@ ar8216_probe(struct phy_device *pdev)
priv->phy = pdev; priv->phy = pdev;
ret = ar8216_id_chip(priv); ret = ar8xxx_probe_switch(priv);
ar8xxx_free(priv); ar8xxx_free(priv);
return ret; return ret;