aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-4965.c
diff options
context:
space:
mode:
authorTomas Winkler <tomas.winkler@intel.com>2008-05-29 04:34:58 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-06-03 15:00:20 -0400
commitf118a91d16127e461cc8c17c529306910f13a8b1 (patch)
tree96f31c93ef9f044f8b77077b1f16f499944e9c5a /drivers/net/wireless/iwlwifi/iwl-4965.c
parent7f066108d15d06ec3534434333f0274c868fe798 (diff)
iwlwifi: implement apm stop function
This patch adds apm stop function for 4965 and 5000. Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-4965.c')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-4965.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c
index 646c589b8282..080fc54db151 100644
--- a/drivers/net/wireless/iwlwifi/iwl-4965.c
+++ b/drivers/net/wireless/iwlwifi/iwl-4965.c
@@ -642,6 +642,22 @@ void iwl4965_hw_txq_ctx_stop(struct iwl_priv *priv)
642 iwl_hw_txq_ctx_free(priv); 642 iwl_hw_txq_ctx_free(priv);
643} 643}
644 644
645static void iwl4965_apm_stop(struct iwl_priv *priv)
646{
647 unsigned long flags;
648
649 iwl4965_hw_nic_stop_master(priv);
650
651 spin_lock_irqsave(&priv->lock, flags);
652
653 iwl_set_bit(priv, CSR_RESET, CSR_RESET_REG_FLAG_SW_RESET);
654
655 udelay(10);
656
657 iwl_set_bit(priv, CSR_GP_CNTRL, CSR_GP_CNTRL_REG_FLAG_INIT_DONE);
658 spin_unlock_irqrestore(&priv->lock, flags);
659}
660
645static int iwl4965_apm_reset(struct iwl_priv *priv) 661static int iwl4965_apm_reset(struct iwl_priv *priv)
646{ 662{
647 int ret = 0; 663 int ret = 0;
@@ -658,6 +674,7 @@ static int iwl4965_apm_reset(struct iwl_priv *priv)
658 /* FIXME: put here L1A -L0S w/a */ 674 /* FIXME: put here L1A -L0S w/a */
659 675
660 iwl_set_bit(priv, CSR_GP_CNTRL, CSR_GP_CNTRL_REG_FLAG_INIT_DONE); 676 iwl_set_bit(priv, CSR_GP_CNTRL, CSR_GP_CNTRL_REG_FLAG_INIT_DONE);
677
661 ret = iwl_poll_bit(priv, CSR_RESET, 678 ret = iwl_poll_bit(priv, CSR_RESET,
662 CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY, 679 CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY,
663 CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY, 25); 680 CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY, 25);
@@ -689,7 +706,6 @@ out:
689 spin_unlock_irqrestore(&priv->lock, flags); 706 spin_unlock_irqrestore(&priv->lock, flags);
690 707
691 return ret; 708 return ret;
692
693} 709}
694 710
695#define REG_RECALIB_PERIOD (60) 711#define REG_RECALIB_PERIOD (60)
@@ -3625,6 +3641,7 @@ static struct iwl_lib_ops iwl4965_lib = {
3625 .apm_ops = { 3641 .apm_ops = {
3626 .init = iwl4965_apm_init, 3642 .init = iwl4965_apm_init,
3627 .reset = iwl4965_apm_reset, 3643 .reset = iwl4965_apm_reset,
3644 .stop = iwl4965_apm_stop,
3628 .config = iwl4965_nic_config, 3645 .config = iwl4965_nic_config,
3629 .set_pwr_src = iwl4965_set_pwr_src, 3646 .set_pwr_src = iwl4965_set_pwr_src,
3630 }, 3647 },