1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * (c) Copyright 2002-2010, Ralink Technology, Inc. 4*4882a593Smuzhiyun * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl> 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #ifndef __MT7601U_PHY_INITVALS_H 8*4882a593Smuzhiyun #define __MT7601U_PHY_INITVALS_H 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #define RF_REG_PAIR(bank, reg, value) \ 11*4882a593Smuzhiyun { MT_MCU_MEMMAP_RF | (bank) << 16 | (reg), value } 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun static const struct mt76_reg_pair rf_central[] = { 14*4882a593Smuzhiyun /* Bank 0 - for central blocks: BG, PLL, XTAL, LO, ADC/DAC */ 15*4882a593Smuzhiyun RF_REG_PAIR(0, 0, 0x02), 16*4882a593Smuzhiyun RF_REG_PAIR(0, 1, 0x01), 17*4882a593Smuzhiyun RF_REG_PAIR(0, 2, 0x11), 18*4882a593Smuzhiyun RF_REG_PAIR(0, 3, 0xff), 19*4882a593Smuzhiyun RF_REG_PAIR(0, 4, 0x0a), 20*4882a593Smuzhiyun RF_REG_PAIR(0, 5, 0x20), 21*4882a593Smuzhiyun RF_REG_PAIR(0, 6, 0x00), 22*4882a593Smuzhiyun /* B/G */ 23*4882a593Smuzhiyun RF_REG_PAIR(0, 7, 0x00), 24*4882a593Smuzhiyun RF_REG_PAIR(0, 8, 0x00), 25*4882a593Smuzhiyun RF_REG_PAIR(0, 9, 0x00), 26*4882a593Smuzhiyun RF_REG_PAIR(0, 10, 0x00), 27*4882a593Smuzhiyun RF_REG_PAIR(0, 11, 0x21), 28*4882a593Smuzhiyun /* XO */ 29*4882a593Smuzhiyun RF_REG_PAIR(0, 13, 0x00), /* 40mhz xtal */ 30*4882a593Smuzhiyun /* RF_REG_PAIR(0, 13, 0x13), */ /* 20mhz xtal */ 31*4882a593Smuzhiyun RF_REG_PAIR(0, 14, 0x7c), 32*4882a593Smuzhiyun RF_REG_PAIR(0, 15, 0x22), 33*4882a593Smuzhiyun RF_REG_PAIR(0, 16, 0x80), 34*4882a593Smuzhiyun /* PLL */ 35*4882a593Smuzhiyun RF_REG_PAIR(0, 17, 0x99), 36*4882a593Smuzhiyun RF_REG_PAIR(0, 18, 0x99), 37*4882a593Smuzhiyun RF_REG_PAIR(0, 19, 0x09), 38*4882a593Smuzhiyun RF_REG_PAIR(0, 20, 0x50), 39*4882a593Smuzhiyun RF_REG_PAIR(0, 21, 0xb0), 40*4882a593Smuzhiyun RF_REG_PAIR(0, 22, 0x00), 41*4882a593Smuzhiyun RF_REG_PAIR(0, 23, 0xc5), 42*4882a593Smuzhiyun RF_REG_PAIR(0, 24, 0xfc), 43*4882a593Smuzhiyun RF_REG_PAIR(0, 25, 0x40), 44*4882a593Smuzhiyun RF_REG_PAIR(0, 26, 0x4d), 45*4882a593Smuzhiyun RF_REG_PAIR(0, 27, 0x02), 46*4882a593Smuzhiyun RF_REG_PAIR(0, 28, 0x72), 47*4882a593Smuzhiyun RF_REG_PAIR(0, 29, 0x01), 48*4882a593Smuzhiyun RF_REG_PAIR(0, 30, 0x00), 49*4882a593Smuzhiyun RF_REG_PAIR(0, 31, 0x00), 50*4882a593Smuzhiyun /* test ports */ 51*4882a593Smuzhiyun RF_REG_PAIR(0, 32, 0x00), 52*4882a593Smuzhiyun RF_REG_PAIR(0, 33, 0x00), 53*4882a593Smuzhiyun RF_REG_PAIR(0, 34, 0x23), 54*4882a593Smuzhiyun RF_REG_PAIR(0, 35, 0x01), /* change setting to reduce spurs */ 55*4882a593Smuzhiyun RF_REG_PAIR(0, 36, 0x00), 56*4882a593Smuzhiyun RF_REG_PAIR(0, 37, 0x00), 57*4882a593Smuzhiyun /* ADC/DAC */ 58*4882a593Smuzhiyun RF_REG_PAIR(0, 38, 0x00), 59*4882a593Smuzhiyun RF_REG_PAIR(0, 39, 0x20), 60*4882a593Smuzhiyun RF_REG_PAIR(0, 40, 0x00), 61*4882a593Smuzhiyun RF_REG_PAIR(0, 41, 0xd0), 62*4882a593Smuzhiyun RF_REG_PAIR(0, 42, 0x1b), 63*4882a593Smuzhiyun RF_REG_PAIR(0, 43, 0x02), 64*4882a593Smuzhiyun RF_REG_PAIR(0, 44, 0x00), 65*4882a593Smuzhiyun }; 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun static const struct mt76_reg_pair rf_channel[] = { 68*4882a593Smuzhiyun RF_REG_PAIR(4, 0, 0x01), 69*4882a593Smuzhiyun RF_REG_PAIR(4, 1, 0x00), 70*4882a593Smuzhiyun RF_REG_PAIR(4, 2, 0x00), 71*4882a593Smuzhiyun RF_REG_PAIR(4, 3, 0x00), 72*4882a593Smuzhiyun /* LDO */ 73*4882a593Smuzhiyun RF_REG_PAIR(4, 4, 0x00), 74*4882a593Smuzhiyun RF_REG_PAIR(4, 5, 0x08), 75*4882a593Smuzhiyun RF_REG_PAIR(4, 6, 0x00), 76*4882a593Smuzhiyun /* RX */ 77*4882a593Smuzhiyun RF_REG_PAIR(4, 7, 0x5b), 78*4882a593Smuzhiyun RF_REG_PAIR(4, 8, 0x52), 79*4882a593Smuzhiyun RF_REG_PAIR(4, 9, 0xb6), 80*4882a593Smuzhiyun RF_REG_PAIR(4, 10, 0x57), 81*4882a593Smuzhiyun RF_REG_PAIR(4, 11, 0x33), 82*4882a593Smuzhiyun RF_REG_PAIR(4, 12, 0x22), 83*4882a593Smuzhiyun RF_REG_PAIR(4, 13, 0x3d), 84*4882a593Smuzhiyun RF_REG_PAIR(4, 14, 0x3e), 85*4882a593Smuzhiyun RF_REG_PAIR(4, 15, 0x13), 86*4882a593Smuzhiyun RF_REG_PAIR(4, 16, 0x22), 87*4882a593Smuzhiyun RF_REG_PAIR(4, 17, 0x23), 88*4882a593Smuzhiyun RF_REG_PAIR(4, 18, 0x02), 89*4882a593Smuzhiyun RF_REG_PAIR(4, 19, 0xa4), 90*4882a593Smuzhiyun RF_REG_PAIR(4, 20, 0x01), 91*4882a593Smuzhiyun RF_REG_PAIR(4, 21, 0x12), 92*4882a593Smuzhiyun RF_REG_PAIR(4, 22, 0x80), 93*4882a593Smuzhiyun RF_REG_PAIR(4, 23, 0xb3), 94*4882a593Smuzhiyun RF_REG_PAIR(4, 24, 0x00), /* reserved */ 95*4882a593Smuzhiyun RF_REG_PAIR(4, 25, 0x00), /* reserved */ 96*4882a593Smuzhiyun RF_REG_PAIR(4, 26, 0x00), /* reserved */ 97*4882a593Smuzhiyun RF_REG_PAIR(4, 27, 0x00), /* reserved */ 98*4882a593Smuzhiyun /* LOGEN */ 99*4882a593Smuzhiyun RF_REG_PAIR(4, 28, 0x18), 100*4882a593Smuzhiyun RF_REG_PAIR(4, 29, 0xee), 101*4882a593Smuzhiyun RF_REG_PAIR(4, 30, 0x6b), 102*4882a593Smuzhiyun RF_REG_PAIR(4, 31, 0x31), 103*4882a593Smuzhiyun RF_REG_PAIR(4, 32, 0x5d), 104*4882a593Smuzhiyun RF_REG_PAIR(4, 33, 0x00), /* reserved */ 105*4882a593Smuzhiyun /* TX */ 106*4882a593Smuzhiyun RF_REG_PAIR(4, 34, 0x96), 107*4882a593Smuzhiyun RF_REG_PAIR(4, 35, 0x55), 108*4882a593Smuzhiyun RF_REG_PAIR(4, 36, 0x08), 109*4882a593Smuzhiyun RF_REG_PAIR(4, 37, 0xbb), 110*4882a593Smuzhiyun RF_REG_PAIR(4, 38, 0xb3), 111*4882a593Smuzhiyun RF_REG_PAIR(4, 39, 0xb3), 112*4882a593Smuzhiyun RF_REG_PAIR(4, 40, 0x03), 113*4882a593Smuzhiyun RF_REG_PAIR(4, 41, 0x00), /* reserved */ 114*4882a593Smuzhiyun RF_REG_PAIR(4, 42, 0x00), /* reserved */ 115*4882a593Smuzhiyun RF_REG_PAIR(4, 43, 0xc5), 116*4882a593Smuzhiyun RF_REG_PAIR(4, 44, 0xc5), 117*4882a593Smuzhiyun RF_REG_PAIR(4, 45, 0xc5), 118*4882a593Smuzhiyun RF_REG_PAIR(4, 46, 0x07), 119*4882a593Smuzhiyun RF_REG_PAIR(4, 47, 0xa8), 120*4882a593Smuzhiyun RF_REG_PAIR(4, 48, 0xef), 121*4882a593Smuzhiyun RF_REG_PAIR(4, 49, 0x1a), 122*4882a593Smuzhiyun /* PA */ 123*4882a593Smuzhiyun RF_REG_PAIR(4, 54, 0x07), 124*4882a593Smuzhiyun RF_REG_PAIR(4, 55, 0xa7), 125*4882a593Smuzhiyun RF_REG_PAIR(4, 56, 0xcc), 126*4882a593Smuzhiyun RF_REG_PAIR(4, 57, 0x14), 127*4882a593Smuzhiyun RF_REG_PAIR(4, 58, 0x07), 128*4882a593Smuzhiyun RF_REG_PAIR(4, 59, 0xa8), 129*4882a593Smuzhiyun RF_REG_PAIR(4, 60, 0xd7), 130*4882a593Smuzhiyun RF_REG_PAIR(4, 61, 0x10), 131*4882a593Smuzhiyun RF_REG_PAIR(4, 62, 0x1c), 132*4882a593Smuzhiyun RF_REG_PAIR(4, 63, 0x00), /* reserved */ 133*4882a593Smuzhiyun }; 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun static const struct mt76_reg_pair rf_vga[] = { 136*4882a593Smuzhiyun RF_REG_PAIR(5, 0, 0x47), 137*4882a593Smuzhiyun RF_REG_PAIR(5, 1, 0x00), 138*4882a593Smuzhiyun RF_REG_PAIR(5, 2, 0x00), 139*4882a593Smuzhiyun RF_REG_PAIR(5, 3, 0x08), 140*4882a593Smuzhiyun RF_REG_PAIR(5, 4, 0x04), 141*4882a593Smuzhiyun RF_REG_PAIR(5, 5, 0x20), 142*4882a593Smuzhiyun RF_REG_PAIR(5, 6, 0x3a), 143*4882a593Smuzhiyun RF_REG_PAIR(5, 7, 0x3a), 144*4882a593Smuzhiyun RF_REG_PAIR(5, 8, 0x00), 145*4882a593Smuzhiyun RF_REG_PAIR(5, 9, 0x00), 146*4882a593Smuzhiyun RF_REG_PAIR(5, 10, 0x10), 147*4882a593Smuzhiyun RF_REG_PAIR(5, 11, 0x10), 148*4882a593Smuzhiyun RF_REG_PAIR(5, 12, 0x10), 149*4882a593Smuzhiyun RF_REG_PAIR(5, 13, 0x10), 150*4882a593Smuzhiyun RF_REG_PAIR(5, 14, 0x10), 151*4882a593Smuzhiyun RF_REG_PAIR(5, 15, 0x20), 152*4882a593Smuzhiyun RF_REG_PAIR(5, 16, 0x22), 153*4882a593Smuzhiyun RF_REG_PAIR(5, 17, 0x7c), 154*4882a593Smuzhiyun RF_REG_PAIR(5, 18, 0x00), 155*4882a593Smuzhiyun RF_REG_PAIR(5, 19, 0x00), 156*4882a593Smuzhiyun RF_REG_PAIR(5, 20, 0x00), 157*4882a593Smuzhiyun RF_REG_PAIR(5, 21, 0xf1), 158*4882a593Smuzhiyun RF_REG_PAIR(5, 22, 0x11), 159*4882a593Smuzhiyun RF_REG_PAIR(5, 23, 0x02), 160*4882a593Smuzhiyun RF_REG_PAIR(5, 24, 0x41), 161*4882a593Smuzhiyun RF_REG_PAIR(5, 25, 0x20), 162*4882a593Smuzhiyun RF_REG_PAIR(5, 26, 0x00), 163*4882a593Smuzhiyun RF_REG_PAIR(5, 27, 0xd7), 164*4882a593Smuzhiyun RF_REG_PAIR(5, 28, 0xa2), 165*4882a593Smuzhiyun RF_REG_PAIR(5, 29, 0x20), 166*4882a593Smuzhiyun RF_REG_PAIR(5, 30, 0x49), 167*4882a593Smuzhiyun RF_REG_PAIR(5, 31, 0x20), 168*4882a593Smuzhiyun RF_REG_PAIR(5, 32, 0x04), 169*4882a593Smuzhiyun RF_REG_PAIR(5, 33, 0xf1), 170*4882a593Smuzhiyun RF_REG_PAIR(5, 34, 0xa1), 171*4882a593Smuzhiyun RF_REG_PAIR(5, 35, 0x01), 172*4882a593Smuzhiyun RF_REG_PAIR(5, 41, 0x00), 173*4882a593Smuzhiyun RF_REG_PAIR(5, 42, 0x00), 174*4882a593Smuzhiyun RF_REG_PAIR(5, 43, 0x00), 175*4882a593Smuzhiyun RF_REG_PAIR(5, 44, 0x00), 176*4882a593Smuzhiyun RF_REG_PAIR(5, 45, 0x00), 177*4882a593Smuzhiyun RF_REG_PAIR(5, 46, 0x00), 178*4882a593Smuzhiyun RF_REG_PAIR(5, 47, 0x00), 179*4882a593Smuzhiyun RF_REG_PAIR(5, 48, 0x00), 180*4882a593Smuzhiyun RF_REG_PAIR(5, 49, 0x00), 181*4882a593Smuzhiyun RF_REG_PAIR(5, 50, 0x00), 182*4882a593Smuzhiyun RF_REG_PAIR(5, 51, 0x00), 183*4882a593Smuzhiyun RF_REG_PAIR(5, 52, 0x00), 184*4882a593Smuzhiyun RF_REG_PAIR(5, 53, 0x00), 185*4882a593Smuzhiyun RF_REG_PAIR(5, 54, 0x00), 186*4882a593Smuzhiyun RF_REG_PAIR(5, 55, 0x00), 187*4882a593Smuzhiyun RF_REG_PAIR(5, 56, 0x00), 188*4882a593Smuzhiyun RF_REG_PAIR(5, 57, 0x00), 189*4882a593Smuzhiyun RF_REG_PAIR(5, 58, 0x31), 190*4882a593Smuzhiyun RF_REG_PAIR(5, 59, 0x31), 191*4882a593Smuzhiyun RF_REG_PAIR(5, 60, 0x0a), 192*4882a593Smuzhiyun RF_REG_PAIR(5, 61, 0x02), 193*4882a593Smuzhiyun RF_REG_PAIR(5, 62, 0x00), 194*4882a593Smuzhiyun RF_REG_PAIR(5, 63, 0x00), 195*4882a593Smuzhiyun }; 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun /* TODO: BBP178 is set to 0xff for "CCK CH14 OBW" which overrides the settings 198*4882a593Smuzhiyun * from channel switching. Seems stupid at best. 199*4882a593Smuzhiyun */ 200*4882a593Smuzhiyun static const struct mt76_reg_pair bbp_high_temp[] = { 201*4882a593Smuzhiyun { 75, 0x60 }, 202*4882a593Smuzhiyun { 92, 0x02 }, 203*4882a593Smuzhiyun { 178, 0xff }, /* For CCK CH14 OBW */ 204*4882a593Smuzhiyun { 195, 0x88 }, { 196, 0x60 }, 205*4882a593Smuzhiyun }, bbp_high_temp_bw20[] = { 206*4882a593Smuzhiyun { 69, 0x12 }, 207*4882a593Smuzhiyun { 91, 0x07 }, 208*4882a593Smuzhiyun { 195, 0x23 }, { 196, 0x17 }, 209*4882a593Smuzhiyun { 195, 0x24 }, { 196, 0x06 }, 210*4882a593Smuzhiyun { 195, 0x81 }, { 196, 0x12 }, 211*4882a593Smuzhiyun { 195, 0x83 }, { 196, 0x17 }, 212*4882a593Smuzhiyun }, bbp_high_temp_bw40[] = { 213*4882a593Smuzhiyun { 69, 0x15 }, 214*4882a593Smuzhiyun { 91, 0x04 }, 215*4882a593Smuzhiyun { 195, 0x23 }, { 196, 0x12 }, 216*4882a593Smuzhiyun { 195, 0x24 }, { 196, 0x08 }, 217*4882a593Smuzhiyun { 195, 0x81 }, { 196, 0x15 }, 218*4882a593Smuzhiyun { 195, 0x83 }, { 196, 0x16 }, 219*4882a593Smuzhiyun }, bbp_low_temp[] = { 220*4882a593Smuzhiyun { 178, 0xff }, /* For CCK CH14 OBW */ 221*4882a593Smuzhiyun }, bbp_low_temp_bw20[] = { 222*4882a593Smuzhiyun { 69, 0x12 }, 223*4882a593Smuzhiyun { 75, 0x5e }, 224*4882a593Smuzhiyun { 91, 0x07 }, 225*4882a593Smuzhiyun { 92, 0x02 }, 226*4882a593Smuzhiyun { 195, 0x23 }, { 196, 0x17 }, 227*4882a593Smuzhiyun { 195, 0x24 }, { 196, 0x06 }, 228*4882a593Smuzhiyun { 195, 0x81 }, { 196, 0x12 }, 229*4882a593Smuzhiyun { 195, 0x83 }, { 196, 0x17 }, 230*4882a593Smuzhiyun { 195, 0x88 }, { 196, 0x5e }, 231*4882a593Smuzhiyun }, bbp_low_temp_bw40[] = { 232*4882a593Smuzhiyun { 69, 0x15 }, 233*4882a593Smuzhiyun { 75, 0x5c }, 234*4882a593Smuzhiyun { 91, 0x04 }, 235*4882a593Smuzhiyun { 92, 0x03 }, 236*4882a593Smuzhiyun { 195, 0x23 }, { 196, 0x10 }, 237*4882a593Smuzhiyun { 195, 0x24 }, { 196, 0x08 }, 238*4882a593Smuzhiyun { 195, 0x81 }, { 196, 0x15 }, 239*4882a593Smuzhiyun { 195, 0x83 }, { 196, 0x16 }, 240*4882a593Smuzhiyun { 195, 0x88 }, { 196, 0x5b }, 241*4882a593Smuzhiyun }, bbp_normal_temp[] = { 242*4882a593Smuzhiyun { 75, 0x60 }, 243*4882a593Smuzhiyun { 92, 0x02 }, 244*4882a593Smuzhiyun { 178, 0xff }, /* For CCK CH14 OBW */ 245*4882a593Smuzhiyun { 195, 0x88 }, { 196, 0x60 }, 246*4882a593Smuzhiyun }, bbp_normal_temp_bw20[] = { 247*4882a593Smuzhiyun { 69, 0x12 }, 248*4882a593Smuzhiyun { 91, 0x07 }, 249*4882a593Smuzhiyun { 195, 0x23 }, { 196, 0x17 }, 250*4882a593Smuzhiyun { 195, 0x24 }, { 196, 0x06 }, 251*4882a593Smuzhiyun { 195, 0x81 }, { 196, 0x12 }, 252*4882a593Smuzhiyun { 195, 0x83 }, { 196, 0x17 }, 253*4882a593Smuzhiyun }, bbp_normal_temp_bw40[] = { 254*4882a593Smuzhiyun { 69, 0x15 }, 255*4882a593Smuzhiyun { 91, 0x04 }, 256*4882a593Smuzhiyun { 195, 0x23 }, { 196, 0x12 }, 257*4882a593Smuzhiyun { 195, 0x24 }, { 196, 0x08 }, 258*4882a593Smuzhiyun { 195, 0x81 }, { 196, 0x15 }, 259*4882a593Smuzhiyun { 195, 0x83 }, { 196, 0x16 }, 260*4882a593Smuzhiyun }; 261*4882a593Smuzhiyun 262*4882a593Smuzhiyun #define BBP_TABLE(arr) { arr, ARRAY_SIZE(arr), } 263*4882a593Smuzhiyun 264*4882a593Smuzhiyun static const struct reg_table { 265*4882a593Smuzhiyun const struct mt76_reg_pair *regs; 266*4882a593Smuzhiyun size_t n; 267*4882a593Smuzhiyun } bbp_mode_table[3][3] = { 268*4882a593Smuzhiyun { 269*4882a593Smuzhiyun BBP_TABLE(bbp_normal_temp_bw20), 270*4882a593Smuzhiyun BBP_TABLE(bbp_normal_temp_bw40), 271*4882a593Smuzhiyun BBP_TABLE(bbp_normal_temp), 272*4882a593Smuzhiyun }, { 273*4882a593Smuzhiyun BBP_TABLE(bbp_high_temp_bw20), 274*4882a593Smuzhiyun BBP_TABLE(bbp_high_temp_bw40), 275*4882a593Smuzhiyun BBP_TABLE(bbp_high_temp), 276*4882a593Smuzhiyun }, { 277*4882a593Smuzhiyun BBP_TABLE(bbp_low_temp_bw20), 278*4882a593Smuzhiyun BBP_TABLE(bbp_low_temp_bw40), 279*4882a593Smuzhiyun BBP_TABLE(bbp_low_temp), 280*4882a593Smuzhiyun } 281*4882a593Smuzhiyun }; 282*4882a593Smuzhiyun 283*4882a593Smuzhiyun #endif 284