return err;
 }
 
+static int btintel_get_codec_config_data(struct hci_dev *hdev,
+                                        __u8 link, struct bt_codec *codec,
+                                        __u8 *ven_len, __u8 **ven_data)
+{
+       int err = 0;
+
+       if (!ven_data || !ven_len)
+               return -EINVAL;
+
+       *ven_len = 0;
+       *ven_data = NULL;
+
+       if (link != ESCO_LINK) {
+               bt_dev_err(hdev, "Invalid link type(%u)", link);
+               return -EINVAL;
+       }
+
+       *ven_data = kmalloc(sizeof(__u8), GFP_KERNEL);
+       if (!ven_data) {
+               err = -ENOMEM;
+               goto error;
+       }
+
+       /* supports only CVSD and mSBC offload codecs */
+       switch (codec->id) {
+       case 0x02:
+               **ven_data = 0x00;
+               break;
+       case 0x05:
+               **ven_data = 0x01;
+               break;
+       default:
+               err = -EINVAL;
+               bt_dev_err(hdev, "Invalid codec id(%u)", codec->id);
+               goto error;
+       }
+       /* codec and its capabilities are pre-defined to ids
+        * preset id = 0x00 represents CVSD codec with sampling rate 8K
+        * preset id = 0x01 represents mSBC codec with sampling rate 16K
+        */
+       *ven_len = sizeof(__u8);
+       return err;
+
+error:
+       kfree(*ven_data);
+       *ven_data = NULL;
+       return err;
+}
+
 static int btintel_get_data_path_id(struct hci_dev *hdev, __u8 *data_path_id)
 {
        /* Intel uses 1 as data path id for all the usecases */
                goto error;
        }
 
-       if (use_cases->preset[0] & 0x03)
+       if (use_cases->preset[0] & 0x03) {
                hdev->get_data_path_id = btintel_get_data_path_id;
+               hdev->get_codec_config_data = btintel_get_codec_config_data;
+       }
 error:
        kfree_skb(skb);
        return err;