source: trunk/target/linux/ixp4xx/patches-2.6.38/205-npe_driver_separate_phy_functions.patch @ 26268

Last change on this file since 26268 was 26268, checked in by kaloz, 5 years ago

[ixp4xx]: add 2.6.38 support

File size: 3.4 KB
  • drivers/net/arm/ixp4xx_eth.c

    a b static void ixp4xx_adjust_link(struct ne 
    397397               dev->name, port->speed, port->duplex ? "full" : "half"); 
    398398} 
    399399 
     400static int ixp4xx_phy_connect(struct net_device *dev) 
     401{ 
     402        struct port *port = netdev_priv(dev); 
     403        struct eth_plat_info *plat = port->plat; 
     404        char phy_id[MII_BUS_ID_SIZE + 3]; 
     405 
     406        snprintf(phy_id, MII_BUS_ID_SIZE + 3, PHY_ID_FMT, "0", plat->phy); 
     407        port->phydev = phy_connect(dev, phy_id, &ixp4xx_adjust_link, 0, 
     408                                   PHY_INTERFACE_MODE_MII); 
     409        if (IS_ERR(port->phydev)) { 
     410                printk(KERN_ERR "%s: Could not attach to PHY\n", dev->name); 
     411                return PTR_ERR(port->phydev); 
     412        } 
     413 
     414        /* mask with MAC supported features */ 
     415        port->phydev->supported &= PHY_BASIC_FEATURES; 
     416        port->phydev->advertising = port->phydev->supported; 
     417 
     418        port->phydev->irq = PHY_POLL; 
     419 
     420        return 0; 
     421} 
     422 
     423static void ixp4xx_phy_disconnect(struct net_device *dev) 
     424{ 
     425        struct port *port = netdev_priv(dev); 
     426 
     427        phy_disconnect(port->phydev); 
     428} 
     429 
     430static void ixp4xx_phy_start(struct net_device *dev) 
     431{ 
     432        struct port *port = netdev_priv(dev); 
     433 
     434        port->speed = 0;        /* force "link up" message */ 
     435        phy_start(port->phydev); 
     436} 
     437 
     438static void ixp4xx_phy_stop(struct net_device *dev) 
     439{ 
     440        struct port *port = netdev_priv(dev); 
     441 
     442        phy_stop(port->phydev); 
     443} 
    400444 
    401445static inline void debug_pkt(struct net_device *dev, const char *func, 
    402446                             u8 *data, int len) 
    static int eth_open(struct net_device *d 
    10201064                return err; 
    10211065        } 
    10221066 
    1023         port->speed = 0;        /* force "link up" message */ 
    1024         phy_start(port->phydev); 
     1067        ixp4xx_phy_start(dev); 
    10251068 
    10261069        for (i = 0; i < ETH_ALEN; i++) 
    10271070                __raw_writel(dev->dev_addr[i], &port->regs->hw_addr[i]); 
    static int eth_close(struct net_device * 
    11421185                printk(KERN_CRIT "%s: unable to disable loopback\n", 
    11431186                       dev->name); 
    11441187 
    1145         phy_stop(port->phydev); 
     1188        ixp4xx_phy_stop(dev); 
    11461189 
    11471190        if (!ports_open) 
    11481191                qmgr_disable_irq(TXDONE_QUEUE); 
    static int __devinit eth_init_one(struct 
    11681211        struct net_device *dev; 
    11691212        struct eth_plat_info *plat = pdev->dev.platform_data; 
    11701213        u32 regs_phys; 
    1171         char phy_id[MII_BUS_ID_SIZE + 3]; 
    11721214        int err; 
    11731215 
    11741216        if (!(dev = alloc_etherdev(sizeof(struct port)))) 
    static int __devinit eth_init_one(struct 
    12261268        __raw_writel(DEFAULT_CORE_CNTRL, &port->regs->core_control); 
    12271269        udelay(50); 
    12281270 
    1229         snprintf(phy_id, MII_BUS_ID_SIZE + 3, PHY_ID_FMT, "0", plat->phy); 
    1230         port->phydev = phy_connect(dev, phy_id, &ixp4xx_adjust_link, 0, 
    1231                                    PHY_INTERFACE_MODE_MII); 
    1232         if (IS_ERR(port->phydev)) { 
    1233                 err = PTR_ERR(port->phydev); 
     1271        err = ixp4xx_phy_connect(dev); 
     1272        if (err) 
    12341273                goto err_free_mem; 
    1235         } 
    1236  
    1237         /* mask with MAC supported features */ 
    1238         port->phydev->supported &= PHY_BASIC_FEATURES; 
    1239         port->phydev->advertising = port->phydev->supported; 
    1240  
    1241         port->phydev->irq = PHY_POLL; 
    12421274 
    12431275        if ((err = register_netdev(dev))) 
    12441276                goto err_phy_dis; 
    static int __devinit eth_init_one(struct 
    12491281        return 0; 
    12501282 
    12511283err_phy_dis: 
    1252         phy_disconnect(port->phydev); 
     1284        ixp4xx_phy_disconnect(dev); 
    12531285err_free_mem: 
    12541286        npe_port_tab[NPE_ID(port->id)] = NULL; 
    12551287        platform_set_drvdata(pdev, NULL); 
    static int __devexit eth_remove_one(stru 
    12671299        struct port *port = netdev_priv(dev); 
    12681300 
    12691301        unregister_netdev(dev); 
    1270         phy_disconnect(port->phydev); 
     1302        ixp4xx_phy_disconnect(dev); 
    12711303        npe_port_tab[NPE_ID(port->id)] = NULL; 
    12721304        platform_set_drvdata(pdev, NULL); 
    12731305        npe_release(port->npe); 
Note: See TracBrowser for help on using the repository browser.