On Sun, Oct 07, 2018 at 11:35:39PM -0700, Andrey Smirnov wrote: > Instead of just creating a simple PHY device for every child of MDIO > bus node, add code to check if any of them have "compatible" property > set as well as code to create a proper platform device for such cases. > > This change is useful for when MDIO bus and some of Ethernet ports are > connected to a switch or some other MDIO device that doesn't behave > like a generic PHY and can't be probed via its PHY ID. > > Signed-off-by: Andrey Smirnov <andrew.smirnov@xxxxxxxxx> > --- > drivers/net/phy/mdio_bus.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c > index d7d6d8940..589ed57d2 100644 > --- a/drivers/net/phy/mdio_bus.c > +++ b/drivers/net/phy/mdio_bus.c > @@ -26,6 +26,7 @@ > #include <errno.h> > #include <linux/phy.h> > #include <linux/err.h> > +#include <of_device.h> > > #define DEFAULT_GPIO_RESET_ASSERT 1000 /* us */ > #define DEFAULT_GPIO_RESET_DEASSERT 1000 /* us */ > @@ -179,6 +180,16 @@ static int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np) > > /* Loop over the child nodes and register a phy_device for each one */ > for_each_available_child_of_node(np, child) { > + if (of_get_property(child, "compatible", NULL)) { > + if (!of_platform_device_create(child, &mdio->dev)) { > + dev_err(&mdio->dev, > + "Failed to create device for %s\n", > + child->full_name); > + } > + > + continue; > + } PHYs can have a compatible property aswell which is checked for here: > + > if (!of_mdiobus_child_is_phy(child)) > continue; So I believe you have to create a platform device only if it is not a PHY device. Sascha -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox