diff options
| -rw-r--r-- | drivers/net/ethernet/micrel/ks8851.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/net/ethernet/micrel/ks8851.c b/drivers/net/ethernet/micrel/ks8851.c index e5dc0757f077..ad10759e3459 100644 --- a/drivers/net/ethernet/micrel/ks8851.c +++ b/drivers/net/ethernet/micrel/ks8851.c | |||
| @@ -889,16 +889,17 @@ static int ks8851_net_stop(struct net_device *dev) | |||
| 889 | netif_stop_queue(dev); | 889 | netif_stop_queue(dev); |
| 890 | 890 | ||
| 891 | mutex_lock(&ks->lock); | 891 | mutex_lock(&ks->lock); |
| 892 | /* turn off the IRQs and ack any outstanding */ | ||
| 893 | ks8851_wrreg16(ks, KS_IER, 0x0000); | ||
| 894 | ks8851_wrreg16(ks, KS_ISR, 0xffff); | ||
| 895 | mutex_unlock(&ks->lock); | ||
| 892 | 896 | ||
| 893 | /* stop any outstanding work */ | 897 | /* stop any outstanding work */ |
| 894 | flush_work(&ks->irq_work); | 898 | flush_work(&ks->irq_work); |
| 895 | flush_work(&ks->tx_work); | 899 | flush_work(&ks->tx_work); |
| 896 | flush_work(&ks->rxctrl_work); | 900 | flush_work(&ks->rxctrl_work); |
| 897 | 901 | ||
| 898 | /* turn off the IRQs and ack any outstanding */ | 902 | mutex_lock(&ks->lock); |
| 899 | ks8851_wrreg16(ks, KS_IER, 0x0000); | ||
| 900 | ks8851_wrreg16(ks, KS_ISR, 0xffff); | ||
| 901 | |||
| 902 | /* shutdown RX process */ | 903 | /* shutdown RX process */ |
| 903 | ks8851_wrreg16(ks, KS_RXCR1, 0x0000); | 904 | ks8851_wrreg16(ks, KS_RXCR1, 0x0000); |
| 904 | 905 | ||
| @@ -907,6 +908,7 @@ static int ks8851_net_stop(struct net_device *dev) | |||
| 907 | 908 | ||
| 908 | /* set powermode to soft power down to save power */ | 909 | /* set powermode to soft power down to save power */ |
| 909 | ks8851_set_powermode(ks, PMECR_PM_SOFTDOWN); | 910 | ks8851_set_powermode(ks, PMECR_PM_SOFTDOWN); |
| 911 | mutex_unlock(&ks->lock); | ||
| 910 | 912 | ||
| 911 | /* ensure any queued tx buffers are dumped */ | 913 | /* ensure any queued tx buffers are dumped */ |
| 912 | while (!skb_queue_empty(&ks->txq)) { | 914 | while (!skb_queue_empty(&ks->txq)) { |
| @@ -918,7 +920,6 @@ static int ks8851_net_stop(struct net_device *dev) | |||
| 918 | dev_kfree_skb(txb); | 920 | dev_kfree_skb(txb); |
| 919 | } | 921 | } |
| 920 | 922 | ||
| 921 | mutex_unlock(&ks->lock); | ||
| 922 | return 0; | 923 | return 0; |
| 923 | } | 924 | } |
| 924 | 925 | ||
