aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-5000.c
diff options
context:
space:
mode:
authorTomas Winkler <tomas.winkler@intel.com>2008-04-24 14:55:25 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-05-07 15:02:22 -0400
commit30d59260d54686681e36d3055ff58c58ca3617da (patch)
tree3c2b4d1c04d27b2d99e77354edde19edd2b307be /drivers/net/wireless/iwlwifi/iwl-5000.c
parentda8dec29d7928dcc4ddf6b41d7c4c9cef522c9df (diff)
iwlwifi-5000: add apm_init handler for 5000 HW family
This patch adds apm_init handler for 5000 HW family Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Reinette Chatre <reinette.chatre@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-5000.c')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-5000.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c
index 3dd0b12b155e..32c591c0865b 100644
--- a/drivers/net/wireless/iwlwifi/iwl-5000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-5000.c
@@ -46,6 +46,46 @@
46 46
47#define IWL5000_UCODE_API "-1" 47#define IWL5000_UCODE_API "-1"
48 48
49static int iwl5000_apm_init(struct iwl_priv *priv)
50{
51 int ret = 0;
52
53 iwl_set_bit(priv, CSR_GIO_CHICKEN_BITS,
54 CSR_GIO_CHICKEN_BITS_REG_BIT_DIS_L0S_EXIT_TIMER);
55
56 iwl_set_bit(priv, CSR_ANA_PLL_CFG, CSR50_ANA_PLL_CFG_VAL);
57
58 /* set "initialization complete" bit to move adapter
59 * D0U* --> D0A* state */
60 iwl_set_bit(priv, CSR_GP_CNTRL, CSR_GP_CNTRL_REG_FLAG_INIT_DONE);
61
62 /* wait for clock stabilization */
63 ret = iwl_poll_bit(priv, CSR_GP_CNTRL,
64 CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY,
65 CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY, 25000);
66 if (ret < 0) {
67 IWL_DEBUG_INFO("Failed to init the card\n");
68 return ret;
69 }
70
71 ret = iwl_grab_nic_access(priv);
72 if (ret)
73 return ret;
74
75 /* enable DMA */
76 iwl_write_prph(priv, APMG_CLK_EN_REG,
77 APMG_CLK_VAL_DMA_CLK_RQT);
78
79 udelay(20);
80
81 iwl_set_bits_prph(priv, APMG_PCIDEV_STT_REG,
82 APMG_PCIDEV_STT_VAL_L1_ACT_DIS);
83
84 iwl_release_nic_access(priv);
85
86 return ret;
87}
88
49static struct iwl_hcmd_ops iwl5000_hcmd = { 89static struct iwl_hcmd_ops iwl5000_hcmd = {
50}; 90};
51 91
@@ -53,6 +93,9 @@ static struct iwl_hcmd_utils_ops iwl5000_hcmd_utils = {
53}; 93};
54 94
55static struct iwl_lib_ops iwl5000_lib = { 95static struct iwl_lib_ops iwl5000_lib = {
96 .apm_ops = {
97 .init = iwl5000_apm_init,
98 },
56 .eeprom_ops = { 99 .eeprom_ops = {
57 .verify_signature = iwlcore_eeprom_verify_signature, 100 .verify_signature = iwlcore_eeprom_verify_signature,
58 .acquire_semaphore = iwlcore_eeprom_acquire_semaphore, 101 .acquire_semaphore = iwlcore_eeprom_acquire_semaphore,