blob: c5429662ab14485f619fc4c6d966eef3a05cfca3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
--- a/drivers/net/ethernet/broadcom/b44.c
+++ b/drivers/net/ethernet/broadcom/b44.c
@@ -576,7 +576,6 @@ static void b44_check_phy(struct b44 *bp
else
val &= ~TX_CTRL_DUPLEX;
bw32(bp, B44_TX_CTRL, val);
- netif_carrier_on(bp->dev);
b44_link_report(bp);
}
return;
@@ -1511,6 +1510,10 @@ static int b44_open(struct net_device *d
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;
@@ -1673,6 +1676,9 @@ static int b44_close(struct net_device *
netif_stop_queue(dev);
+ if (bp->flags & B44_FLAG_EXTERNAL_PHY)
+ phy_stop(bp->phydev);
+
napi_disable(&bp->napi);
del_timer_sync(&bp->timer);
@@ -2251,8 +2257,13 @@ static void b44_adjust_link(struct net_d
}
if (status_changed) {
- b44_check_phy(bp);
- phy_print_status(phydev);
+ 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);
+ b44_link_report(bp);
}
}
|