summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorJohannes Stezenbach <js@sig21.net>2012-06-18 16:47:56 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2012-06-30 13:58:18 +0200
commit1b725b9c443cd80ab4f5876a1e2c8443a24472ef (patch)
tree933ee8e7541c54ed83f06af564e6cd75f850a146 /drivers
parent467d9d9ceefc7d718b89a90c0d843b80e8489c50 (diff)
downloadbarebox-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.c12
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)