wifi: mt76: mt7915: add fallback in case of missing precal data
authorFelix Fietkau <nbd@nbd.name>
Mon, 18 Mar 2024 09:32:22 +0000 (10:32 +0100)
committerFelix Fietkau <nbd@nbd.name>
Thu, 2 May 2024 10:44:50 +0000 (12:44 +0200)
When pre-calibration data is missing, do not fail the driver probe.
Instead, just print a warning and fall back to regular calibration.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c
drivers/net/wireless/mediatek/mt76/mt7915/init.c
drivers/net/wireless/mediatek/mt76/mt7915/main.c

index 5fdcbb521ff74c19fad0138d6593904b23753693..bfdbc15abaa9a733a9800b7402f0a27b4d4015d5 100644 (file)
@@ -28,7 +28,15 @@ static int mt7915_eeprom_load_precal(struct mt7915_dev *dev)
        if (!ret)
                return ret;
 
-       return mt76_get_of_data_from_nvmem(mdev, dev->cal, "precal", size);
+       ret = mt76_get_of_data_from_nvmem(mdev, dev->cal, "precal", size);
+       if (!ret)
+               return ret;
+
+       dev_warn(mdev->dev, "missing precal data, size=%d\n", size);
+       devm_kfree(mdev->dev, dev->cal);
+       dev->cal = NULL;
+
+       return ret;
 }
 
 static int mt7915_check_eeprom(struct mt7915_dev *dev)
@@ -254,10 +262,7 @@ int mt7915_eeprom_init(struct mt7915_dev *dev)
                        return ret;
        }
 
-       ret = mt7915_eeprom_load_precal(dev);
-       if (ret)
-               return ret;
-
+       mt7915_eeprom_load_precal(dev);
        mt7915_eeprom_parse_hw_cap(dev, &dev->phy);
        memcpy(dev->mphy.macaddr, dev->mt76.eeprom.data + MT_EE_MAC_ADDR,
               ETH_ALEN);
index d9e391fbb4bfd74a16928583c5e436f4bfd3c4b6..a978f434dc5e64b89822e28310b58dfdd70f74b0 100644 (file)
@@ -823,7 +823,7 @@ mt7915_init_hardware(struct mt7915_dev *dev, struct mt7915_phy *phy2)
        if (ret < 0)
                return ret;
 
-       if (dev->flash_mode) {
+       if (dev->cal) {
                ret = mt7915_mcu_apply_group_cal(dev);
                if (ret)
                        return ret;
index 49d5b459fb449ee8d4e6634703e76674972d46b9..b16a6336690745e28e54798106bf59bead97b365 100644 (file)
@@ -329,7 +329,7 @@ int mt7915_set_channel(struct mt7915_phy *phy)
 
        mt76_set_channel(phy->mt76);
 
-       if (dev->flash_mode) {
+       if (dev->cal) {
                ret = mt7915_mcu_apply_tx_dpd(phy);
                if (ret)
                        goto out;