diff options
Diffstat (limited to 'drivers/net/ethernet/broadcom/b44.c')
| -rw-r--r-- | drivers/net/ethernet/broadcom/b44.c | 14 | 
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/net/ethernet/broadcom/b44.c b/drivers/net/ethernet/broadcom/b44.c index 1f7b5aa114fa..8a7bf7dad898 100644 --- a/drivers/net/ethernet/broadcom/b44.c +++ b/drivers/net/ethernet/broadcom/b44.c @@ -1484,6 +1484,10 @@ static int b44_open(struct net_device *dev)  	add_timer(&bp->timer);  	b44_enable_ints(bp); + +	if (bp->flags & B44_FLAG_EXTERNAL_PHY) +		phy_start(bp->phydev); +  	netif_start_queue(dev);  out:  	return err; @@ -1646,6 +1650,9 @@ static int b44_close(struct net_device *dev)  	netif_stop_queue(dev); +	if (bp->flags & B44_FLAG_EXTERNAL_PHY) +		phy_stop(bp->phydev); +  	napi_disable(&bp->napi);  	del_timer_sync(&bp->timer); @@ -2222,7 +2229,12 @@ static void b44_adjust_link(struct net_device *dev)  	}  	if (status_changed) { -		b44_check_phy(bp); +		u32 val = br32(bp, B44_TX_CTRL); +		if (bp->flags & B44_FLAG_FULL_DUPLEX) +			val |= TX_CTRL_DUPLEX; +		else +			val &= ~TX_CTRL_DUPLEX; +		bw32(bp, B44_TX_CTRL, val);  		phy_print_status(phydev);  	}  }  | 
