diff options
Diffstat (limited to 'drivers/net/smc911x.c')
| -rw-r--r-- | drivers/net/smc911x.c | 23 | 
1 files changed, 22 insertions, 1 deletions
| diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c index 8c9a2a8a0..455b055a9 100644 --- a/drivers/net/smc911x.c +++ b/drivers/net/smc911x.c @@ -117,6 +117,27 @@ static int smc911x_phy_reset(void)  	return 0;  } +static void smc911x_shutdown(void) +{ +	unsigned int cr; + +	/* Turn of Rx and TX */ +	cr = smc911x_get_mac_csr(MAC_CR); +	cr &= ~(MAC_CR_TXEN | MAC_CR_RXEN | MAC_CR_HBDIS); +	smc911x_set_mac_csr(MAC_CR, cr); + +	/* Stop Transmission */ +	cr = smc911x_get_mac_csr(TX_CFG); +	cr &= ~(TX_CFG_STOP_TX); +	smc911x_set_mac_csr(TX_CFG, cr); +	/* Stop receiving packets */ +	cr = smc911x_get_mac_csr(RX_CFG); +	cr &= ~(RX_CFG_RXDOFF); +	smc911x_set_mac_csr(RX_CFG, cr); + +} + +  static void smc911x_phy_configure(void)  {  	int timeout; @@ -225,7 +246,7 @@ int eth_send(volatile void *packet, int length)  void eth_halt(void)  { -	smc911x_reset(); +	smc911x_shutdown();  }  int eth_rx(void) |