+#ifdef TIZEN_BT
+/* WBC/NBC feature */
+void sco_connect_set_gw_nbc(struct hci_dev *hdev)
+{
+ struct hci_cp_write_voice_setting cp1;
+ struct hci_cp_bcm_wbs_req cp2;
+ struct hci_cp_i2c_pcm_req cp3;
+ struct hci_cp_sco_pcm_req cp4;
+
+ BT_DBG("Setting the NBC params, hdev = %p", hdev);
+
+ cp1.voice_setting = cpu_to_le16(0x0060);
+ hci_send_cmd(hdev, HCI_OP_WRITE_VOICE_SETTING, sizeof(cp1), &cp1);
+ hdev->voice_setting = cpu_to_le16(0x0060);
+
+ cp2.role = 0x00; /* WbDisable */
+ cp2.pkt_type = cpu_to_le16(0x0002);
+ hci_send_cmd(hdev, HCI_BCM_ENABLE_WBS_REQ, sizeof(cp2), &cp2);
+
+ cp3.i2c_enable = 0x01;
+ cp3.is_master = 0x00;
+ cp3.pcm_rate = 0x00;
+ cp3.clock_rate = 0x01;
+ hci_send_cmd(hdev, HCI_BCM_I2C_PCM_REQ, sizeof(cp3), &cp3);
+
+ cp4.sco_routing = 0x00;
+ cp4.pcm_rate = 0x01;
+ cp4.frame_type = 0x00;
+ cp4.sync_mode = 0x00;
+ cp4.clock_mode = 0x00;
+ hci_send_cmd(hdev, HCI_BCM_SCO_PCM_REQ, sizeof(cp4), &cp4);
+}
+
+void sco_connect_set_gw_wbc(struct hci_dev *hdev)
+{
+ struct hci_cp_write_voice_setting cp1;
+ struct hci_cp_bcm_wbs_req cp2;
+ struct hci_cp_i2c_pcm_req cp3;
+ struct hci_cp_sco_pcm_req cp4;
+
+ BT_DBG("Setting the WBC params, hdev = %p", hdev);
+ cp1.voice_setting = cpu_to_le16(0x0003 | 0x0060);
+ hci_send_cmd(hdev, HCI_OP_WRITE_VOICE_SETTING, sizeof(cp1), &cp1);
+ hdev->voice_setting = cpu_to_le16(0x0003 | 0x0060);
+
+ cp2.role = 0x01; /* Enable */
+ cp2.pkt_type = cpu_to_le16(0x0002);
+ hci_send_cmd(hdev, HCI_BCM_ENABLE_WBS_REQ, sizeof(cp2), &cp2);
+
+ cp3.i2c_enable = 0x00;
+ cp3.is_master = 0x00;
+ cp3.pcm_rate = 0x01;
+ cp3.clock_rate = 0x02;
+ hci_send_cmd(hdev, HCI_BCM_I2C_PCM_REQ, sizeof(cp3), &cp3);
+
+ cp4.sco_routing = 0x00;
+ cp4.pcm_rate = 0x00;
+ cp4.frame_type = 0x00;
+ cp4.sync_mode = 0x00;
+ cp4.clock_mode = 0x00;
+ hci_send_cmd(hdev, HCI_BCM_SCO_PCM_REQ, sizeof(cp4), &cp4);
+}
+
+void sco_connect_set_nbc(struct hci_dev *hdev)
+{
+ struct hci_cp_write_voice_setting cp1;
+ struct hci_cp_bcm_wbs_req cp2;
+ struct hci_cp_i2c_pcm_req cp3;
+ struct hci_cp_sco_pcm_req cp4;
+
+ BT_DBG("Setting the NBC params, hdev = %p", hdev);
+
+ cp1.voice_setting = cpu_to_le16(0x0060);
+ hci_send_cmd(hdev, HCI_OP_WRITE_VOICE_SETTING, sizeof(cp1), &cp1);
+ hdev->voice_setting = cpu_to_le16(0x0060);
+
+ cp2.role = 0x00; /* WbDisable */
+ cp2.pkt_type = cpu_to_le16(0x0002);
+ hci_send_cmd(hdev, HCI_BCM_ENABLE_WBS_REQ, sizeof(cp2), &cp2);
+
+ cp3.i2c_enable = 0x00;
+ cp3.is_master = 0x00;
+ cp3.pcm_rate = 0x00;
+ cp3.clock_rate = 0x04;
+ hci_send_cmd(hdev, HCI_BCM_I2C_PCM_REQ, sizeof(cp3), &cp3);
+
+ cp4.sco_routing = 0x00;
+ cp4.pcm_rate = 0x04;
+ cp4.frame_type = 0x00;
+ cp4.sync_mode = 0x00;
+ cp4.clock_mode = 0x00;
+ hci_send_cmd(hdev, HCI_BCM_SCO_PCM_REQ, sizeof(cp4), &cp4);
+}
+
+void sco_connect_set_wbc(struct hci_dev *hdev)
+{
+ struct hci_cp_write_voice_setting cp1;
+ struct hci_cp_bcm_wbs_req cp2;
+ struct hci_cp_i2c_pcm_req cp3;
+ struct hci_cp_sco_pcm_req cp4;
+
+ BT_DBG("Setting the WBC params, hdev = %p", hdev);
+ cp1.voice_setting = cpu_to_le16(0x0003 | 0x0060);
+ hci_send_cmd(hdev, HCI_OP_WRITE_VOICE_SETTING, sizeof(cp1), &cp1);
+ hdev->voice_setting = cpu_to_le16(0x0003 | 0x0060);
+
+ cp2.role = 0x01; /* Enable */
+ cp2.pkt_type = cpu_to_le16(0x0002);
+ hci_send_cmd(hdev, HCI_BCM_ENABLE_WBS_REQ, sizeof(cp2), &cp2);
+
+ cp3.i2c_enable = 0x00;
+ cp3.is_master = 0x00;
+ cp3.pcm_rate = 0x01;
+ cp3.clock_rate = 0x04;
+ hci_send_cmd(hdev, HCI_BCM_I2C_PCM_REQ, sizeof(cp3), &cp3);
+
+ cp4.sco_routing = 0x00;
+ cp4.pcm_rate = 0x04;
+ cp4.frame_type = 0x00;
+ cp4.sync_mode = 0x00;
+ cp4.clock_mode = 0x00;
+ hci_send_cmd(hdev, HCI_BCM_SCO_PCM_REQ, sizeof(cp4), &cp4);
+}
+#endif
+