Changeset 19202


Ignore:
Timestamp:
2010-01-17T22:37:09+01:00 (8 years ago)
Author:
juhosg
Message:

rtl8366_smi: register the switch directly from the probe routine

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ar71xx/files/drivers/net/phy/rtl8366_smi.c

    r19201 r19202  
    17191719}; 
    17201720 
     1721static int rtl8366_smi_switch_init(struct rtl8366_smi *smi) 
     1722{ 
     1723        struct switch_dev *dev = &smi->dev; 
     1724        int err; 
     1725 
     1726        memcpy(dev, &rtldev, sizeof(struct switch_dev)); 
     1727        dev->priv = smi; 
     1728        dev->devname = dev_name(&smi->pdev->dev); 
     1729 
     1730        err = register_switch(dev, NULL); 
     1731        if (err) 
     1732                dev_err(&smi->pdev->dev, "switch registration failed\n"); 
     1733 
     1734        return; 
     1735} 
     1736 
     1737static void rtl8366_smi_switch_cleanup(struct rtl8366_smi *smi) 
     1738{ 
     1739        unregister_switch(&smi->dev); 
     1740} 
     1741 
    17211742static int rtl8366_smi_mii_read(struct mii_bus *bus, int addr, int reg) 
    17221743{ 
     
    17881809} 
    17891810 
     1811static int rtl8366_smi_mii_bus_match(struct mii_bus *bus) 
     1812{ 
     1813        return (bus->read == rtl8366_smi_mii_read && 
     1814                bus->write == rtl8366_smi_mii_write); 
     1815} 
     1816 
    17901817static int rtl8366_smi_setup(struct rtl8366_smi *smi) 
    17911818{ 
     
    18791906                goto err_clear_drvdata; 
    18801907 
    1881         return 0; 
    1882  
     1908        err = rtl8366_smi_switch_init(smi); 
     1909        if (err) 
     1910                goto err_mii_cleanup; 
     1911 
     1912        return 0; 
     1913 
     1914 err_mii_cleanup: 
     1915        rtl8366_smi_mii_cleanup(smi); 
    18831916 err_clear_drvdata: 
    18841917        platform_set_drvdata(pdev, NULL); 
     
    18941927int rtl8366_phy_config_init(struct phy_device *phydev) 
    18951928{ 
    1896         int err; 
    1897         struct net_device *netdev = phydev->attached_dev; 
    1898         struct rtl8366_smi *smi = phydev->bus->priv; 
    1899         struct switch_dev *dev = &smi->dev; 
    1900  
    1901         /* Only init the switch for the primary PHY */ 
    1902         if (phydev->addr != 4) { 
    1903                 printk(KERN_INFO "Discarding address: %d\n", phydev->addr); 
    1904                 return 0; 
    1905         } 
    1906  
    1907         memcpy(&smi->dev, &rtldev, sizeof(struct switch_dev)); 
    1908         dev->priv = smi; 
    1909         dev->netdev = netdev; 
    1910  
    1911         err = register_switch(dev, netdev); 
    1912         if (err < 0) { 
    1913                 printk(KERN_INFO "Switch registration failed\n"); 
    1914                 return err; 
    1915         } 
     1929        if (!rtl8366_smi_mii_bus_match(phydev->bus)) 
     1930                return -EINVAL; 
    19161931 
    19171932        return 0; 
     
    19451960                pdata = pdev->dev.platform_data; 
    19461961 
     1962                rtl8366_smi_switch_cleanup(smi); 
    19471963                rtl8366_debugfs_remove(smi); 
    1948                 phy_driver_unregister(&rtl8366_smi_phy_driver); 
    19491964                rtl8366_smi_mii_cleanup(smi); 
    19501965                platform_set_drvdata(pdev, NULL); 
Note: See TracChangeset for help on using the changeset viewer.