bool failed = false;
 
        cancel_delayed_work_sync(&dev->mt76.mac_work);
+       tasklet_disable(&dev->mt76.pre_tbtt_tasklet);
 
        mutex_lock(&dev->mt76.mutex);
        set_bit(MT76_RESET, &dev->mt76.state);
 
+       mt7603_beacon_set_timer(dev, -1, 0);
        mt76_set_channel(&dev->mt76);
        mt7603_mac_stop(dev);
 
        mt7603_init_edcca(dev);
 
 out:
+       if (!(mt76_hw(dev)->conf.flags & IEEE80211_CONF_OFFCHANNEL))
+               mt7603_beacon_set_timer(dev, -1, dev->mt76.beacon_int);
        mutex_unlock(&dev->mt76.mutex);
 
+       tasklet_enable(&dev->mt76.pre_tbtt_tasklet);
+
        if (failed)
                mt7603_mac_work(&dev->mt76.mac_work.work);
 
        struct mt7603_dev *dev = hw->priv;
 
        set_bit(MT76_SCANNING, &dev->mt76.state);
-       mt7603_beacon_set_timer(dev, -1, 0);
 }
 
 static void
        struct mt7603_dev *dev = hw->priv;
 
        clear_bit(MT76_SCANNING, &dev->mt76.state);
-       mt7603_beacon_set_timer(dev, -1, dev->mt76.beacon_int);
 }
 
 static void