Skip to content

Commit 7ea01f6

Browse files
authored
bt: hci_qca: support BT audio HFP split mode (#328)
bt: hci_qca: support BT audio HFP split mode
2 parents c917801 + 5f774b2 commit 7ea01f6

1 file changed

Lines changed: 13 additions & 6 deletions

File tree

drivers/bluetooth/hci_qca.c

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ enum qca_flags {
8787
enum qca_capabilities {
8888
QCA_CAP_WIDEBAND_SPEECH = BIT(0),
8989
QCA_CAP_VALID_LE_STATES = BIT(1),
90+
QCA_CAP_HFP_HW_OFFLOAD = BIT(2),
9091
};
9192

9293
/* HCI_IBS transmit side sleep protocol states */
@@ -229,6 +230,7 @@ struct qca_serdev {
229230
u32 init_speed;
230231
u32 oper_speed;
231232
bool bdaddr_property_broken;
233+
bool support_hfp_hw_offload;
232234
const char *firmware_name[2];
233235
};
234236

@@ -1912,7 +1914,7 @@ static int qca_setup(struct hci_uart *hu)
19121914
const char *rampatch_name = qca_get_rampatch_name(hu);
19131915
int ret;
19141916
struct qca_btsoc_version ver;
1915-
struct qca_serdev *qcadev;
1917+
struct qca_serdev *qcadev = serdev_device_get_drvdata(hu->serdev);
19161918
const char *soc_name;
19171919

19181920
ret = qca_check_speeds(hu);
@@ -1976,7 +1978,6 @@ static int qca_setup(struct hci_uart *hu)
19761978
case QCA_WCN6750:
19771979
case QCA_WCN6855:
19781980
case QCA_WCN7850:
1979-
qcadev = serdev_device_get_drvdata(hu->serdev);
19801981
if (qcadev->bdaddr_property_broken)
19811982
hci_set_quirk(hdev, HCI_QUIRK_BDADDR_PROPERTY_BROKEN);
19821983

@@ -2070,7 +2071,7 @@ static int qca_setup(struct hci_uart *hu)
20702071
else
20712072
hu->hdev->set_bdaddr = qca_set_bdaddr;
20722073

2073-
if (soc_type == QCA_QCA2066)
2074+
if (qcadev->support_hfp_hw_offload)
20742075
qca_configure_hfp_offload(hdev);
20752076

20762077
qca->fw_version = le16_to_cpu(ver.patch_ver);
@@ -2154,7 +2155,8 @@ static const struct qca_device_data qca_soc_data_wcn3998 __maybe_unused = {
21542155
static const struct qca_device_data qca_soc_data_qca2066 __maybe_unused = {
21552156
.soc_type = QCA_QCA2066,
21562157
.num_vregs = 0,
2157-
.capabilities = QCA_CAP_WIDEBAND_SPEECH | QCA_CAP_VALID_LE_STATES,
2158+
.capabilities = QCA_CAP_WIDEBAND_SPEECH | QCA_CAP_VALID_LE_STATES |
2159+
QCA_CAP_HFP_HW_OFFLOAD,
21582160
};
21592161

21602162
static const struct qca_device_data qca_soc_data_qca6390 __maybe_unused = {
@@ -2190,7 +2192,8 @@ static const struct qca_device_data qca_soc_data_wcn6855 __maybe_unused = {
21902192
{ "vddrfa1p2", 257000 },
21912193
},
21922194
.num_vregs = 6,
2193-
.capabilities = QCA_CAP_WIDEBAND_SPEECH | QCA_CAP_VALID_LE_STATES,
2195+
.capabilities = QCA_CAP_WIDEBAND_SPEECH | QCA_CAP_VALID_LE_STATES |
2196+
QCA_CAP_HFP_HW_OFFLOAD,
21942197
};
21952198

21962199
static const struct qca_device_data qca_soc_data_wcn7850 __maybe_unused = {
@@ -2204,7 +2207,8 @@ static const struct qca_device_data qca_soc_data_wcn7850 __maybe_unused = {
22042207
{ "vddrfa1p9", 302000 },
22052208
},
22062209
.num_vregs = 6,
2207-
.capabilities = QCA_CAP_WIDEBAND_SPEECH | QCA_CAP_VALID_LE_STATES,
2210+
.capabilities = QCA_CAP_WIDEBAND_SPEECH | QCA_CAP_VALID_LE_STATES |
2211+
QCA_CAP_HFP_HW_OFFLOAD,
22082212
};
22092213

22102214
static void qca_power_shutdown(struct hci_uart *hu)
@@ -2540,6 +2544,9 @@ static int qca_serdev_probe(struct serdev_device *serdev)
25402544

25412545
if (!(data->capabilities & QCA_CAP_VALID_LE_STATES))
25422546
hci_set_quirk(hdev, HCI_QUIRK_BROKEN_LE_STATES);
2547+
2548+
if (data->capabilities & QCA_CAP_HFP_HW_OFFLOAD)
2549+
qcadev->support_hfp_hw_offload = true;
25432550
}
25442551

25452552
return 0;

0 commit comments

Comments
 (0)