2013/11/26 <shh....@gmail.com>: > From: Andy Fleming <aflem...@freescale.com> > > phy_attach_direct() may now attach to a generic 10G driver. It can > also be used exactly as phy_connect_direct(), which will be useful > when using of_mdio, as phy_connect (and therefore of_phy_connect) > start the PHY state machine, which is currently irrelevant for 10G > PHYs. > > Signed-off-by: Andy Fleming <aflem...@freescale.com> > Signed-off-by: Shaohui Xie <shaohui....@freescale.com>
Acked-by: Florian Fainelli <f.faine...@gmail.com> > --- > v2: align with the array genphy_driver. > > drivers/net/phy/phy_device.c | 22 ++++++++++------------ > include/linux/phy.h | 2 ++ > 2 files changed, 12 insertions(+), 12 deletions(-) > > diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c > index 96a5e03..a6b4ce0 100644 > --- a/drivers/net/phy/phy_device.c > +++ b/drivers/net/phy/phy_device.c > @@ -61,9 +61,6 @@ extern void mdio_bus_exit(void); > static LIST_HEAD(phy_fixup_list); > static DEFINE_MUTEX(phy_fixup_lock); > > -static int phy_attach_direct(struct net_device *dev, struct phy_device > *phydev, > - u32 flags, phy_interface_t interface); > - > /* > * Creates a new phy_fixup and adds it to the list > * @bus_id: A string which matches phydev->dev.bus_id (or PHY_ANY_ID) > @@ -521,12 +518,12 @@ int phy_init_hw(struct phy_device *phydev) > * > * Description: Called by drivers to attach to a particular PHY > * device. The phy_device is found, and properly hooked up > - * to the phy_driver. If no driver is attached, then the > - * genphy_driver is used. The phy_device is given a ptr to > + * to the phy_driver. If no driver is attached, then a > + * generic driver is used. The phy_device is given a ptr to > * the attaching device, and given a callback for link status > * change. The phy_device is returned to the attaching driver. > */ > -static int phy_attach_direct(struct net_device *dev, struct phy_device > *phydev, > +int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, > u32 flags, phy_interface_t interface) > { > struct device *d = &phydev->dev; > @@ -535,12 +532,10 @@ static int phy_attach_direct(struct net_device *dev, > struct phy_device *phydev, > /* Assume that if there is no driver, that it doesn't > * exist, and we should use the genphy driver. */ > if (NULL == d->driver) { > - if (phydev->is_c45) { > - pr_err("No driver for phy %x\n", phydev->phy_id); > - return -ENODEV; > - } > - > - d->driver = &genphy_driver[0].driver; > + if (phydev->is_c45) > + d->driver = &genphy_driver[1].driver; > + else > + d->driver = &genphy_driver[0].driver; > > err = d->driver->probe(d); > if (err >= 0) > @@ -573,6 +568,7 @@ static int phy_attach_direct(struct net_device *dev, > struct phy_device *phydev, > > return err; > } > +EXPORT_SYMBOL(phy_attach_direct); > > /** > * phy_attach - attach a network device to a particular PHY device > @@ -623,6 +619,8 @@ void phy_detach(struct phy_device *phydev) > * real driver could be loaded */ > if (phydev->dev.driver == &genphy_driver[0].driver) > device_release_driver(&phydev->dev); > + else if (phydev->dev.driver == &genphy_driver[1].driver) > + device_release_driver(&phydev->dev); > } > EXPORT_SYMBOL(phy_detach); > > diff --git a/include/linux/phy.h b/include/linux/phy.h > index 2606599..00abc35 100644 > --- a/include/linux/phy.h > +++ b/include/linux/phy.h > @@ -575,6 +575,8 @@ int phy_init_hw(struct phy_device *phydev); > struct phy_device * phy_attach(struct net_device *dev, > const char *bus_id, phy_interface_t interface); > struct phy_device *phy_find_first(struct mii_bus *bus); > +int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, > + u32 flags, phy_interface_t interface); > int phy_connect_direct(struct net_device *dev, struct phy_device *phydev, > void (*handler)(struct net_device *), > phy_interface_t interface); > -- > 1.8.4.1 > > -- Florian -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/