iwlwifi: separate the APM from the EEPROM
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Wed, 4 Jan 2012 14:57:09 +0000 (16:57 +0200)
committerWey-Yi Guy <wey-yi.w.guy@intel.com>
Thu, 2 Feb 2012 21:40:25 +0000 (13:40 -0800)
There is no link between the two. Ensure that the NIC is on outside
the code of the EEPROM handling.

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-agn.c
drivers/net/wireless/iwlwifi/iwl-eeprom.c

index 9d9185f..f3bd6a3 100644 (file)
@@ -1848,8 +1848,12 @@ int iwl_probe(struct iwl_bus *bus, const struct iwl_trans_ops *trans_ops,
        /*****************
         * 4. Read EEPROM
         *****************/
+       /* switch the NIC on before accessing the EEPROM */
+       iwl_apm_init(priv);
        /* Read the EEPROM */
        err = iwl_eeprom_init(priv, hw_rev);
+       /* Reset chip to save power until we load uCode during "up". */
+       iwl_apm_stop(priv);
        if (err) {
                IWL_ERR(priv, "Unable to init EEPROM\n");
                goto out_free_trans;
index e27d9f5..ce214e0 100644 (file)
@@ -676,8 +676,6 @@ int iwl_eeprom_init(struct iwl_priv *priv, u32 hw_rev)
        }
        e = (__le16 *)shrd->eeprom;
 
-       iwl_apm_init(priv);
-
        ret = iwl_eeprom_verify_signature(trans(priv));
        if (ret < 0) {
                IWL_ERR(priv, "EEPROM not found, EEPROM_GP=0x%08x\n", gp);
@@ -758,8 +756,6 @@ done:
 err:
        if (ret)
                iwl_eeprom_free(priv->shrd);
-       /* Reset chip to save power until we load uCode during "up". */
-       iwl_apm_stop(priv);
 alloc_err:
        return ret;
 }