Merge tag 'pinctrl-v4.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw...
[linux-2.6-block.git] / drivers / net / wireless / ath / wil6210 / pcie_bus.c
index 7b5c4222bc33e1bb5d533fb002dcbbc64d2d0766..44746ca0d2e6ae86a3581c32d055bfb57586ca9b 100644 (file)
@@ -20,6 +20,7 @@
 #include <linux/interrupt.h>
 #include <linux/suspend.h>
 #include "wil6210.h"
+#include <linux/rtnetlink.h>
 
 static bool use_msi = true;
 module_param(use_msi, bool, S_IRUGO);
@@ -38,6 +39,7 @@ void wil_set_capabilities(struct wil6210_priv *wil)
        u32 rev_id = wil_r(wil, RGF_USER_JTAG_DEV_ID);
 
        bitmap_zero(wil->hw_capabilities, hw_capability_last);
+       bitmap_zero(wil->fw_capabilities, WMI_FW_CAPABILITY_MAX);
 
        switch (rev_id) {
        case JTAG_DEV_ID_SPARROW_B0:
@@ -51,6 +53,9 @@ void wil_set_capabilities(struct wil6210_priv *wil)
        }
 
        wil_info(wil, "Board hardware is %s\n", wil->hw_name);
+
+       /* extract FW capabilities from file without loading the FW */
+       wil_request_firmware(wil, WIL_FW_NAME, false);
 }
 
 void wil_disable_irq(struct wil6210_priv *wil)
@@ -293,6 +298,9 @@ static void wil_pcie_remove(struct pci_dev *pdev)
 #endif /* CONFIG_PM */
 
        wil6210_debugfs_remove(wil);
+       rtnl_lock();
+       wil_p2p_wdev_free(wil);
+       rtnl_unlock();
        wil_if_remove(wil);
        wil_if_pcie_disable(wil);
        pci_iounmap(pdev, csr);
@@ -300,7 +308,6 @@ static void wil_pcie_remove(struct pci_dev *pdev)
        pci_disable_device(pdev);
        if (wil->platform_ops.uninit)
                wil->platform_ops.uninit(wil->platform_handle);
-       wil_p2p_wdev_free(wil);
        wil_if_free(wil);
 }