mt76: mt7615: add eeprom support for MT7622
authorFelix Fietkau <nbd@nbd.name>
Tue, 17 Dec 2019 11:56:00 +0000 (12:56 +0100)
committerFelix Fietkau <nbd@nbd.name>
Fri, 14 Feb 2020 09:06:07 +0000 (10:06 +0100)
When sending EEPROM data to the MCU, MT7622 uses a longer buffer

Co-developed-by: Shayne Chen <shayne.chen@mediatek.com>
Co-developed-by: Ryder Lee <ryder.lee@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c
drivers/net/wireless/mediatek/mt76/mt7615/eeprom.h
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c

index c295c00759afe8005e69cba059a63672bc07b13e..50ed6bd38f8b0e5806e415496ea92d201e2d08d4 100644 (file)
@@ -84,6 +84,7 @@ static int mt7615_check_eeprom(struct mt76_dev *dev)
 
        switch (val) {
        case 0x7615:
+       case 0x7622:
                return 0;
        default:
                return -EINVAL;
index c3bc69ac210ec89d86a1e8d723ed47171699769e..18c7301521b7102914e87b4d7843b3eda10ff8da 100644 (file)
@@ -21,7 +21,8 @@ enum mt7615_eeprom_field {
        MT_EE_TX2_5G_G0_TARGET_POWER =          0x142,
        MT_EE_TX3_5G_G0_TARGET_POWER =          0x16a,
 
-       __MT_EE_MAX =                           0x3bf
+       MT7615_EE_MAX =                         0x3bf,
+       MT7622_EE_MAX =                         0x3db,
 };
 
 #define MT_EE_NIC_CONF_TX_MASK                 GENMASK(7, 4)
index 2352e7687790fd040defce8c06f8787509300819..e51e584bf81f94125e401fffbe28feea5f0f9488 100644 (file)
@@ -621,18 +621,23 @@ int mt7615_mcu_set_eeprom(struct mt7615_dev *dev)
                __le16 len;
        } __packed req_hdr = {
                .buffer_mode = 1,
-               .len = cpu_to_le16(__MT_EE_MAX - MT_EE_NIC_CONF_0),
        };
-       int ret, len = sizeof(req_hdr) + __MT_EE_MAX - MT_EE_NIC_CONF_0;
+       int ret, len, eep_len;
        u8 *req, *eep = (u8 *)dev->mt76.eeprom.data;
 
+       if (is_mt7622(&dev->mt76))
+               eep_len = MT7622_EE_MAX - MT_EE_NIC_CONF_0;
+       else
+               eep_len = MT7615_EE_MAX - MT_EE_NIC_CONF_0;
+
+       len = sizeof(req_hdr) + eep_len;
        req = kzalloc(len, GFP_KERNEL);
        if (!req)
                return -ENOMEM;
 
+       req_hdr.len = cpu_to_le16(eep_len);
        memcpy(req, &req_hdr, sizeof(req_hdr));
-       memcpy(req + sizeof(req_hdr), eep + MT_EE_NIC_CONF_0,
-              __MT_EE_MAX - MT_EE_NIC_CONF_0);
+       memcpy(req + sizeof(req_hdr), eep + MT_EE_NIC_CONF_0, eep_len);
 
        ret = __mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_EFUSE_BUFFER_MODE,
                                  req, len, true);
@@ -1285,7 +1290,7 @@ int mt7615_mcu_set_tx_power(struct mt7615_phy *phy)
        };
        s8 tx_power;
 
-       len = sizeof(req_hdr) + __MT_EE_MAX - MT_EE_NIC_CONF_0;
+       len = sizeof(req_hdr) + MT7615_EE_MAX - MT_EE_NIC_CONF_0;
        req = kzalloc(len, GFP_KERNEL);
        if (!req)
                return -ENOMEM;
@@ -1293,7 +1298,7 @@ int mt7615_mcu_set_tx_power(struct mt7615_phy *phy)
        memcpy(req, &req_hdr, sizeof(req_hdr));
        data = req + sizeof(req_hdr);
        memcpy(data, eep + MT_EE_NIC_CONF_0,
-              __MT_EE_MAX - MT_EE_NIC_CONF_0);
+              MT7615_EE_MAX - MT_EE_NIC_CONF_0);
 
        tx_power = hw->conf.power_level * 2;
        switch (n_chains) {