{
        struct mt76x02_dev *dev = hw->priv;
 
-       mutex_lock(&dev->mt76.mutex);
-
        mt76x02_mac_start(dev);
        mt76x0_phy_calibrate(dev, true);
        ieee80211_queue_delayed_work(dev->mt76.hw, &dev->mt76.mac_work,
                                     MT_CALIBRATE_INTERVAL);
        set_bit(MT76_STATE_RUNNING, &dev->mt76.state);
 
-       mutex_unlock(&dev->mt76.mutex);
-
        return 0;
 }
 
 {
        struct mt76x02_dev *dev = hw->priv;
 
-       mutex_lock(&dev->mt76.mutex);
        clear_bit(MT76_STATE_RUNNING, &dev->mt76.state);
        mt76x0e_stop_hw(dev);
-       mutex_unlock(&dev->mt76.mutex);
 }
 
 static void
 
        mt76u_queues_deinit(&dev->mt76);
 }
 
-static void mt76x0u_mac_stop(struct mt76x02_dev *dev)
+static void mt76x0u_stop(struct ieee80211_hw *hw)
 {
+       struct mt76x02_dev *dev = hw->priv;
+
        clear_bit(MT76_STATE_RUNNING, &dev->mt76.state);
        cancel_delayed_work_sync(&dev->cal_work);
        cancel_delayed_work_sync(&dev->mt76.mac_work);
        struct mt76x02_dev *dev = hw->priv;
        int ret;
 
-       mutex_lock(&dev->mt76.mutex);
-
        ret = mt76x0_mac_start(dev);
        if (ret)
-               goto out;
+               return ret;
 
        mt76x0_phy_calibrate(dev, true);
        ieee80211_queue_delayed_work(dev->mt76.hw, &dev->mt76.mac_work,
        ieee80211_queue_delayed_work(dev->mt76.hw, &dev->cal_work,
                                     MT_CALIBRATE_INTERVAL);
        set_bit(MT76_STATE_RUNNING, &dev->mt76.state);
-
-out:
-       mutex_unlock(&dev->mt76.mutex);
-       return ret;
-}
-
-static void mt76x0u_stop(struct ieee80211_hw *hw)
-{
-       struct mt76x02_dev *dev = hw->priv;
-
-       mutex_lock(&dev->mt76.mutex);
-       mt76x0u_mac_stop(dev);
-       mutex_unlock(&dev->mt76.mutex);
+       return 0;
 }
 
 static const struct ieee80211_ops mt76x0u_ops = {
 
        struct mt76x02_dev *dev = hw->priv;
        int ret;
 
-       mutex_lock(&dev->mt76.mutex);
-
        ret = mt76x2_mac_start(dev);
        if (ret)
-               goto out;
+               return ret;
 
        ret = mt76x2_phy_start(dev);
        if (ret)
-               goto out;
+               return ret;
 
        ieee80211_queue_delayed_work(mt76_hw(dev), &dev->mt76.mac_work,
                                     MT_MAC_WORK_INTERVAL);
                                     MT_WATCHDOG_TIME);
 
        set_bit(MT76_STATE_RUNNING, &dev->mt76.state);
-
-out:
-       mutex_unlock(&dev->mt76.mutex);
-       return ret;
+       return 0;
 }
 
 static void
 {
        struct mt76x02_dev *dev = hw->priv;
 
-       mutex_lock(&dev->mt76.mutex);
        clear_bit(MT76_STATE_RUNNING, &dev->mt76.state);
        mt76x2_stop_hardware(dev);
-       mutex_unlock(&dev->mt76.mutex);
 }
 
 static int
 
        struct mt76x02_dev *dev = hw->priv;
        int ret;
 
-       mutex_lock(&dev->mt76.mutex);
-
        ret = mt76x2u_mac_start(dev);
        if (ret)
-               goto out;
+               return ret;
 
        ieee80211_queue_delayed_work(mt76_hw(dev), &dev->mt76.mac_work,
                                     MT_MAC_WORK_INTERVAL);
        set_bit(MT76_STATE_RUNNING, &dev->mt76.state);
 
-out:
-       mutex_unlock(&dev->mt76.mutex);
-       return ret;
+       return 0;
 }
 
 static void mt76x2u_stop(struct ieee80211_hw *hw)
 {
        struct mt76x02_dev *dev = hw->priv;
 
-       mutex_lock(&dev->mt76.mutex);
        clear_bit(MT76_STATE_RUNNING, &dev->mt76.state);
        mt76u_stop_tx(&dev->mt76);
        mt76x2u_stop_hw(dev);
-       mutex_unlock(&dev->mt76.mutex);
 }
 
 static int