mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-25 08:04:58 +07:00
iwlwifi: acpi: move code that reads SPLC to acpi
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>
This commit is contained in:
parent
e59a00f488
commit
1184611ee8
@ -181,3 +181,30 @@ int iwl_acpi_get_mcc(struct device *dev, char *mcc)
|
||||
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);
|
||||
|
@ -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__ */
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user