diff options
author | Johannes Stezenbach <js@sig21.net> | 2012-06-18 16:47:56 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2012-06-30 13:58:18 +0200 |
commit | 1b725b9c443cd80ab4f5876a1e2c8443a24472ef (patch) | |
tree | 933ee8e7541c54ed83f06af564e6cd75f850a146 /drivers | |
parent | 467d9d9ceefc7d718b89a90c0d843b80e8489c50 (diff) | |
download | barebox-1b725b9c443cd80ab4f5876a1e2c8443a24472ef.tar.gz barebox-1b725b9c443cd80ab4f5876a1e2c8443a24472ef.tar.xz |
miidev: actually probe the PHY
Check if the PHY is really accessible (e.g. the
PHY address is correct) during probe.
Signed-off-by: Johannes Stezenbach <js@sig21.net>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/miidev.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/net/miidev.c b/drivers/net/miidev.c index e0757f1e35..4a6422e5b4 100644 --- a/drivers/net/miidev.c +++ b/drivers/net/miidev.c @@ -224,6 +224,14 @@ static struct file_operations miidev_ops = { static int miidev_probe(struct device_d *dev) { struct mii_device *mdev = dev->priv; + int val; + + val = mii_read(mdev, mdev->address, MII_PHYSID1); + if (val < 0 || val == 0xffff) + goto err_out; + val = mii_read(mdev, mdev->address, MII_PHYSID2); + if (val < 0 || val == 0xffff) + goto err_out; mdev->cdev.name = asprintf("phy%d", dev->id); mdev->cdev.size = 64; @@ -233,6 +241,10 @@ static int miidev_probe(struct device_d *dev) devfs_create(&mdev->cdev); list_add_tail(&mdev->list, &miidev_list); return 0; + +err_out: + dev_err(dev, "cannot read PHY registers (addr %d)\n", mdev->address); + return -ENODEV; } static void miidev_remove(struct device_d *dev) |