Message ID | 4AE6CB6A.5050600@gaisler.com |
---|---|
State | Not Applicable, archived |
Delegated to: | David Miller |
Headers | show |
Hi again, Please forget about this. I'm obviously blind as I can't see the difference between adjust_state and adjust_link ... Best regards, Kristoffer Glembo Kristoffer Glembo wrote: > Hi, > > I'm in the process of converting an ethernet driver to using the PHY > layer, but ran into a problem where my adjust_state handler was never > called and the link did not go up ... > > I use phy_connect to connect the PHY device with my ethernet driver. In > phy_connect_direct I found the following code: > > phy_prepare_link(phydev, handler); > phy_start_machine(phydev, NULL); > > So first the adjust_state is set to handler by phy_prepare_link and then > it is overwritten with the NULL parameter passed to phy_start_machine. > > Maybe I'm abusing the PHY layer somehow since there are plenty of other > drivers using this interface. However the patch below solved the issue > for me. > > Best regards, > Kristoffer Glembo > > > --- > drivers/net/phy/phy_device.c | 3 +-- > 1 files changed, 1 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c > index b10fedd..d27ca80 100644 > --- a/drivers/net/phy/phy_device.c > +++ b/drivers/net/phy/phy_device.c > @@ -311,8 +311,7 @@ int phy_connect_direct(struct net_device *dev, > struct phy_device *phydev, > if (rc) > return rc; > > - phy_prepare_link(phydev, handler); > - phy_start_machine(phydev, NULL); > + phy_start_machine(phydev, handler); > if (phydev->irq > 0) > phy_start_interrupts(phydev); > -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index b10fedd..d27ca80 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -311,8 +311,7 @@ int phy_connect_direct(struct net_device *dev, struct phy_device *phydev, if (rc) return rc; - phy_prepare_link(phydev, handler); - phy_start_machine(phydev, NULL); + phy_start_machine(phydev, handler); if (phydev->irq > 0) phy_start_interrupts(phydev);