I'm not sure how to post patches here..... so heres a kind of kludgy go at this. I've attached several patches inline. You wont need the antenna diversity patch specifically but i think its required as a series of patches as the following patch relies on it.
./package/kernel/mac80211/patches/628-rt2x00-rt5350_calibration_fixup.patch
Index: compat-wireless-2016-01-10/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
===================================================================
--- compat-wireless-2016-01-10.orig/drivers/net/wireless/ralink/rt2x00/rt2800lib.c 2017-05-24 12:19:13.404718115 -0400
+++ compat-wireless-2016-01-10/drivers/net/wireless/ralink/rt2x00/rt2800lib.c 2017-05-24 12:24:00.672438416 -0400
@@ -4491,6 +4491,7 @@
case RT3071:
case RT3090:
case RT3572:
+ case RT5350:
delta += rt2800_get_gain_calibration_delta(rt2x00dev);
break;
default:
@@ -5107,6 +5108,8 @@
rt2800_register_write(rt2x00dev, TX_SW_CFG2, 0x00000000);
} else if (rt2x00_rt(rt2x00dev, RT5350)) {
rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000404);
+ rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00080606);
+ rt2800_register_write(rt2x00dev, TX_SW_CFG2, 0x00000000);
} else {
rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000000);
rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00080606);
@@ -5785,6 +5788,8 @@
if (rt2x00_rt(rt2x00dev, RT5350)) {
rt2800_bbp_write(rt2x00dev, 105, 0x3c);
rt2800_bbp_write(rt2x00dev, 106, 0x03);
+
+ rt2800_bbp_write(rt2x00dev, 128, 0x12);
} else {
rt2800_bbp_write(rt2x00dev, 105, 0x34);
rt2800_bbp_write(rt2x00dev, 106, 0x05);
@@ -7115,6 +7120,8 @@
static void rt2800_init_rfcsr_5350(struct rt2x00_dev *rt2x00dev)
{
+ rt2800_rf_init_calibration(rt2x00dev, 30);
+
rt2800_rfcsr_write(rt2x00dev, 0, 0xf0);
rt2800_rfcsr_write(rt2x00dev, 1, 0x23);
rt2800_rfcsr_write(rt2x00dev, 2, 0x50);
@@ -7181,6 +7188,8 @@
rt2800_rfcsr_write(rt2x00dev, 61, 0xd1);
rt2800_rfcsr_write(rt2x00dev, 62, 0x00);
rt2800_rfcsr_write(rt2x00dev, 63, 0x00);
+
+ rt2800_led_open_drain_enable(rt2x00dev);
}
static void rt2800_init_rfcsr_5390(struct rt2x00_dev *rt2x00dev)
./package/kernel/mac80211/patches/629-rt2x00-rt5350_antenna_diversity.patch
Index: compat-wireless-2016-01-10/drivers/net/wireless/ralink/rt2x00/rt2800.h
===================================================================
--- compat-wireless-2016-01-10.orig/drivers/net/wireless/ralink/rt2x00/rt2800.h 2017-05-24 12:34:45.335781051 -0400
+++ compat-wireless-2016-01-10/drivers/net/wireless/ralink/rt2x00/rt2800.h 2017-05-24 12:36:08.618888626 -0400
@@ -94,6 +94,7 @@
#define REV_RT3090E 0x0211
#define REV_RT3390E 0x0211
#define REV_RT3593E 0x0211
+#define REV_RT5350F 0x0105
#define REV_RT5390F 0x0502
#define REV_RT5390R 0x1502
#define REV_RT5592C 0x0221
Index: compat-wireless-2016-01-10/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
===================================================================
--- compat-wireless-2016-01-10.orig/drivers/net/wireless/ralink/rt2x00/rt2800lib.c 2017-05-24 12:34:45.367780719 -0400
+++ compat-wireless-2016-01-10/drivers/net/wireless/ralink/rt2x00/rt2800lib.c 2017-05-24 12:40:31.939288380 -0400
@@ -3583,6 +3583,10 @@
rt2800_bbp_write(rt2x00dev, 86, 0x46);
else
rt2800_bbp_write(rt2x00dev, 86, 0);
+ } else if (rt2x00_rt(rt2x00dev, RT5350)) {
+ rt2800_bbp_write(rt2x00dev, 62, 0x37 - rt2x00dev->lna_gain);
+ rt2800_bbp_write(rt2x00dev, 63, 0x37 - rt2x00dev->lna_gain);
+ rt2800_bbp_write(rt2x00dev, 64, 0x37 - rt2x00dev->lna_gain);
} else {
rt2800_bbp_write(rt2x00dev, 62, 0x37 - rt2x00dev->lna_gain);
rt2800_bbp_write(rt2x00dev, 63, 0x37 - rt2x00dev->lna_gain);
@@ -5738,6 +5742,10 @@
static void rt2800_init_bbp_3352(struct rt2x00_dev *rt2x00dev)
{
+ int ant, div_mode;
+ u16 eeprom;
+ u8 value;
+
rt2800_bbp_write(rt2x00dev, 3, 0x00);
rt2800_bbp_write(rt2x00dev, 4, 0x50);
@@ -5820,10 +5828,31 @@
rt2800_bbp_write(rt2x00dev, 148, 0xc8);
if (rt2x00_rt(rt2x00dev, RT5350)) {
- rt2800_bbp_write(rt2x00dev, 150, 0x40); /* Antenna Software OFDM */
- rt2800_bbp_write(rt2x00dev, 151, 0x30); /* Antenna Software CCK */
- rt2800_bbp_write(rt2x00dev, 152, 0xa3);
+ rt2800_disable_unused_dac_adc(rt2x00dev);
+
+ rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom);
+ div_mode = rt2x00_get_field16(eeprom, EEPROM_NIC_CONF1_ANT_DIVERSITY);
+ ant = (div_mode == 3 || div_mode == 0) ? 1 : 0;
+
+ /* This chip has hardware antenna diversity*/
+ if (rt2x00_rt_rev_gte(rt2x00dev, RT5350, REV_RT5350F) && div_mode == 1) {
+ rt2800_bbp_write(rt2x00dev, 150, 0); /* Disable Antenna Software OFDM */
+ rt2800_bbp_write(rt2x00dev, 151, 0); /* Disable Antenna Software CCK */
+ } else {
+ rt2800_bbp_write(rt2x00dev, 150, 0x40); /* Antenna Software OFDM */
+ rt2800_bbp_write(rt2x00dev, 151, 0x30); /* Antenna Software CCK */
+ }
+
rt2800_bbp_write(rt2x00dev, 154, 0); /* Clear previously selected antenna */
+
+ value = 0xa3; //rt2800_bbp_read(rt2x00dev, 152, &value);
+ if (ant == 0)
+ rt2x00_set_field8(&value, BBP152_RX_DEFAULT_ANT, 1);
+ else
+ rt2x00_set_field8(&value, BBP152_RX_DEFAULT_ANT, 0);
+ rt2800_bbp_write(rt2x00dev, 152, value);
+
+ rt2800_init_freq_calibration(rt2x00dev);
}
}
@@ -7890,12 +7919,18 @@
if (rt2x00_rt(rt2x00dev, RT3070) ||
rt2x00_rt(rt2x00dev, RT3090) ||
rt2x00_rt(rt2x00dev, RT3352) ||
- rt2x00_rt(rt2x00dev, RT3390)) {
+ rt2x00_rt(rt2x00dev, RT3390) ||
+ rt2x00_rt(rt2x00dev, RT5350)) {
value = rt2x00_get_field16(eeprom,
EEPROM_NIC_CONF1_ANT_DIVERSITY);
switch (value) {
case 0:
case 1:
+ if (rt2x00_rt_rev_gte(rt2x00dev, RT5350, REV_RT5350F)) {
+ rt2x00dev->default_ant.tx = ANTENNA_HW_DIVERSITY; /* Unused */
+ rt2x00dev->default_ant.rx = ANTENNA_HW_DIVERSITY; /* Unused */
+ break;
+ }
case 2:
rt2x00dev->default_ant.tx = ANTENNA_A;
rt2x00dev->default_ant.rx = ANTENNA_A;
./package/kernel/mac80211/patches/631-rt2x00-Fix_mmic_countermeasures.patch
Index: compat-wireless-2016-01-10/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c
===================================================================
--- compat-wireless-2016-01-10.orig/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c 2017-05-15 02:40:10.486150947 +0000
+++ compat-wireless-2016-01-10/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c 2017-05-15 02:42:57.630150947 +0000
@@ -139,7 +139,7 @@
if (rxdesc->cipher_status == RX_CRYPTO_SUCCESS)
rxdesc->flags |= RX_FLAG_DECRYPTED;
else if (rxdesc->cipher_status == RX_CRYPTO_FAIL_MIC)
- rxdesc->flags |= RX_FLAG_MMIC_ERROR;
+ rxdesc->flags |= RX_FLAG_DECRYPTED | RX_FLAG_MMIC_ERROR;
}
if (rt2x00_get_field32(word, RXD_W3_MY_BSS))
(Last edited by mskeff on 21 Jun 2017, 20:17)