]> err.no Git - linux-2.6/blobdiff - drivers/net/sis190.c
Merge master.kernel.org:/home/rmk/linux-2.6-arm
[linux-2.6] / drivers / net / sis190.c
index fe2ab6fd138497d5096d7f295e3a0c7dd959a715..bf3440aa6c248005dace01a7855a1aaabae1da65 100644 (file)
@@ -325,6 +325,7 @@ static struct mii_chip_info {
        { "Broadcom PHY BCM5461", { 0x0020, 0x60c0 }, LAN },
        { "Agere PHY ET1101B",    { 0x0282, 0xf010 }, LAN },
        { "Marvell PHY 88E1111",  { 0x0141, 0x0cc0 }, LAN },
+       { "Realtek PHY RTL8201",  { 0x0000, 0x8200 }, LAN },
        { NULL, }
 };
 
@@ -951,12 +952,17 @@ static void sis190_phy_task(void * data)
                                0x01 | _10bpsH },
                        { 0, "unknown", 0x0000 }
                }, *p;
+               u16 adv;
 
                val = mdio_read(ioaddr, phy_id, 0x1f);
                net_link(tp, KERN_INFO "%s: mii ext = %04x.\n", dev->name, val);
 
                val = mdio_read(ioaddr, phy_id, MII_LPA);
-               net_link(tp, KERN_INFO "%s: mii lpa = %04x.\n", dev->name, val);
+               adv = mdio_read(ioaddr, phy_id, MII_ADVERTISE);
+               net_link(tp, KERN_INFO "%s: mii lpa = %04x adv = %04x.\n",
+                        dev->name, val, adv);
+
+               val &= adv;
 
                for (p = reg31; p->ctl; p++) {
                        if ((val & p->val) == p->val)
@@ -1265,7 +1271,7 @@ static u16 sis190_default_phy(struct net_device *dev)
                mii_if->phy_id = phy_default->phy_id;
                net_probe(tp, KERN_INFO
                       "%s: Using transceiver at address %d as default.\n",
-                      dev->name, mii_if->phy_id);
+                      pci_name(tp->pci_dev), mii_if->phy_id);
        }
 
        status = mdio_read(ioaddr, mii_if->phy_id, MII_BMCR);
@@ -1306,8 +1312,8 @@ static void sis190_init_phy(struct net_device *dev, struct sis190_private *tp,
                phy->type = UNKNOWN;
 
        net_probe(tp, KERN_INFO "%s: %s transceiver at address %d.\n",
-                 dev->name, (phy->type == UNKNOWN) ? "Unknown PHY" : p->name,
-                 phy_id);
+                 pci_name(tp->pci_dev),
+                 (phy->type == UNKNOWN) ? "Unknown PHY" : p->name, phy_id);
 }
 
 /**
@@ -1352,7 +1358,7 @@ static int __devinit sis190_mii_probe(struct net_device *dev)
 
        if (list_empty(&tp->first_phy)) {
                net_probe(tp, KERN_INFO "%s: No MII transceivers found!\n",
-                         dev->name);
+                         pci_name(tp->pci_dev));
                rc = -EIO;
                goto out;
        }
@@ -1774,15 +1780,16 @@ static int __devinit sis190_init_one(struct pci_dev *pdev,
        dev->base_addr = (unsigned long) 0xdead;
 
        spin_lock_init(&tp->lock);
-       rc = register_netdev(dev);
+
+       rc = sis190_mii_probe(dev);
        if (rc < 0)
                goto err_release_board;
 
-       pci_set_drvdata(pdev, dev);
-
-       rc = sis190_mii_probe(dev);
+       rc = register_netdev(dev);
        if (rc < 0)
-               goto err_unregister_dev;
+               goto err_remove_mii;
+
+       pci_set_drvdata(pdev, dev);
 
        net_probe(tp, KERN_INFO "%s: %s at %p (IRQ: %d), "
               "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x\n",
@@ -1798,8 +1805,8 @@ static int __devinit sis190_init_one(struct pci_dev *pdev,
 out:
        return rc;
 
-err_unregister_dev:
-       unregister_netdev(dev);
+err_remove_mii:
+       sis190_mii_remove(dev);
 err_release_board:
        sis190_release_board(pdev);
        goto out;