ret = ieee80211_register_hw(hw);
        if (ret) {
                rtw89_err(rtwdev, "failed to register hw\n");
-               goto err;
+               goto err_free_supported_band;
        }
 
        ret = rtw89_regd_init(rtwdev, rtw89_regd_notifier);
        if (ret) {
                rtw89_err(rtwdev, "failed to init regd\n");
-               goto err;
+               goto err_unregister_hw;
        }
 
        return 0;
 
-err:
+err_unregister_hw:
+       ieee80211_unregister_hw(hw);
+err_free_supported_band:
+       rtw89_core_clr_supported_band(rtwdev);
+
        return ret;
 }
 
 
        rtw89_pci_link_cfg(rtwdev);
        rtw89_pci_l1ss_cfg(rtwdev);
 
-       ret = rtw89_core_register(rtwdev);
-       if (ret) {
-               rtw89_err(rtwdev, "failed to register core\n");
-               goto err_clear_resource;
-       }
-
        rtw89_core_napi_init(rtwdev);
 
        ret = rtw89_pci_request_irq(rtwdev, pdev);
        if (ret) {
                rtw89_err(rtwdev, "failed to request pci irq\n");
-               goto err_unregister;
+               goto err_deinit_napi;
+       }
+
+       ret = rtw89_core_register(rtwdev);
+       if (ret) {
+               rtw89_err(rtwdev, "failed to register core\n");
+               goto err_free_irq;
        }
 
        return 0;
 
-err_unregister:
+err_free_irq:
+       rtw89_pci_free_irq(rtwdev, pdev);
+err_deinit_napi:
        rtw89_core_napi_deinit(rtwdev);
-       rtw89_core_unregister(rtwdev);
 err_clear_resource:
        rtw89_pci_clear_resource(rtwdev, pdev);
 err_declaim_pci: