diff options
-rw-r--r-- | drivers/net/b44.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/drivers/net/b44.c b/drivers/net/b44.c index 8e7c8a8e61c7..171da7f75108 100644 --- a/drivers/net/b44.c +++ b/drivers/net/b44.c | |||
@@ -2296,18 +2296,27 @@ static int b44_resume(struct ssb_device *sdev) | |||
2296 | if (!netif_running(dev)) | 2296 | if (!netif_running(dev)) |
2297 | return 0; | 2297 | return 0; |
2298 | 2298 | ||
2299 | spin_lock_irq(&bp->lock); | ||
2300 | b44_init_rings(bp); | ||
2301 | b44_init_hw(bp, B44_FULL_RESET); | ||
2302 | spin_unlock_irq(&bp->lock); | ||
2303 | |||
2304 | /* | ||
2305 | * As a shared interrupt, the handler can be called immediately. To be | ||
2306 | * able to check the interrupt status the hardware must already be | ||
2307 | * powered back on (b44_init_hw). | ||
2308 | */ | ||
2299 | rc = request_irq(dev->irq, b44_interrupt, IRQF_SHARED, dev->name, dev); | 2309 | rc = request_irq(dev->irq, b44_interrupt, IRQF_SHARED, dev->name, dev); |
2300 | if (rc) { | 2310 | if (rc) { |
2301 | netdev_err(dev, "request_irq failed\n"); | 2311 | netdev_err(dev, "request_irq failed\n"); |
2312 | spin_lock_irq(&bp->lock); | ||
2313 | b44_halt(bp); | ||
2314 | b44_free_rings(bp); | ||
2315 | spin_unlock_irq(&bp->lock); | ||
2302 | return rc; | 2316 | return rc; |
2303 | } | 2317 | } |
2304 | 2318 | ||
2305 | spin_lock_irq(&bp->lock); | ||
2306 | |||
2307 | b44_init_rings(bp); | ||
2308 | b44_init_hw(bp, B44_FULL_RESET); | ||
2309 | netif_device_attach(bp->dev); | 2319 | netif_device_attach(bp->dev); |
2310 | spin_unlock_irq(&bp->lock); | ||
2311 | 2320 | ||
2312 | b44_enable_ints(bp); | 2321 | b44_enable_ints(bp); |
2313 | netif_wake_queue(dev); | 2322 | netif_wake_queue(dev); |