diff options
Diffstat (limited to 'drivers/net/phy/fixed_phy.c')
| -rw-r--r-- | drivers/net/phy/fixed_phy.c | 29 | 
1 files changed, 29 insertions, 0 deletions
diff --git a/drivers/net/phy/fixed_phy.c b/drivers/net/phy/fixed_phy.c index a08a3c78ba97..1960b46add65 100644 --- a/drivers/net/phy/fixed_phy.c +++ b/drivers/net/phy/fixed_phy.c @@ -183,6 +183,35 @@ int fixed_phy_set_link_update(struct phy_device *phydev,  }  EXPORT_SYMBOL_GPL(fixed_phy_set_link_update); +int fixed_phy_update_state(struct phy_device *phydev, +			   const struct fixed_phy_status *status, +			   const struct fixed_phy_status *changed) +{ +	struct fixed_mdio_bus *fmb = &platform_fmb; +	struct fixed_phy *fp; + +	if (!phydev || !phydev->bus) +		return -EINVAL; + +	list_for_each_entry(fp, &fmb->phys, node) { +		if (fp->addr == phydev->addr) { +#define _UPD(x) if (changed->x) \ +	fp->status.x = status->x +			_UPD(link); +			_UPD(speed); +			_UPD(duplex); +			_UPD(pause); +			_UPD(asym_pause); +#undef _UPD +			fixed_phy_update_regs(fp); +			return 0; +		} +	} + +	return -ENOENT; +} +EXPORT_SYMBOL(fixed_phy_update_state); +  int fixed_phy_add(unsigned int irq, int phy_addr,  		  struct fixed_phy_status *status)  {  | 
