ieee80211_free_hw(mphy->hw);
 }
 
-
-int mt7615_register_device(struct mt7615_dev *dev)
+void mt7615_init_device(struct mt7615_dev *dev)
 {
        struct ieee80211_hw *hw = mt76_hw(dev);
-       int ret;
 
        dev->phy.dev = dev;
        dev->phy.mt76 = &dev->mt76.phy;
        init_waitqueue_head(&dev->reset_wait);
        INIT_WORK(&dev->reset_work, mt7615_mac_reset_work);
 
-       ret = mt7622_wmac_init(dev);
-       if (ret)
-               return ret;
-
-       ret = mt7615_init_hardware(dev);
-       if (ret)
-               return ret;
-
        mt7615_init_wiphy(hw);
        dev->mphy.sband_2g.sband.ht_cap.cap |= IEEE80211_HT_CAP_LDPC_CODING;
        dev->mphy.sband_5g.sband.ht_cap.cap |= IEEE80211_HT_CAP_LDPC_CODING;
                        IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK;
        mt7615_cap_dbdc_disable(dev);
        dev->phy.dfs_state = -1;
+}
+
+int mt7615_register_device(struct mt7615_dev *dev)
+{
+       int ret;
+
+       mt7615_init_device(dev);
 
        /* init led callbacks */
        if (IS_ENABLED(CONFIG_MT76_LEDS)) {
                dev->mt76.led_cdev.blink_set = mt7615_led_set_blink;
        }
 
+       ret = mt7622_wmac_init(dev);
+       if (ret)
+               return ret;
+
+       ret = mt7615_init_hardware(dev);
+       if (ret)
+               return ret;
+
        ret = mt76_register_device(&dev->mt76, true, mt7615_rates,
                                   ARRAY_SIZE(mt7615_rates));
        if (ret)
 
 int mt7615_mmio_probe(struct device *pdev, void __iomem *mem_base, int irq);
 u32 mt7615_reg_map(struct mt7615_dev *dev, u32 addr);
 
+void mt7615_init_device(struct mt7615_dev *dev);
 int mt7615_register_device(struct mt7615_dev *dev);
 void mt7615_unregister_device(struct mt7615_dev *dev);
 int mt7615_register_ext_phy(struct mt7615_dev *dev);