root/drivers/net/wireless/broadcom/b43/radio_2057.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. r2057_upload_inittabs
  2. r2057_get_chantabent_rev7

   1 // SPDX-License-Identifier: GPL-2.0-or-later
   2 /*
   3 
   4   Broadcom B43 wireless driver
   5   IEEE 802.11n 2057 radio device data tables
   6 
   7   Copyright (c) 2010 Rafał Miłecki <zajec5@gmail.com>
   8 
   9 
  10 */
  11 
  12 #include "b43.h"
  13 #include "radio_2057.h"
  14 #include "phy_common.h"
  15 
  16 static u16 r2057_rev4_init[][2] = {
  17         { 0x0E, 0x20 }, { 0x31, 0x00 }, { 0x32, 0x00 }, { 0x33, 0x00 },
  18         { 0x35, 0x26 }, { 0x3C, 0xff }, { 0x3D, 0xff }, { 0x3E, 0xff },
  19         { 0x3F, 0xff }, { 0x62, 0x33 }, { 0x8A, 0xf0 }, { 0x8B, 0x10 },
  20         { 0x8C, 0xf0 }, { 0x91, 0x3f }, { 0x92, 0x36 }, { 0xA4, 0x8c },
  21         { 0xA8, 0x55 }, { 0xAF, 0x01 }, { 0x10F, 0xf0 }, { 0x110, 0x10 },
  22         { 0x111, 0xf0 }, { 0x116, 0x3f }, { 0x117, 0x36 }, { 0x129, 0x8c },
  23         { 0x12D, 0x55 }, { 0x134, 0x01 }, { 0x15E, 0x00 }, { 0x15F, 0x00 },
  24         { 0x160, 0x00 }, { 0x161, 0x00 }, { 0x162, 0x00 }, { 0x163, 0x00 },
  25         { 0x169, 0x02 }, { 0x16A, 0x00 }, { 0x16B, 0x00 }, { 0x16C, 0x00 },
  26         { 0x1A4, 0x00 }, { 0x1A5, 0x00 }, { 0x1A6, 0x00 }, { 0x1AA, 0x00 },
  27         { 0x1AB, 0x00 }, { 0x1AC, 0x00 },
  28 };
  29 
  30 static u16 r2057_rev5_init[][2] = {
  31         { 0x00, 0x00 }, { 0x01, 0x57 }, { 0x02, 0x20 }, { 0x23, 0x6 },
  32         { 0x31, 0x00 }, { 0x32, 0x00 }, { 0x33, 0x00 }, { 0x51, 0x70 },
  33         { 0x59, 0x88 }, { 0x5C, 0x20 }, { 0x62, 0x33 }, { 0x63, 0x0f },
  34         { 0x64, 0x0f }, { 0x81, 0x01 }, { 0x91, 0x3f }, { 0x92, 0x36 },
  35         { 0xA1, 0x20 }, { 0xD6, 0x70 }, { 0xDE, 0x88 }, { 0xE1, 0x20 },
  36         { 0xE8, 0x0f }, { 0xE9, 0x0f }, { 0x106, 0x01 }, { 0x116, 0x3f },
  37         { 0x117, 0x36 }, { 0x126, 0x20 }, { 0x15E, 0x00 }, { 0x15F, 0x00 },
  38         { 0x160, 0x00 }, { 0x161, 0x00 }, { 0x162, 0x00 }, { 0x163, 0x00 },
  39         { 0x16A, 0x00 }, { 0x16B, 0x00 }, { 0x16C, 0x00 }, { 0x1A4, 0x00 },
  40         { 0x1A5, 0x00 }, { 0x1A6, 0x00 }, { 0x1AA, 0x00 }, { 0x1AB, 0x00 },
  41         { 0x1AC, 0x00 }, { 0x1B7, 0x0c }, { 0x1C1, 0x01 }, { 0x1C2, 0x80 },
  42 };
  43 
  44 static u16 r2057_rev5a_init[][2] = {
  45         { 0x00, 0x15 }, { 0x01, 0x57 }, { 0x02, 0x20 }, { 0x23, 0x6 },
  46         { 0x31, 0x00 }, { 0x32, 0x00 }, { 0x33, 0x00 }, { 0x51, 0x70 },
  47         { 0x59, 0x88 }, { 0x5C, 0x20 }, { 0x62, 0x33 }, { 0x63, 0x0f },
  48         { 0x64, 0x0f }, { 0x81, 0x01 }, { 0x91, 0x3f }, { 0x92, 0x36 },
  49         { 0xC9, 0x01 }, { 0xD6, 0x70 }, { 0xDE, 0x88 }, { 0xE1, 0x20 },
  50         { 0xE8, 0x0f }, { 0xE9, 0x0f }, { 0x106, 0x01 }, { 0x116, 0x3f },
  51         { 0x117, 0x36 }, { 0x126, 0x20 }, { 0x14E, 0x01 }, { 0x15E, 0x00 },
  52         { 0x15F, 0x00 }, { 0x160, 0x00 }, { 0x161, 0x00 }, { 0x162, 0x00 },
  53         { 0x163, 0x00 }, { 0x16A, 0x00 }, { 0x16B, 0x00 }, { 0x16C, 0x00 },
  54         { 0x1A4, 0x00 }, { 0x1A5, 0x00 }, { 0x1A6, 0x00 }, { 0x1AA, 0x00 },
  55         { 0x1AB, 0x00 }, { 0x1AC, 0x00 }, { 0x1B7, 0x0c }, { 0x1C1, 0x01 },
  56         { 0x1C2, 0x80 },
  57 };
  58 
  59 static u16 r2057_rev7_init[][2] = {
  60         { 0x00, 0x00 }, { 0x01, 0x57 }, { 0x02, 0x20 }, { 0x31, 0x00 },
  61         { 0x32, 0x00 }, { 0x33, 0x00 }, { 0x51, 0x70 }, { 0x59, 0x88 },
  62         { 0x5C, 0x20 }, { 0x62, 0x33 }, { 0x63, 0x0f }, { 0x64, 0x13 },
  63         { 0x66, 0xee }, { 0x6E, 0x58 }, { 0x75, 0x13 }, { 0x7B, 0x13 },
  64         { 0x7C, 0x14 }, { 0x7D, 0xee }, { 0x81, 0x01 }, { 0x91, 0x3f },
  65         { 0x92, 0x36 }, { 0xA1, 0x20 }, { 0xD6, 0x70 }, { 0xDE, 0x88 },
  66         { 0xE1, 0x20 }, { 0xE8, 0x0f }, { 0xE9, 0x13 }, { 0xEB, 0xee },
  67         { 0xF3, 0x58 }, { 0xFA, 0x13 }, { 0x100, 0x13 }, { 0x101, 0x14 },
  68         { 0x102, 0xee }, { 0x106, 0x01 }, { 0x116, 0x3f }, { 0x117, 0x36 },
  69         { 0x126, 0x20 }, { 0x15E, 0x00 }, { 0x15F, 0x00 }, { 0x160, 0x00 },
  70         { 0x161, 0x00 }, { 0x162, 0x00 }, { 0x163, 0x00 }, { 0x16A, 0x00 },
  71         { 0x16B, 0x00 }, { 0x16C, 0x00 }, { 0x1A4, 0x00 }, { 0x1A5, 0x00 },
  72         { 0x1A6, 0x00 }, { 0x1AA, 0x00 }, { 0x1AB, 0x00 }, { 0x1AC, 0x00 },
  73         { 0x1B7, 0x05 }, { 0x1C2, 0xa0 },
  74 };
  75 
  76 /* TODO: Which devices should use it?
  77 static u16 r2057_rev8_init[][2] = {
  78         { 0x00, 0x08 }, { 0x01, 0x57 }, { 0x02, 0x20 }, { 0x31, 0x00 },
  79         { 0x32, 0x00 }, { 0x33, 0x00 }, { 0x51, 0x70 }, { 0x59, 0x88 },
  80         { 0x5C, 0x20 }, { 0x62, 0x33 }, { 0x63, 0x0f }, { 0x64, 0x0f },
  81         { 0x6E, 0x58 }, { 0x75, 0x13 }, { 0x7B, 0x13 }, { 0x7C, 0x0f },
  82         { 0x7D, 0xee }, { 0x81, 0x01 }, { 0x91, 0x3f }, { 0x92, 0x36 },
  83         { 0xA1, 0x20 }, { 0xC9, 0x01 }, { 0xD6, 0x70 }, { 0xDE, 0x88 },
  84         { 0xE1, 0x20 }, { 0xE8, 0x0f }, { 0xE9, 0x0f }, { 0xF3, 0x58 },
  85         { 0xFA, 0x13 }, { 0x100, 0x13 }, { 0x101, 0x0f }, { 0x102, 0xee },
  86         { 0x106, 0x01 }, { 0x116, 0x3f }, { 0x117, 0x36 }, { 0x126, 0x20 },
  87         { 0x14E, 0x01 }, { 0x15E, 0x00 }, { 0x15F, 0x00 }, { 0x160, 0x00 },
  88         { 0x161, 0x00 }, { 0x162, 0x00 }, { 0x163, 0x00 }, { 0x16A, 0x00 },
  89         { 0x16B, 0x00 }, { 0x16C, 0x00 }, { 0x1A4, 0x00 }, { 0x1A5, 0x00 },
  90         { 0x1A6, 0x00 }, { 0x1AA, 0x00 }, { 0x1AB, 0x00 }, { 0x1AC, 0x00 },
  91         { 0x1B7, 0x05 }, { 0x1C2, 0xa0 },
  92 };
  93 */
  94 
  95 /* Extracted from MMIO dump of 6.30.223.141 */
  96 static u16 r2057_rev9_init[][2] = {
  97         { 0x27, 0x1f }, { 0x28, 0x0a }, { 0x29, 0x2f }, { 0x42, 0x1f },
  98         { 0x48, 0x3f }, { 0x5c, 0x41 }, { 0x63, 0x14 }, { 0x64, 0x12 },
  99         { 0x66, 0xff }, { 0x74, 0xa3 }, { 0x7b, 0x14 }, { 0x7c, 0x14 },
 100         { 0x7d, 0xee }, { 0x86, 0xc0 }, { 0xc4, 0x10 }, { 0xc9, 0x01 },
 101         { 0xe1, 0x41 }, { 0xe8, 0x14 }, { 0xe9, 0x12 }, { 0xeb, 0xff },
 102         { 0xf5, 0x0a }, { 0xf8, 0x09 }, { 0xf9, 0xa3 }, { 0x100, 0x14 },
 103         { 0x101, 0x10 }, { 0x102, 0xee }, { 0x10b, 0xc0 }, { 0x149, 0x10 },
 104         { 0x14e, 0x01 }, { 0x1b7, 0x05 }, { 0x1c2, 0xa0 },
 105 };
 106 
 107 /* Extracted from MMIO dump of 6.30.223.248 */
 108 static u16 r2057_rev14_init[][2] = {
 109         { 0x011, 0xfc }, { 0x030, 0x24 }, { 0x040, 0x1c }, { 0x082, 0x08 },
 110         { 0x0b4, 0x44 }, { 0x0c8, 0x01 }, { 0x0c9, 0x01 }, { 0x107, 0x08 },
 111         { 0x14d, 0x01 }, { 0x14e, 0x01 }, { 0x1af, 0x40 }, { 0x1b0, 0x40 },
 112         { 0x1cc, 0x01 }, { 0x1cf, 0x10 }, { 0x1d0, 0x0f }, { 0x1d3, 0x10 },
 113         { 0x1d4, 0x0f },
 114 };
 115 
 116 #define RADIOREGS7(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \
 117                    r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, \
 118                    r20, r21, r22, r23, r24, r25, r26, r27) \
 119         .radio_vcocal_countval0                 = r00,  \
 120         .radio_vcocal_countval1                 = r01,  \
 121         .radio_rfpll_refmaster_sparextalsize    = r02,  \
 122         .radio_rfpll_loopfilter_r1              = r03,  \
 123         .radio_rfpll_loopfilter_c2              = r04,  \
 124         .radio_rfpll_loopfilter_c1              = r05,  \
 125         .radio_cp_kpd_idac                      = r06,  \
 126         .radio_rfpll_mmd0                       = r07,  \
 127         .radio_rfpll_mmd1                       = r08,  \
 128         .radio_vcobuf_tune                      = r09,  \
 129         .radio_logen_mx2g_tune                  = r10,  \
 130         .radio_logen_mx5g_tune                  = r11,  \
 131         .radio_logen_indbuf2g_tune              = r12,  \
 132         .radio_logen_indbuf5g_tune              = r13,  \
 133         .radio_txmix2g_tune_boost_pu_core0      = r14,  \
 134         .radio_pad2g_tune_pus_core0             = r15,  \
 135         .radio_pga_boost_tune_core0             = r16,  \
 136         .radio_txmix5g_boost_tune_core0         = r17,  \
 137         .radio_pad5g_tune_misc_pus_core0        = r18,  \
 138         .radio_lna2g_tune_core0                 = r19,  \
 139         .radio_lna5g_tune_core0                 = r20,  \
 140         .radio_txmix2g_tune_boost_pu_core1      = r21,  \
 141         .radio_pad2g_tune_pus_core1             = r22,  \
 142         .radio_pga_boost_tune_core1             = r23,  \
 143         .radio_txmix5g_boost_tune_core1         = r24,  \
 144         .radio_pad5g_tune_misc_pus_core1        = r25,  \
 145         .radio_lna2g_tune_core1                 = r26,  \
 146         .radio_lna5g_tune_core1                 = r27
 147 
 148 #define RADIOREGS7_2G(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \
 149                       r10, r11, r12, r13, r14, r15, r16, r17) \
 150         .radio_vcocal_countval0                 = r00,  \
 151         .radio_vcocal_countval1                 = r01,  \
 152         .radio_rfpll_refmaster_sparextalsize    = r02,  \
 153         .radio_rfpll_loopfilter_r1              = r03,  \
 154         .radio_rfpll_loopfilter_c2              = r04,  \
 155         .radio_rfpll_loopfilter_c1              = r05,  \
 156         .radio_cp_kpd_idac                      = r06,  \
 157         .radio_rfpll_mmd0                       = r07,  \
 158         .radio_rfpll_mmd1                       = r08,  \
 159         .radio_vcobuf_tune                      = r09,  \
 160         .radio_logen_mx2g_tune                  = r10,  \
 161         .radio_logen_indbuf2g_tune              = r11,  \
 162         .radio_txmix2g_tune_boost_pu_core0      = r12,  \
 163         .radio_pad2g_tune_pus_core0             = r13,  \
 164         .radio_lna2g_tune_core0                 = r14,  \
 165         .radio_txmix2g_tune_boost_pu_core1      = r15,  \
 166         .radio_pad2g_tune_pus_core1             = r16,  \
 167         .radio_lna2g_tune_core1                 = r17
 168 
 169 #define PHYREGS(r0, r1, r2, r3, r4, r5) \
 170         .phy_regs.phy_bw1a      = r0,   \
 171         .phy_regs.phy_bw2       = r1,   \
 172         .phy_regs.phy_bw3       = r2,   \
 173         .phy_regs.phy_bw4       = r3,   \
 174         .phy_regs.phy_bw5       = r4,   \
 175         .phy_regs.phy_bw6       = r5
 176 
 177 /* Copied from brcmsmac (5.75.11): chan_info_nphyrev8_2057_rev5 */
 178 static const struct b43_nphy_chantabent_rev7_2g b43_nphy_chantab_phy_rev8_radio_rev5[] = {
 179         {
 180                 .freq                   = 2412,
 181                 RADIOREGS7_2G(0x48, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x6c,
 182                               0x09, 0x0d, 0x08, 0x0e, 0x61, 0x03, 0xff, 0x61,
 183                               0x03, 0xff),
 184                 PHYREGS(0x03c9, 0x03c5, 0x03c1, 0x043a, 0x043f, 0x0443),
 185         },
 186         {
 187                 .freq                   = 2417,
 188                 RADIOREGS7_2G(0x4b, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x71,
 189                               0x09, 0x0d, 0x08, 0x0e, 0x61, 0x03, 0xff, 0x61,
 190                               0x03, 0xff),
 191                 PHYREGS(0x03cb, 0x03c7, 0x03c3, 0x0438, 0x043d, 0x0441),
 192         },
 193         {
 194                 .freq                   = 2422,
 195                 RADIOREGS7_2G(0x4e, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x76,
 196                               0x09, 0x0d, 0x08, 0x0e, 0x61, 0x03, 0xef, 0x61,
 197                               0x03, 0xef),
 198                 PHYREGS(0x03cd, 0x03c9, 0x03c5, 0x0436, 0x043a, 0x043f),
 199         },
 200         {
 201                 .freq                   = 2427,
 202                 RADIOREGS7_2G(0x52, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x7b,
 203                               0x09, 0x0c, 0x08, 0x0e, 0x61, 0x03, 0xdf, 0x61,
 204                               0x03, 0xdf),
 205                 PHYREGS(0x03cf, 0x03cb, 0x03c7, 0x0434, 0x0438, 0x043d),
 206         },
 207         {
 208                 .freq                   = 2432,
 209                 RADIOREGS7_2G(0x55, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x80,
 210                               0x09, 0x0c, 0x07, 0x0d, 0x61, 0x03, 0xcf, 0x61,
 211                               0x03, 0xcf),
 212                 PHYREGS(0x03d1, 0x03cd, 0x03c9, 0x0431, 0x0436, 0x043a),
 213         },
 214         {
 215                 .freq                   = 2437,
 216                 RADIOREGS7_2G(0x58, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x85,
 217                               0x09, 0x0c, 0x07, 0x0d, 0x61, 0x03, 0xbf, 0x61,
 218                               0x03, 0xbf),
 219                 PHYREGS(0x03d3, 0x03cf, 0x03cb, 0x042f, 0x0434, 0x0438),
 220         },
 221         {
 222                 .freq                   = 2442,
 223                 RADIOREGS7_2G(0x5c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8a,
 224                               0x09, 0x0b, 0x07, 0x0d, 0x61, 0x03, 0xaf, 0x61,
 225                               0x03, 0xaf),
 226                 PHYREGS(0x03d5, 0x03d1, 0x03cd, 0x042d, 0x0431, 0x0436),
 227         },
 228         {
 229                 .freq                   = 2447,
 230                 RADIOREGS7_2G(0x5f, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8f,
 231                               0x09, 0x0b, 0x07, 0x0d, 0x61, 0x03, 0x9f, 0x61,
 232                               0x03, 0x9f),
 233                 PHYREGS(0x03d7, 0x03d3, 0x03cf, 0x042b, 0x042f, 0x0434),
 234         },
 235         {
 236                 .freq                   = 2452,
 237                 RADIOREGS7_2G(0x62, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x94,
 238                               0x09, 0x0b, 0x07, 0x0d, 0x61, 0x03, 0x8f, 0x61,
 239                               0x03, 0x8f),
 240                 PHYREGS(0x03d9, 0x03d5, 0x03d1, 0x0429, 0x042d, 0x0431),
 241         },
 242         {
 243                 .freq                   = 2457,
 244                 RADIOREGS7_2G(0x66, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x99,
 245                               0x09, 0x0b, 0x07, 0x0c, 0x61, 0x03, 0x7f, 0x61,
 246                               0x03, 0x7f),
 247                 PHYREGS(0x03db, 0x03d7, 0x03d3, 0x0427, 0x042b, 0x042f),
 248         },
 249         {
 250                 .freq                   = 2462,
 251                 RADIOREGS7_2G(0x69, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x9e,
 252                               0x09, 0x0b, 0x07, 0x0c, 0x61, 0x03, 0x6f, 0x61,
 253                               0x03, 0x6f),
 254                 PHYREGS(0x03dd, 0x03d9, 0x03d5, 0x0424, 0x0429, 0x042d),
 255         },
 256         {
 257                 .freq                   = 2467,
 258                 RADIOREGS7_2G(0x6c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xa3,
 259                               0x09, 0x0b, 0x06, 0x0c, 0x61, 0x03, 0x5f, 0x61,
 260                               0x03, 0x5f),
 261                 PHYREGS(0x03df, 0x03db, 0x03d7, 0x0422, 0x0427, 0x042b),
 262         },
 263         {
 264                 .freq                   = 2472,
 265                 RADIOREGS7_2G(0x70, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xa8,
 266                               0x09, 0x0a, 0x06, 0x0b, 0x61, 0x03, 0x4f, 0x61,
 267                               0x03, 0x4f),
 268                 PHYREGS(0x03e1, 0x03dd, 0x03d9, 0x0420, 0x0424, 0x0429),
 269         },
 270         {
 271                 .freq                   = 2484,
 272                 RADIOREGS7_2G(0x78, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xb4,
 273                               0x09, 0x0a, 0x06, 0x0b, 0x61, 0x03, 0x3f, 0x61,
 274                               0x03, 0x3f),
 275                 PHYREGS(0x03e6, 0x03e2, 0x03de, 0x041b, 0x041f, 0x0424),
 276         }
 277 };
 278 
 279 /* Extracted from MMIO dump of 6.30.223.248 */
 280 static const struct b43_nphy_chantabent_rev7_2g b43_nphy_chantab_phy_rev17_radio_rev14[] = {
 281         {
 282                 .freq                   = 2412,
 283                 RADIOREGS7_2G(0x48, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x6c,
 284                               0x09, 0x0d, 0x09, 0x03, 0x21, 0x53, 0xff, 0x21,
 285                               0x53, 0xff),
 286                 PHYREGS(0x03c9, 0x03c5, 0x03c1, 0x043a, 0x043f, 0x0443),
 287         },
 288         {
 289                 .freq                   = 2417,
 290                 RADIOREGS7_2G(0x4b, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x71,
 291                               0x09, 0x0d, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
 292                               0x53, 0xff),
 293                 PHYREGS(0x03cb, 0x03c7, 0x03c3, 0x0438, 0x043d, 0x0441),
 294         },
 295         {
 296                 .freq                   = 2422,
 297                 RADIOREGS7_2G(0x4e, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x76,
 298                               0x09, 0x0d, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
 299                               0x53, 0xff),
 300                 PHYREGS(0x03cd, 0x03c9, 0x03c5, 0x0436, 0x043a, 0x043f),
 301         },
 302         {
 303                 .freq                   = 2427,
 304                 RADIOREGS7_2G(0x52, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x7b,
 305                               0x09, 0x0c, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
 306                               0x53, 0xff),
 307                 PHYREGS(0x03cf, 0x03cb, 0x03c7, 0x0434, 0x0438, 0x043d),
 308         },
 309         {
 310                 .freq                   = 2432,
 311                 RADIOREGS7_2G(0x55, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x80,
 312                               0x09, 0x0c, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
 313                               0x53, 0xff),
 314                 PHYREGS(0x03d1, 0x03cd, 0x03c9, 0x0431, 0x0436, 0x043a),
 315         },
 316         {
 317                 .freq                   = 2437,
 318                 RADIOREGS7_2G(0x58, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x85,
 319                               0x09, 0x0c, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
 320                               0x53, 0xff),
 321                 PHYREGS(0x03d3, 0x03cf, 0x03cb, 0x042f, 0x0434, 0x0438),
 322         },
 323         {
 324                 .freq                   = 2442,
 325                 RADIOREGS7_2G(0x5c, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x8a,
 326                               0x09, 0x0c, 0x08, 0x03, 0x21, 0x43, 0xff, 0x21,
 327                               0x43, 0xff),
 328                 PHYREGS(0x03d5, 0x03d1, 0x03cd, 0x042d, 0x0431, 0x0436),
 329         },
 330         {
 331                 .freq                   = 2447,
 332                 RADIOREGS7_2G(0x5f, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x8f,
 333                               0x09, 0x0c, 0x08, 0x03, 0x21, 0x43, 0xff, 0x21,
 334                               0x43, 0xff),
 335                 PHYREGS(0x03d7, 0x03d3, 0x03cf, 0x042b, 0x042f, 0x0434),
 336         },
 337         {
 338                 .freq                   = 2452,
 339                 RADIOREGS7_2G(0x62, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x94,
 340                               0x09, 0x0c, 0x08, 0x03, 0x21, 0x43, 0xff, 0x21,
 341                               0x43, 0xff),
 342                 PHYREGS(0x03d9, 0x03d5, 0x03d1, 0x0429, 0x042d, 0x0431),
 343         },
 344         {
 345                 .freq                   = 2457,
 346                 RADIOREGS7_2G(0x66, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x99,
 347                               0x09, 0x0b, 0x07, 0x03, 0x21, 0x43, 0xff, 0x21,
 348                               0x43, 0xff),
 349                 PHYREGS(0x03db, 0x03d7, 0x03d3, 0x0427, 0x042b, 0x042f),
 350         },
 351         {
 352                 .freq                   = 2462,
 353                 RADIOREGS7_2G(0x69, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x9e,
 354                               0x09, 0x0b, 0x07, 0x03, 0x01, 0x43, 0xff, 0x01,
 355                               0x43, 0xff),
 356                 PHYREGS(0x03dd, 0x03d9, 0x03d5, 0x0424, 0x0429, 0x042d),
 357         },
 358 };
 359 
 360 /* Extracted from MMIO dump of 6.30.223.141 */
 361 static const struct b43_nphy_chantabent_rev7 b43_nphy_chantab_phy_rev16_radio_rev9[] = {
 362         {
 363                 .freq                   = 2412,
 364                 RADIOREGS7(0x48, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x6c,
 365                            0x09, 0x0f, 0x0a, 0x00, 0x0a, 0x00, 0x41, 0x63,
 366                            0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
 367                            0x00, 0x00, 0xf0, 0x00),
 368                 PHYREGS(0x03c9, 0x03c5, 0x03c1, 0x043a, 0x043f, 0x0443),
 369         },
 370         {
 371                 .freq                   = 2417,
 372                 RADIOREGS7(0x4b, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x71,
 373                            0x09, 0x0f, 0x0a, 0x00, 0x0a, 0x00, 0x41, 0x63,
 374                            0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
 375                            0x00, 0x00, 0xf0, 0x00),
 376                 PHYREGS(0x03cb, 0x03c7, 0x03c3, 0x0438, 0x043d, 0x0441),
 377         },
 378         {
 379                 .freq                   = 2422,
 380                 RADIOREGS7(0x4e, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x76,
 381                            0x09, 0x0f, 0x09, 0x00, 0x09, 0x00, 0x41, 0x63,
 382                            0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
 383                            0x00, 0x00, 0xf0, 0x00),
 384                 PHYREGS(0x03cd, 0x03c9, 0x03c5, 0x0436, 0x043a, 0x043f),
 385         },
 386         {
 387                 .freq                   = 2427,
 388                 RADIOREGS7(0x52, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x7b,
 389                            0x09, 0x0f, 0x09, 0x00, 0x09, 0x00, 0x41, 0x63,
 390                            0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
 391                            0x00, 0x00, 0xf0, 0x00),
 392                 PHYREGS(0x03cf, 0x03cb, 0x03c7, 0x0434, 0x0438, 0x043d),
 393         },
 394         {
 395                 .freq                   = 2432,
 396                 RADIOREGS7(0x55, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x80,
 397                            0x09, 0x0f, 0x08, 0x00, 0x08, 0x00, 0x41, 0x63,
 398                            0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
 399                            0x00, 0x00, 0xf0, 0x00),
 400                 PHYREGS(0x03d1, 0x03cd, 0x03c9, 0x0431, 0x0436, 0x043a),
 401         },
 402         {
 403                 .freq                   = 2437,
 404                 RADIOREGS7(0x58, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x85,
 405                            0x09, 0x0f, 0x08, 0x00, 0x08, 0x00, 0x41, 0x63,
 406                            0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
 407                            0x00, 0x00, 0xf0, 0x00),
 408                 PHYREGS(0x03d3, 0x03cf, 0x03cb, 0x042f, 0x0434, 0x0438),
 409         },
 410         {
 411                 .freq                   = 2442,
 412                 RADIOREGS7(0x5c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8a,
 413                            0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x41, 0x63,
 414                            0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
 415                            0x00, 0x00, 0xf0, 0x00),
 416                 PHYREGS(0x03d5, 0x03d1, 0x03cd, 0x042d, 0x0431, 0x0436),
 417         },
 418         {
 419                 .freq                   = 2447,
 420                 RADIOREGS7(0x5f, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8f,
 421                            0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x41, 0x63,
 422                            0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
 423                            0x00, 0x00, 0xf0, 0x00),
 424                 PHYREGS(0x03d7, 0x03d3, 0x03cf, 0x042b, 0x042f, 0x0434),
 425         },
 426         {
 427                 .freq                   = 2452,
 428                 RADIOREGS7(0x62, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x94,
 429                            0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x41, 0x63,
 430                            0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
 431                            0x00, 0x00, 0xf0, 0x00),
 432                 PHYREGS(0x03d9, 0x03d5, 0x03d1, 0x0429, 0x042d, 0x0431),
 433         },
 434         {
 435                 .freq                   = 2457,
 436                 RADIOREGS7(0x66, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x99,
 437                            0x09, 0x0f, 0x06, 0x00, 0x06, 0x00, 0x41, 0x63,
 438                            0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
 439                            0x00, 0x00, 0xf0, 0x00),
 440                 PHYREGS(0x03db, 0x03d7, 0x03d3, 0x0427, 0x042b, 0x042f),
 441         },
 442         {
 443                 .freq                   = 2462,
 444                 RADIOREGS7(0x69, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x9e,
 445                            0x09, 0x0f, 0x06, 0x00, 0x06, 0x00, 0x41, 0x63,
 446                            0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
 447                            0x00, 0x00, 0xf0, 0x00),
 448                 PHYREGS(0x03dd, 0x03d9, 0x03d5, 0x0424, 0x0429, 0x042d),
 449         },
 450         {
 451                 .freq                   = 5180,
 452                 RADIOREGS7(0xbe, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x06,
 453                            0x02, 0x0e, 0x00, 0x0e, 0x00, 0x9e, 0x00, 0x00,
 454                            0x9f, 0x2f, 0xa3, 0x00, 0xfc, 0x00, 0x00, 0x4f,
 455                            0x3a, 0x83, 0x00, 0xfc),
 456                 PHYREGS(0x081c, 0x0818, 0x0814, 0x01f9, 0x01fa, 0x01fb),
 457         },
 458         {
 459                 .freq                   = 5200,
 460                 RADIOREGS7(0xc5, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x08,
 461                            0x02, 0x0e, 0x00, 0x0e, 0x00, 0x9e, 0x00, 0x00,
 462                            0x7f, 0x2f, 0x83, 0x00, 0xf8, 0x00, 0x00, 0x4c,
 463                            0x4a, 0x83, 0x00, 0xf8),
 464                 PHYREGS(0x0824, 0x0820, 0x081c, 0x01f7, 0x01f8, 0x01f9),
 465         },
 466         {
 467                 .freq                   = 5220,
 468                 RADIOREGS7(0xcc, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x0a,
 469                            0x02, 0x0e, 0x00, 0x0e, 0x00, 0x9e, 0x00, 0x00,
 470                            0x6d, 0x3d, 0x83, 0x00, 0xf8, 0x00, 0x00, 0x2d,
 471                            0x2a, 0x73, 0x00, 0xf8),
 472                 PHYREGS(0x082c, 0x0828, 0x0824, 0x01f5, 0x01f6, 0x01f7),
 473         },
 474         {
 475                 .freq                   = 5240,
 476                 RADIOREGS7(0xd2, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x0c,
 477                            0x02, 0x0d, 0x00, 0x0d, 0x00, 0x8d, 0x00, 0x00,
 478                            0x4d, 0x1c, 0x73, 0x00, 0xf8, 0x00, 0x00, 0x4d,
 479                            0x2b, 0x73, 0x00, 0xf8),
 480                 PHYREGS(0x0834, 0x0830, 0x082c, 0x01f3, 0x01f4, 0x01f5),
 481         },
 482         {
 483                 .freq                   = 5745,
 484                 RADIOREGS7(0x7b, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x7d,
 485                            0x04, 0x08, 0x00, 0x06, 0x00, 0x15, 0x00, 0x00,
 486                            0x08, 0x03, 0x03, 0x00, 0x30, 0x00, 0x00, 0x06,
 487                            0x02, 0x03, 0x00, 0x30),
 488                 PHYREGS(0x08fe, 0x08fa, 0x08f6, 0x01c8, 0x01c8, 0x01c9),
 489         },
 490         {
 491                 .freq                   = 5765,
 492                 RADIOREGS7(0x81, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x81,
 493                            0x04, 0x08, 0x00, 0x06, 0x00, 0x15, 0x00, 0x00,
 494                            0x06, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x05,
 495                            0x02, 0x03, 0x00, 0x00),
 496                 PHYREGS(0x0906, 0x0902, 0x08fe, 0x01c6, 0x01c7, 0x01c8),
 497         },
 498         {
 499                 .freq                   = 5785,
 500                 RADIOREGS7(0x88, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x85,
 501                            0x04, 0x08, 0x00, 0x06, 0x00, 0x15, 0x00, 0x00,
 502                            0x08, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x05,
 503                            0x21, 0x03, 0x00, 0x00),
 504                 PHYREGS(0x090e, 0x090a, 0x0906, 0x01c4, 0x01c5, 0x01c6),
 505         },
 506         {
 507                 .freq                   = 5805,
 508                 RADIOREGS7(0x8f, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x89,
 509                            0x04, 0x07, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00,
 510                            0x06, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03,
 511                            0x00, 0x03, 0x00, 0x00),
 512                 PHYREGS(0x0916, 0x0912, 0x090e, 0x01c3, 0x01c4, 0x01c4),
 513         },
 514         {
 515                 .freq                   = 5825,
 516                 RADIOREGS7(0x95, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x8d,
 517                            0x04, 0x07, 0x00, 0x05, 0x00, 0x03, 0x00, 0x00,
 518                            0x05, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03,
 519                            0x00, 0x03, 0x00, 0x00),
 520                 PHYREGS(0x091e, 0x091a, 0x0916, 0x01c1, 0x01c2, 0x01c3),
 521         },
 522 };
 523 
 524 void r2057_upload_inittabs(struct b43_wldev *dev)
 525 {
 526         struct b43_phy *phy = &dev->phy;
 527         u16 *table = NULL;
 528         u16 size, i;
 529 
 530         switch (phy->rev) {
 531         case 7:
 532                 table = r2057_rev4_init[0];
 533                 size = ARRAY_SIZE(r2057_rev4_init);
 534                 break;
 535         case 8:
 536                 if (phy->radio_rev == 5) {
 537                         table = r2057_rev5_init[0];
 538                         size = ARRAY_SIZE(r2057_rev5_init);
 539                 } else if (phy->radio_rev == 7) {
 540                         table = r2057_rev7_init[0];
 541                         size = ARRAY_SIZE(r2057_rev7_init);
 542                 }
 543                 break;
 544         case 9:
 545                 if (phy->radio_rev == 5) {
 546                         table = r2057_rev5a_init[0];
 547                         size = ARRAY_SIZE(r2057_rev5a_init);
 548                 }
 549                 break;
 550         case 16:
 551                 if (phy->radio_rev == 9) {
 552                         table = r2057_rev9_init[0];
 553                         size = ARRAY_SIZE(r2057_rev9_init);
 554                 }
 555                 break;
 556         case 17:
 557                 if (phy->radio_rev == 14) {
 558                         table = r2057_rev14_init[0];
 559                         size = ARRAY_SIZE(r2057_rev14_init);
 560                 }
 561                 break;
 562         }
 563 
 564         B43_WARN_ON(!table);
 565 
 566         if (table) {
 567                 for (i = 0; i < size; i++, table += 2)
 568                         b43_radio_write(dev, table[0], table[1]);
 569         }
 570 }
 571 
 572 void r2057_get_chantabent_rev7(struct b43_wldev *dev, u16 freq,
 573                                const struct b43_nphy_chantabent_rev7 **tabent_r7,
 574                                const struct b43_nphy_chantabent_rev7_2g **tabent_r7_2g)
 575 {
 576         struct b43_phy *phy = &dev->phy;
 577         const struct b43_nphy_chantabent_rev7 *e_r7 = NULL;
 578         const struct b43_nphy_chantabent_rev7_2g *e_r7_2g = NULL;
 579         unsigned int len, i;
 580 
 581         *tabent_r7 = NULL;
 582         *tabent_r7_2g = NULL;
 583 
 584         switch (phy->rev) {
 585         case 8:
 586                 if (phy->radio_rev == 5) {
 587                         e_r7_2g = b43_nphy_chantab_phy_rev8_radio_rev5;
 588                         len = ARRAY_SIZE(b43_nphy_chantab_phy_rev8_radio_rev5);
 589                 }
 590                 break;
 591         case 16:
 592                 if (phy->radio_rev == 9) {
 593                         e_r7 = b43_nphy_chantab_phy_rev16_radio_rev9;
 594                         len = ARRAY_SIZE(b43_nphy_chantab_phy_rev16_radio_rev9);
 595                 }
 596                 break;
 597         case 17:
 598                 if (phy->radio_rev == 14) {
 599                         e_r7_2g = b43_nphy_chantab_phy_rev17_radio_rev14;
 600                         len = ARRAY_SIZE(b43_nphy_chantab_phy_rev17_radio_rev14);
 601                 }
 602                 break;
 603         default:
 604                 break;
 605         }
 606 
 607         if (e_r7) {
 608                 for (i = 0; i < len; i++, e_r7++) {
 609                         if (e_r7->freq == freq) {
 610                                 *tabent_r7 = e_r7;
 611                                 return;
 612                         }
 613                 }
 614         } else if (e_r7_2g) {
 615                 for (i = 0; i < len; i++, e_r7_2g++) {
 616                         if (e_r7_2g->freq == freq) {
 617                                 *tabent_r7_2g = e_r7_2g;
 618                                 return;
 619                         }
 620                 }
 621         } else {
 622                 B43_WARN_ON(1);
 623         }
 624 }

/* [<][>][^][v][top][bottom][index][help] */