aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorBen Cahill <ben.m.cahill@intel.com>2010-02-05 14:33:46 -0500
committerJohn W. Linville <linville@tuxdriver.com>2010-02-08 16:50:58 -0500
commitd4fe5ac9e04e6e175a7bd7e29844b351533be591 (patch)
treebb29b50196723739ffd77096f7e6215358127777 /drivers/net
parent19885c4fbd79439efd6b3798bfb73f2f30e27104 (diff)
iwlwifi: Add chain noise scaling factor
6x50 device requires a different scaling factor for Rx gain values sent to device via PHY_CALIBRATION_CMD (CHAIN_NOISE_GAIN_CMD). Rather than create a new iwlXXXX_gain_computation() function, add new chain_noise_scale member to struct iwl_cfg, and keep using iwl5000_gain_computation(). Signed-off-by: Ben Cahill <ben.m.cahill@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')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-1000.c2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-5000.c21
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-6000.c6
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-core.h1
4 files changed, 28 insertions, 2 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-1000.c b/drivers/net/wireless/iwlwifi/iwl-1000.c
index 9d1820676f30..694ceef88590 100644
--- a/drivers/net/wireless/iwlwifi/iwl-1000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-1000.c
@@ -247,6 +247,7 @@ struct iwl_cfg iwl1000_bgn_cfg = {
247 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, 247 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
248 .support_ct_kill_exit = true, 248 .support_ct_kill_exit = true,
249 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, 249 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
250 .chain_noise_scale = 1000,
250}; 251};
251 252
252struct iwl_cfg iwl1000_bg_cfg = { 253struct iwl_cfg iwl1000_bg_cfg = {
@@ -274,6 +275,7 @@ struct iwl_cfg iwl1000_bg_cfg = {
274 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, 275 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
275 .support_ct_kill_exit = true, 276 .support_ct_kill_exit = true,
276 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, 277 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
278 .chain_noise_scale = 1000,
277}; 279};
278 280
279MODULE_FIRMWARE(IWL1000_MODULE_FIRMWARE(IWL1000_UCODE_API_MAX)); 281MODULE_FIRMWARE(IWL1000_MODULE_FIRMWARE(IWL1000_UCODE_API_MAX));
diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c
index 6d5988901341..f3d662c8cbcf 100644
--- a/drivers/net/wireless/iwlwifi/iwl-5000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-5000.c
@@ -179,14 +179,24 @@ static void iwl5000_gain_computation(struct iwl_priv *priv,
179 data->delta_gain_code[i] = 0; 179 data->delta_gain_code[i] = 0;
180 continue; 180 continue;
181 } 181 }
182 delta_g = (1000 * ((s32)average_noise[default_chain] - 182
183 delta_g = (priv->cfg->chain_noise_scale *
184 ((s32)average_noise[default_chain] -
183 (s32)average_noise[i])) / 1500; 185 (s32)average_noise[i])) / 1500;
186
184 /* bound gain by 2 bits value max, 3rd bit is sign */ 187 /* bound gain by 2 bits value max, 3rd bit is sign */
185 data->delta_gain_code[i] = 188 data->delta_gain_code[i] =
186 min(abs(delta_g), (long) CHAIN_NOISE_MAX_DELTA_GAIN_CODE); 189 min(abs(delta_g), (long) CHAIN_NOISE_MAX_DELTA_GAIN_CODE);
187 190
188 if (delta_g < 0) 191 if (delta_g < 0)
189 /* set negative sign */ 192 /*
193 * set negative sign ...
194 * note to Intel developers: This is uCode API format,
195 * not the format of any internal device registers.
196 * Do not change this format for e.g. 6050 or similar
197 * devices. Change format only if more resolution
198 * (i.e. more than 2 bits magnitude) is needed.
199 */
190 data->delta_gain_code[i] |= (1 << 2); 200 data->delta_gain_code[i] |= (1 << 2);
191 } 201 }
192 202
@@ -1587,6 +1597,7 @@ struct iwl_cfg iwl5300_agn_cfg = {
1587 .use_rts_for_ht = true, /* use rts/cts protection */ 1597 .use_rts_for_ht = true, /* use rts/cts protection */
1588 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, 1598 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
1589 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, 1599 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
1600 .chain_noise_scale = 1000,
1590}; 1601};
1591 1602
1592struct iwl_cfg iwl5100_bgn_cfg = { 1603struct iwl_cfg iwl5100_bgn_cfg = {
@@ -1612,6 +1623,7 @@ struct iwl_cfg iwl5100_bgn_cfg = {
1612 .use_rts_for_ht = true, /* use rts/cts protection */ 1623 .use_rts_for_ht = true, /* use rts/cts protection */
1613 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, 1624 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
1614 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, 1625 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
1626 .chain_noise_scale = 1000,
1615}; 1627};
1616 1628
1617struct iwl_cfg iwl5100_abg_cfg = { 1629struct iwl_cfg iwl5100_abg_cfg = {
@@ -1635,6 +1647,7 @@ struct iwl_cfg iwl5100_abg_cfg = {
1635 .led_compensation = 51, 1647 .led_compensation = 51,
1636 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, 1648 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
1637 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, 1649 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
1650 .chain_noise_scale = 1000,
1638}; 1651};
1639 1652
1640struct iwl_cfg iwl5100_agn_cfg = { 1653struct iwl_cfg iwl5100_agn_cfg = {
@@ -1660,6 +1673,7 @@ struct iwl_cfg iwl5100_agn_cfg = {
1660 .use_rts_for_ht = true, /* use rts/cts protection */ 1673 .use_rts_for_ht = true, /* use rts/cts protection */
1661 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, 1674 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
1662 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, 1675 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
1676 .chain_noise_scale = 1000,
1663}; 1677};
1664 1678
1665struct iwl_cfg iwl5350_agn_cfg = { 1679struct iwl_cfg iwl5350_agn_cfg = {
@@ -1685,6 +1699,7 @@ struct iwl_cfg iwl5350_agn_cfg = {
1685 .use_rts_for_ht = true, /* use rts/cts protection */ 1699 .use_rts_for_ht = true, /* use rts/cts protection */
1686 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, 1700 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
1687 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, 1701 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
1702 .chain_noise_scale = 1000,
1688}; 1703};
1689 1704
1690struct iwl_cfg iwl5150_agn_cfg = { 1705struct iwl_cfg iwl5150_agn_cfg = {
@@ -1710,6 +1725,7 @@ struct iwl_cfg iwl5150_agn_cfg = {
1710 .use_rts_for_ht = true, /* use rts/cts protection */ 1725 .use_rts_for_ht = true, /* use rts/cts protection */
1711 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, 1726 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
1712 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, 1727 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
1728 .chain_noise_scale = 1000,
1713}; 1729};
1714 1730
1715struct iwl_cfg iwl5150_abg_cfg = { 1731struct iwl_cfg iwl5150_abg_cfg = {
@@ -1733,6 +1749,7 @@ struct iwl_cfg iwl5150_abg_cfg = {
1733 .led_compensation = 51, 1749 .led_compensation = 51,
1734 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, 1750 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
1735 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, 1751 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
1752 .chain_noise_scale = 1000,
1736}; 1753};
1737 1754
1738MODULE_FIRMWARE(IWL5000_MODULE_FIRMWARE(IWL5000_UCODE_API_MAX)); 1755MODULE_FIRMWARE(IWL5000_MODULE_FIRMWARE(IWL5000_UCODE_API_MAX));
diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c
index a9f8551e0e40..17198253b0bc 100644
--- a/drivers/net/wireless/iwlwifi/iwl-6000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-6000.c
@@ -324,6 +324,7 @@ struct iwl_cfg iwl6000i_2agn_cfg = {
324 .adv_thermal_throttle = true, 324 .adv_thermal_throttle = true,
325 .support_ct_kill_exit = true, 325 .support_ct_kill_exit = true,
326 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, 326 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
327 .chain_noise_scale = 1000,
327}; 328};
328 329
329struct iwl_cfg iwl6000i_2abg_cfg = { 330struct iwl_cfg iwl6000i_2abg_cfg = {
@@ -354,6 +355,7 @@ struct iwl_cfg iwl6000i_2abg_cfg = {
354 .adv_thermal_throttle = true, 355 .adv_thermal_throttle = true,
355 .support_ct_kill_exit = true, 356 .support_ct_kill_exit = true,
356 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, 357 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
358 .chain_noise_scale = 1000,
357}; 359};
358 360
359struct iwl_cfg iwl6000i_2bg_cfg = { 361struct iwl_cfg iwl6000i_2bg_cfg = {
@@ -384,6 +386,7 @@ struct iwl_cfg iwl6000i_2bg_cfg = {
384 .adv_thermal_throttle = true, 386 .adv_thermal_throttle = true,
385 .support_ct_kill_exit = true, 387 .support_ct_kill_exit = true,
386 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, 388 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
389 .chain_noise_scale = 1000,
387}; 390};
388 391
389struct iwl_cfg iwl6050_2agn_cfg = { 392struct iwl_cfg iwl6050_2agn_cfg = {
@@ -415,6 +418,7 @@ struct iwl_cfg iwl6050_2agn_cfg = {
415 .adv_thermal_throttle = true, 418 .adv_thermal_throttle = true,
416 .support_ct_kill_exit = true, 419 .support_ct_kill_exit = true,
417 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, 420 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
421 .chain_noise_scale = 1500,
418}; 422};
419 423
420struct iwl_cfg iwl6050_2abg_cfg = { 424struct iwl_cfg iwl6050_2abg_cfg = {
@@ -445,6 +449,7 @@ struct iwl_cfg iwl6050_2abg_cfg = {
445 .adv_thermal_throttle = true, 449 .adv_thermal_throttle = true,
446 .support_ct_kill_exit = true, 450 .support_ct_kill_exit = true,
447 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, 451 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
452 .chain_noise_scale = 1500,
448}; 453};
449 454
450struct iwl_cfg iwl6000_3agn_cfg = { 455struct iwl_cfg iwl6000_3agn_cfg = {
@@ -476,6 +481,7 @@ struct iwl_cfg iwl6000_3agn_cfg = {
476 .adv_thermal_throttle = true, 481 .adv_thermal_throttle = true,
477 .support_ct_kill_exit = true, 482 .support_ct_kill_exit = true,
478 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, 483 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
484 .chain_noise_scale = 1000,
479}; 485};
480 486
481MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX)); 487MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX));
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h
index ec1fe1d7cc9a..49795b90246d 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.h
+++ b/drivers/net/wireless/iwlwifi/iwl-core.h
@@ -293,6 +293,7 @@ struct iwl_cfg {
293 bool support_ct_kill_exit; 293 bool support_ct_kill_exit;
294 const bool support_wimax_coexist; 294 const bool support_wimax_coexist;
295 u8 plcp_delta_threshold; 295 u8 plcp_delta_threshold;
296 s32 chain_noise_scale;
296}; 297};
297 298
298/*************************** 299/***************************