/* SPDX-License-Identifier: GPL-2.0-only */
/*
* (c) Copyright 2002-2010, Ralink Technology, Inc.
* Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
*/
#ifndef __MT7601U_PHY_INITVALS_H
#define __MT7601U_PHY_INITVALS_H
#define RF_REG_PAIR(bank, reg, value) \
{ MT_MCU_MEMMAP_RF | (bank) << 16 | (reg), value }
static const struct mt76_reg_pair rf_central[] = {
/* Bank 0 - for central blocks: BG, PLL, XTAL, LO, ADC/DAC */
RF_REG_PAIR(0 , 0 , 0 x02),
RF_REG_PAIR(0 , 1 , 0 x01),
RF_REG_PAIR(0 , 2 , 0 x11),
RF_REG_PAIR(0 , 3 , 0 xff),
RF_REG_PAIR(0 , 4 , 0 x0a),
RF_REG_PAIR(0 , 5 , 0 x20),
RF_REG_PAIR(0 , 6 , 0 x00),
/* B/G */
RF_REG_PAIR(0 , 7 , 0 x00),
RF_REG_PAIR(0 , 8 , 0 x00),
RF_REG_PAIR(0 , 9 , 0 x00),
RF_REG_PAIR(0 , 10 , 0 x00),
RF_REG_PAIR(0 , 11 , 0 x21),
/* XO */
RF_REG_PAIR(0 , 13 , 0 x00), /* 40mhz xtal */
/* RF_REG_PAIR(0, 13, 0x13), */ /* 20mhz xtal */
RF_REG_PAIR(0 , 14 , 0 x7c),
RF_REG_PAIR(0 , 15 , 0 x22),
RF_REG_PAIR(0 , 16 , 0 x80),
/* PLL */
RF_REG_PAIR(0 , 17 , 0 x99),
RF_REG_PAIR(0 , 18 , 0 x99),
RF_REG_PAIR(0 , 19 , 0 x09),
RF_REG_PAIR(0 , 20 , 0 x50),
RF_REG_PAIR(0 , 21 , 0 xb0),
RF_REG_PAIR(0 , 22 , 0 x00),
RF_REG_PAIR(0 , 23 , 0 xc5),
RF_REG_PAIR(0 , 24 , 0 xfc),
RF_REG_PAIR(0 , 25 , 0 x40),
RF_REG_PAIR(0 , 26 , 0 x4d),
RF_REG_PAIR(0 , 27 , 0 x02),
RF_REG_PAIR(0 , 28 , 0 x72),
RF_REG_PAIR(0 , 29 , 0 x01),
RF_REG_PAIR(0 , 30 , 0 x00),
RF_REG_PAIR(0 , 31 , 0 x00),
/* test ports */
RF_REG_PAIR(0 , 32 , 0 x00),
RF_REG_PAIR(0 , 33 , 0 x00),
RF_REG_PAIR(0 , 34 , 0 x23),
RF_REG_PAIR(0 , 35 , 0 x01), /* change setting to reduce spurs */
RF_REG_PAIR(0 , 36 , 0 x00),
RF_REG_PAIR(0 , 37 , 0 x00),
/* ADC/DAC */
RF_REG_PAIR(0 , 38 , 0 x00),
RF_REG_PAIR(0 , 39 , 0 x20),
RF_REG_PAIR(0 , 40 , 0 x00),
RF_REG_PAIR(0 , 41 , 0 xd0),
RF_REG_PAIR(0 , 42 , 0 x1b),
RF_REG_PAIR(0 , 43 , 0 x02),
RF_REG_PAIR(0 , 44 , 0 x00),
};
static const struct mt76_reg_pair rf_channel[] = {
RF_REG_PAIR(4 , 0 , 0 x01),
RF_REG_PAIR(4 , 1 , 0 x00),
RF_REG_PAIR(4 , 2 , 0 x00),
RF_REG_PAIR(4 , 3 , 0 x00),
/* LDO */
RF_REG_PAIR(4 , 4 , 0 x00),
RF_REG_PAIR(4 , 5 , 0 x08),
RF_REG_PAIR(4 , 6 , 0 x00),
/* RX */
RF_REG_PAIR(4 , 7 , 0 x5b),
RF_REG_PAIR(4 , 8 , 0 x52),
RF_REG_PAIR(4 , 9 , 0 xb6),
RF_REG_PAIR(4 , 10 , 0 x57),
RF_REG_PAIR(4 , 11 , 0 x33),
RF_REG_PAIR(4 , 12 , 0 x22),
RF_REG_PAIR(4 , 13 , 0 x3d),
RF_REG_PAIR(4 , 14 , 0 x3e),
RF_REG_PAIR(4 , 15 , 0 x13),
RF_REG_PAIR(4 , 16 , 0 x22),
RF_REG_PAIR(4 , 17 , 0 x23),
RF_REG_PAIR(4 , 18 , 0 x02),
RF_REG_PAIR(4 , 19 , 0 xa4),
RF_REG_PAIR(4 , 20 , 0 x01),
RF_REG_PAIR(4 , 21 , 0 x12),
RF_REG_PAIR(4 , 22 , 0 x80),
RF_REG_PAIR(4 , 23 , 0 xb3),
RF_REG_PAIR(4 , 24 , 0 x00), /* reserved */
RF_REG_PAIR(4 , 25 , 0 x00), /* reserved */
RF_REG_PAIR(4 , 26 , 0 x00), /* reserved */
RF_REG_PAIR(4 , 27 , 0 x00), /* reserved */
/* LOGEN */
RF_REG_PAIR(4 , 28 , 0 x18),
RF_REG_PAIR(4 , 29 , 0 xee),
RF_REG_PAIR(4 , 30 , 0 x6b),
RF_REG_PAIR(4 , 31 , 0 x31),
RF_REG_PAIR(4 , 32 , 0 x5d),
RF_REG_PAIR(4 , 33 , 0 x00), /* reserved */
/* TX */
RF_REG_PAIR(4 , 34 , 0 x96),
RF_REG_PAIR(4 , 35 , 0 x55),
RF_REG_PAIR(4 , 36 , 0 x08),
RF_REG_PAIR(4 , 37 , 0 xbb),
RF_REG_PAIR(4 , 38 , 0 xb3),
RF_REG_PAIR(4 , 39 , 0 xb3),
RF_REG_PAIR(4 , 40 , 0 x03),
RF_REG_PAIR(4 , 41 , 0 x00), /* reserved */
RF_REG_PAIR(4 , 42 , 0 x00), /* reserved */
RF_REG_PAIR(4 , 43 , 0 xc5),
RF_REG_PAIR(4 , 44 , 0 xc5),
RF_REG_PAIR(4 , 45 , 0 xc5),
RF_REG_PAIR(4 , 46 , 0 x07),
RF_REG_PAIR(4 , 47 , 0 xa8),
RF_REG_PAIR(4 , 48 , 0 xef),
RF_REG_PAIR(4 , 49 , 0 x1a),
/* PA */
RF_REG_PAIR(4 , 54 , 0 x07),
RF_REG_PAIR(4 , 55 , 0 xa7),
RF_REG_PAIR(4 , 56 , 0 xcc),
RF_REG_PAIR(4 , 57 , 0 x14),
RF_REG_PAIR(4 , 58 , 0 x07),
RF_REG_PAIR(4 , 59 , 0 xa8),
RF_REG_PAIR(4 , 60 , 0 xd7),
RF_REG_PAIR(4 , 61 , 0 x10),
RF_REG_PAIR(4 , 62 , 0 x1c),
RF_REG_PAIR(4 , 63 , 0 x00), /* reserved */
};
static const struct mt76_reg_pair rf_vga[] = {
RF_REG_PAIR(5 , 0 , 0 x47),
RF_REG_PAIR(5 , 1 , 0 x00),
RF_REG_PAIR(5 , 2 , 0 x00),
RF_REG_PAIR(5 , 3 , 0 x08),
RF_REG_PAIR(5 , 4 , 0 x04),
RF_REG_PAIR(5 , 5 , 0 x20),
RF_REG_PAIR(5 , 6 , 0 x3a),
RF_REG_PAIR(5 , 7 , 0 x3a),
RF_REG_PAIR(5 , 8 , 0 x00),
RF_REG_PAIR(5 , 9 , 0 x00),
RF_REG_PAIR(5 , 10 , 0 x10),
RF_REG_PAIR(5 , 11 , 0 x10),
RF_REG_PAIR(5 , 12 , 0 x10),
RF_REG_PAIR(5 , 13 , 0 x10),
RF_REG_PAIR(5 , 14 , 0 x10),
RF_REG_PAIR(5 , 15 , 0 x20),
RF_REG_PAIR(5 , 16 , 0 x22),
RF_REG_PAIR(5 , 17 , 0 x7c),
RF_REG_PAIR(5 , 18 , 0 x00),
RF_REG_PAIR(5 , 19 , 0 x00),
RF_REG_PAIR(5 , 20 , 0 x00),
RF_REG_PAIR(5 , 21 , 0 xf1),
RF_REG_PAIR(5 , 22 , 0 x11),
RF_REG_PAIR(5 , 23 , 0 x02),
RF_REG_PAIR(5 , 24 , 0 x41),
RF_REG_PAIR(5 , 25 , 0 x20),
RF_REG_PAIR(5 , 26 , 0 x00),
RF_REG_PAIR(5 , 27 , 0 xd7),
RF_REG_PAIR(5 , 28 , 0 xa2),
RF_REG_PAIR(5 , 29 , 0 x20),
RF_REG_PAIR(5 , 30 , 0 x49),
RF_REG_PAIR(5 , 31 , 0 x20),
RF_REG_PAIR(5 , 32 , 0 x04),
RF_REG_PAIR(5 , 33 , 0 xf1),
RF_REG_PAIR(5 , 34 , 0 xa1),
RF_REG_PAIR(5 , 35 , 0 x01),
RF_REG_PAIR(5 , 41 , 0 x00),
RF_REG_PAIR(5 , 42 , 0 x00),
RF_REG_PAIR(5 , 43 , 0 x00),
RF_REG_PAIR(5 , 44 , 0 x00),
RF_REG_PAIR(5 , 45 , 0 x00),
RF_REG_PAIR(5 , 46 , 0 x00),
RF_REG_PAIR(5 , 47 , 0 x00),
RF_REG_PAIR(5 , 48 , 0 x00),
RF_REG_PAIR(5 , 49 , 0 x00),
RF_REG_PAIR(5 , 50 , 0 x00),
RF_REG_PAIR(5 , 51 , 0 x00),
RF_REG_PAIR(5 , 52 , 0 x00),
RF_REG_PAIR(5 , 53 , 0 x00),
RF_REG_PAIR(5 , 54 , 0 x00),
RF_REG_PAIR(5 , 55 , 0 x00),
RF_REG_PAIR(5 , 56 , 0 x00),
RF_REG_PAIR(5 , 57 , 0 x00),
RF_REG_PAIR(5 , 58 , 0 x31),
RF_REG_PAIR(5 , 59 , 0 x31),
RF_REG_PAIR(5 , 60 , 0 x0a),
RF_REG_PAIR(5 , 61 , 0 x02),
RF_REG_PAIR(5 , 62 , 0 x00),
RF_REG_PAIR(5 , 63 , 0 x00),
};
/* TODO: BBP178 is set to 0xff for "CCK CH14 OBW" which overrides the settings
* from channel switching. Seems stupid at best.
*/
static const struct mt76_reg_pair bbp_high_temp[] = {
{ 75 , 0 x60 },
{ 92 , 0 x02 },
{ 178 , 0 xff }, /* For CCK CH14 OBW */
{ 195 , 0 x88 }, { 196 , 0 x60 },
}, bbp_high_temp_bw20[] = {
{ 69 , 0 x12 },
{ 91 , 0 x07 },
{ 195 , 0 x23 }, { 196 , 0 x17 },
{ 195 , 0 x24 }, { 196 , 0 x06 },
{ 195 , 0 x81 }, { 196 , 0 x12 },
{ 195 , 0 x83 }, { 196 , 0 x17 },
}, bbp_high_temp_bw40[] = {
{ 69 , 0 x15 },
{ 91 , 0 x04 },
{ 195 , 0 x23 }, { 196 , 0 x12 },
{ 195 , 0 x24 }, { 196 , 0 x08 },
{ 195 , 0 x81 }, { 196 , 0 x15 },
{ 195 , 0 x83 }, { 196 , 0 x16 },
}, bbp_low_temp[] = {
{ 178 , 0 xff }, /* For CCK CH14 OBW */
}, bbp_low_temp_bw20[] = {
{ 69 , 0 x12 },
{ 75 , 0 x5e },
{ 91 , 0 x07 },
{ 92 , 0 x02 },
{ 195 , 0 x23 }, { 196 , 0 x17 },
{ 195 , 0 x24 }, { 196 , 0 x06 },
{ 195 , 0 x81 }, { 196 , 0 x12 },
{ 195 , 0 x83 }, { 196 , 0 x17 },
{ 195 , 0 x88 }, { 196 , 0 x5e },
}, bbp_low_temp_bw40[] = {
{ 69 , 0 x15 },
{ 75 , 0 x5c },
{ 91 , 0 x04 },
{ 92 , 0 x03 },
{ 195 , 0 x23 }, { 196 , 0 x10 },
{ 195 , 0 x24 }, { 196 , 0 x08 },
{ 195 , 0 x81 }, { 196 , 0 x15 },
{ 195 , 0 x83 }, { 196 , 0 x16 },
{ 195 , 0 x88 }, { 196 , 0 x5b },
}, bbp_normal_temp[] = {
{ 75 , 0 x60 },
{ 92 , 0 x02 },
{ 178 , 0 xff }, /* For CCK CH14 OBW */
{ 195 , 0 x88 }, { 196 , 0 x60 },
}, bbp_normal_temp_bw20[] = {
{ 69 , 0 x12 },
{ 91 , 0 x07 },
{ 195 , 0 x23 }, { 196 , 0 x17 },
{ 195 , 0 x24 }, { 196 , 0 x06 },
{ 195 , 0 x81 }, { 196 , 0 x12 },
{ 195 , 0 x83 }, { 196 , 0 x17 },
}, bbp_normal_temp_bw40[] = {
{ 69 , 0 x15 },
{ 91 , 0 x04 },
{ 195 , 0 x23 }, { 196 , 0 x12 },
{ 195 , 0 x24 }, { 196 , 0 x08 },
{ 195 , 0 x81 }, { 196 , 0 x15 },
{ 195 , 0 x83 }, { 196 , 0 x16 },
};
#define BBP_TABLE(arr) { arr, ARRAY_SIZE(arr), }
static const struct reg_table {
const struct mt76_reg_pair *regs;
size_t n;
} bbp_mode_table[3 ][3 ] = {
{
BBP_TABLE(bbp_normal_temp_bw20),
BBP_TABLE(bbp_normal_temp_bw40),
BBP_TABLE(bbp_normal_temp),
}, {
BBP_TABLE(bbp_high_temp_bw20),
BBP_TABLE(bbp_high_temp_bw40),
BBP_TABLE(bbp_high_temp),
}, {
BBP_TABLE(bbp_low_temp_bw20),
BBP_TABLE(bbp_low_temp_bw40),
BBP_TABLE(bbp_low_temp),
}
};
#endif
Messung V0.5 in Prozent C=96 H=91 G=93