iwlwifi: kill bus_is_pm_supported
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Sun, 8 Jan 2012 19:19:45 +0000 (21:19 +0200)
committerWey-Yi Guy <wey-yi.w.guy@intel.com>
Thu, 2 Feb 2012 22:37:12 +0000 (14:37 -0800)
Get this information from the transport layer which is now in charge
of the APM too.

Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
drivers/net/wireless/iwlwifi/iwl-bus.h
drivers/net/wireless/iwlwifi/iwl-pci.c
drivers/net/wireless/iwlwifi/iwl-power.c
drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
drivers/net/wireless/iwlwifi/iwl-trans.h

index d385f692ef1186e65df3fff54e41df80c4bd2a8a..2b0b48edf2837e8fec58e652b022448a69ed1b2d 100644 (file)
@@ -120,12 +120,10 @@ struct iwl_bus;
 
 /**
  * struct iwl_bus_ops - bus specific operations
- * @get_pm_support: must returns true if the bus can go to sleep
  * @get_hw_id_string: prints the hw_id in the provided buffer
  * @get_hw_id: get hw_id in u32
  */
 struct iwl_bus_ops {
-       bool (*get_pm_support)(struct iwl_bus *bus);
        void (*get_hw_id_string)(struct iwl_bus *bus, char buf[], int buf_len);
        u32 (*get_hw_id)(struct iwl_bus *bus);
 };
@@ -149,11 +147,6 @@ struct iwl_bus {
        char bus_specific[0] __attribute__((__aligned__(sizeof(void *))));
 };
 
-static inline bool bus_get_pm_support(struct iwl_bus *bus)
-{
-       return bus->ops->get_pm_support(bus);
-}
-
 static inline void bus_get_hw_id_string(struct iwl_bus *bus, char buf[],
                int buf_len)
 {
index 353022d406eae583c0a07506eeb145e269dc1c4e..0c16efebf93d0fd1ffaed8d75a6003829e5b2190 100644 (file)
@@ -87,25 +87,6 @@ struct iwl_pci_bus {
 #define IWL_BUS_GET_PCI_DEV(_iwl_bus) \
                        ((IWL_BUS_GET_PCI_BUS(_iwl_bus))->pci_dev)
 
-static u16 iwl_pciexp_link_ctrl(struct iwl_bus *bus)
-{
-       int pos;
-       u16 pci_lnk_ctl;
-
-       struct pci_dev *pci_dev = IWL_BUS_GET_PCI_DEV(bus);
-
-       pos = pci_pcie_cap(pci_dev);
-       pci_read_config_word(pci_dev, pos + PCI_EXP_LNKCTL, &pci_lnk_ctl);
-       return pci_lnk_ctl;
-}
-
-static bool iwl_pci_is_pm_supported(struct iwl_bus *bus)
-{
-       u16 lctl = iwl_pciexp_link_ctrl(bus);
-
-       return !(lctl & PCI_CFG_LINK_CTRL_VAL_L0S_EN);
-}
-
 static void iwl_pci_get_hw_id_string(struct iwl_bus *bus, char buf[],
                              int buf_len)
 {
@@ -123,7 +104,6 @@ static u32 iwl_pci_get_hw_id(struct iwl_bus *bus)
 }
 
 static const struct iwl_bus_ops bus_ops_pci = {
-       .get_pm_support = iwl_pci_is_pm_supported,
        .get_hw_id_string = iwl_pci_get_hw_id_string,
        .get_hw_id = iwl_pci_get_hw_id,
 };
index c7394ef2e490f41c5ab45c01aabbd3d4b4c02ae3..fd008c4e41fd749eec780f98ce9ab988827373f9 100644 (file)
@@ -436,7 +436,7 @@ int iwl_power_update_mode(struct iwl_priv *priv, bool force)
 /* initialize to default */
 void iwl_power_initialize(struct iwl_priv *priv)
 {
-       priv->power_data.bus_pm = bus_get_pm_support(bus(priv));
+       priv->power_data.bus_pm = trans(priv)->pm_support;
 
        priv->power_data.debug_sleep_level_override = -1;
 
index c9fe8889ad8259f0f45f2a7c9e8dd8968f5ad31f..8ebb5a54441c7f234e174423f176b5d8dd95eae4 100644 (file)
@@ -676,6 +676,7 @@ static void iwl_apm_config(struct iwl_trans *trans)
                dev_printk(KERN_INFO, trans->dev,
                           "L1 Disabled; Enabling L0S\n");
        }
+       trans->pm_support = !(lctl & PCI_CFG_LINK_CTRL_VAL_L0S_EN);
 }
 
 /*
index 4d1ae65b68ed8a36563fe8f514e5b64807b68093..7f6963ffa7ca198a96ab1f93e196b5678c36ec83 100644 (file)
@@ -239,6 +239,7 @@ struct iwl_calib_result {
  * @ucode_init: init ucode image
  * @ucode_wowlan: wake on wireless ucode image (optional)
  * @nvm_device_type: indicates OTP or eeprom
+ * @pm_support: set to true in start_hw if link pm is supported
  * @calib_results: list head for init calibration results
  */
 struct iwl_trans {
@@ -257,6 +258,7 @@ struct iwl_trans {
 
        /* eeprom related variables */
        int    nvm_device_type;
+       bool pm_support;
 
        /* init calibration results */
        struct list_head calib_results;