1ca47d344SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-or-later
258619b14SKalle Valo /*
358619b14SKalle Valo 
458619b14SKalle Valo   Broadcom B43 wireless driver
558619b14SKalle Valo   IEEE 802.11n 2057 radio device data tables
658619b14SKalle Valo 
758619b14SKalle Valo   Copyright (c) 2010 Rafał Miłecki <zajec5@gmail.com>
858619b14SKalle Valo 
958619b14SKalle Valo 
1058619b14SKalle Valo */
1158619b14SKalle Valo 
1258619b14SKalle Valo #include "b43.h"
1358619b14SKalle Valo #include "radio_2057.h"
1458619b14SKalle Valo #include "phy_common.h"
1558619b14SKalle Valo 
1658619b14SKalle Valo static u16 r2057_rev4_init[][2] = {
1758619b14SKalle Valo 	{ 0x0E, 0x20 }, { 0x31, 0x00 }, { 0x32, 0x00 }, { 0x33, 0x00 },
1858619b14SKalle Valo 	{ 0x35, 0x26 }, { 0x3C, 0xff }, { 0x3D, 0xff }, { 0x3E, 0xff },
1958619b14SKalle Valo 	{ 0x3F, 0xff }, { 0x62, 0x33 }, { 0x8A, 0xf0 }, { 0x8B, 0x10 },
2058619b14SKalle Valo 	{ 0x8C, 0xf0 }, { 0x91, 0x3f }, { 0x92, 0x36 }, { 0xA4, 0x8c },
2158619b14SKalle Valo 	{ 0xA8, 0x55 }, { 0xAF, 0x01 }, { 0x10F, 0xf0 }, { 0x110, 0x10 },
2258619b14SKalle Valo 	{ 0x111, 0xf0 }, { 0x116, 0x3f }, { 0x117, 0x36 }, { 0x129, 0x8c },
2358619b14SKalle Valo 	{ 0x12D, 0x55 }, { 0x134, 0x01 }, { 0x15E, 0x00 }, { 0x15F, 0x00 },
2458619b14SKalle Valo 	{ 0x160, 0x00 }, { 0x161, 0x00 }, { 0x162, 0x00 }, { 0x163, 0x00 },
2558619b14SKalle Valo 	{ 0x169, 0x02 }, { 0x16A, 0x00 }, { 0x16B, 0x00 }, { 0x16C, 0x00 },
2658619b14SKalle Valo 	{ 0x1A4, 0x00 }, { 0x1A5, 0x00 }, { 0x1A6, 0x00 }, { 0x1AA, 0x00 },
2758619b14SKalle Valo 	{ 0x1AB, 0x00 }, { 0x1AC, 0x00 },
2858619b14SKalle Valo };
2958619b14SKalle Valo 
3058619b14SKalle Valo static u16 r2057_rev5_init[][2] = {
3158619b14SKalle Valo 	{ 0x00, 0x00 }, { 0x01, 0x57 }, { 0x02, 0x20 }, { 0x23, 0x6 },
3258619b14SKalle Valo 	{ 0x31, 0x00 }, { 0x32, 0x00 }, { 0x33, 0x00 }, { 0x51, 0x70 },
3358619b14SKalle Valo 	{ 0x59, 0x88 }, { 0x5C, 0x20 }, { 0x62, 0x33 }, { 0x63, 0x0f },
3458619b14SKalle Valo 	{ 0x64, 0x0f }, { 0x81, 0x01 }, { 0x91, 0x3f }, { 0x92, 0x36 },
3558619b14SKalle Valo 	{ 0xA1, 0x20 }, { 0xD6, 0x70 }, { 0xDE, 0x88 }, { 0xE1, 0x20 },
3658619b14SKalle Valo 	{ 0xE8, 0x0f }, { 0xE9, 0x0f }, { 0x106, 0x01 }, { 0x116, 0x3f },
3758619b14SKalle Valo 	{ 0x117, 0x36 }, { 0x126, 0x20 }, { 0x15E, 0x00 }, { 0x15F, 0x00 },
3858619b14SKalle Valo 	{ 0x160, 0x00 }, { 0x161, 0x00 }, { 0x162, 0x00 }, { 0x163, 0x00 },
3958619b14SKalle Valo 	{ 0x16A, 0x00 }, { 0x16B, 0x00 }, { 0x16C, 0x00 }, { 0x1A4, 0x00 },
4058619b14SKalle Valo 	{ 0x1A5, 0x00 }, { 0x1A6, 0x00 }, { 0x1AA, 0x00 }, { 0x1AB, 0x00 },
4158619b14SKalle Valo 	{ 0x1AC, 0x00 }, { 0x1B7, 0x0c }, { 0x1C1, 0x01 }, { 0x1C2, 0x80 },
4258619b14SKalle Valo };
4358619b14SKalle Valo 
4458619b14SKalle Valo static u16 r2057_rev5a_init[][2] = {
4558619b14SKalle Valo 	{ 0x00, 0x15 }, { 0x01, 0x57 }, { 0x02, 0x20 }, { 0x23, 0x6 },
4658619b14SKalle Valo 	{ 0x31, 0x00 }, { 0x32, 0x00 }, { 0x33, 0x00 }, { 0x51, 0x70 },
4758619b14SKalle Valo 	{ 0x59, 0x88 }, { 0x5C, 0x20 }, { 0x62, 0x33 }, { 0x63, 0x0f },
4858619b14SKalle Valo 	{ 0x64, 0x0f }, { 0x81, 0x01 }, { 0x91, 0x3f }, { 0x92, 0x36 },
4958619b14SKalle Valo 	{ 0xC9, 0x01 }, { 0xD6, 0x70 }, { 0xDE, 0x88 }, { 0xE1, 0x20 },
5058619b14SKalle Valo 	{ 0xE8, 0x0f }, { 0xE9, 0x0f }, { 0x106, 0x01 }, { 0x116, 0x3f },
5158619b14SKalle Valo 	{ 0x117, 0x36 }, { 0x126, 0x20 }, { 0x14E, 0x01 }, { 0x15E, 0x00 },
5258619b14SKalle Valo 	{ 0x15F, 0x00 }, { 0x160, 0x00 }, { 0x161, 0x00 }, { 0x162, 0x00 },
5358619b14SKalle Valo 	{ 0x163, 0x00 }, { 0x16A, 0x00 }, { 0x16B, 0x00 }, { 0x16C, 0x00 },
5458619b14SKalle Valo 	{ 0x1A4, 0x00 }, { 0x1A5, 0x00 }, { 0x1A6, 0x00 }, { 0x1AA, 0x00 },
5558619b14SKalle Valo 	{ 0x1AB, 0x00 }, { 0x1AC, 0x00 }, { 0x1B7, 0x0c }, { 0x1C1, 0x01 },
5658619b14SKalle Valo 	{ 0x1C2, 0x80 },
5758619b14SKalle Valo };
5858619b14SKalle Valo 
5958619b14SKalle Valo static u16 r2057_rev7_init[][2] = {
6058619b14SKalle Valo 	{ 0x00, 0x00 }, { 0x01, 0x57 }, { 0x02, 0x20 }, { 0x31, 0x00 },
6158619b14SKalle Valo 	{ 0x32, 0x00 }, { 0x33, 0x00 }, { 0x51, 0x70 }, { 0x59, 0x88 },
6258619b14SKalle Valo 	{ 0x5C, 0x20 }, { 0x62, 0x33 }, { 0x63, 0x0f }, { 0x64, 0x13 },
6358619b14SKalle Valo 	{ 0x66, 0xee }, { 0x6E, 0x58 }, { 0x75, 0x13 }, { 0x7B, 0x13 },
6458619b14SKalle Valo 	{ 0x7C, 0x14 }, { 0x7D, 0xee }, { 0x81, 0x01 }, { 0x91, 0x3f },
6558619b14SKalle Valo 	{ 0x92, 0x36 }, { 0xA1, 0x20 }, { 0xD6, 0x70 }, { 0xDE, 0x88 },
6658619b14SKalle Valo 	{ 0xE1, 0x20 }, { 0xE8, 0x0f }, { 0xE9, 0x13 }, { 0xEB, 0xee },
6758619b14SKalle Valo 	{ 0xF3, 0x58 }, { 0xFA, 0x13 }, { 0x100, 0x13 }, { 0x101, 0x14 },
6858619b14SKalle Valo 	{ 0x102, 0xee }, { 0x106, 0x01 }, { 0x116, 0x3f }, { 0x117, 0x36 },
6958619b14SKalle Valo 	{ 0x126, 0x20 }, { 0x15E, 0x00 }, { 0x15F, 0x00 }, { 0x160, 0x00 },
7058619b14SKalle Valo 	{ 0x161, 0x00 }, { 0x162, 0x00 }, { 0x163, 0x00 }, { 0x16A, 0x00 },
7158619b14SKalle Valo 	{ 0x16B, 0x00 }, { 0x16C, 0x00 }, { 0x1A4, 0x00 }, { 0x1A5, 0x00 },
7258619b14SKalle Valo 	{ 0x1A6, 0x00 }, { 0x1AA, 0x00 }, { 0x1AB, 0x00 }, { 0x1AC, 0x00 },
7358619b14SKalle Valo 	{ 0x1B7, 0x05 }, { 0x1C2, 0xa0 },
7458619b14SKalle Valo };
7558619b14SKalle Valo 
7658619b14SKalle Valo /* TODO: Which devices should use it?
7758619b14SKalle Valo static u16 r2057_rev8_init[][2] = {
7858619b14SKalle Valo 	{ 0x00, 0x08 }, { 0x01, 0x57 }, { 0x02, 0x20 }, { 0x31, 0x00 },
7958619b14SKalle Valo 	{ 0x32, 0x00 }, { 0x33, 0x00 }, { 0x51, 0x70 }, { 0x59, 0x88 },
8058619b14SKalle Valo 	{ 0x5C, 0x20 }, { 0x62, 0x33 }, { 0x63, 0x0f }, { 0x64, 0x0f },
8158619b14SKalle Valo 	{ 0x6E, 0x58 }, { 0x75, 0x13 }, { 0x7B, 0x13 }, { 0x7C, 0x0f },
8258619b14SKalle Valo 	{ 0x7D, 0xee }, { 0x81, 0x01 }, { 0x91, 0x3f }, { 0x92, 0x36 },
8358619b14SKalle Valo 	{ 0xA1, 0x20 }, { 0xC9, 0x01 }, { 0xD6, 0x70 }, { 0xDE, 0x88 },
8458619b14SKalle Valo 	{ 0xE1, 0x20 }, { 0xE8, 0x0f }, { 0xE9, 0x0f }, { 0xF3, 0x58 },
8558619b14SKalle Valo 	{ 0xFA, 0x13 }, { 0x100, 0x13 }, { 0x101, 0x0f }, { 0x102, 0xee },
8658619b14SKalle Valo 	{ 0x106, 0x01 }, { 0x116, 0x3f }, { 0x117, 0x36 }, { 0x126, 0x20 },
8758619b14SKalle Valo 	{ 0x14E, 0x01 }, { 0x15E, 0x00 }, { 0x15F, 0x00 }, { 0x160, 0x00 },
8858619b14SKalle Valo 	{ 0x161, 0x00 }, { 0x162, 0x00 }, { 0x163, 0x00 }, { 0x16A, 0x00 },
8958619b14SKalle Valo 	{ 0x16B, 0x00 }, { 0x16C, 0x00 }, { 0x1A4, 0x00 }, { 0x1A5, 0x00 },
9058619b14SKalle Valo 	{ 0x1A6, 0x00 }, { 0x1AA, 0x00 }, { 0x1AB, 0x00 }, { 0x1AC, 0x00 },
9158619b14SKalle Valo 	{ 0x1B7, 0x05 }, { 0x1C2, 0xa0 },
9258619b14SKalle Valo };
9358619b14SKalle Valo */
9458619b14SKalle Valo 
9558619b14SKalle Valo /* Extracted from MMIO dump of 6.30.223.141 */
9658619b14SKalle Valo static u16 r2057_rev9_init[][2] = {
9758619b14SKalle Valo 	{ 0x27, 0x1f }, { 0x28, 0x0a }, { 0x29, 0x2f }, { 0x42, 0x1f },
9858619b14SKalle Valo 	{ 0x48, 0x3f }, { 0x5c, 0x41 }, { 0x63, 0x14 }, { 0x64, 0x12 },
9958619b14SKalle Valo 	{ 0x66, 0xff }, { 0x74, 0xa3 }, { 0x7b, 0x14 }, { 0x7c, 0x14 },
10058619b14SKalle Valo 	{ 0x7d, 0xee }, { 0x86, 0xc0 }, { 0xc4, 0x10 }, { 0xc9, 0x01 },
10158619b14SKalle Valo 	{ 0xe1, 0x41 }, { 0xe8, 0x14 }, { 0xe9, 0x12 }, { 0xeb, 0xff },
10258619b14SKalle Valo 	{ 0xf5, 0x0a }, { 0xf8, 0x09 }, { 0xf9, 0xa3 }, { 0x100, 0x14 },
10358619b14SKalle Valo 	{ 0x101, 0x10 }, { 0x102, 0xee }, { 0x10b, 0xc0 }, { 0x149, 0x10 },
10458619b14SKalle Valo 	{ 0x14e, 0x01 }, { 0x1b7, 0x05 }, { 0x1c2, 0xa0 },
10558619b14SKalle Valo };
10658619b14SKalle Valo 
10758619b14SKalle Valo /* Extracted from MMIO dump of 6.30.223.248 */
10858619b14SKalle Valo static u16 r2057_rev14_init[][2] = {
10958619b14SKalle Valo 	{ 0x011, 0xfc }, { 0x030, 0x24 }, { 0x040, 0x1c }, { 0x082, 0x08 },
11058619b14SKalle Valo 	{ 0x0b4, 0x44 }, { 0x0c8, 0x01 }, { 0x0c9, 0x01 }, { 0x107, 0x08 },
11158619b14SKalle Valo 	{ 0x14d, 0x01 }, { 0x14e, 0x01 }, { 0x1af, 0x40 }, { 0x1b0, 0x40 },
11258619b14SKalle Valo 	{ 0x1cc, 0x01 }, { 0x1cf, 0x10 }, { 0x1d0, 0x0f }, { 0x1d3, 0x10 },
11358619b14SKalle Valo 	{ 0x1d4, 0x0f },
11458619b14SKalle Valo };
11558619b14SKalle Valo 
11658619b14SKalle Valo #define RADIOREGS7(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \
11758619b14SKalle Valo 		   r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, \
11858619b14SKalle Valo 		   r20, r21, r22, r23, r24, r25, r26, r27) \
11958619b14SKalle Valo 	.radio_vcocal_countval0			= r00,	\
12058619b14SKalle Valo 	.radio_vcocal_countval1			= r01,	\
12158619b14SKalle Valo 	.radio_rfpll_refmaster_sparextalsize	= r02,	\
12258619b14SKalle Valo 	.radio_rfpll_loopfilter_r1		= r03,	\
12358619b14SKalle Valo 	.radio_rfpll_loopfilter_c2		= r04,	\
12458619b14SKalle Valo 	.radio_rfpll_loopfilter_c1		= r05,	\
12558619b14SKalle Valo 	.radio_cp_kpd_idac			= r06,	\
12658619b14SKalle Valo 	.radio_rfpll_mmd0			= r07,	\
12758619b14SKalle Valo 	.radio_rfpll_mmd1			= r08,	\
12858619b14SKalle Valo 	.radio_vcobuf_tune			= r09,	\
12958619b14SKalle Valo 	.radio_logen_mx2g_tune			= r10,	\
13058619b14SKalle Valo 	.radio_logen_mx5g_tune			= r11,	\
13158619b14SKalle Valo 	.radio_logen_indbuf2g_tune		= r12,	\
13258619b14SKalle Valo 	.radio_logen_indbuf5g_tune		= r13,	\
13358619b14SKalle Valo 	.radio_txmix2g_tune_boost_pu_core0	= r14,	\
13458619b14SKalle Valo 	.radio_pad2g_tune_pus_core0		= r15,	\
13558619b14SKalle Valo 	.radio_pga_boost_tune_core0		= r16,	\
13658619b14SKalle Valo 	.radio_txmix5g_boost_tune_core0		= r17,	\
13758619b14SKalle Valo 	.radio_pad5g_tune_misc_pus_core0	= r18,	\
13858619b14SKalle Valo 	.radio_lna2g_tune_core0			= r19,	\
13958619b14SKalle Valo 	.radio_lna5g_tune_core0			= r20,	\
14058619b14SKalle Valo 	.radio_txmix2g_tune_boost_pu_core1	= r21,	\
14158619b14SKalle Valo 	.radio_pad2g_tune_pus_core1		= r22,	\
14258619b14SKalle Valo 	.radio_pga_boost_tune_core1		= r23,	\
14358619b14SKalle Valo 	.radio_txmix5g_boost_tune_core1		= r24,	\
14458619b14SKalle Valo 	.radio_pad5g_tune_misc_pus_core1	= r25,	\
14558619b14SKalle Valo 	.radio_lna2g_tune_core1			= r26,	\
14658619b14SKalle Valo 	.radio_lna5g_tune_core1			= r27
14758619b14SKalle Valo 
14858619b14SKalle Valo #define RADIOREGS7_2G(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \
14958619b14SKalle Valo 		      r10, r11, r12, r13, r14, r15, r16, r17) \
15058619b14SKalle Valo 	.radio_vcocal_countval0			= r00,	\
15158619b14SKalle Valo 	.radio_vcocal_countval1			= r01,	\
15258619b14SKalle Valo 	.radio_rfpll_refmaster_sparextalsize	= r02,	\
15358619b14SKalle Valo 	.radio_rfpll_loopfilter_r1		= r03,	\
15458619b14SKalle Valo 	.radio_rfpll_loopfilter_c2		= r04,	\
15558619b14SKalle Valo 	.radio_rfpll_loopfilter_c1		= r05,	\
15658619b14SKalle Valo 	.radio_cp_kpd_idac			= r06,	\
15758619b14SKalle Valo 	.radio_rfpll_mmd0			= r07,	\
15858619b14SKalle Valo 	.radio_rfpll_mmd1			= r08,	\
15958619b14SKalle Valo 	.radio_vcobuf_tune			= r09,	\
16058619b14SKalle Valo 	.radio_logen_mx2g_tune			= r10,	\
16158619b14SKalle Valo 	.radio_logen_indbuf2g_tune		= r11,	\
16258619b14SKalle Valo 	.radio_txmix2g_tune_boost_pu_core0	= r12,	\
16358619b14SKalle Valo 	.radio_pad2g_tune_pus_core0		= r13,	\
16458619b14SKalle Valo 	.radio_lna2g_tune_core0			= r14,	\
16558619b14SKalle Valo 	.radio_txmix2g_tune_boost_pu_core1	= r15,	\
16658619b14SKalle Valo 	.radio_pad2g_tune_pus_core1		= r16,	\
16758619b14SKalle Valo 	.radio_lna2g_tune_core1			= r17
16858619b14SKalle Valo 
16958619b14SKalle Valo #define PHYREGS(r0, r1, r2, r3, r4, r5)	\
17058619b14SKalle Valo 	.phy_regs.phy_bw1a	= r0,	\
17158619b14SKalle Valo 	.phy_regs.phy_bw2	= r1,	\
17258619b14SKalle Valo 	.phy_regs.phy_bw3	= r2,	\
17358619b14SKalle Valo 	.phy_regs.phy_bw4	= r3,	\
17458619b14SKalle Valo 	.phy_regs.phy_bw5	= r4,	\
17558619b14SKalle Valo 	.phy_regs.phy_bw6	= r5
17658619b14SKalle Valo 
17758619b14SKalle Valo /* Copied from brcmsmac (5.75.11): chan_info_nphyrev8_2057_rev5 */
17858619b14SKalle Valo static const struct b43_nphy_chantabent_rev7_2g b43_nphy_chantab_phy_rev8_radio_rev5[] = {
17958619b14SKalle Valo 	{
18058619b14SKalle Valo 		.freq			= 2412,
18158619b14SKalle Valo 		RADIOREGS7_2G(0x48, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x6c,
18258619b14SKalle Valo 			      0x09, 0x0d, 0x08, 0x0e, 0x61, 0x03, 0xff, 0x61,
18358619b14SKalle Valo 			      0x03, 0xff),
18458619b14SKalle Valo 		PHYREGS(0x03c9, 0x03c5, 0x03c1, 0x043a, 0x043f, 0x0443),
18558619b14SKalle Valo 	},
18658619b14SKalle Valo 	{
18758619b14SKalle Valo 		.freq			= 2417,
18858619b14SKalle Valo 		RADIOREGS7_2G(0x4b, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x71,
18958619b14SKalle Valo 			      0x09, 0x0d, 0x08, 0x0e, 0x61, 0x03, 0xff, 0x61,
19058619b14SKalle Valo 			      0x03, 0xff),
19158619b14SKalle Valo 		PHYREGS(0x03cb, 0x03c7, 0x03c3, 0x0438, 0x043d, 0x0441),
19258619b14SKalle Valo 	},
19358619b14SKalle Valo 	{
19458619b14SKalle Valo 		.freq			= 2422,
19558619b14SKalle Valo 		RADIOREGS7_2G(0x4e, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x76,
19658619b14SKalle Valo 			      0x09, 0x0d, 0x08, 0x0e, 0x61, 0x03, 0xef, 0x61,
19758619b14SKalle Valo 			      0x03, 0xef),
19858619b14SKalle Valo 		PHYREGS(0x03cd, 0x03c9, 0x03c5, 0x0436, 0x043a, 0x043f),
19958619b14SKalle Valo 	},
20058619b14SKalle Valo 	{
20158619b14SKalle Valo 		.freq			= 2427,
20258619b14SKalle Valo 		RADIOREGS7_2G(0x52, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x7b,
20358619b14SKalle Valo 			      0x09, 0x0c, 0x08, 0x0e, 0x61, 0x03, 0xdf, 0x61,
20458619b14SKalle Valo 			      0x03, 0xdf),
20558619b14SKalle Valo 		PHYREGS(0x03cf, 0x03cb, 0x03c7, 0x0434, 0x0438, 0x043d),
20658619b14SKalle Valo 	},
20758619b14SKalle Valo 	{
20858619b14SKalle Valo 		.freq			= 2432,
20958619b14SKalle Valo 		RADIOREGS7_2G(0x55, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x80,
21058619b14SKalle Valo 			      0x09, 0x0c, 0x07, 0x0d, 0x61, 0x03, 0xcf, 0x61,
21158619b14SKalle Valo 			      0x03, 0xcf),
21258619b14SKalle Valo 		PHYREGS(0x03d1, 0x03cd, 0x03c9, 0x0431, 0x0436, 0x043a),
21358619b14SKalle Valo 	},
21458619b14SKalle Valo 	{
21558619b14SKalle Valo 		.freq			= 2437,
21658619b14SKalle Valo 		RADIOREGS7_2G(0x58, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x85,
21758619b14SKalle Valo 			      0x09, 0x0c, 0x07, 0x0d, 0x61, 0x03, 0xbf, 0x61,
21858619b14SKalle Valo 			      0x03, 0xbf),
21958619b14SKalle Valo 		PHYREGS(0x03d3, 0x03cf, 0x03cb, 0x042f, 0x0434, 0x0438),
22058619b14SKalle Valo 	},
22158619b14SKalle Valo 	{
22258619b14SKalle Valo 		.freq			= 2442,
22358619b14SKalle Valo 		RADIOREGS7_2G(0x5c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8a,
22458619b14SKalle Valo 			      0x09, 0x0b, 0x07, 0x0d, 0x61, 0x03, 0xaf, 0x61,
22558619b14SKalle Valo 			      0x03, 0xaf),
22658619b14SKalle Valo 		PHYREGS(0x03d5, 0x03d1, 0x03cd, 0x042d, 0x0431, 0x0436),
22758619b14SKalle Valo 	},
22858619b14SKalle Valo 	{
22958619b14SKalle Valo 		.freq			= 2447,
23058619b14SKalle Valo 		RADIOREGS7_2G(0x5f, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8f,
23158619b14SKalle Valo 			      0x09, 0x0b, 0x07, 0x0d, 0x61, 0x03, 0x9f, 0x61,
23258619b14SKalle Valo 			      0x03, 0x9f),
23358619b14SKalle Valo 		PHYREGS(0x03d7, 0x03d3, 0x03cf, 0x042b, 0x042f, 0x0434),
23458619b14SKalle Valo 	},
23558619b14SKalle Valo 	{
23658619b14SKalle Valo 		.freq			= 2452,
23758619b14SKalle Valo 		RADIOREGS7_2G(0x62, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x94,
23858619b14SKalle Valo 			      0x09, 0x0b, 0x07, 0x0d, 0x61, 0x03, 0x8f, 0x61,
23958619b14SKalle Valo 			      0x03, 0x8f),
24058619b14SKalle Valo 		PHYREGS(0x03d9, 0x03d5, 0x03d1, 0x0429, 0x042d, 0x0431),
24158619b14SKalle Valo 	},
24258619b14SKalle Valo 	{
24358619b14SKalle Valo 		.freq			= 2457,
24458619b14SKalle Valo 		RADIOREGS7_2G(0x66, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x99,
24558619b14SKalle Valo 			      0x09, 0x0b, 0x07, 0x0c, 0x61, 0x03, 0x7f, 0x61,
24658619b14SKalle Valo 			      0x03, 0x7f),
24758619b14SKalle Valo 		PHYREGS(0x03db, 0x03d7, 0x03d3, 0x0427, 0x042b, 0x042f),
24858619b14SKalle Valo 	},
24958619b14SKalle Valo 	{
25058619b14SKalle Valo 		.freq			= 2462,
25158619b14SKalle Valo 		RADIOREGS7_2G(0x69, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x9e,
25258619b14SKalle Valo 			      0x09, 0x0b, 0x07, 0x0c, 0x61, 0x03, 0x6f, 0x61,
25358619b14SKalle Valo 			      0x03, 0x6f),
25458619b14SKalle Valo 		PHYREGS(0x03dd, 0x03d9, 0x03d5, 0x0424, 0x0429, 0x042d),
25558619b14SKalle Valo 	},
25658619b14SKalle Valo 	{
25758619b14SKalle Valo 		.freq			= 2467,
25858619b14SKalle Valo 		RADIOREGS7_2G(0x6c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xa3,
25958619b14SKalle Valo 			      0x09, 0x0b, 0x06, 0x0c, 0x61, 0x03, 0x5f, 0x61,
26058619b14SKalle Valo 			      0x03, 0x5f),
26158619b14SKalle Valo 		PHYREGS(0x03df, 0x03db, 0x03d7, 0x0422, 0x0427, 0x042b),
26258619b14SKalle Valo 	},
26358619b14SKalle Valo 	{
26458619b14SKalle Valo 		.freq			= 2472,
26558619b14SKalle Valo 		RADIOREGS7_2G(0x70, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xa8,
26658619b14SKalle Valo 			      0x09, 0x0a, 0x06, 0x0b, 0x61, 0x03, 0x4f, 0x61,
26758619b14SKalle Valo 			      0x03, 0x4f),
26858619b14SKalle Valo 		PHYREGS(0x03e1, 0x03dd, 0x03d9, 0x0420, 0x0424, 0x0429),
26958619b14SKalle Valo 	},
27058619b14SKalle Valo 	{
27158619b14SKalle Valo 		.freq			= 2484,
27258619b14SKalle Valo 		RADIOREGS7_2G(0x78, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xb4,
27358619b14SKalle Valo 			      0x09, 0x0a, 0x06, 0x0b, 0x61, 0x03, 0x3f, 0x61,
27458619b14SKalle Valo 			      0x03, 0x3f),
27558619b14SKalle Valo 		PHYREGS(0x03e6, 0x03e2, 0x03de, 0x041b, 0x041f, 0x0424),
27658619b14SKalle Valo 	}
27758619b14SKalle Valo };
27858619b14SKalle Valo 
27958619b14SKalle Valo /* Extracted from MMIO dump of 6.30.223.248 */
28058619b14SKalle Valo static const struct b43_nphy_chantabent_rev7_2g b43_nphy_chantab_phy_rev17_radio_rev14[] = {
28158619b14SKalle Valo 	{
28258619b14SKalle Valo 		.freq			= 2412,
28358619b14SKalle Valo 		RADIOREGS7_2G(0x48, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x6c,
28458619b14SKalle Valo 			      0x09, 0x0d, 0x09, 0x03, 0x21, 0x53, 0xff, 0x21,
28558619b14SKalle Valo 			      0x53, 0xff),
28658619b14SKalle Valo 		PHYREGS(0x03c9, 0x03c5, 0x03c1, 0x043a, 0x043f, 0x0443),
28758619b14SKalle Valo 	},
28858619b14SKalle Valo 	{
28958619b14SKalle Valo 		.freq			= 2417,
29058619b14SKalle Valo 		RADIOREGS7_2G(0x4b, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x71,
29158619b14SKalle Valo 			      0x09, 0x0d, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
29258619b14SKalle Valo 			      0x53, 0xff),
29358619b14SKalle Valo 		PHYREGS(0x03cb, 0x03c7, 0x03c3, 0x0438, 0x043d, 0x0441),
29458619b14SKalle Valo 	},
29558619b14SKalle Valo 	{
29658619b14SKalle Valo 		.freq			= 2422,
29758619b14SKalle Valo 		RADIOREGS7_2G(0x4e, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x76,
29858619b14SKalle Valo 			      0x09, 0x0d, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
29958619b14SKalle Valo 			      0x53, 0xff),
30058619b14SKalle Valo 		PHYREGS(0x03cd, 0x03c9, 0x03c5, 0x0436, 0x043a, 0x043f),
30158619b14SKalle Valo 	},
30258619b14SKalle Valo 	{
30358619b14SKalle Valo 		.freq			= 2427,
30458619b14SKalle Valo 		RADIOREGS7_2G(0x52, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x7b,
30558619b14SKalle Valo 			      0x09, 0x0c, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
30658619b14SKalle Valo 			      0x53, 0xff),
30758619b14SKalle Valo 		PHYREGS(0x03cf, 0x03cb, 0x03c7, 0x0434, 0x0438, 0x043d),
30858619b14SKalle Valo 	},
30958619b14SKalle Valo 	{
31058619b14SKalle Valo 		.freq			= 2432,
31158619b14SKalle Valo 		RADIOREGS7_2G(0x55, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x80,
31258619b14SKalle Valo 			      0x09, 0x0c, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
31358619b14SKalle Valo 			      0x53, 0xff),
31458619b14SKalle Valo 		PHYREGS(0x03d1, 0x03cd, 0x03c9, 0x0431, 0x0436, 0x043a),
31558619b14SKalle Valo 	},
31658619b14SKalle Valo 	{
31758619b14SKalle Valo 		.freq			= 2437,
31858619b14SKalle Valo 		RADIOREGS7_2G(0x58, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x85,
31958619b14SKalle Valo 			      0x09, 0x0c, 0x08, 0x03, 0x21, 0x53, 0xff, 0x21,
32058619b14SKalle Valo 			      0x53, 0xff),
32158619b14SKalle Valo 		PHYREGS(0x03d3, 0x03cf, 0x03cb, 0x042f, 0x0434, 0x0438),
32258619b14SKalle Valo 	},
32358619b14SKalle Valo 	{
32458619b14SKalle Valo 		.freq			= 2442,
32558619b14SKalle Valo 		RADIOREGS7_2G(0x5c, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x8a,
32658619b14SKalle Valo 			      0x09, 0x0c, 0x08, 0x03, 0x21, 0x43, 0xff, 0x21,
32758619b14SKalle Valo 			      0x43, 0xff),
32858619b14SKalle Valo 		PHYREGS(0x03d5, 0x03d1, 0x03cd, 0x042d, 0x0431, 0x0436),
32958619b14SKalle Valo 	},
33058619b14SKalle Valo 	{
33158619b14SKalle Valo 		.freq			= 2447,
33258619b14SKalle Valo 		RADIOREGS7_2G(0x5f, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x8f,
33358619b14SKalle Valo 			      0x09, 0x0c, 0x08, 0x03, 0x21, 0x43, 0xff, 0x21,
33458619b14SKalle Valo 			      0x43, 0xff),
33558619b14SKalle Valo 		PHYREGS(0x03d7, 0x03d3, 0x03cf, 0x042b, 0x042f, 0x0434),
33658619b14SKalle Valo 	},
33758619b14SKalle Valo 	{
33858619b14SKalle Valo 		.freq			= 2452,
33958619b14SKalle Valo 		RADIOREGS7_2G(0x62, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x94,
34058619b14SKalle Valo 			      0x09, 0x0c, 0x08, 0x03, 0x21, 0x43, 0xff, 0x21,
34158619b14SKalle Valo 			      0x43, 0xff),
34258619b14SKalle Valo 		PHYREGS(0x03d9, 0x03d5, 0x03d1, 0x0429, 0x042d, 0x0431),
34358619b14SKalle Valo 	},
34458619b14SKalle Valo 	{
34558619b14SKalle Valo 		.freq			= 2457,
34658619b14SKalle Valo 		RADIOREGS7_2G(0x66, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x99,
34758619b14SKalle Valo 			      0x09, 0x0b, 0x07, 0x03, 0x21, 0x43, 0xff, 0x21,
34858619b14SKalle Valo 			      0x43, 0xff),
34958619b14SKalle Valo 		PHYREGS(0x03db, 0x03d7, 0x03d3, 0x0427, 0x042b, 0x042f),
35058619b14SKalle Valo 	},
35158619b14SKalle Valo 	{
35258619b14SKalle Valo 		.freq			= 2462,
35358619b14SKalle Valo 		RADIOREGS7_2G(0x69, 0x16, 0x30, 0x2b, 0x1f, 0x1f, 0x30, 0x9e,
35458619b14SKalle Valo 			      0x09, 0x0b, 0x07, 0x03, 0x01, 0x43, 0xff, 0x01,
35558619b14SKalle Valo 			      0x43, 0xff),
35658619b14SKalle Valo 		PHYREGS(0x03dd, 0x03d9, 0x03d5, 0x0424, 0x0429, 0x042d),
35758619b14SKalle Valo 	},
35858619b14SKalle Valo };
35958619b14SKalle Valo 
36058619b14SKalle Valo /* Extracted from MMIO dump of 6.30.223.141 */
36158619b14SKalle Valo static const struct b43_nphy_chantabent_rev7 b43_nphy_chantab_phy_rev16_radio_rev9[] = {
36258619b14SKalle Valo 	{
36358619b14SKalle Valo 		.freq			= 2412,
36458619b14SKalle Valo 		RADIOREGS7(0x48, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x6c,
36558619b14SKalle Valo 			   0x09, 0x0f, 0x0a, 0x00, 0x0a, 0x00, 0x41, 0x63,
36658619b14SKalle Valo 			   0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
36758619b14SKalle Valo 			   0x00, 0x00, 0xf0, 0x00),
36858619b14SKalle Valo 		PHYREGS(0x03c9, 0x03c5, 0x03c1, 0x043a, 0x043f, 0x0443),
36958619b14SKalle Valo 	},
37058619b14SKalle Valo 	{
37158619b14SKalle Valo 		.freq			= 2417,
37258619b14SKalle Valo 		RADIOREGS7(0x4b, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x71,
37358619b14SKalle Valo 			   0x09, 0x0f, 0x0a, 0x00, 0x0a, 0x00, 0x41, 0x63,
37458619b14SKalle Valo 			   0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
37558619b14SKalle Valo 			   0x00, 0x00, 0xf0, 0x00),
37658619b14SKalle Valo 		PHYREGS(0x03cb, 0x03c7, 0x03c3, 0x0438, 0x043d, 0x0441),
37758619b14SKalle Valo 	},
37858619b14SKalle Valo 	{
37958619b14SKalle Valo 		.freq			= 2422,
38058619b14SKalle Valo 		RADIOREGS7(0x4e, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x76,
38158619b14SKalle Valo 			   0x09, 0x0f, 0x09, 0x00, 0x09, 0x00, 0x41, 0x63,
38258619b14SKalle Valo 			   0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
38358619b14SKalle Valo 			   0x00, 0x00, 0xf0, 0x00),
38458619b14SKalle Valo 		PHYREGS(0x03cd, 0x03c9, 0x03c5, 0x0436, 0x043a, 0x043f),
38558619b14SKalle Valo 	},
38658619b14SKalle Valo 	{
38758619b14SKalle Valo 		.freq			= 2427,
38858619b14SKalle Valo 		RADIOREGS7(0x52, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x7b,
38958619b14SKalle Valo 			   0x09, 0x0f, 0x09, 0x00, 0x09, 0x00, 0x41, 0x63,
39058619b14SKalle Valo 			   0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
39158619b14SKalle Valo 			   0x00, 0x00, 0xf0, 0x00),
39258619b14SKalle Valo 		PHYREGS(0x03cf, 0x03cb, 0x03c7, 0x0434, 0x0438, 0x043d),
39358619b14SKalle Valo 	},
39458619b14SKalle Valo 	{
39558619b14SKalle Valo 		.freq			= 2432,
39658619b14SKalle Valo 		RADIOREGS7(0x55, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x80,
39758619b14SKalle Valo 			   0x09, 0x0f, 0x08, 0x00, 0x08, 0x00, 0x41, 0x63,
39858619b14SKalle Valo 			   0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
39958619b14SKalle Valo 			   0x00, 0x00, 0xf0, 0x00),
40058619b14SKalle Valo 		PHYREGS(0x03d1, 0x03cd, 0x03c9, 0x0431, 0x0436, 0x043a),
40158619b14SKalle Valo 	},
40258619b14SKalle Valo 	{
40358619b14SKalle Valo 		.freq			= 2437,
40458619b14SKalle Valo 		RADIOREGS7(0x58, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x85,
40558619b14SKalle Valo 			   0x09, 0x0f, 0x08, 0x00, 0x08, 0x00, 0x41, 0x63,
40658619b14SKalle Valo 			   0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
40758619b14SKalle Valo 			   0x00, 0x00, 0xf0, 0x00),
40858619b14SKalle Valo 		PHYREGS(0x03d3, 0x03cf, 0x03cb, 0x042f, 0x0434, 0x0438),
40958619b14SKalle Valo 	},
41058619b14SKalle Valo 	{
41158619b14SKalle Valo 		.freq			= 2442,
41258619b14SKalle Valo 		RADIOREGS7(0x5c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8a,
41358619b14SKalle Valo 			   0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x41, 0x63,
41458619b14SKalle Valo 			   0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
41558619b14SKalle Valo 			   0x00, 0x00, 0xf0, 0x00),
41658619b14SKalle Valo 		PHYREGS(0x03d5, 0x03d1, 0x03cd, 0x042d, 0x0431, 0x0436),
41758619b14SKalle Valo 	},
41858619b14SKalle Valo 	{
41958619b14SKalle Valo 		.freq			= 2447,
42058619b14SKalle Valo 		RADIOREGS7(0x5f, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8f,
42158619b14SKalle Valo 			   0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x41, 0x63,
42258619b14SKalle Valo 			   0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
42358619b14SKalle Valo 			   0x00, 0x00, 0xf0, 0x00),
42458619b14SKalle Valo 		PHYREGS(0x03d7, 0x03d3, 0x03cf, 0x042b, 0x042f, 0x0434),
42558619b14SKalle Valo 	},
42658619b14SKalle Valo 	{
42758619b14SKalle Valo 		.freq			= 2452,
42858619b14SKalle Valo 		RADIOREGS7(0x62, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x94,
42958619b14SKalle Valo 			   0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x41, 0x63,
43058619b14SKalle Valo 			   0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
43158619b14SKalle Valo 			   0x00, 0x00, 0xf0, 0x00),
43258619b14SKalle Valo 		PHYREGS(0x03d9, 0x03d5, 0x03d1, 0x0429, 0x042d, 0x0431),
43358619b14SKalle Valo 	},
43458619b14SKalle Valo 	{
43558619b14SKalle Valo 		.freq			= 2457,
43658619b14SKalle Valo 		RADIOREGS7(0x66, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x99,
43758619b14SKalle Valo 			   0x09, 0x0f, 0x06, 0x00, 0x06, 0x00, 0x41, 0x63,
43858619b14SKalle Valo 			   0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
43958619b14SKalle Valo 			   0x00, 0x00, 0xf0, 0x00),
44058619b14SKalle Valo 		PHYREGS(0x03db, 0x03d7, 0x03d3, 0x0427, 0x042b, 0x042f),
44158619b14SKalle Valo 	},
44258619b14SKalle Valo 	{
44358619b14SKalle Valo 		.freq			= 2462,
44458619b14SKalle Valo 		RADIOREGS7(0x69, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x9e,
44558619b14SKalle Valo 			   0x09, 0x0f, 0x06, 0x00, 0x06, 0x00, 0x41, 0x63,
44658619b14SKalle Valo 			   0x00, 0x00, 0x00, 0xf0, 0x00, 0x41, 0x63, 0x00,
44758619b14SKalle Valo 			   0x00, 0x00, 0xf0, 0x00),
44858619b14SKalle Valo 		PHYREGS(0x03dd, 0x03d9, 0x03d5, 0x0424, 0x0429, 0x042d),
44958619b14SKalle Valo 	},
45058619b14SKalle Valo 	{
45158619b14SKalle Valo 		.freq			= 5180,
45258619b14SKalle Valo 		RADIOREGS7(0xbe, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x06,
45358619b14SKalle Valo 			   0x02, 0x0e, 0x00, 0x0e, 0x00, 0x9e, 0x00, 0x00,
45458619b14SKalle Valo 			   0x9f, 0x2f, 0xa3, 0x00, 0xfc, 0x00, 0x00, 0x4f,
45558619b14SKalle Valo 			   0x3a, 0x83, 0x00, 0xfc),
45658619b14SKalle Valo 		PHYREGS(0x081c, 0x0818, 0x0814, 0x01f9, 0x01fa, 0x01fb),
45758619b14SKalle Valo 	},
45858619b14SKalle Valo 	{
45958619b14SKalle Valo 		.freq			= 5200,
46058619b14SKalle Valo 		RADIOREGS7(0xc5, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x08,
46158619b14SKalle Valo 			   0x02, 0x0e, 0x00, 0x0e, 0x00, 0x9e, 0x00, 0x00,
46258619b14SKalle Valo 			   0x7f, 0x2f, 0x83, 0x00, 0xf8, 0x00, 0x00, 0x4c,
46358619b14SKalle Valo 			   0x4a, 0x83, 0x00, 0xf8),
46458619b14SKalle Valo 		PHYREGS(0x0824, 0x0820, 0x081c, 0x01f7, 0x01f8, 0x01f9),
46558619b14SKalle Valo 	},
46658619b14SKalle Valo 	{
46758619b14SKalle Valo 		.freq			= 5220,
46858619b14SKalle Valo 		RADIOREGS7(0xcc, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x0a,
46958619b14SKalle Valo 			   0x02, 0x0e, 0x00, 0x0e, 0x00, 0x9e, 0x00, 0x00,
47058619b14SKalle Valo 			   0x6d, 0x3d, 0x83, 0x00, 0xf8, 0x00, 0x00, 0x2d,
47158619b14SKalle Valo 			   0x2a, 0x73, 0x00, 0xf8),
47258619b14SKalle Valo 		PHYREGS(0x082c, 0x0828, 0x0824, 0x01f5, 0x01f6, 0x01f7),
47358619b14SKalle Valo 	},
47458619b14SKalle Valo 	{
47558619b14SKalle Valo 		.freq			= 5240,
47658619b14SKalle Valo 		RADIOREGS7(0xd2, 0x16, 0x10, 0x1f, 0x08, 0x08, 0x3f, 0x0c,
47758619b14SKalle Valo 			   0x02, 0x0d, 0x00, 0x0d, 0x00, 0x8d, 0x00, 0x00,
47858619b14SKalle Valo 			   0x4d, 0x1c, 0x73, 0x00, 0xf8, 0x00, 0x00, 0x4d,
47958619b14SKalle Valo 			   0x2b, 0x73, 0x00, 0xf8),
48058619b14SKalle Valo 		PHYREGS(0x0834, 0x0830, 0x082c, 0x01f3, 0x01f4, 0x01f5),
48158619b14SKalle Valo 	},
48258619b14SKalle Valo 	{
48358619b14SKalle Valo 		.freq			= 5745,
48458619b14SKalle Valo 		RADIOREGS7(0x7b, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x7d,
48558619b14SKalle Valo 			   0x04, 0x08, 0x00, 0x06, 0x00, 0x15, 0x00, 0x00,
48658619b14SKalle Valo 			   0x08, 0x03, 0x03, 0x00, 0x30, 0x00, 0x00, 0x06,
48758619b14SKalle Valo 			   0x02, 0x03, 0x00, 0x30),
48858619b14SKalle Valo 		PHYREGS(0x08fe, 0x08fa, 0x08f6, 0x01c8, 0x01c8, 0x01c9),
48958619b14SKalle Valo 	},
49058619b14SKalle Valo 	{
49158619b14SKalle Valo 		.freq			= 5765,
49258619b14SKalle Valo 		RADIOREGS7(0x81, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x81,
49358619b14SKalle Valo 			   0x04, 0x08, 0x00, 0x06, 0x00, 0x15, 0x00, 0x00,
49458619b14SKalle Valo 			   0x06, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x05,
49558619b14SKalle Valo 			   0x02, 0x03, 0x00, 0x00),
49658619b14SKalle Valo 		PHYREGS(0x0906, 0x0902, 0x08fe, 0x01c6, 0x01c7, 0x01c8),
49758619b14SKalle Valo 	},
49858619b14SKalle Valo 	{
49958619b14SKalle Valo 		.freq			= 5785,
50058619b14SKalle Valo 		RADIOREGS7(0x88, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x85,
50158619b14SKalle Valo 			   0x04, 0x08, 0x00, 0x06, 0x00, 0x15, 0x00, 0x00,
50258619b14SKalle Valo 			   0x08, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x05,
50358619b14SKalle Valo 			   0x21, 0x03, 0x00, 0x00),
50458619b14SKalle Valo 		PHYREGS(0x090e, 0x090a, 0x0906, 0x01c4, 0x01c5, 0x01c6),
50558619b14SKalle Valo 	},
50658619b14SKalle Valo 	{
50758619b14SKalle Valo 		.freq			= 5805,
50858619b14SKalle Valo 		RADIOREGS7(0x8f, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x89,
50958619b14SKalle Valo 			   0x04, 0x07, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00,
51058619b14SKalle Valo 			   0x06, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03,
51158619b14SKalle Valo 			   0x00, 0x03, 0x00, 0x00),
51258619b14SKalle Valo 		PHYREGS(0x0916, 0x0912, 0x090e, 0x01c3, 0x01c4, 0x01c4),
51358619b14SKalle Valo 	},
51458619b14SKalle Valo 	{
51558619b14SKalle Valo 		.freq			= 5825,
51658619b14SKalle Valo 		RADIOREGS7(0x95, 0x17, 0x20, 0x1f, 0x08, 0x08, 0x3f, 0x8d,
51758619b14SKalle Valo 			   0x04, 0x07, 0x00, 0x05, 0x00, 0x03, 0x00, 0x00,
51858619b14SKalle Valo 			   0x05, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03,
51958619b14SKalle Valo 			   0x00, 0x03, 0x00, 0x00),
52058619b14SKalle Valo 		PHYREGS(0x091e, 0x091a, 0x0916, 0x01c1, 0x01c2, 0x01c3),
52158619b14SKalle Valo 	},
52258619b14SKalle Valo };
52358619b14SKalle Valo 
r2057_upload_inittabs(struct b43_wldev * dev)52458619b14SKalle Valo void r2057_upload_inittabs(struct b43_wldev *dev)
52558619b14SKalle Valo {
52658619b14SKalle Valo 	struct b43_phy *phy = &dev->phy;
52758619b14SKalle Valo 	u16 *table = NULL;
52858619b14SKalle Valo 	u16 size, i;
52958619b14SKalle Valo 
53058619b14SKalle Valo 	switch (phy->rev) {
53158619b14SKalle Valo 	case 7:
53258619b14SKalle Valo 		table = r2057_rev4_init[0];
53358619b14SKalle Valo 		size = ARRAY_SIZE(r2057_rev4_init);
53458619b14SKalle Valo 		break;
53558619b14SKalle Valo 	case 8:
53658619b14SKalle Valo 		if (phy->radio_rev == 5) {
53758619b14SKalle Valo 			table = r2057_rev5_init[0];
53858619b14SKalle Valo 			size = ARRAY_SIZE(r2057_rev5_init);
53958619b14SKalle Valo 		} else if (phy->radio_rev == 7) {
54058619b14SKalle Valo 			table = r2057_rev7_init[0];
54158619b14SKalle Valo 			size = ARRAY_SIZE(r2057_rev7_init);
54258619b14SKalle Valo 		}
54358619b14SKalle Valo 		break;
54458619b14SKalle Valo 	case 9:
54558619b14SKalle Valo 		if (phy->radio_rev == 5) {
54658619b14SKalle Valo 			table = r2057_rev5a_init[0];
54758619b14SKalle Valo 			size = ARRAY_SIZE(r2057_rev5a_init);
54858619b14SKalle Valo 		}
54958619b14SKalle Valo 		break;
55058619b14SKalle Valo 	case 16:
55158619b14SKalle Valo 		if (phy->radio_rev == 9) {
55258619b14SKalle Valo 			table = r2057_rev9_init[0];
55358619b14SKalle Valo 			size = ARRAY_SIZE(r2057_rev9_init);
55458619b14SKalle Valo 		}
55558619b14SKalle Valo 		break;
55658619b14SKalle Valo 	case 17:
55758619b14SKalle Valo 		if (phy->radio_rev == 14) {
55858619b14SKalle Valo 			table = r2057_rev14_init[0];
55958619b14SKalle Valo 			size = ARRAY_SIZE(r2057_rev14_init);
56058619b14SKalle Valo 		}
56158619b14SKalle Valo 		break;
56258619b14SKalle Valo 	}
56358619b14SKalle Valo 
56458619b14SKalle Valo 	B43_WARN_ON(!table);
56558619b14SKalle Valo 
56658619b14SKalle Valo 	if (table) {
56758619b14SKalle Valo 		for (i = 0; i < size; i++, table += 2)
56858619b14SKalle Valo 			b43_radio_write(dev, table[0], table[1]);
56958619b14SKalle Valo 	}
57058619b14SKalle Valo }
57158619b14SKalle Valo 
r2057_get_chantabent_rev7(struct b43_wldev * dev,u16 freq,const struct b43_nphy_chantabent_rev7 ** tabent_r7,const struct b43_nphy_chantabent_rev7_2g ** tabent_r7_2g)57258619b14SKalle Valo void r2057_get_chantabent_rev7(struct b43_wldev *dev, u16 freq,
57358619b14SKalle Valo 			       const struct b43_nphy_chantabent_rev7 **tabent_r7,
57458619b14SKalle Valo 			       const struct b43_nphy_chantabent_rev7_2g **tabent_r7_2g)
57558619b14SKalle Valo {
57658619b14SKalle Valo 	struct b43_phy *phy = &dev->phy;
57758619b14SKalle Valo 	const struct b43_nphy_chantabent_rev7 *e_r7 = NULL;
57858619b14SKalle Valo 	const struct b43_nphy_chantabent_rev7_2g *e_r7_2g = NULL;
57958619b14SKalle Valo 	unsigned int len, i;
58058619b14SKalle Valo 
58158619b14SKalle Valo 	*tabent_r7 = NULL;
58258619b14SKalle Valo 	*tabent_r7_2g = NULL;
58358619b14SKalle Valo 
58458619b14SKalle Valo 	switch (phy->rev) {
58558619b14SKalle Valo 	case 8:
58658619b14SKalle Valo 		if (phy->radio_rev == 5) {
58758619b14SKalle Valo 			e_r7_2g = b43_nphy_chantab_phy_rev8_radio_rev5;
58858619b14SKalle Valo 			len = ARRAY_SIZE(b43_nphy_chantab_phy_rev8_radio_rev5);
58958619b14SKalle Valo 		}
59058619b14SKalle Valo 		break;
59158619b14SKalle Valo 	case 16:
59258619b14SKalle Valo 		if (phy->radio_rev == 9) {
59358619b14SKalle Valo 			e_r7 = b43_nphy_chantab_phy_rev16_radio_rev9;
59458619b14SKalle Valo 			len = ARRAY_SIZE(b43_nphy_chantab_phy_rev16_radio_rev9);
59558619b14SKalle Valo 		}
59658619b14SKalle Valo 		break;
59758619b14SKalle Valo 	case 17:
59858619b14SKalle Valo 		if (phy->radio_rev == 14) {
59958619b14SKalle Valo 			e_r7_2g = b43_nphy_chantab_phy_rev17_radio_rev14;
60058619b14SKalle Valo 			len = ARRAY_SIZE(b43_nphy_chantab_phy_rev17_radio_rev14);
60158619b14SKalle Valo 		}
60258619b14SKalle Valo 		break;
60358619b14SKalle Valo 	default:
60458619b14SKalle Valo 		break;
60558619b14SKalle Valo 	}
60658619b14SKalle Valo 
60758619b14SKalle Valo 	if (e_r7) {
60858619b14SKalle Valo 		for (i = 0; i < len; i++, e_r7++) {
60958619b14SKalle Valo 			if (e_r7->freq == freq) {
61058619b14SKalle Valo 				*tabent_r7 = e_r7;
61158619b14SKalle Valo 				return;
61258619b14SKalle Valo 			}
61358619b14SKalle Valo 		}
61458619b14SKalle Valo 	} else if (e_r7_2g) {
61558619b14SKalle Valo 		for (i = 0; i < len; i++, e_r7_2g++) {
61658619b14SKalle Valo 			if (e_r7_2g->freq == freq) {
61758619b14SKalle Valo 				*tabent_r7_2g = e_r7_2g;
61858619b14SKalle Valo 				return;
61958619b14SKalle Valo 			}
62058619b14SKalle Valo 		}
62158619b14SKalle Valo 	} else {
62258619b14SKalle Valo 		B43_WARN_ON(1);
62358619b14SKalle Valo 	}
62458619b14SKalle Valo }
625