@@ -87,6 +87,7 @@ enum qca_flags {
8787enum 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 = {
21542155static 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
21602162static 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
21962199static 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
22102214static 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