aboutsummaryrefslogtreecommitdiff
path: root/drivers/net/gianfar_mii.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2008-10-30 23:50:18 -0700
committerDavid S. Miller <davem@davemloft.net>2008-10-30 23:50:18 -0700
commit194dcdba5a11a0238aef7ed91f32df77cb31505b (patch)
treead9b2e763d702ab59d176f3acc57dbb200afdad1 /drivers/net/gianfar_mii.c
parent19b8cba2e8539e3b8022316f94837d8f242b8f80 (diff)
parentbdb59f949d663b7e943fb5f40b2557af4314abf9 (diff)
Merge branch 'davem-fixes' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6
Diffstat (limited to 'drivers/net/gianfar_mii.c')
-rw-r--r--drivers/net/gianfar_mii.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/drivers/net/gianfar_mii.c b/drivers/net/gianfar_mii.c
index bf73eea9801..0e2595d2493 100644
--- a/drivers/net/gianfar_mii.c
+++ b/drivers/net/gianfar_mii.c
@@ -269,6 +269,27 @@ static struct device_driver gianfar_mdio_driver = {
.remove = gfar_mdio_remove,
};
+static int match_mdio_bus(struct device *dev, void *data)
+{
+ const struct gfar_private *priv = data;
+ const struct platform_device *pdev = to_platform_device(dev);
+
+ return !strcmp(pdev->name, gianfar_mdio_driver.name) &&
+ pdev->id == priv->einfo->mdio_bus;
+}
+
+/* Given a gfar_priv structure, find the mii_bus controlled by this device (not
+ * necessarily the same as the bus the gfar's PHY is on), if one exists.
+ * Normally only the first gianfar controls a mii_bus. */
+struct mii_bus *gfar_get_miibus(const struct gfar_private *priv)
+{
+ /*const*/ struct device *d;
+
+ d = bus_find_device(gianfar_mdio_driver.bus, NULL, (void *)priv,
+ match_mdio_bus);
+ return d ? dev_get_drvdata(d) : NULL;
+}
+
int __init gfar_mdio_init(void)
{
return driver_register(&gianfar_mdio_driver);