OSDN Git Service

iwlwifi: acpi: move code that reads SPLC to acpi
authorLuca Coelho <luciano.coelho@intel.com>
Thu, 28 Sep 2017 12:18:33 +0000 (15:18 +0300)
committerLuca Coelho <luciano.coelho@intel.com>
Fri, 6 Oct 2017 12:22:33 +0000 (15:22 +0300)
Move most of the set_dflt_pwr_limit() function to acpi.c and make it
return the pwr_limit value instead of setting directly.  Also rename
it to iwl_acpi_get_pwr_limit().

Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
drivers/net/wireless/intel/iwlwifi/fw/acpi.c
drivers/net/wireless/intel/iwlwifi/fw/acpi.h
drivers/net/wireless/intel/iwlwifi/pcie/drv.c

index adce361..75cae54 100644 (file)
@@ -181,3 +181,30 @@ out_free:
        return ret;
 }
 IWL_EXPORT_SYMBOL(iwl_acpi_get_mcc);
+
+u64 iwl_acpi_get_pwr_limit(struct device *dev)
+{
+       union acpi_object *data, *wifi_pkg;
+       u64 dflt_pwr_limit;
+
+       data = iwl_acpi_get_object(dev, ACPI_SPLC_METHOD);
+       if (IS_ERR(data)) {
+               dflt_pwr_limit = 0;
+               goto out;
+       }
+
+       wifi_pkg = iwl_acpi_get_wifi_pkg(dev, data,
+                                        ACPI_SPLC_WIFI_DATA_SIZE);
+       if (IS_ERR(wifi_pkg) ||
+           wifi_pkg->package.elements[1].integer.value != ACPI_TYPE_INTEGER) {
+               dflt_pwr_limit = 0;
+               goto out_free;
+       }
+
+       dflt_pwr_limit = wifi_pkg->package.elements[1].integer.value;
+out_free:
+       kfree(data);
+out:
+       return dflt_pwr_limit;
+}
+IWL_EXPORT_SYMBOL(iwl_acpi_get_pwr_limit);
index fe9c106..cb5f32c 100644 (file)
@@ -108,6 +108,8 @@ union acpi_object *iwl_acpi_get_wifi_pkg(struct device *dev,
  */
 int iwl_acpi_get_mcc(struct device *dev, char *mcc);
 
+u64 iwl_acpi_get_pwr_limit(struct device *dev);
+
 #else /* CONFIG_ACPI */
 
 static inline void *iwl_acpi_get_object(struct device *dev, acpi_string method)
@@ -127,5 +129,10 @@ static inline int iwl_acpi_get_mcc(struct device *dev, char *mcc)
        return -ENOENT;
 }
 
+static inline u64 iwl_acpi_get_pwr_limit(struct device *dev)
+{
+       return 0;
+}
+
 #endif /* CONFIG_ACPI */
 #endif /* __iwl_fw_acpi__ */
index 08f71b4..d81f241 100644 (file)
@@ -78,6 +78,7 @@
 #include "iwl-trans.h"
 #include "iwl-drv.h"
 #include "internal.h"
+#include "fw/acpi.h"
 
 #define IWL_PCI_DEVICE(dev, subdev, cfg) \
        .vendor = PCI_VENDOR_ID_INTEL,  .device = (dev), \
@@ -587,28 +588,6 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
 };
 MODULE_DEVICE_TABLE(pci, iwl_hw_card_ids);
 
-static void set_dflt_pwr_limit(struct iwl_trans *trans, struct pci_dev *pdev)
-{
-       union acpi_object *data, *wifi_pkg;
-
-       data = iwl_acpi_get_object(trans->dev, ACPI_SPLC_METHOD);
-       if (IS_ERR(data))
-               return;
-
-       wifi_pkg = iwl_acpi_get_wifi_pkg(trans->dev, data,
-                                        ACPI_SPLC_WIFI_DATA_SIZE);
-       if (IS_ERR(wifi_pkg) ||
-           wifi_pkg->package.elements[1].integer.value != ACPI_TYPE_INTEGER)
-               goto out;
-
-       trans->dflt_pwr_limit = wifi_pkg->package.elements[1].integer.value;
-
-       IWL_DEBUG_INFO(trans, "Default power limit set to %lld\n",
-                      trans->dflt_pwr_limit);
-out:
-       kfree(data);
-}
-
 /* PCI registers */
 #define PCI_CFG_RETRY_TIMEOUT  0x041
 
@@ -672,7 +651,7 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
                goto out_free_trans;
        }
 
-       set_dflt_pwr_limit(iwl_trans, pdev);
+       iwl_trans->dflt_pwr_limit = iwl_acpi_get_pwr_limit(iwl_trans->dev);
 
        /* register transport layer debugfs here */
        ret = iwl_trans_pcie_dbgfs_register(iwl_trans);