r6040: move down second PHY detection to r6040_init_one
authorMark Kelly <mark@bifferos.com>
Thu, 20 Aug 2009 01:26:20 +0000 (01:26 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 24 Aug 2009 02:16:28 +0000 (19:16 -0700)
Instead of fully initializing an unusable second r6040
device, perform the PHY detection earlier and bail out
in r6040_init_one when we could not read the PHY identifier.

Signed-off-by: Mark Kelly <mark@bifferos.com>
Signed-off-by: Florian Fainelli <florian@openwrt.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/r6040.c

index 60bd010e8e421e5e2014ae73dd34ce078b9c44f3..7238a6fae140ff315e8447c40e37dbc4d1f5f23f 100644 (file)
@@ -750,14 +750,6 @@ static int r6040_up(struct net_device *dev)
        struct r6040_private *lp = netdev_priv(dev);
        void __iomem *ioaddr = lp->base;
        int ret;
-       u16 val;
-
-       /* Check presence of a second PHY */
-       val = r6040_phy_read(ioaddr, lp->phy_addr, 2);
-       if (val == 0xFFFF) {
-               printk(KERN_ERR DRV_NAME " no second PHY attached\n");
-               return -EIO;
-       }
 
        /* Initialise and alloc RX/TX buffers */
        r6040_init_txbufs(dev);
@@ -1194,6 +1186,13 @@ static int __devinit r6040_init_one(struct pci_dev *pdev,
        lp->mii_if.phy_id_mask = 0x1f;
        lp->mii_if.reg_num_mask = 0x1f;
 
+       /* Check the vendor ID on the PHY, if 0xffff assume none attached */
+       if (r6040_phy_read(ioaddr, lp->phy_addr, 2) == 0xffff) {
+               printk(KERN_ERR DRV_NAME ": Failed to detect an attached PHY\n");
+               err = -ENODEV;
+               goto err_out_unmap;
+       }
+
        /* Register net device. After this dev->name assign */
        err = register_netdev(dev);
        if (err) {