switch (val) {
        case 0x7915:
+       case 0x7916:
                return 0;
        default:
                return -EINVAL;
        if (dev->dbdc_support)
                default_bin = MT7915_EEPROM_DEFAULT_DBDC;
 
+       if (!is_mt7915(&dev->mt76))
+               default_bin = MT7916_EEPROM_DEFAULT;
+
        ret = request_firmware(&fw, default_bin, dev->mt76.dev);
        if (ret)
                return ret;
                goto out;
        }
 
-       memcpy(eeprom, fw->data, MT7915_EEPROM_SIZE);
+       memcpy(eeprom, fw->data, mt7915_eeprom_size(dev));
        dev->flash_mode = true;
 
 out:
 static int mt7915_eeprom_load(struct mt7915_dev *dev)
 {
        int ret;
+       u16 eeprom_size = mt7915_eeprom_size(dev);
 
-       ret = mt76_eeprom_init(&dev->mt76, MT7915_EEPROM_SIZE);
+       ret = mt76_eeprom_init(&dev->mt76, eeprom_size);
        if (ret < 0)
                return ret;
 
                        return -EINVAL;
 
                /* read eeprom data from efuse */
-               block_num = DIV_ROUND_UP(MT7915_EEPROM_SIZE,
+               block_num = DIV_ROUND_UP(eeprom_size,
                                         MT7915_EEPROM_BLOCK_SIZE);
                for (i = 0; i < block_num; i++)
                        mt7915_mcu_get_eeprom(dev,
 
 #define PAGE_IDX_MASK          GENMASK(4, 2)
 #define PER_PAGE_SIZE          0x400
        struct mt7915_mcu_eeprom req = { .buffer_mode = EE_MODE_BUFFER };
-       u8 total = DIV_ROUND_UP(MT7915_EEPROM_SIZE, PER_PAGE_SIZE);
+       u16 eeprom_size = mt7915_eeprom_size(dev);
+       u8 total = DIV_ROUND_UP(eeprom_size, PER_PAGE_SIZE);
        u8 *eep = (u8 *)dev->mt76.eeprom.data;
        int eep_len;
        int i;
                struct sk_buff *skb;
                int ret;
 
-               if (i == total - 1 && !!(MT7915_EEPROM_SIZE % PER_PAGE_SIZE))
-                       eep_len = MT7915_EEPROM_SIZE % PER_PAGE_SIZE;
+               if (i == total - 1 && !!(eeprom_size % PER_PAGE_SIZE))
+                       eep_len = eeprom_size % PER_PAGE_SIZE;
                else
                        eep_len = PER_PAGE_SIZE;
 
 
 
 #define MT7915_EEPROM_DEFAULT          "mediatek/mt7915_eeprom.bin"
 #define MT7915_EEPROM_DEFAULT_DBDC     "mediatek/mt7915_eeprom_dbdc.bin"
+#define MT7916_EEPROM_DEFAULT          "mediatek/mt7916_eeprom.bin"
 
 #define MT7915_EEPROM_SIZE             3584
+#define MT7916_EEPROM_SIZE             4096
+
 #define MT7915_EEPROM_BLOCK_SIZE       16
 #define MT7915_TOKEN_SIZE              8192
 
        return is_mt7915(&dev->mt76) ? MT7915_WTBL_SIZE : MT7916_WTBL_SIZE;
 }
 
+static inline u16 mt7915_eeprom_size(struct mt7915_dev *dev)
+{
+       return is_mt7915(&dev->mt76) ? MT7915_EEPROM_SIZE : MT7916_EEPROM_SIZE;
+}
+
 void mt7915_dual_hif_set_irq_mask(struct mt7915_dev *dev, bool write_reg,
                                  u32 clear, u32 set);