2009-02-09 06:00:34 +02:00
/*
* RF Gain optimization
*
* Copyright ( c ) 2004 - 2009 Reyk Floeter < reyk @ openbsd . org >
* Copyright ( c ) 2006 - 2009 Nick Kossifidis < mickflemm @ gmail . com >
*
* Permission to use , copy , modify , and distribute this software for any
* purpose with or without fee is hereby granted , provided that the above
* copyright notice and this permission notice appear in all copies .
*
* THE SOFTWARE IS PROVIDED " AS IS " AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS . IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL , DIRECT , INDIRECT , OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE , DATA OR PROFITS , WHETHER IN AN
* ACTION OF CONTRACT , NEGLIGENCE OR OTHER TORTIOUS ACTION , ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE .
*
*/
/*
* Mode - specific RF Gain table ( 64 bytes ) for RF5111 / 5112
* ( RF5110 only comes with AR5210 and only supports a / turbo a mode so initial
* RF Gain values are included in AR5K_AR5210_INI )
*/
struct ath5k_ini_rfgain {
u16 rfg_register ; /* RF Gain register address */
u32 rfg_value [ 2 ] ; /* [freq (see below)] */
} ;
/* Initial RF Gain settings for RF5111 */
static const struct ath5k_ini_rfgain rfgain_5111 [ ] = {
/* 5Ghz 2Ghz */
{ AR5K_RF_GAIN ( 0 ) , { 0x000001a9 , 0x00000000 } } ,
{ AR5K_RF_GAIN ( 1 ) , { 0x000001e9 , 0x00000040 } } ,
{ AR5K_RF_GAIN ( 2 ) , { 0x00000029 , 0x00000080 } } ,
{ AR5K_RF_GAIN ( 3 ) , { 0x00000069 , 0x00000150 } } ,
{ AR5K_RF_GAIN ( 4 ) , { 0x00000199 , 0x00000190 } } ,
{ AR5K_RF_GAIN ( 5 ) , { 0x000001d9 , 0x000001d0 } } ,
{ AR5K_RF_GAIN ( 6 ) , { 0x00000019 , 0x00000010 } } ,
{ AR5K_RF_GAIN ( 7 ) , { 0x00000059 , 0x00000044 } } ,
{ AR5K_RF_GAIN ( 8 ) , { 0x00000099 , 0x00000084 } } ,
{ AR5K_RF_GAIN ( 9 ) , { 0x000001a5 , 0x00000148 } } ,
{ AR5K_RF_GAIN ( 10 ) , { 0x000001e5 , 0x00000188 } } ,
{ AR5K_RF_GAIN ( 11 ) , { 0x00000025 , 0x000001c8 } } ,
{ AR5K_RF_GAIN ( 12 ) , { 0x000001c8 , 0x00000014 } } ,
{ AR5K_RF_GAIN ( 13 ) , { 0x00000008 , 0x00000042 } } ,
{ AR5K_RF_GAIN ( 14 ) , { 0x00000048 , 0x00000082 } } ,
{ AR5K_RF_GAIN ( 15 ) , { 0x00000088 , 0x00000178 } } ,
{ AR5K_RF_GAIN ( 16 ) , { 0x00000198 , 0x000001b8 } } ,
{ AR5K_RF_GAIN ( 17 ) , { 0x000001d8 , 0x000001f8 } } ,
{ AR5K_RF_GAIN ( 18 ) , { 0x00000018 , 0x00000012 } } ,
{ AR5K_RF_GAIN ( 19 ) , { 0x00000058 , 0x00000052 } } ,
{ AR5K_RF_GAIN ( 20 ) , { 0x00000098 , 0x00000092 } } ,
{ AR5K_RF_GAIN ( 21 ) , { 0x000001a4 , 0x0000017c } } ,
{ AR5K_RF_GAIN ( 22 ) , { 0x000001e4 , 0x000001bc } } ,
{ AR5K_RF_GAIN ( 23 ) , { 0x00000024 , 0x000001fc } } ,
{ AR5K_RF_GAIN ( 24 ) , { 0x00000064 , 0x0000000a } } ,
{ AR5K_RF_GAIN ( 25 ) , { 0x000000a4 , 0x0000004a } } ,
{ AR5K_RF_GAIN ( 26 ) , { 0x000000e4 , 0x0000008a } } ,
{ AR5K_RF_GAIN ( 27 ) , { 0x0000010a , 0x0000015a } } ,
{ AR5K_RF_GAIN ( 28 ) , { 0x0000014a , 0x0000019a } } ,
{ AR5K_RF_GAIN ( 29 ) , { 0x0000018a , 0x000001da } } ,
{ AR5K_RF_GAIN ( 30 ) , { 0x000001ca , 0x0000000e } } ,
{ AR5K_RF_GAIN ( 31 ) , { 0x0000000a , 0x0000004e } } ,
{ AR5K_RF_GAIN ( 32 ) , { 0x0000004a , 0x0000008e } } ,
{ AR5K_RF_GAIN ( 33 ) , { 0x0000008a , 0x0000015e } } ,
{ AR5K_RF_GAIN ( 34 ) , { 0x000001ba , 0x0000019e } } ,
{ AR5K_RF_GAIN ( 35 ) , { 0x000001fa , 0x000001de } } ,
{ AR5K_RF_GAIN ( 36 ) , { 0x0000003a , 0x00000009 } } ,
{ AR5K_RF_GAIN ( 37 ) , { 0x0000007a , 0x00000049 } } ,
{ AR5K_RF_GAIN ( 38 ) , { 0x00000186 , 0x00000089 } } ,
{ AR5K_RF_GAIN ( 39 ) , { 0x000001c6 , 0x00000179 } } ,
{ AR5K_RF_GAIN ( 40 ) , { 0x00000006 , 0x000001b9 } } ,
{ AR5K_RF_GAIN ( 41 ) , { 0x00000046 , 0x000001f9 } } ,
{ AR5K_RF_GAIN ( 42 ) , { 0x00000086 , 0x00000039 } } ,
{ AR5K_RF_GAIN ( 43 ) , { 0x000000c6 , 0x00000079 } } ,
{ AR5K_RF_GAIN ( 44 ) , { 0x000000c6 , 0x000000b9 } } ,
{ AR5K_RF_GAIN ( 45 ) , { 0x000000c6 , 0x000001bd } } ,
{ AR5K_RF_GAIN ( 46 ) , { 0x000000c6 , 0x000001fd } } ,
{ AR5K_RF_GAIN ( 47 ) , { 0x000000c6 , 0x0000003d } } ,
{ AR5K_RF_GAIN ( 48 ) , { 0x000000c6 , 0x0000007d } } ,
{ AR5K_RF_GAIN ( 49 ) , { 0x000000c6 , 0x000000bd } } ,
{ AR5K_RF_GAIN ( 50 ) , { 0x000000c6 , 0x000000fd } } ,
{ AR5K_RF_GAIN ( 51 ) , { 0x000000c6 , 0x000000fd } } ,
{ AR5K_RF_GAIN ( 52 ) , { 0x000000c6 , 0x000000fd } } ,
{ AR5K_RF_GAIN ( 53 ) , { 0x000000c6 , 0x000000fd } } ,
{ AR5K_RF_GAIN ( 54 ) , { 0x000000c6 , 0x000000fd } } ,
{ AR5K_RF_GAIN ( 55 ) , { 0x000000c6 , 0x000000fd } } ,
{ AR5K_RF_GAIN ( 56 ) , { 0x000000c6 , 0x000000fd } } ,
{ AR5K_RF_GAIN ( 57 ) , { 0x000000c6 , 0x000000fd } } ,
{ AR5K_RF_GAIN ( 58 ) , { 0x000000c6 , 0x000000fd } } ,
{ AR5K_RF_GAIN ( 59 ) , { 0x000000c6 , 0x000000fd } } ,
{ AR5K_RF_GAIN ( 60 ) , { 0x000000c6 , 0x000000fd } } ,
{ AR5K_RF_GAIN ( 61 ) , { 0x000000c6 , 0x000000fd } } ,
{ AR5K_RF_GAIN ( 62 ) , { 0x000000c6 , 0x000000fd } } ,
{ AR5K_RF_GAIN ( 63 ) , { 0x000000c6 , 0x000000fd } } ,
} ;
/* Initial RF Gain settings for RF5112 */
static const struct ath5k_ini_rfgain rfgain_5112 [ ] = {
/* 5Ghz 2Ghz */
{ AR5K_RF_GAIN ( 0 ) , { 0x00000007 , 0x00000007 } } ,
{ AR5K_RF_GAIN ( 1 ) , { 0x00000047 , 0x00000047 } } ,
{ AR5K_RF_GAIN ( 2 ) , { 0x00000087 , 0x00000087 } } ,
{ AR5K_RF_GAIN ( 3 ) , { 0x000001a0 , 0x000001a0 } } ,
{ AR5K_RF_GAIN ( 4 ) , { 0x000001e0 , 0x000001e0 } } ,
{ AR5K_RF_GAIN ( 5 ) , { 0x00000020 , 0x00000020 } } ,
{ AR5K_RF_GAIN ( 6 ) , { 0x00000060 , 0x00000060 } } ,
{ AR5K_RF_GAIN ( 7 ) , { 0x000001a1 , 0x000001a1 } } ,
{ AR5K_RF_GAIN ( 8 ) , { 0x000001e1 , 0x000001e1 } } ,
{ AR5K_RF_GAIN ( 9 ) , { 0x00000021 , 0x00000021 } } ,
{ AR5K_RF_GAIN ( 10 ) , { 0x00000061 , 0x00000061 } } ,
{ AR5K_RF_GAIN ( 11 ) , { 0x00000162 , 0x00000162 } } ,
{ AR5K_RF_GAIN ( 12 ) , { 0x000001a2 , 0x000001a2 } } ,
{ AR5K_RF_GAIN ( 13 ) , { 0x000001e2 , 0x000001e2 } } ,
{ AR5K_RF_GAIN ( 14 ) , { 0x00000022 , 0x00000022 } } ,
{ AR5K_RF_GAIN ( 15 ) , { 0x00000062 , 0x00000062 } } ,
{ AR5K_RF_GAIN ( 16 ) , { 0x00000163 , 0x00000163 } } ,
{ AR5K_RF_GAIN ( 17 ) , { 0x000001a3 , 0x000001a3 } } ,
{ AR5K_RF_GAIN ( 18 ) , { 0x000001e3 , 0x000001e3 } } ,
{ AR5K_RF_GAIN ( 19 ) , { 0x00000023 , 0x00000023 } } ,
{ AR5K_RF_GAIN ( 20 ) , { 0x00000063 , 0x00000063 } } ,
{ AR5K_RF_GAIN ( 21 ) , { 0x00000184 , 0x00000184 } } ,
{ AR5K_RF_GAIN ( 22 ) , { 0x000001c4 , 0x000001c4 } } ,
{ AR5K_RF_GAIN ( 23 ) , { 0x00000004 , 0x00000004 } } ,
{ AR5K_RF_GAIN ( 24 ) , { 0x000001ea , 0x0000000b } } ,
{ AR5K_RF_GAIN ( 25 ) , { 0x0000002a , 0x0000004b } } ,
{ AR5K_RF_GAIN ( 26 ) , { 0x0000006a , 0x0000008b } } ,
{ AR5K_RF_GAIN ( 27 ) , { 0x000000aa , 0x000001ac } } ,
{ AR5K_RF_GAIN ( 28 ) , { 0x000001ab , 0x000001ec } } ,
{ AR5K_RF_GAIN ( 29 ) , { 0x000001eb , 0x0000002c } } ,
{ AR5K_RF_GAIN ( 30 ) , { 0x0000002b , 0x00000012 } } ,
{ AR5K_RF_GAIN ( 31 ) , { 0x0000006b , 0x00000052 } } ,
{ AR5K_RF_GAIN ( 32 ) , { 0x000000ab , 0x00000092 } } ,
{ AR5K_RF_GAIN ( 33 ) , { 0x000001ac , 0x00000193 } } ,
{ AR5K_RF_GAIN ( 34 ) , { 0x000001ec , 0x000001d3 } } ,
{ AR5K_RF_GAIN ( 35 ) , { 0x0000002c , 0x00000013 } } ,
{ AR5K_RF_GAIN ( 36 ) , { 0x0000003a , 0x00000053 } } ,
{ AR5K_RF_GAIN ( 37 ) , { 0x0000007a , 0x00000093 } } ,
{ AR5K_RF_GAIN ( 38 ) , { 0x000000ba , 0x00000194 } } ,
{ AR5K_RF_GAIN ( 39 ) , { 0x000001bb , 0x000001d4 } } ,
{ AR5K_RF_GAIN ( 40 ) , { 0x000001fb , 0x00000014 } } ,
{ AR5K_RF_GAIN ( 41 ) , { 0x0000003b , 0x0000003a } } ,
{ AR5K_RF_GAIN ( 42 ) , { 0x0000007b , 0x0000007a } } ,
{ AR5K_RF_GAIN ( 43 ) , { 0x000000bb , 0x000000ba } } ,
{ AR5K_RF_GAIN ( 44 ) , { 0x000001bc , 0x000001bb } } ,
{ AR5K_RF_GAIN ( 45 ) , { 0x000001fc , 0x000001fb } } ,
{ AR5K_RF_GAIN ( 46 ) , { 0x0000003c , 0x0000003b } } ,
{ AR5K_RF_GAIN ( 47 ) , { 0x0000007c , 0x0000007b } } ,
{ AR5K_RF_GAIN ( 48 ) , { 0x000000bc , 0x000000bb } } ,
{ AR5K_RF_GAIN ( 49 ) , { 0x000000fc , 0x000001bc } } ,
{ AR5K_RF_GAIN ( 50 ) , { 0x000000fc , 0x000001fc } } ,
{ AR5K_RF_GAIN ( 51 ) , { 0x000000fc , 0x0000003c } } ,
{ AR5K_RF_GAIN ( 52 ) , { 0x000000fc , 0x0000007c } } ,
{ AR5K_RF_GAIN ( 53 ) , { 0x000000fc , 0x000000bc } } ,
{ AR5K_RF_GAIN ( 54 ) , { 0x000000fc , 0x000000fc } } ,
{ AR5K_RF_GAIN ( 55 ) , { 0x000000fc , 0x000000fc } } ,
{ AR5K_RF_GAIN ( 56 ) , { 0x000000fc , 0x000000fc } } ,
{ AR5K_RF_GAIN ( 57 ) , { 0x000000fc , 0x000000fc } } ,
{ AR5K_RF_GAIN ( 58 ) , { 0x000000fc , 0x000000fc } } ,
{ AR5K_RF_GAIN ( 59 ) , { 0x000000fc , 0x000000fc } } ,
{ AR5K_RF_GAIN ( 60 ) , { 0x000000fc , 0x000000fc } } ,
{ AR5K_RF_GAIN ( 61 ) , { 0x000000fc , 0x000000fc } } ,
{ AR5K_RF_GAIN ( 62 ) , { 0x000000fc , 0x000000fc } } ,
{ AR5K_RF_GAIN ( 63 ) , { 0x000000fc , 0x000000fc } } ,
} ;
/* Initial RF Gain settings for RF2413 */
static const struct ath5k_ini_rfgain rfgain_2413 [ ] = {
{ AR5K_RF_GAIN ( 0 ) , { 0x00000000 , 0x00000000 } } ,
{ AR5K_RF_GAIN ( 1 ) , { 0x00000000 , 0x00000040 } } ,
{ AR5K_RF_GAIN ( 2 ) , { 0x00000000 , 0x00000080 } } ,
{ AR5K_RF_GAIN ( 3 ) , { 0x00000000 , 0x00000181 } } ,
{ AR5K_RF_GAIN ( 4 ) , { 0x00000000 , 0x000001c1 } } ,
{ AR5K_RF_GAIN ( 5 ) , { 0x00000000 , 0x00000001 } } ,
{ AR5K_RF_GAIN ( 6 ) , { 0x00000000 , 0x00000041 } } ,
{ AR5K_RF_GAIN ( 7 ) , { 0x00000000 , 0x00000081 } } ,
{ AR5K_RF_GAIN ( 8 ) , { 0x00000000 , 0x00000168 } } ,
{ AR5K_RF_GAIN ( 9 ) , { 0x00000000 , 0x000001a8 } } ,
{ AR5K_RF_GAIN ( 10 ) , { 0x00000000 , 0x000001e8 } } ,
{ AR5K_RF_GAIN ( 11 ) , { 0x00000000 , 0x00000028 } } ,
{ AR5K_RF_GAIN ( 12 ) , { 0x00000000 , 0x00000068 } } ,
{ AR5K_RF_GAIN ( 13 ) , { 0x00000000 , 0x00000189 } } ,
{ AR5K_RF_GAIN ( 14 ) , { 0x00000000 , 0x000001c9 } } ,
{ AR5K_RF_GAIN ( 15 ) , { 0x00000000 , 0x00000009 } } ,
{ AR5K_RF_GAIN ( 16 ) , { 0x00000000 , 0x00000049 } } ,
{ AR5K_RF_GAIN ( 17 ) , { 0x00000000 , 0x00000089 } } ,
{ AR5K_RF_GAIN ( 18 ) , { 0x00000000 , 0x00000190 } } ,
{ AR5K_RF_GAIN ( 19 ) , { 0x00000000 , 0x000001d0 } } ,
{ AR5K_RF_GAIN ( 20 ) , { 0x00000000 , 0x00000010 } } ,
{ AR5K_RF_GAIN ( 21 ) , { 0x00000000 , 0x00000050 } } ,
{ AR5K_RF_GAIN ( 22 ) , { 0x00000000 , 0x00000090 } } ,
{ AR5K_RF_GAIN ( 23 ) , { 0x00000000 , 0x00000191 } } ,
{ AR5K_RF_GAIN ( 24 ) , { 0x00000000 , 0x000001d1 } } ,
{ AR5K_RF_GAIN ( 25 ) , { 0x00000000 , 0x00000011 } } ,
{ AR5K_RF_GAIN ( 26 ) , { 0x00000000 , 0x00000051 } } ,
{ AR5K_RF_GAIN ( 27 ) , { 0x00000000 , 0x00000091 } } ,
{ AR5K_RF_GAIN ( 28 ) , { 0x00000000 , 0x00000178 } } ,
{ AR5K_RF_GAIN ( 29 ) , { 0x00000000 , 0x000001b8 } } ,
{ AR5K_RF_GAIN ( 30 ) , { 0x00000000 , 0x000001f8 } } ,
{ AR5K_RF_GAIN ( 31 ) , { 0x00000000 , 0x00000038 } } ,
{ AR5K_RF_GAIN ( 32 ) , { 0x00000000 , 0x00000078 } } ,
{ AR5K_RF_GAIN ( 33 ) , { 0x00000000 , 0x00000199 } } ,
{ AR5K_RF_GAIN ( 34 ) , { 0x00000000 , 0x000001d9 } } ,
{ AR5K_RF_GAIN ( 35 ) , { 0x00000000 , 0x00000019 } } ,
{ AR5K_RF_GAIN ( 36 ) , { 0x00000000 , 0x00000059 } } ,
{ AR5K_RF_GAIN ( 37 ) , { 0x00000000 , 0x00000099 } } ,
{ AR5K_RF_GAIN ( 38 ) , { 0x00000000 , 0x000000d9 } } ,
{ AR5K_RF_GAIN ( 39 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 40 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 41 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 42 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 43 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 44 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 45 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 46 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 47 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 48 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 49 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 50 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 51 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 52 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 53 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 54 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 55 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 56 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 57 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 58 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 59 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 60 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 61 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 62 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 63 ) , { 0x00000000 , 0x000000f9 } } ,
} ;
/* Initial RF Gain settings for AR2316 */
static const struct ath5k_ini_rfgain rfgain_2316 [ ] = {
{ AR5K_RF_GAIN ( 0 ) , { 0x00000000 , 0x00000000 } } ,
{ AR5K_RF_GAIN ( 1 ) , { 0x00000000 , 0x00000040 } } ,
{ AR5K_RF_GAIN ( 2 ) , { 0x00000000 , 0x00000080 } } ,
{ AR5K_RF_GAIN ( 3 ) , { 0x00000000 , 0x000000c0 } } ,
{ AR5K_RF_GAIN ( 4 ) , { 0x00000000 , 0x000000e0 } } ,
{ AR5K_RF_GAIN ( 5 ) , { 0x00000000 , 0x000000e0 } } ,
{ AR5K_RF_GAIN ( 6 ) , { 0x00000000 , 0x00000128 } } ,
{ AR5K_RF_GAIN ( 7 ) , { 0x00000000 , 0x00000128 } } ,
{ AR5K_RF_GAIN ( 8 ) , { 0x00000000 , 0x00000128 } } ,
{ AR5K_RF_GAIN ( 9 ) , { 0x00000000 , 0x00000168 } } ,
{ AR5K_RF_GAIN ( 10 ) , { 0x00000000 , 0x000001a8 } } ,
{ AR5K_RF_GAIN ( 11 ) , { 0x00000000 , 0x000001e8 } } ,
{ AR5K_RF_GAIN ( 12 ) , { 0x00000000 , 0x00000028 } } ,
{ AR5K_RF_GAIN ( 13 ) , { 0x00000000 , 0x00000068 } } ,
{ AR5K_RF_GAIN ( 14 ) , { 0x00000000 , 0x000000a8 } } ,
{ AR5K_RF_GAIN ( 15 ) , { 0x00000000 , 0x000000e8 } } ,
{ AR5K_RF_GAIN ( 16 ) , { 0x00000000 , 0x000000e8 } } ,
{ AR5K_RF_GAIN ( 17 ) , { 0x00000000 , 0x00000130 } } ,
{ AR5K_RF_GAIN ( 18 ) , { 0x00000000 , 0x00000130 } } ,
{ AR5K_RF_GAIN ( 19 ) , { 0x00000000 , 0x00000170 } } ,
{ AR5K_RF_GAIN ( 20 ) , { 0x00000000 , 0x000001b0 } } ,
{ AR5K_RF_GAIN ( 21 ) , { 0x00000000 , 0x000001f0 } } ,
{ AR5K_RF_GAIN ( 22 ) , { 0x00000000 , 0x00000030 } } ,
{ AR5K_RF_GAIN ( 23 ) , { 0x00000000 , 0x00000070 } } ,
{ AR5K_RF_GAIN ( 24 ) , { 0x00000000 , 0x000000b0 } } ,
{ AR5K_RF_GAIN ( 25 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 26 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 27 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 28 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 29 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 30 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 31 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 32 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 33 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 34 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 35 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 36 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 37 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 38 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 39 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 40 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 41 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 42 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 43 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 44 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 45 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 46 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 47 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 48 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 49 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 50 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 51 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 52 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 53 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 54 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 55 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 56 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 57 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 58 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 59 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 60 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 61 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 62 ) , { 0x00000000 , 0x000000f0 } } ,
{ AR5K_RF_GAIN ( 63 ) , { 0x00000000 , 0x000000f0 } } ,
} ;
/* Initial RF Gain settings for RF5413 */
static const struct ath5k_ini_rfgain rfgain_5413 [ ] = {
/* 5Ghz 2Ghz */
{ AR5K_RF_GAIN ( 0 ) , { 0x00000000 , 0x00000000 } } ,
{ AR5K_RF_GAIN ( 1 ) , { 0x00000040 , 0x00000040 } } ,
{ AR5K_RF_GAIN ( 2 ) , { 0x00000080 , 0x00000080 } } ,
{ AR5K_RF_GAIN ( 3 ) , { 0x000001a1 , 0x00000161 } } ,
{ AR5K_RF_GAIN ( 4 ) , { 0x000001e1 , 0x000001a1 } } ,
{ AR5K_RF_GAIN ( 5 ) , { 0x00000021 , 0x000001e1 } } ,
{ AR5K_RF_GAIN ( 6 ) , { 0x00000061 , 0x00000021 } } ,
{ AR5K_RF_GAIN ( 7 ) , { 0x00000188 , 0x00000061 } } ,
{ AR5K_RF_GAIN ( 8 ) , { 0x000001c8 , 0x00000188 } } ,
{ AR5K_RF_GAIN ( 9 ) , { 0x00000008 , 0x000001c8 } } ,
{ AR5K_RF_GAIN ( 10 ) , { 0x00000048 , 0x00000008 } } ,
{ AR5K_RF_GAIN ( 11 ) , { 0x00000088 , 0x00000048 } } ,
{ AR5K_RF_GAIN ( 12 ) , { 0x000001a9 , 0x00000088 } } ,
{ AR5K_RF_GAIN ( 13 ) , { 0x000001e9 , 0x00000169 } } ,
{ AR5K_RF_GAIN ( 14 ) , { 0x00000029 , 0x000001a9 } } ,
{ AR5K_RF_GAIN ( 15 ) , { 0x00000069 , 0x000001e9 } } ,
{ AR5K_RF_GAIN ( 16 ) , { 0x000001d0 , 0x00000029 } } ,
{ AR5K_RF_GAIN ( 17 ) , { 0x00000010 , 0x00000069 } } ,
{ AR5K_RF_GAIN ( 18 ) , { 0x00000050 , 0x00000190 } } ,
{ AR5K_RF_GAIN ( 19 ) , { 0x00000090 , 0x000001d0 } } ,
{ AR5K_RF_GAIN ( 20 ) , { 0x000001b1 , 0x00000010 } } ,
{ AR5K_RF_GAIN ( 21 ) , { 0x000001f1 , 0x00000050 } } ,
{ AR5K_RF_GAIN ( 22 ) , { 0x00000031 , 0x00000090 } } ,
{ AR5K_RF_GAIN ( 23 ) , { 0x00000071 , 0x00000171 } } ,
{ AR5K_RF_GAIN ( 24 ) , { 0x000001b8 , 0x000001b1 } } ,
{ AR5K_RF_GAIN ( 25 ) , { 0x000001f8 , 0x000001f1 } } ,
{ AR5K_RF_GAIN ( 26 ) , { 0x00000038 , 0x00000031 } } ,
{ AR5K_RF_GAIN ( 27 ) , { 0x00000078 , 0x00000071 } } ,
{ AR5K_RF_GAIN ( 28 ) , { 0x00000199 , 0x00000198 } } ,
{ AR5K_RF_GAIN ( 29 ) , { 0x000001d9 , 0x000001d8 } } ,
{ AR5K_RF_GAIN ( 30 ) , { 0x00000019 , 0x00000018 } } ,
{ AR5K_RF_GAIN ( 31 ) , { 0x00000059 , 0x00000058 } } ,
{ AR5K_RF_GAIN ( 32 ) , { 0x00000099 , 0x00000098 } } ,
{ AR5K_RF_GAIN ( 33 ) , { 0x000000d9 , 0x00000179 } } ,
{ AR5K_RF_GAIN ( 34 ) , { 0x000000f9 , 0x000001b9 } } ,
{ AR5K_RF_GAIN ( 35 ) , { 0x000000f9 , 0x000001f9 } } ,
{ AR5K_RF_GAIN ( 36 ) , { 0x000000f9 , 0x00000039 } } ,
{ AR5K_RF_GAIN ( 37 ) , { 0x000000f9 , 0x00000079 } } ,
{ AR5K_RF_GAIN ( 38 ) , { 0x000000f9 , 0x000000b9 } } ,
{ AR5K_RF_GAIN ( 39 ) , { 0x000000f9 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 40 ) , { 0x000000f9 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 41 ) , { 0x000000f9 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 42 ) , { 0x000000f9 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 43 ) , { 0x000000f9 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 44 ) , { 0x000000f9 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 45 ) , { 0x000000f9 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 46 ) , { 0x000000f9 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 47 ) , { 0x000000f9 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 48 ) , { 0x000000f9 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 49 ) , { 0x000000f9 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 50 ) , { 0x000000f9 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 51 ) , { 0x000000f9 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 52 ) , { 0x000000f9 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 53 ) , { 0x000000f9 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 54 ) , { 0x000000f9 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 55 ) , { 0x000000f9 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 56 ) , { 0x000000f9 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 57 ) , { 0x000000f9 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 58 ) , { 0x000000f9 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 59 ) , { 0x000000f9 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 60 ) , { 0x000000f9 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 61 ) , { 0x000000f9 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 62 ) , { 0x000000f9 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 63 ) , { 0x000000f9 , 0x000000f9 } } ,
} ;
/* Initial RF Gain settings for RF2425 */
static const struct ath5k_ini_rfgain rfgain_2425 [ ] = {
{ AR5K_RF_GAIN ( 0 ) , { 0x00000000 , 0x00000000 } } ,
{ AR5K_RF_GAIN ( 1 ) , { 0x00000000 , 0x00000040 } } ,
{ AR5K_RF_GAIN ( 2 ) , { 0x00000000 , 0x00000080 } } ,
{ AR5K_RF_GAIN ( 3 ) , { 0x00000000 , 0x00000181 } } ,
{ AR5K_RF_GAIN ( 4 ) , { 0x00000000 , 0x000001c1 } } ,
{ AR5K_RF_GAIN ( 5 ) , { 0x00000000 , 0x00000001 } } ,
{ AR5K_RF_GAIN ( 6 ) , { 0x00000000 , 0x00000041 } } ,
{ AR5K_RF_GAIN ( 7 ) , { 0x00000000 , 0x00000081 } } ,
{ AR5K_RF_GAIN ( 8 ) , { 0x00000000 , 0x00000188 } } ,
{ AR5K_RF_GAIN ( 9 ) , { 0x00000000 , 0x000001c8 } } ,
{ AR5K_RF_GAIN ( 10 ) , { 0x00000000 , 0x00000008 } } ,
{ AR5K_RF_GAIN ( 11 ) , { 0x00000000 , 0x00000048 } } ,
{ AR5K_RF_GAIN ( 12 ) , { 0x00000000 , 0x00000088 } } ,
{ AR5K_RF_GAIN ( 13 ) , { 0x00000000 , 0x00000189 } } ,
{ AR5K_RF_GAIN ( 14 ) , { 0x00000000 , 0x000001c9 } } ,
{ AR5K_RF_GAIN ( 15 ) , { 0x00000000 , 0x00000009 } } ,
{ AR5K_RF_GAIN ( 16 ) , { 0x00000000 , 0x00000049 } } ,
{ AR5K_RF_GAIN ( 17 ) , { 0x00000000 , 0x00000089 } } ,
{ AR5K_RF_GAIN ( 18 ) , { 0x00000000 , 0x000001b0 } } ,
{ AR5K_RF_GAIN ( 19 ) , { 0x00000000 , 0x000001f0 } } ,
{ AR5K_RF_GAIN ( 20 ) , { 0x00000000 , 0x00000030 } } ,
{ AR5K_RF_GAIN ( 21 ) , { 0x00000000 , 0x00000070 } } ,
{ AR5K_RF_GAIN ( 22 ) , { 0x00000000 , 0x00000171 } } ,
{ AR5K_RF_GAIN ( 23 ) , { 0x00000000 , 0x000001b1 } } ,
{ AR5K_RF_GAIN ( 24 ) , { 0x00000000 , 0x000001f1 } } ,
{ AR5K_RF_GAIN ( 25 ) , { 0x00000000 , 0x00000031 } } ,
{ AR5K_RF_GAIN ( 26 ) , { 0x00000000 , 0x00000071 } } ,
{ AR5K_RF_GAIN ( 27 ) , { 0x00000000 , 0x000001b8 } } ,
{ AR5K_RF_GAIN ( 28 ) , { 0x00000000 , 0x000001f8 } } ,
{ AR5K_RF_GAIN ( 29 ) , { 0x00000000 , 0x00000038 } } ,
{ AR5K_RF_GAIN ( 30 ) , { 0x00000000 , 0x00000078 } } ,
{ AR5K_RF_GAIN ( 31 ) , { 0x00000000 , 0x000000b8 } } ,
{ AR5K_RF_GAIN ( 32 ) , { 0x00000000 , 0x000001b9 } } ,
{ AR5K_RF_GAIN ( 33 ) , { 0x00000000 , 0x000001f9 } } ,
{ AR5K_RF_GAIN ( 34 ) , { 0x00000000 , 0x00000039 } } ,
{ AR5K_RF_GAIN ( 35 ) , { 0x00000000 , 0x00000079 } } ,
{ AR5K_RF_GAIN ( 36 ) , { 0x00000000 , 0x000000b9 } } ,
{ AR5K_RF_GAIN ( 37 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 38 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 39 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 40 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 41 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 42 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 43 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 44 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 45 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 46 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 47 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 48 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 49 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 50 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 51 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 52 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 53 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 54 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 55 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 56 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 57 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 58 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 59 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 60 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 61 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 62 ) , { 0x00000000 , 0x000000f9 } } ,
{ AR5K_RF_GAIN ( 63 ) , { 0x00000000 , 0x000000f9 } } ,
} ;
2009-02-09 06:03:41 +02:00
# define AR5K_GAIN_CRN_FIX_BITS_5111 4
# define AR5K_GAIN_CRN_FIX_BITS_5112 7
# define AR5K_GAIN_CRN_MAX_FIX_BITS AR5K_GAIN_CRN_FIX_BITS_5112
# define AR5K_GAIN_DYN_ADJUST_HI_MARGIN 15
# define AR5K_GAIN_DYN_ADJUST_LO_MARGIN 20
# define AR5K_GAIN_CCK_PROBE_CORR 5
# define AR5K_GAIN_CCK_OFDM_GAIN_DELTA 15
# define AR5K_GAIN_STEP_COUNT 10
/* Check if our current measurement is inside our
* current variable attenuation window */
# define AR5K_GAIN_CHECK_ADJUST(_g) \
( ( _g ) - > g_current < = ( _g ) - > g_low | | ( _g ) - > g_current > = ( _g ) - > g_high )
struct ath5k_gain_opt_step {
s8 gos_param [ AR5K_GAIN_CRN_MAX_FIX_BITS ] ;
s8 gos_gain ;
} ;
2009-02-09 06:00:34 +02:00
struct ath5k_gain_opt {
2009-02-09 06:03:41 +02:00
u8 go_default ;
u8 go_steps_count ;
2009-02-09 06:00:34 +02:00
const struct ath5k_gain_opt_step go_step [ AR5K_GAIN_STEP_COUNT ] ;
} ;
2009-02-09 06:03:41 +02:00
/*
* Parameters on gos_param :
* 1 ) Tx clip PHY register
* 2 ) PWD 90 RF register
* 3 ) PWD 84 RF register
* 4 ) RFGainSel RF register
*/
2009-02-09 06:00:34 +02:00
static const struct ath5k_gain_opt rfgain_opt_5111 = {
4 ,
9 ,
{
{ { 4 , 1 , 1 , 1 } , 6 } ,
{ { 4 , 0 , 1 , 1 } , 4 } ,
{ { 3 , 1 , 1 , 1 } , 3 } ,
{ { 4 , 0 , 0 , 1 } , 1 } ,
{ { 4 , 1 , 1 , 0 } , 0 } ,
{ { 4 , 0 , 1 , 0 } , - 2 } ,
{ { 3 , 1 , 1 , 0 } , - 3 } ,
{ { 4 , 0 , 0 , 0 } , - 4 } ,
{ { 2 , 1 , 1 , 0 } , - 6 }
}
} ;
2009-02-09 06:03:41 +02:00
/*
* Parameters on gos_param :
* 1 ) Mixgain ovr RF register
* 2 ) PWD 138 RF register
* 3 ) PWD 137 RF register
* 4 ) PWD 136 RF register
* 5 ) PWD 132 RF register
* 6 ) PWD 131 RF register
* 7 ) PWD 130 RF register
*/
2009-02-09 06:00:34 +02:00
static const struct ath5k_gain_opt rfgain_opt_5112 = {
1 ,
8 ,
{
{ { 3 , 0 , 0 , 0 , 0 , 0 , 0 } , 6 } ,
{ { 2 , 0 , 0 , 0 , 0 , 0 , 0 } , 0 } ,
{ { 1 , 0 , 0 , 0 , 0 , 0 , 0 } , - 3 } ,
{ { 0 , 0 , 0 , 0 , 0 , 0 , 0 } , - 6 } ,
{ { 0 , 1 , 1 , 0 , 0 , 0 , 0 } , - 8 } ,
{ { 0 , 1 , 1 , 0 , 1 , 1 , 0 } , - 10 } ,
{ { 0 , 1 , 0 , 1 , 1 , 1 , 0 } , - 13 } ,
{ { 0 , 1 , 0 , 1 , 1 , 0 , 1 } , - 16 } ,
}
} ;