/* Intel Bluetooth devices */
        { USB_DEVICE(0x8087, 0x0025), .driver_info = BTUSB_INTEL_NEW },
        { USB_DEVICE(0x8087, 0x0026), .driver_info = BTUSB_INTEL_NEW },
+       { USB_DEVICE(0x8087, 0x0029), .driver_info = BTUSB_INTEL_NEW },
        { USB_DEVICE(0x8087, 0x07da), .driver_info = BTUSB_CSR },
        { USB_DEVICE(0x8087, 0x07dc), .driver_info = BTUSB_INTEL },
        { USB_DEVICE(0x8087, 0x0a2a), .driver_info = BTUSB_INTEL },
        return -EILSEQ;
 }
 
+static bool btusb_setup_intel_new_get_fw_name(struct intel_version *ver,
+                                            struct intel_boot_params *params,
+                                            char *fw_name, size_t len,
+                                            const char *suffix)
+{
+       switch (ver->hw_variant) {
+       case 0x0b:      /* SfP */
+       case 0x0c:      /* WsP */
+               snprintf(fw_name, len, "intel/ibt-%u-%u.%s",
+                       le16_to_cpu(ver->hw_variant),
+                       le16_to_cpu(params->dev_revid),
+                       suffix);
+               break;
+       case 0x11:      /* JfP */
+       case 0x12:      /* ThP */
+       case 0x13:      /* HrP */
+       case 0x14:      /* CcP */
+               snprintf(fw_name, len, "intel/ibt-%u-%u-%u.%s",
+                       le16_to_cpu(ver->hw_variant),
+                       le16_to_cpu(ver->hw_revision),
+                       le16_to_cpu(ver->fw_revision),
+                       suffix);
+               break;
+       default:
+               return false;
+       }
+       return true;
+}
+
 static int btusb_setup_intel_new(struct hci_dev *hdev)
 {
        struct btusb_data *data = hci_get_drvdata(hdev);
        case 0x11:      /* JfP */
        case 0x12:      /* ThP */
        case 0x13:      /* HrP */
-       case 0x14:      /* QnJ, IcP */
+       case 0x14:      /* CcP */
                break;
        default:
                bt_dev_err(hdev, "Unsupported Intel hardware variant (%u)",
         * ibt-<hw_variant>-<hw_revision>-<fw_revision>.sfi.
         *
         */
-       switch (ver.hw_variant) {
-       case 0x0b:      /* SfP */
-       case 0x0c:      /* WsP */
-               snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u.sfi",
-                        le16_to_cpu(ver.hw_variant),
-                        le16_to_cpu(params.dev_revid));
-               break;
-       case 0x11:      /* JfP */
-       case 0x12:      /* ThP */
-       case 0x13:      /* HrP */
-       case 0x14:      /* QnJ, IcP */
-               snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u-%u.sfi",
-                        le16_to_cpu(ver.hw_variant),
-                        le16_to_cpu(ver.hw_revision),
-                        le16_to_cpu(ver.fw_revision));
-               break;
-       default:
+       err = btusb_setup_intel_new_get_fw_name(&ver, ¶ms, fwname,
+                                               sizeof(fwname), "sfi");
+       if (!err) {
                bt_dev_err(hdev, "Unsupported Intel firmware naming");
                return -EINVAL;
        }
        /* Save the DDC file name for later use to apply once the firmware
         * downloading is done.
         */
-       switch (ver.hw_variant) {
-       case 0x0b:      /* SfP */
-       case 0x0c:      /* WsP */
-               snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u.ddc",
-                        le16_to_cpu(ver.hw_variant),
-                        le16_to_cpu(params.dev_revid));
-               break;
-       case 0x11:      /* JfP */
-       case 0x12:      /* ThP */
-       case 0x13:      /* HrP */
-       case 0x14:      /* QnJ, IcP */
-               snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u-%u.ddc",
-                        le16_to_cpu(ver.hw_variant),
-                        le16_to_cpu(ver.hw_revision),
-                        le16_to_cpu(ver.fw_revision));
-               break;
-       default:
+       err = btusb_setup_intel_new_get_fw_name(&ver, ¶ms, fwname,
+                                               sizeof(fwname), "ddc");
+       if (!err) {
                bt_dev_err(hdev, "Unsupported Intel firmware naming");
                return -EINVAL;
        }