diff options
Diffstat (limited to 'target/linux')
| -rw-r--r-- | target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_phy.c | 10 | 
1 files changed, 7 insertions, 3 deletions
| diff --git a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_phy.c b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_phy.c index 75500277f..85f17b9fe 100644 --- a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_phy.c +++ b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_phy.c @@ -59,15 +59,19 @@ void ag71xx_phy_start(struct ag71xx *ag)  void ag71xx_phy_stop(struct ag71xx *ag)  {  	struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag); +	unsigned long flags; -	if (ag->phy_dev) { +	if (ag->phy_dev)  		phy_stop(ag->phy_dev); -	} else { -		if (pdata->has_ar7240_switch) +	else if (pdata->has_ar7240_switch)  			ag71xx_ar7240_stop(ag); + +	spin_lock_irqsave(&ag->lock, flags); +	if (ag->link) {  		ag->link = 0;  		ag71xx_link_adjust(ag);  	} +	spin_unlock_irqrestore(&ag->lock, flags);  }  static int ag71xx_phy_connect_fixed(struct ag71xx *ag) | 
