blob: dbef00cd1efca842a7e1550c5dd473a5b82a107c [file] [log] [blame]
From 10df4848e7a7116529e1f596e06d0d03891f502e Mon Sep 17 00:00:00 2001
From: StanleyYP Wang <StanleyYP.Wang@mediatek.com>
Date: Thu, 20 Jul 2023 17:27:22 +0800
Subject: [PATCH 37/98] wifi: mt76: mt7996: add eagle default bin of different
sku variants
Signed-off-by: StanleyYP Wang <StanleyYP.Wang@mediatek.com>
---
mt7996/eeprom.c | 2 ++
mt7996/init.c | 4 ++++
mt7996/mt7996.h | 28 ++++++++++++++++++++++++++--
3 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/mt7996/eeprom.c b/mt7996/eeprom.c
index 7fd318c..3276740 100644
--- a/mt7996/eeprom.c
+++ b/mt7996/eeprom.c
@@ -30,6 +30,8 @@ static char *mt7996_eeprom_name(struct mt7996_dev *dev)
/* reserve for future variants */
if (dev->testmode_enable)
return MT7996_EEPROM_DEFAULT_TM;
+ else if (dev->chip_sku == MT7996_SKU_404)
+ return MT7996_EEPROM_DEFAULT_404;
else
return MT7996_EEPROM_DEFAULT;
}
diff --git a/mt7996/init.c b/mt7996/init.c
index 6d39c3c..fed74d0 100644
--- a/mt7996/init.c
+++ b/mt7996/init.c
@@ -789,6 +789,10 @@ static int mt7996_init_hardware(struct mt7996_dev *dev)
INIT_WORK(&dev->init_work, mt7996_init_work);
+ ret = mt7996_get_chip_sku(dev);
+ if (ret)
+ return ret;
+
dev->dbdc_support = mt7996_band_valid(dev, MT_BAND1) ||
mt7996_band_valid(dev, MT_BAND2);
dev->tbtc_support = mt7996_band_valid(dev, MT_BAND1) &&
diff --git a/mt7996/mt7996.h b/mt7996/mt7996.h
index 3964035..efdcff7 100644
--- a/mt7996/mt7996.h
+++ b/mt7996/mt7996.h
@@ -36,6 +36,7 @@
#define MT7996_ROM_PATCH "mediatek/mt7996/mt7996_rom_patch.bin"
#define MT7996_EEPROM_DEFAULT "mediatek/mt7996/mt7996_eeprom.bin"
+#define MT7996_EEPROM_DEFAULT_404 "mediatek/mt7996/mt7996_eeprom_dual_404.bin"
#define MT7996_EEPROM_DEFAULT_TM "mediatek/mt7996/mt7996_eeprom_tm.bin"
#define MT7996_EEPROM_SIZE 7680
#define MT7996_EEPROM_BLOCK_SIZE 16
@@ -83,6 +84,11 @@ struct mt7996_sta;
struct mt7996_dfs_pulse;
struct mt7996_dfs_pattern;
+enum mt7996_sku_type {
+ MT7996_SKU_404,
+ MT7996_SKU_444,
+};
+
enum mt7996_ram_type {
MT7996_RAM_TYPE_WM,
MT7996_RAM_TYPE_WM_TM = MT7996_RAM_TYPE_WM,
@@ -264,6 +270,8 @@ struct mt7996_dev {
struct cfg80211_chan_def rdd2_chandef;
struct mt7996_phy *rdd2_phy;
+ u8 chip_sku;
+
u16 chainmask;
u8 chainshift[__MT_MAX_BAND];
u32 hif_idx;
@@ -417,6 +425,23 @@ mt7996_phy3(struct mt7996_dev *dev)
return __mt7996_phy(dev, MT_BAND2);
}
+static inline int
+mt7996_get_chip_sku(struct mt7996_dev *dev)
+{
+ u32 val = mt76_rr(dev, MT_PAD_GPIO);
+
+ /* reserve for future variants */
+ switch (mt76_chip(&dev->mt76)) {
+ case 0x7990:
+ dev->chip_sku = FIELD_GET(MT_PAD_GPIO_ADIE_COMB, val) <= 1;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
static inline bool
mt7996_band_valid(struct mt7996_dev *dev, u8 band)
{
@@ -424,8 +449,7 @@ mt7996_band_valid(struct mt7996_dev *dev, u8 band)
return band <= MT_BAND1;
/* tri-band support */
- if (band <= MT_BAND2 &&
- mt76_get_field(dev, MT_PAD_GPIO, MT_PAD_GPIO_ADIE_COMB) <= 1)
+ if (band <= MT_BAND2 && dev->chip_sku)
return true;
return band == MT_BAND0 || band == MT_BAND2;
--
2.18.0