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