Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
radio_2059.c
Go to the documentation of this file.
1 /*
2 
3  Broadcom B43 wireless driver
4  IEEE 802.11n 2059 radio device data tables
5 
6  Copyright (c) 2011 Rafał Miłecki <[email protected]>
7 
8  This program is free software; you can redistribute it and/or modify
9  it under the terms of the GNU General Public License as published by
10  the Free Software Foundation; either version 2 of the License, or
11  (at your option) any later version.
12 
13  This program is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with this program; see the file COPYING. If not, write to
20  the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
21  Boston, MA 02110-1301, USA.
22 
23 */
24 
25 #include "b43.h"
26 #include "radio_2059.h"
27 
28 #define RADIOREGS(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \
29  r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, \
30  r20, r21, r22, r23, r24, r25, r26, r27, r28) \
31  .radio_syn16 = r00, \
32  .radio_syn17 = r01, \
33  .radio_syn22 = r02, \
34  .radio_syn25 = r03, \
35  .radio_syn27 = r04, \
36  .radio_syn28 = r05, \
37  .radio_syn29 = r06, \
38  .radio_syn2c = r07, \
39  .radio_syn2d = r08, \
40  .radio_syn37 = r09, \
41  .radio_syn41 = r10, \
42  .radio_syn43 = r11, \
43  .radio_syn47 = r12, \
44  .radio_syn4a = r13, \
45  .radio_syn58 = r14, \
46  .radio_syn5a = r15, \
47  .radio_syn6a = r16, \
48  .radio_syn6d = r17, \
49  .radio_syn6e = r18, \
50  .radio_syn92 = r19, \
51  .radio_syn98 = r20, \
52  .radio_rxtx4a = r21, \
53  .radio_rxtx58 = r22, \
54  .radio_rxtx5a = r23, \
55  .radio_rxtx6a = r24, \
56  .radio_rxtx6d = r25, \
57  .radio_rxtx6e = r26, \
58  .radio_rxtx92 = r27, \
59  .radio_rxtx98 = r28
60 
61 #define PHYREGS(r0, r1, r2, r3, r4, r5) \
62  .phy_regs.bw1 = r0, \
63  .phy_regs.bw2 = r1, \
64  .phy_regs.bw3 = r2, \
65  .phy_regs.bw4 = r3, \
66  .phy_regs.bw5 = r4, \
67  .phy_regs.bw6 = r5
68 
69 static const struct b43_phy_ht_channeltab_e_radio2059 b43_phy_ht_channeltab_radio2059[] = {
70  { .freq = 2412,
71  RADIOREGS(0x48, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x6c,
72  0x09, 0x0f, 0x0a, 0x00, 0x0a, 0x00, 0x61, 0x03,
73  0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
74  0x00, 0x00, 0x00, 0xf0, 0x00),
75  PHYREGS(0x03c9, 0x03c5, 0x03c1, 0x043a, 0x043f, 0x0443),
76  },
77  { .freq = 2417,
78  RADIOREGS(0x4b, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x71,
79  0x09, 0x0f, 0x0a, 0x00, 0x0a, 0x00, 0x61, 0x03,
80  0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
81  0x00, 0x00, 0x00, 0xf0, 0x00),
82  PHYREGS(0x03cb, 0x03c7, 0x03c3, 0x0438, 0x043d, 0x0441),
83  },
84  { .freq = 2422,
85  RADIOREGS(0x4e, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x76,
86  0x09, 0x0f, 0x09, 0x00, 0x09, 0x00, 0x61, 0x03,
87  0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
88  0x00, 0x00, 0x00, 0xf0, 0x00),
89  PHYREGS(0x03cd, 0x03c9, 0x03c5, 0x0436, 0x043a, 0x043f),
90  },
91  { .freq = 2427,
92  RADIOREGS(0x52, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x7b,
93  0x09, 0x0f, 0x09, 0x00, 0x09, 0x00, 0x61, 0x03,
94  0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
95  0x00, 0x00, 0x00, 0xf0, 0x00),
96  PHYREGS(0x03cf, 0x03cb, 0x03c7, 0x0434, 0x0438, 0x043d),
97  },
98  { .freq = 2432,
99  RADIOREGS(0x55, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x80,
100  0x09, 0x0f, 0x08, 0x00, 0x08, 0x00, 0x61, 0x03,
101  0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
102  0x00, 0x00, 0x00, 0xf0, 0x00),
103  PHYREGS(0x03d1, 0x03cd, 0x03c9, 0x0431, 0x0436, 0x043a),
104  },
105  { .freq = 2437,
106  RADIOREGS(0x58, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x85,
107  0x09, 0x0f, 0x08, 0x00, 0x08, 0x00, 0x61, 0x03,
108  0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
109  0x00, 0x00, 0x00, 0xf0, 0x00),
110  PHYREGS(0x03d3, 0x03cf, 0x03cb, 0x042f, 0x0434, 0x0438),
111  },
112  { .freq = 2442,
113  RADIOREGS(0x5c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8a,
114  0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x61, 0x03,
115  0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
116  0x00, 0x00, 0x00, 0xf0, 0x00),
117  PHYREGS(0x03d5, 0x03d1, 0x03cd, 0x042d, 0x0431, 0x0436),
118  },
119  { .freq = 2447,
120  RADIOREGS(0x5f, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8f,
121  0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x61, 0x03,
122  0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
123  0x00, 0x00, 0x00, 0xf0, 0x00),
124  PHYREGS(0x03d7, 0x03d3, 0x03cf, 0x042b, 0x042f, 0x0434),
125  },
126  { .freq = 2452,
127  RADIOREGS(0x62, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x94,
128  0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x61, 0x03,
129  0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
130  0x00, 0x00, 0x00, 0xf0, 0x00),
131  PHYREGS(0x03d9, 0x03d5, 0x03d1, 0x0429, 0x042d, 0x0431),
132  },
133  { .freq = 2457,
134  RADIOREGS(0x66, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x99,
135  0x09, 0x0f, 0x06, 0x00, 0x06, 0x00, 0x61, 0x03,
136  0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
137  0x00, 0x00, 0x00, 0xf0, 0x00),
138  PHYREGS(0x03db, 0x03d7, 0x03d3, 0x0427, 0x042b, 0x042f),
139  },
140  { .freq = 2462,
141  RADIOREGS(0x69, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x9e,
142  0x09, 0x0f, 0x06, 0x00, 0x06, 0x00, 0x61, 0x03,
143  0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
144  0x00, 0x00, 0x00, 0xf0, 0x00),
145  PHYREGS(0x03dd, 0x03d9, 0x03d5, 0x0424, 0x0429, 0x042d),
146  },
147  { .freq = 2467,
148  RADIOREGS(0x6c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xa3,
149  0x09, 0x0f, 0x05, 0x00, 0x05, 0x00, 0x61, 0x03,
150  0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
151  0x00, 0x00, 0x00, 0xf0, 0x00),
152  PHYREGS(0x03df, 0x03db, 0x03d7, 0x0422, 0x0427, 0x042b),
153  },
154  { .freq = 2472,
155  RADIOREGS(0x70, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xa8,
156  0x09, 0x0f, 0x05, 0x00, 0x05, 0x00, 0x61, 0x03,
157  0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
158  0x00, 0x00, 0x00, 0xf0, 0x00),
159  PHYREGS(0x03e1, 0x03dd, 0x03d9, 0x0420, 0x0424, 0x0429),
160  },
161 };
162 
165 {
166  const struct b43_phy_ht_channeltab_e_radio2059 *e;
167  unsigned int i;
168 
169  e = b43_phy_ht_channeltab_radio2059;
170  for (i = 0; i < ARRAY_SIZE(b43_phy_ht_channeltab_radio2059); i++, e++) {
171  if (e->freq == freq)
172  return e;
173  }
174 
175  return NULL;
176 }