BRCMF_FW_CLM_DEF(4378B1, "brcmfmac4378b1-pcie");
 BRCMF_FW_CLM_DEF(4378B3, "brcmfmac4378b3-pcie");
 BRCMF_FW_CLM_DEF(4387C2, "brcmfmac4387c2-pcie");
+BRCMF_FW_CLM_DEF(54591, "brcmfmac54591-pcie");
 
 /* firmware config files */
 MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.txt");
        BRCMF_FW_ENTRY(BRCM_CC_4350_CHIP_ID, 0xFFFFFF00, 4350),
        BRCMF_FW_ENTRY(BRCM_CC_43525_CHIP_ID, 0xFFFFFFF0, 4365C),
        BRCMF_FW_ENTRY(BRCM_CC_4355_CHIP_ID, 0x000007FF, 4355),
+       BRCMF_FW_ENTRY(BRCM_CC_4355_CHIP_ID, 0x00002000, 54591),
        BRCMF_FW_ENTRY(BRCM_CC_4355_CHIP_ID, 0xFFFFF800, 4355C1), /* rev ID 12/C2 seen */
        BRCMF_FW_ENTRY(BRCM_CC_4356_CHIP_ID, 0xFFFFFFFF, 4356),
        BRCMF_FW_ENTRY(BRCM_CC_43567_CHIP_ID, 0xFFFFFFFF, 43570),
        if (ret)
                goto fail_bus;
 
-       ret = brcmf_pcie_read_otp(devinfo);
-       if (ret) {
-               brcmf_err(bus, "failed to parse OTP\n");
-               goto fail_brcmf;
+       /* otp read operation */
+       switch (bus->fwvid) {
+       case BRCMF_FWVENDOR_WCC:
+       case BRCMF_FWVENDOR_BCA:
+               ret = brcmf_pcie_read_otp(devinfo);
+               if (ret) {
+                       brcmf_err(bus, "failed to parse OTP\n");
+                       goto fail_brcmf;
+               }
+               break;
+       case BRCMF_FWVENDOR_CYW:
+       default:
+               break;
        }
 
 #ifdef DEBUG
        BRCMF_PCIE_DEVICE(BRCM_PCIE_4378_DEVICE_ID, WCC_SEED),
        BRCMF_PCIE_DEVICE(BRCM_PCIE_4387_DEVICE_ID, WCC_SEED),
        BRCMF_PCIE_DEVICE(BRCM_PCIE_43752_DEVICE_ID, WCC_SEED),
-
+       BRCMF_PCIE_DEVICE(CY_PCIE_54591_DEVICE_ID, CYW),
        { /* end: all zeroes */ }
 };