提交 e03f614a 编写于 作者: M Mark Kelly 提交者: David S. Miller

r6040: move down second PHY detection to r6040_init_one

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: NMark Kelly <mark@bifferos.com>
Signed-off-by: NFlorian Fainelli <florian@openwrt.org>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 d516478f
...@@ -750,14 +750,6 @@ static int r6040_up(struct net_device *dev) ...@@ -750,14 +750,6 @@ static int r6040_up(struct net_device *dev)
struct r6040_private *lp = netdev_priv(dev); struct r6040_private *lp = netdev_priv(dev);
void __iomem *ioaddr = lp->base; void __iomem *ioaddr = lp->base;
int ret; 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 */ /* Initialise and alloc RX/TX buffers */
r6040_init_txbufs(dev); r6040_init_txbufs(dev);
...@@ -1194,6 +1186,13 @@ static int __devinit r6040_init_one(struct pci_dev *pdev, ...@@ -1194,6 +1186,13 @@ static int __devinit r6040_init_one(struct pci_dev *pdev,
lp->mii_if.phy_id_mask = 0x1f; lp->mii_if.phy_id_mask = 0x1f;
lp->mii_if.reg_num_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 */ /* Register net device. After this dev->name assign */
err = register_netdev(dev); err = register_netdev(dev);
if (err) { if (err) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册