|
@@ -1264,8 +1264,14 @@ static void b44_clear_stats(struct b44 *bp)
|
|
|
static void b44_chip_reset(struct b44 *bp, int reset_kind)
|
|
|
{
|
|
|
struct ssb_device *sdev = bp->sdev;
|
|
|
+ bool was_enabled;
|
|
|
|
|
|
- if (ssb_device_is_enabled(bp->sdev)) {
|
|
|
+ was_enabled = ssb_device_is_enabled(bp->sdev);
|
|
|
+
|
|
|
+ ssb_device_enable(bp->sdev, 0);
|
|
|
+ ssb_pcicore_dev_irqvecs_enable(&sdev->bus->pcicore, sdev);
|
|
|
+
|
|
|
+ if (was_enabled) {
|
|
|
bw32(bp, B44_RCV_LAZY, 0);
|
|
|
bw32(bp, B44_ENET_CTRL, ENET_CTRL_DISABLE);
|
|
|
b44_wait_bit(bp, B44_ENET_CTRL, ENET_CTRL_DISABLE, 200, 1);
|
|
@@ -1277,10 +1283,8 @@ static void b44_chip_reset(struct b44 *bp, int reset_kind)
|
|
|
}
|
|
|
bw32(bp, B44_DMARX_CTRL, 0);
|
|
|
bp->rx_prod = bp->rx_cons = 0;
|
|
|
- } else
|
|
|
- ssb_pcicore_dev_irqvecs_enable(&sdev->bus->pcicore, sdev);
|
|
|
+ }
|
|
|
|
|
|
- ssb_device_enable(bp->sdev, 0);
|
|
|
b44_clear_stats(bp);
|
|
|
|
|
|
/*
|