Changeset 35547


Ignore:
Timestamp:
2013-02-10T20:02:01+01:00 (5 years ago)
Author:
juhosg
Message:

generic: ar8216: add ar8xxx_probe_switch helper

Signed-off-by: Gabor Juhos <juhosg@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/generic/files/drivers/net/phy/ar8216.c

    r35546 r35547  
    18041804 
    18051805static int 
    1806 ar8216_config_init(struct phy_device *pdev) 
    1807 { 
    1808         struct ar8216_priv *priv = pdev->priv; 
    1809         struct net_device *dev = pdev->attached_dev; 
     1806ar8xxx_probe_switch(struct ar8216_priv *priv) 
     1807{ 
    18101808        struct switch_dev *swdev; 
    18111809        int ret; 
    18121810 
    1813         if (!priv) { 
    1814                 priv = ar8xxx_create_mii(pdev->bus); 
    1815                 if (priv == NULL) 
    1816                         return -ENOMEM; 
    1817  
    1818                 ret = ar8216_id_chip(priv); 
    1819                 if (ret) 
    1820                         goto err_free_priv; 
    1821         } 
    1822  
    1823         priv->phy = pdev; 
    1824  
    1825         if (ar8xxx_has_gige(priv)) 
    1826                 pdev->supported = SUPPORTED_1000baseT_Full; 
    1827         else 
    1828                 pdev->supported = SUPPORTED_100baseT_Full; 
    1829         pdev->advertising = pdev->supported; 
    1830  
    1831         if (pdev->addr != 0) { 
    1832                 if (chip_is_ar8316(priv)) { 
    1833                         /* check if we're attaching to the switch twice */ 
    1834                         pdev = pdev->bus->phy_map[0]; 
    1835                         if (!pdev) { 
    1836                                 ar8xxx_free(priv); 
    1837                                 return 0; 
    1838                         } 
    1839  
    1840                         /* switch device has not been initialized, reuse priv */ 
    1841                         if (!pdev->priv) { 
    1842                                 priv->port4_phy = true; 
    1843                                 pdev->priv = priv; 
    1844                                 return 0; 
    1845                         } 
    1846  
    1847                         ar8xxx_free(priv); 
    1848  
    1849                         /* switch device has been initialized, reinit */ 
    1850                         priv = pdev->priv; 
    1851                         priv->dev.ports = (AR8216_NUM_PORTS - 1); 
    1852                         priv->initialized = false; 
    1853                         priv->port4_phy = true; 
    1854                         ar8316_hw_init(priv); 
    1855                         return 0; 
    1856                 } 
    1857  
    1858                 ar8xxx_free(priv); 
    1859                 return 0; 
    1860         } 
    1861  
    1862         pdev->priv = priv; 
     1811        ret = ar8216_id_chip(priv); 
     1812        if (ret) 
     1813                return ret; 
    18631814 
    18641815        swdev = &priv->dev; 
    18651816        swdev->cpu_port = AR8216_PORT_CPU; 
    18661817        swdev->ops = &ar8216_sw_ops; 
    1867         swdev->ports = AR8216_NUM_PORTS; 
    18681818 
    18691819        if (chip_is_ar8316(priv)) { 
    18701820                swdev->name = "Atheros AR8316"; 
    18711821                swdev->vlans = AR8X16_MAX_VLANS; 
    1872  
    1873                 if (priv->port4_phy) { 
    1874                         /* port 5 connected to the other mac, therefore unusable */ 
    1875                         swdev->ports = (AR8216_NUM_PORTS - 1); 
    1876                 } 
     1822                swdev->ports = AR8216_NUM_PORTS; 
    18771823        } else if (chip_is_ar8236(priv)) { 
    18781824                swdev->name = "Atheros AR8236"; 
     
    18861832                swdev->name = "Atheros AR8216"; 
    18871833                swdev->vlans = AR8216_NUM_VLANS; 
     1834                swdev->ports = AR8216_NUM_PORTS; 
    18881835        } 
    18891836 
    18901837        ret = ar8xxx_mib_init(priv); 
    18911838        if (ret) 
    1892                 goto err_free_priv; 
    1893  
     1839                return ret; 
     1840 
     1841        return 0; 
     1842} 
     1843 
     1844static int 
     1845ar8216_config_init(struct phy_device *pdev) 
     1846{ 
     1847        struct ar8216_priv *priv = pdev->priv; 
     1848        struct net_device *dev = pdev->attached_dev; 
     1849        struct switch_dev *swdev; 
     1850        int ret; 
     1851 
     1852        if (!priv) { 
     1853                priv = ar8xxx_create_mii(pdev->bus); 
     1854                if (priv == NULL) 
     1855                        return -ENOMEM; 
     1856 
     1857                ret = ar8xxx_probe_switch(priv); 
     1858                if (ret) 
     1859                        goto err_free_priv; 
     1860        } 
     1861 
     1862        priv->phy = pdev; 
     1863 
     1864        if (ar8xxx_has_gige(priv)) 
     1865                pdev->supported = SUPPORTED_1000baseT_Full; 
     1866        else 
     1867                pdev->supported = SUPPORTED_100baseT_Full; 
     1868        pdev->advertising = pdev->supported; 
     1869 
     1870        if (pdev->addr != 0) { 
     1871                if (chip_is_ar8316(priv)) { 
     1872                        /* check if we're attaching to the switch twice */ 
     1873                        pdev = pdev->bus->phy_map[0]; 
     1874                        if (!pdev) { 
     1875                                ar8xxx_free(priv); 
     1876                                return 0; 
     1877                        } 
     1878 
     1879                        /* switch device has not been initialized, reuse priv */ 
     1880                        if (!pdev->priv) { 
     1881                                priv->port4_phy = true; 
     1882                                priv->dev.ports = (AR8216_NUM_PORTS - 1); 
     1883                                pdev->priv = priv; 
     1884                                return 0; 
     1885                        } 
     1886 
     1887                        ar8xxx_free(priv); 
     1888 
     1889                        /* switch device has been initialized, reinit */ 
     1890                        priv = pdev->priv; 
     1891                        priv->dev.ports = (AR8216_NUM_PORTS - 1); 
     1892                        priv->initialized = false; 
     1893                        priv->port4_phy = true; 
     1894                        ar8316_hw_init(priv); 
     1895                        return 0; 
     1896                } 
     1897 
     1898                ar8xxx_free(priv); 
     1899                return 0; 
     1900        } 
     1901 
     1902        pdev->priv = priv; 
     1903 
     1904        swdev = &priv->dev; 
    18941905        ret = register_switch(swdev, pdev->attached_dev); 
    18951906        if (ret) 
     
    20392050        priv->phy = pdev; 
    20402051 
    2041         ret = ar8216_id_chip(priv); 
     2052        ret = ar8xxx_probe_switch(priv); 
    20422053        ar8xxx_free(priv); 
    20432054 
Note: See TracChangeset for help on using the changeset viewer.