Linux-libre 3.16.41-gnu
[librecmc/linux-libre.git] / drivers / net / wireless / b43 / radio_2059.c
1 /*
2
3   Broadcom B43 wireless driver
4   IEEE 802.11n 2059 radio device data tables
5
6   Copyright (c) 2011 Rafał Miłecki <zajec5@gmail.com>
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) \
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_rxtx4a                   = r13,  \
45         .radio_rxtx58                   = r14,  \
46         .radio_rxtx5a                   = r15,  \
47         .radio_rxtx6a                   = r16,  \
48         .radio_rxtx6d                   = r17,  \
49         .radio_rxtx6e                   = r18,  \
50         .radio_rxtx92                   = r19,  \
51         .radio_rxtx98                   = r20
52
53 #define PHYREGS(r0, r1, r2, r3, r4, r5) \
54         .phy_regs.bw1   = r0,   \
55         .phy_regs.bw2   = r1,   \
56         .phy_regs.bw3   = r2,   \
57         .phy_regs.bw4   = r3,   \
58         .phy_regs.bw5   = r4,   \
59         .phy_regs.bw6   = r5
60
61 static const struct b43_phy_ht_channeltab_e_radio2059 b43_phy_ht_channeltab_radio2059[] = {
62   {     .freq                   = 2412,
63         RADIOREGS(0x48, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x6c,
64                   0x09, 0x0f, 0x0a, 0x00, 0x0a, 0x00, 0x61, 0x03,
65                   0x00, 0x00, 0x00, 0xf0, 0x00),
66         PHYREGS(0x03c9, 0x03c5, 0x03c1, 0x043a, 0x043f, 0x0443),
67   },
68   {     .freq                   = 2417,
69         RADIOREGS(0x4b, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x71,
70                   0x09, 0x0f, 0x0a, 0x00, 0x0a, 0x00, 0x61, 0x03,
71                   0x00, 0x00, 0x00, 0xf0, 0x00),
72         PHYREGS(0x03cb, 0x03c7, 0x03c3, 0x0438, 0x043d, 0x0441),
73   },
74   {     .freq                   = 2422,
75         RADIOREGS(0x4e, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x76,
76                   0x09, 0x0f, 0x09, 0x00, 0x09, 0x00, 0x61, 0x03,
77                   0x00, 0x00, 0x00, 0xf0, 0x00),
78         PHYREGS(0x03cd, 0x03c9, 0x03c5, 0x0436, 0x043a, 0x043f),
79   },
80   {     .freq                   = 2427,
81         RADIOREGS(0x52, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x7b,
82                   0x09, 0x0f, 0x09, 0x00, 0x09, 0x00, 0x61, 0x03,
83                   0x00, 0x00, 0x00, 0xf0, 0x00),
84         PHYREGS(0x03cf, 0x03cb, 0x03c7, 0x0434, 0x0438, 0x043d),
85   },
86   {     .freq                   = 2432,
87         RADIOREGS(0x55, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x80,
88                   0x09, 0x0f, 0x08, 0x00, 0x08, 0x00, 0x61, 0x03,
89                   0x00, 0x00, 0x00, 0xf0, 0x00),
90         PHYREGS(0x03d1, 0x03cd, 0x03c9, 0x0431, 0x0436, 0x043a),
91   },
92   {     .freq                   = 2437,
93         RADIOREGS(0x58, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x85,
94                   0x09, 0x0f, 0x08, 0x00, 0x08, 0x00, 0x61, 0x03,
95                   0x00, 0x00, 0x00, 0xf0, 0x00),
96         PHYREGS(0x03d3, 0x03cf, 0x03cb, 0x042f, 0x0434, 0x0438),
97   },
98   {     .freq                   = 2442,
99         RADIOREGS(0x5c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8a,
100                   0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x61, 0x03,
101                   0x00, 0x00, 0x00, 0xf0, 0x00),
102         PHYREGS(0x03d5, 0x03d1, 0x03cd, 0x042d, 0x0431, 0x0436),
103   },
104   {     .freq                   = 2447,
105         RADIOREGS(0x5f, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8f,
106                   0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x61, 0x03,
107                   0x00, 0x00, 0x00, 0xf0, 0x00),
108         PHYREGS(0x03d7, 0x03d3, 0x03cf, 0x042b, 0x042f, 0x0434),
109   },
110   {     .freq                   = 2452,
111         RADIOREGS(0x62, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x94,
112                   0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x61, 0x03,
113                   0x00, 0x00, 0x00, 0xf0, 0x00),
114         PHYREGS(0x03d9, 0x03d5, 0x03d1, 0x0429, 0x042d, 0x0431),
115   },
116   {     .freq                   = 2457,
117         RADIOREGS(0x66, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x99,
118                   0x09, 0x0f, 0x06, 0x00, 0x06, 0x00, 0x61, 0x03,
119                   0x00, 0x00, 0x00, 0xf0, 0x00),
120         PHYREGS(0x03db, 0x03d7, 0x03d3, 0x0427, 0x042b, 0x042f),
121   },
122   {     .freq                   = 2462,
123         RADIOREGS(0x69, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x9e,
124                   0x09, 0x0f, 0x06, 0x00, 0x06, 0x00, 0x61, 0x03,
125                   0x00, 0x00, 0x00, 0xf0, 0x00),
126         PHYREGS(0x03dd, 0x03d9, 0x03d5, 0x0424, 0x0429, 0x042d),
127   },
128   {     .freq                   = 2467,
129         RADIOREGS(0x6c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xa3,
130                   0x09, 0x0f, 0x05, 0x00, 0x05, 0x00, 0x61, 0x03,
131                   0x00, 0x00, 0x00, 0xf0, 0x00),
132         PHYREGS(0x03df, 0x03db, 0x03d7, 0x0422, 0x0427, 0x042b),
133   },
134   {     .freq                   = 2472,
135         RADIOREGS(0x70, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xa8,
136                   0x09, 0x0f, 0x05, 0x00, 0x05, 0x00, 0x61, 0x03,
137                   0x00, 0x00, 0x00, 0xf0, 0x00),
138         PHYREGS(0x03e1, 0x03dd, 0x03d9, 0x0420, 0x0424, 0x0429),
139   },
140 };
141
142 const struct b43_phy_ht_channeltab_e_radio2059
143 *b43_phy_ht_get_channeltab_e_r2059(struct b43_wldev *dev, u16 freq)
144 {
145         const struct b43_phy_ht_channeltab_e_radio2059 *e;
146         unsigned int i;
147
148         e = b43_phy_ht_channeltab_radio2059;
149         for (i = 0; i < ARRAY_SIZE(b43_phy_ht_channeltab_radio2059); i++, e++) {
150                 if (e->freq == freq)
151                         return e;
152         }
153
154         return NULL;
155 }