mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-27 12:25:08 +07:00
c869f77d6a
Add support for the simplest of MediaTek Wi-Fi devices - MT7601U. It is a single stream bgn chip with no bells or whistles. This driver is partially based on Felix's mt76 but IMHO it doesn't make sense to merge the two right now because MT7601U is a design somewhere between old Ralink devices and new Mediatek chips. There wouldn't be all that much code sharing with the devices mt76 supports. Situation may obviously change when someone decides to extend m76 with support for the more recent USB dongles. The driver supports only station mode. I'm hoping to add AP support when time allows. This driver sat on GitHub for quite a while and got some testing there: http://github.com/kuba-moo/mt7601u Signed-off-by: Jakub Kicinski <kubakici@wp.pl> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
292 lines
7.7 KiB
C
292 lines
7.7 KiB
C
/*
|
|
* (c) Copyright 2002-2010, Ralink Technology, Inc.
|
|
* Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2
|
|
* as published by the Free Software Foundation
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*/
|
|
|
|
#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, 0x02),
|
|
RF_REG_PAIR(0, 1, 0x01),
|
|
RF_REG_PAIR(0, 2, 0x11),
|
|
RF_REG_PAIR(0, 3, 0xff),
|
|
RF_REG_PAIR(0, 4, 0x0a),
|
|
RF_REG_PAIR(0, 5, 0x20),
|
|
RF_REG_PAIR(0, 6, 0x00),
|
|
/* B/G */
|
|
RF_REG_PAIR(0, 7, 0x00),
|
|
RF_REG_PAIR(0, 8, 0x00),
|
|
RF_REG_PAIR(0, 9, 0x00),
|
|
RF_REG_PAIR(0, 10, 0x00),
|
|
RF_REG_PAIR(0, 11, 0x21),
|
|
/* XO */
|
|
RF_REG_PAIR(0, 13, 0x00), /* 40mhz xtal */
|
|
/* RF_REG_PAIR(0, 13, 0x13), */ /* 20mhz xtal */
|
|
RF_REG_PAIR(0, 14, 0x7c),
|
|
RF_REG_PAIR(0, 15, 0x22),
|
|
RF_REG_PAIR(0, 16, 0x80),
|
|
/* PLL */
|
|
RF_REG_PAIR(0, 17, 0x99),
|
|
RF_REG_PAIR(0, 18, 0x99),
|
|
RF_REG_PAIR(0, 19, 0x09),
|
|
RF_REG_PAIR(0, 20, 0x50),
|
|
RF_REG_PAIR(0, 21, 0xb0),
|
|
RF_REG_PAIR(0, 22, 0x00),
|
|
RF_REG_PAIR(0, 23, 0xc5),
|
|
RF_REG_PAIR(0, 24, 0xfc),
|
|
RF_REG_PAIR(0, 25, 0x40),
|
|
RF_REG_PAIR(0, 26, 0x4d),
|
|
RF_REG_PAIR(0, 27, 0x02),
|
|
RF_REG_PAIR(0, 28, 0x72),
|
|
RF_REG_PAIR(0, 29, 0x01),
|
|
RF_REG_PAIR(0, 30, 0x00),
|
|
RF_REG_PAIR(0, 31, 0x00),
|
|
/* test ports */
|
|
RF_REG_PAIR(0, 32, 0x00),
|
|
RF_REG_PAIR(0, 33, 0x00),
|
|
RF_REG_PAIR(0, 34, 0x23),
|
|
RF_REG_PAIR(0, 35, 0x01), /* change setting to reduce spurs */
|
|
RF_REG_PAIR(0, 36, 0x00),
|
|
RF_REG_PAIR(0, 37, 0x00),
|
|
/* ADC/DAC */
|
|
RF_REG_PAIR(0, 38, 0x00),
|
|
RF_REG_PAIR(0, 39, 0x20),
|
|
RF_REG_PAIR(0, 40, 0x00),
|
|
RF_REG_PAIR(0, 41, 0xd0),
|
|
RF_REG_PAIR(0, 42, 0x1b),
|
|
RF_REG_PAIR(0, 43, 0x02),
|
|
RF_REG_PAIR(0, 44, 0x00),
|
|
};
|
|
|
|
static const struct mt76_reg_pair rf_channel[] = {
|
|
RF_REG_PAIR(4, 0, 0x01),
|
|
RF_REG_PAIR(4, 1, 0x00),
|
|
RF_REG_PAIR(4, 2, 0x00),
|
|
RF_REG_PAIR(4, 3, 0x00),
|
|
/* LDO */
|
|
RF_REG_PAIR(4, 4, 0x00),
|
|
RF_REG_PAIR(4, 5, 0x08),
|
|
RF_REG_PAIR(4, 6, 0x00),
|
|
/* RX */
|
|
RF_REG_PAIR(4, 7, 0x5b),
|
|
RF_REG_PAIR(4, 8, 0x52),
|
|
RF_REG_PAIR(4, 9, 0xb6),
|
|
RF_REG_PAIR(4, 10, 0x57),
|
|
RF_REG_PAIR(4, 11, 0x33),
|
|
RF_REG_PAIR(4, 12, 0x22),
|
|
RF_REG_PAIR(4, 13, 0x3d),
|
|
RF_REG_PAIR(4, 14, 0x3e),
|
|
RF_REG_PAIR(4, 15, 0x13),
|
|
RF_REG_PAIR(4, 16, 0x22),
|
|
RF_REG_PAIR(4, 17, 0x23),
|
|
RF_REG_PAIR(4, 18, 0x02),
|
|
RF_REG_PAIR(4, 19, 0xa4),
|
|
RF_REG_PAIR(4, 20, 0x01),
|
|
RF_REG_PAIR(4, 21, 0x12),
|
|
RF_REG_PAIR(4, 22, 0x80),
|
|
RF_REG_PAIR(4, 23, 0xb3),
|
|
RF_REG_PAIR(4, 24, 0x00), /* reserved */
|
|
RF_REG_PAIR(4, 25, 0x00), /* reserved */
|
|
RF_REG_PAIR(4, 26, 0x00), /* reserved */
|
|
RF_REG_PAIR(4, 27, 0x00), /* reserved */
|
|
/* LOGEN */
|
|
RF_REG_PAIR(4, 28, 0x18),
|
|
RF_REG_PAIR(4, 29, 0xee),
|
|
RF_REG_PAIR(4, 30, 0x6b),
|
|
RF_REG_PAIR(4, 31, 0x31),
|
|
RF_REG_PAIR(4, 32, 0x5d),
|
|
RF_REG_PAIR(4, 33, 0x00), /* reserved */
|
|
/* TX */
|
|
RF_REG_PAIR(4, 34, 0x96),
|
|
RF_REG_PAIR(4, 35, 0x55),
|
|
RF_REG_PAIR(4, 36, 0x08),
|
|
RF_REG_PAIR(4, 37, 0xbb),
|
|
RF_REG_PAIR(4, 38, 0xb3),
|
|
RF_REG_PAIR(4, 39, 0xb3),
|
|
RF_REG_PAIR(4, 40, 0x03),
|
|
RF_REG_PAIR(4, 41, 0x00), /* reserved */
|
|
RF_REG_PAIR(4, 42, 0x00), /* reserved */
|
|
RF_REG_PAIR(4, 43, 0xc5),
|
|
RF_REG_PAIR(4, 44, 0xc5),
|
|
RF_REG_PAIR(4, 45, 0xc5),
|
|
RF_REG_PAIR(4, 46, 0x07),
|
|
RF_REG_PAIR(4, 47, 0xa8),
|
|
RF_REG_PAIR(4, 48, 0xef),
|
|
RF_REG_PAIR(4, 49, 0x1a),
|
|
/* PA */
|
|
RF_REG_PAIR(4, 54, 0x07),
|
|
RF_REG_PAIR(4, 55, 0xa7),
|
|
RF_REG_PAIR(4, 56, 0xcc),
|
|
RF_REG_PAIR(4, 57, 0x14),
|
|
RF_REG_PAIR(4, 58, 0x07),
|
|
RF_REG_PAIR(4, 59, 0xa8),
|
|
RF_REG_PAIR(4, 60, 0xd7),
|
|
RF_REG_PAIR(4, 61, 0x10),
|
|
RF_REG_PAIR(4, 62, 0x1c),
|
|
RF_REG_PAIR(4, 63, 0x00), /* reserved */
|
|
};
|
|
|
|
static const struct mt76_reg_pair rf_vga[] = {
|
|
RF_REG_PAIR(5, 0, 0x47),
|
|
RF_REG_PAIR(5, 1, 0x00),
|
|
RF_REG_PAIR(5, 2, 0x00),
|
|
RF_REG_PAIR(5, 3, 0x08),
|
|
RF_REG_PAIR(5, 4, 0x04),
|
|
RF_REG_PAIR(5, 5, 0x20),
|
|
RF_REG_PAIR(5, 6, 0x3a),
|
|
RF_REG_PAIR(5, 7, 0x3a),
|
|
RF_REG_PAIR(5, 8, 0x00),
|
|
RF_REG_PAIR(5, 9, 0x00),
|
|
RF_REG_PAIR(5, 10, 0x10),
|
|
RF_REG_PAIR(5, 11, 0x10),
|
|
RF_REG_PAIR(5, 12, 0x10),
|
|
RF_REG_PAIR(5, 13, 0x10),
|
|
RF_REG_PAIR(5, 14, 0x10),
|
|
RF_REG_PAIR(5, 15, 0x20),
|
|
RF_REG_PAIR(5, 16, 0x22),
|
|
RF_REG_PAIR(5, 17, 0x7c),
|
|
RF_REG_PAIR(5, 18, 0x00),
|
|
RF_REG_PAIR(5, 19, 0x00),
|
|
RF_REG_PAIR(5, 20, 0x00),
|
|
RF_REG_PAIR(5, 21, 0xf1),
|
|
RF_REG_PAIR(5, 22, 0x11),
|
|
RF_REG_PAIR(5, 23, 0x02),
|
|
RF_REG_PAIR(5, 24, 0x41),
|
|
RF_REG_PAIR(5, 25, 0x20),
|
|
RF_REG_PAIR(5, 26, 0x00),
|
|
RF_REG_PAIR(5, 27, 0xd7),
|
|
RF_REG_PAIR(5, 28, 0xa2),
|
|
RF_REG_PAIR(5, 29, 0x20),
|
|
RF_REG_PAIR(5, 30, 0x49),
|
|
RF_REG_PAIR(5, 31, 0x20),
|
|
RF_REG_PAIR(5, 32, 0x04),
|
|
RF_REG_PAIR(5, 33, 0xf1),
|
|
RF_REG_PAIR(5, 34, 0xa1),
|
|
RF_REG_PAIR(5, 35, 0x01),
|
|
RF_REG_PAIR(5, 41, 0x00),
|
|
RF_REG_PAIR(5, 42, 0x00),
|
|
RF_REG_PAIR(5, 43, 0x00),
|
|
RF_REG_PAIR(5, 44, 0x00),
|
|
RF_REG_PAIR(5, 45, 0x00),
|
|
RF_REG_PAIR(5, 46, 0x00),
|
|
RF_REG_PAIR(5, 47, 0x00),
|
|
RF_REG_PAIR(5, 48, 0x00),
|
|
RF_REG_PAIR(5, 49, 0x00),
|
|
RF_REG_PAIR(5, 50, 0x00),
|
|
RF_REG_PAIR(5, 51, 0x00),
|
|
RF_REG_PAIR(5, 52, 0x00),
|
|
RF_REG_PAIR(5, 53, 0x00),
|
|
RF_REG_PAIR(5, 54, 0x00),
|
|
RF_REG_PAIR(5, 55, 0x00),
|
|
RF_REG_PAIR(5, 56, 0x00),
|
|
RF_REG_PAIR(5, 57, 0x00),
|
|
RF_REG_PAIR(5, 58, 0x31),
|
|
RF_REG_PAIR(5, 59, 0x31),
|
|
RF_REG_PAIR(5, 60, 0x0a),
|
|
RF_REG_PAIR(5, 61, 0x02),
|
|
RF_REG_PAIR(5, 62, 0x00),
|
|
RF_REG_PAIR(5, 63, 0x00),
|
|
};
|
|
|
|
/* 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, 0x60 },
|
|
{ 92, 0x02 },
|
|
{ 178, 0xff }, /* For CCK CH14 OBW */
|
|
{ 195, 0x88 }, { 196, 0x60 },
|
|
}, bbp_high_temp_bw20[] = {
|
|
{ 69, 0x12 },
|
|
{ 91, 0x07 },
|
|
{ 195, 0x23 }, { 196, 0x17 },
|
|
{ 195, 0x24 }, { 196, 0x06 },
|
|
{ 195, 0x81 }, { 196, 0x12 },
|
|
{ 195, 0x83 }, { 196, 0x17 },
|
|
}, bbp_high_temp_bw40[] = {
|
|
{ 69, 0x15 },
|
|
{ 91, 0x04 },
|
|
{ 195, 0x23 }, { 196, 0x12 },
|
|
{ 195, 0x24 }, { 196, 0x08 },
|
|
{ 195, 0x81 }, { 196, 0x15 },
|
|
{ 195, 0x83 }, { 196, 0x16 },
|
|
}, bbp_low_temp[] = {
|
|
{ 178, 0xff }, /* For CCK CH14 OBW */
|
|
}, bbp_low_temp_bw20[] = {
|
|
{ 69, 0x12 },
|
|
{ 75, 0x5e },
|
|
{ 91, 0x07 },
|
|
{ 92, 0x02 },
|
|
{ 195, 0x23 }, { 196, 0x17 },
|
|
{ 195, 0x24 }, { 196, 0x06 },
|
|
{ 195, 0x81 }, { 196, 0x12 },
|
|
{ 195, 0x83 }, { 196, 0x17 },
|
|
{ 195, 0x88 }, { 196, 0x5e },
|
|
}, bbp_low_temp_bw40[] = {
|
|
{ 69, 0x15 },
|
|
{ 75, 0x5c },
|
|
{ 91, 0x04 },
|
|
{ 92, 0x03 },
|
|
{ 195, 0x23 }, { 196, 0x10 },
|
|
{ 195, 0x24 }, { 196, 0x08 },
|
|
{ 195, 0x81 }, { 196, 0x15 },
|
|
{ 195, 0x83 }, { 196, 0x16 },
|
|
{ 195, 0x88 }, { 196, 0x5b },
|
|
}, bbp_normal_temp[] = {
|
|
{ 75, 0x60 },
|
|
{ 92, 0x02 },
|
|
{ 178, 0xff }, /* For CCK CH14 OBW */
|
|
{ 195, 0x88 }, { 196, 0x60 },
|
|
}, bbp_normal_temp_bw20[] = {
|
|
{ 69, 0x12 },
|
|
{ 91, 0x07 },
|
|
{ 195, 0x23 }, { 196, 0x17 },
|
|
{ 195, 0x24 }, { 196, 0x06 },
|
|
{ 195, 0x81 }, { 196, 0x12 },
|
|
{ 195, 0x83 }, { 196, 0x17 },
|
|
}, bbp_normal_temp_bw40[] = {
|
|
{ 69, 0x15 },
|
|
{ 91, 0x04 },
|
|
{ 195, 0x23 }, { 196, 0x12 },
|
|
{ 195, 0x24 }, { 196, 0x08 },
|
|
{ 195, 0x81 }, { 196, 0x15 },
|
|
{ 195, 0x83 }, { 196, 0x16 },
|
|
};
|
|
|
|
#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
|