]> Pileus Git - ~andy/linux/blobdiff - drivers/net/fec.c
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
[~andy/linux] / drivers / net / fec.c
index edfff92a6d8ebd8c141b9697b216efccfbbec226..a3cae4ed6ac99fdf36d769359341475aef45945f 100644 (file)
@@ -210,7 +210,7 @@ static void fec_stop(struct net_device *dev);
 /* Transmitter timeout */
 #define TX_TIMEOUT (2 * HZ)
 
-static int
+static netdev_tx_t
 fec_enet_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
        struct fec_enet_private *fep = netdev_priv(dev);
@@ -679,30 +679,24 @@ static int fec_enet_mii_probe(struct net_device *dev)
 {
        struct fec_enet_private *fep = netdev_priv(dev);
        struct phy_device *phy_dev = NULL;
-       int phy_addr;
+       int ret;
 
        fep->phy_dev = NULL;
 
        /* find the first phy */
-       for (phy_addr = 0; phy_addr < PHY_MAX_ADDR; phy_addr++) {
-               if (fep->mii_bus->phy_map[phy_addr]) {
-                       phy_dev = fep->mii_bus->phy_map[phy_addr];
-                       break;
-               }
-       }
-
+       phy_dev = phy_find_first(fep->mii_bus);
        if (!phy_dev) {
                printk(KERN_ERR "%s: no PHY found\n", dev->name);
                return -ENODEV;
        }
 
        /* attach the mac to the phy */
-       phy_dev = phy_connect(dev, dev_name(&phy_dev->dev),
+       ret = phy_connect_direct(dev, phy_dev,
                             &fec_enet_adjust_link, 0,
                             PHY_INTERFACE_MODE_MII);
-       if (IS_ERR(phy_dev)) {
+       if (ret) {
                printk(KERN_ERR "%s: Could not attach to PHY\n", dev->name);
-               return PTR_ERR(phy_dev);
+               return ret;
        }
 
        /* mask with MAC supported features */
@@ -1365,6 +1359,8 @@ fec_drv_remove(struct platform_device *pdev)
        return 0;
 }
 
+#ifdef CONFIG_PM
+
 static int
 fec_suspend(struct platform_device *dev, pm_message_t state)
 {
@@ -1395,15 +1391,31 @@ fec_resume(struct platform_device *dev)
        return 0;
 }
 
+static const struct dev_pm_ops fec_pm_ops = {
+       .suspend        = fec_suspend,
+       .resume         = fec_resume,
+       .freeze         = fec_suspend,
+       .thaw           = fec_resume,
+       .poweroff       = fec_suspend,
+       .restore        = fec_resume,
+};
+
+#define FEC_PM_OPS (&fec_pm_ops)
+
+#else /* !CONFIG_PM */
+
+#define FEC_PM_OPS NULL
+
+#endif /* !CONFIG_PM */
+
 static struct platform_driver fec_driver = {
        .driver = {
                .name    = "fec",
                .owner   = THIS_MODULE,
+               .pm              = FEC_PM_OPS,
        },
        .probe   = fec_probe,
        .remove  = __devexit_p(fec_drv_remove),
-       .suspend = fec_suspend,
-       .resume  = fec_resume,
 };
 
 static int __init