/* Description: The PHY infrastructure can run a state machine which tracks whether the PHY is starting up, negotiating, etc. This function starts the timer which tracks the state of the PHY. If you want to be notified when the state changes, pass in the callback @handler, otherwise, pass NULL. If you want to maintain your own state machine, do not call this function.  */
void phy_start_machine(struct phy_device *phydev, void(*handler)(struct net_device *))
/* Description: The PHY infrastructure can run a state machine which tracks whether the PHY is starting up, negotiating, etc. This function starts the timer which tracks the state of the PHY. If you want to be notified when the state changes, pass in the callback @handler, otherwise, pass NULL. If you want to maintain your own state machine, do not call this function.  */
void phy_start_machine(struct phy_device *phydev, void(*handler)(struct net_device *))
{
	phydev->adjust_state = handler;
	schedule_delayed_work(&phydev->state_queue,
		phy_state_timeout_init > 0 ? phy_state_timeout_init : HZ);
}