QCC2072 is a family of WiFi/BT connectivity chip.
It requires different firmware files and has different
configurations , so add it as a separate SoC type.
Correct the sorting of other chipsets for better readability.
The firmware for these chips has been recently added to the
linux-firmware repository and will be a part of the upcoming
release.
Signed-off-by: Vivek Sahu <vivek.sahu@oss.qualcomm.com>
---
drivers/bluetooth/btqca.c | 41 ++++++++++++++++++++++---------------
drivers/bluetooth/btqca.h | 1 +
drivers/bluetooth/hci_qca.c | 40 ++++++++++++++++++++++++++----------
3 files changed, 54 insertions(+), 28 deletions(-)
diff --git a/drivers/bluetooth/btqca.c b/drivers/bluetooth/btqca.c
index 7c958d6065be..9b9f4b435032 100644
--- a/drivers/bluetooth/btqca.c
+++ b/drivers/bluetooth/btqca.c
@@ -816,6 +816,17 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
snprintf(config.fwname, sizeof(config.fwname), "qca/%s", rampatch_name);
} else {
switch (soc_type) {
+ case QCA_QCA2066:
+ snprintf(config.fwname, sizeof(config.fwname),
+ "qca/hpbtfw%02x.tlv", rom_ver);
+ break;
+ case QCA_QCA6390:
+ snprintf(config.fwname, sizeof(config.fwname),
+ "qca/htbtfw%02x.tlv", rom_ver);
+ break;
+ case QCA_QCC2072:
+ snprintf(config.fwname, sizeof(config.fwname),
+ "qca/ornbtfw%02x.tlv", rom_ver);
case QCA_WCN3950:
snprintf(config.fwname, sizeof(config.fwname),
"qca/cmbtfw%02x.tlv", rom_ver);
@@ -830,14 +841,6 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
snprintf(config.fwname, sizeof(config.fwname),
"qca/apbtfw%02x.tlv", rom_ver);
break;
- case QCA_QCA2066:
- snprintf(config.fwname, sizeof(config.fwname),
- "qca/hpbtfw%02x.tlv", rom_ver);
- break;
- case QCA_QCA6390:
- snprintf(config.fwname, sizeof(config.fwname),
- "qca/htbtfw%02x.tlv", rom_ver);
- break;
case QCA_WCN6750:
/* Choose mbn file by default.If mbn file is not found
* then choose tlv file
@@ -885,6 +888,19 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
}
} else {
switch (soc_type) {
+ case QCA_QCA2066:
+ qca_get_nvm_name_by_board(config.fwname,
+ sizeof(config.fwname), "hpnv", soc_type, ver,
+ rom_ver, boardid);
+ break;
+ case QCA_QCA6390:
+ snprintf(config.fwname, sizeof(config.fwname),
+ "qca/htnv%02x.bin", rom_ver);
+ break;
+ case QCA_QCC2072:
+ snprintf(config.fwname, sizeof(config.fwname),
+ "qca/ornnv%02x.bin", rom_ver);
+ break;
case QCA_WCN3950:
if (le32_to_cpu(ver.soc_id) == QCA_WCN3950_SOC_ID_T)
variant = "t";
@@ -907,15 +923,6 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
snprintf(config.fwname, sizeof(config.fwname),
"qca/apnv%02x.bin", rom_ver);
break;
- case QCA_QCA2066:
- qca_get_nvm_name_by_board(config.fwname,
- sizeof(config.fwname), "hpnv", soc_type, ver,
- rom_ver, boardid);
- break;
- case QCA_QCA6390:
- snprintf(config.fwname, sizeof(config.fwname),
- "qca/htnv%02x.bin", rom_ver);
- break;
case QCA_WCN6750:
snprintf(config.fwname, sizeof(config.fwname),
"qca/msnv%02x.bin", rom_ver);
diff --git a/drivers/bluetooth/btqca.h b/drivers/bluetooth/btqca.h
index 8f3c1b1c77b3..a175ac31e7b2 100644
--- a/drivers/bluetooth/btqca.h
+++ b/drivers/bluetooth/btqca.h
@@ -158,6 +158,7 @@ enum qca_btsoc_type {
QCA_WCN6750,
QCA_WCN6855,
QCA_WCN7850,
+ QCA_QCC2072,
};
#if IS_ENABLED(CONFIG_BT_QCA)
diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c
index 888176b0faa9..2ce6e19e5b86 100644
--- a/drivers/bluetooth/hci_qca.c
+++ b/drivers/bluetooth/hci_qca.c
@@ -623,6 +623,7 @@ static int qca_open(struct hci_uart *hu)
qcadev = serdev_device_get_drvdata(hu->serdev);
switch (qcadev->btsoc_type) {
+ case QCA_QCC2072:
case QCA_WCN3950:
case QCA_WCN3988:
case QCA_WCN3990:
@@ -1498,6 +1499,7 @@ static int qca_set_speed(struct hci_uart *hu, enum qca_speed_type speed_type)
* changing the baudrate of chip and host.
*/
switch (soc_type) {
+ case QCA_QCC2072:
case QCA_WCN3950:
case QCA_WCN3988:
case QCA_WCN3990:
@@ -1514,6 +1516,7 @@ static int qca_set_speed(struct hci_uart *hu, enum qca_speed_type speed_type)
}
switch (soc_type) {
+ case QCA_QCC2072:
case QCA_WCN3990:
reinit_completion(&qca->drop_ev_comp);
set_bit(QCA_DROP_VENDOR_EVENT, &qca->flags);
@@ -1533,6 +1536,7 @@ static int qca_set_speed(struct hci_uart *hu, enum qca_speed_type speed_type)
error:
switch (soc_type) {
+ case QCA_QCC2072:
case QCA_WCN3950:
case QCA_WCN3988:
case QCA_WCN3990:
@@ -1549,6 +1553,7 @@ static int qca_set_speed(struct hci_uart *hu, enum qca_speed_type speed_type)
}
switch (soc_type) {
+ case QCA_QCC2072:
case QCA_WCN3990:
/* Wait for the controller to send the vendor event
* for the baudrate change command.
@@ -1900,6 +1905,10 @@ static int qca_setup(struct hci_uart *hu)
soc_name = "qca2066";
break;
+ case QCA_QCC2072:
+ soc_name = "qcc2072";
+ break;
+
case QCA_WCN3950:
case QCA_WCN3988:
case QCA_WCN3990:
@@ -1935,6 +1944,7 @@ static int qca_setup(struct hci_uart *hu)
clear_bit(QCA_SSR_TRIGGERED, &qca->flags);
switch (soc_type) {
+ case QCA_QCC2072:
case QCA_WCN3950:
case QCA_WCN3988:
case QCA_WCN3990:
@@ -1969,6 +1979,7 @@ static int qca_setup(struct hci_uart *hu)
}
switch (soc_type) {
+ case QCA_QCC2072:
case QCA_WCN3950:
case QCA_WCN3988:
case QCA_WCN3990:
@@ -2058,6 +2069,23 @@ static const struct hci_uart_proto qca_proto = {
.dequeue = qca_dequeue,
};
+static const struct qca_device_data qca_soc_data_qca2066 __maybe_unused = {
+ .soc_type = QCA_QCA2066,
+ .num_vregs = 0,
+};
+
+static const struct qca_device_data qca_soc_data_qca6390 __maybe_unused = {
+ .soc_type = QCA_QCA6390,
+ .num_vregs = 0,
+ .capabilities = QCA_CAP_WIDEBAND_SPEECH | QCA_CAP_VALID_LE_STATES,
+};
+
+static const struct qca_device_data qca_soc_data_qcc2072 __maybe_unused = {
+ .soc_type = QCA_QCC2072,
+ .num_vregs = 0,
+ .capabilities = QCA_CAP_WIDEBAND_SPEECH | QCA_CAP_VALID_LE_STATES,
+};
+
static const struct qca_device_data qca_soc_data_wcn3950 __maybe_unused = {
.soc_type = QCA_WCN3950,
.vregs = (struct qca_vreg []) {
@@ -2114,17 +2142,6 @@ static const struct qca_device_data qca_soc_data_wcn3998 __maybe_unused = {
.num_vregs = 4,
};
-static const struct qca_device_data qca_soc_data_qca2066 __maybe_unused = {
- .soc_type = QCA_QCA2066,
- .num_vregs = 0,
- .capabilities = QCA_CAP_WIDEBAND_SPEECH | QCA_CAP_VALID_LE_STATES,
-};
-
-static const struct qca_device_data qca_soc_data_qca6390 __maybe_unused = {
- .soc_type = QCA_QCA6390,
- .num_vregs = 0,
-};
-
static const struct qca_device_data qca_soc_data_wcn6750 __maybe_unused = {
.soc_type = QCA_WCN6750,
.vregs = (struct qca_vreg []) {
@@ -2715,6 +2732,7 @@ static const struct of_device_id qca_bluetooth_of_match[] = {
{ .compatible = "qcom,qca6174-bt" },
{ .compatible = "qcom,qca6390-bt", .data = &qca_soc_data_qca6390},
{ .compatible = "qcom,qca9377-bt" },
+ { .compatible = "qcom,qcc2072-bt", .data = &qca_soc_data_qcc2072},
{ .compatible = "qcom,wcn3950-bt", .data = &qca_soc_data_wcn3950},
{ .compatible = "qcom,wcn3988-bt", .data = &qca_soc_data_wcn3988},
{ .compatible = "qcom,wcn3990-bt", .data = &qca_soc_data_wcn3990},
--
2.34.1
On Mon, 9 Feb 2026 09:06:13 +0100, Vivek Sahu <vivek.sahu@oss.qualcomm.com> said: > QCC2072 is a family of WiFi/BT connectivity chip. > It requires different firmware files and has different > configurations , so add it as a separate SoC type. > > Correct the sorting of other chipsets for better readability. > > The firmware for these chips has been recently added to the > linux-firmware repository and will be a part of the upcoming > release. Something is wrong with formatting here. I would personally split the sorting and support for the new model into two patches - without and with functional changes respectively - for easier review. Bartosz
On 2/9/2026 5:04 PM, Bartosz Golaszewski wrote: > On Mon, 9 Feb 2026 09:06:13 +0100, Vivek Sahu > <vivek.sahu@oss.qualcomm.com> said: >> QCC2072 is a family of WiFi/BT connectivity chip. >> It requires different firmware files and has different >> configurations , so add it as a separate SoC type. >> >> Correct the sorting of other chipsets for better readability. >> >> The firmware for these chips has been recently added to the >> linux-firmware repository and will be a part of the upcoming >> release. > Something is wrong with formatting here. > > I would personally split the sorting and support for the new model into two > patches - without and with functional changes respectively - for easier review. > > Bartosz Yes, I'm now splitting this patch into 2 parts, one for sorting another one for new model support. Please ignore this patch. Sorting change has been raised with tittle "[PATCH v1] Bluetooth: qca: Refactor code on the basis of chipset names". Please approve it at quickest so that we can raise new model addition code changes on top of that.
On Tue, Feb 10, 2026 at 05:41:13PM +0530, Vivek Sahu wrote: > > On 2/9/2026 5:04 PM, Bartosz Golaszewski wrote: > > On Mon, 9 Feb 2026 09:06:13 +0100, Vivek Sahu > > <vivek.sahu@oss.qualcomm.com> said: > > > QCC2072 is a family of WiFi/BT connectivity chip. > > > It requires different firmware files and has different > > > configurations , so add it as a separate SoC type. > > > > > > Correct the sorting of other chipsets for better readability. > > > > > > The firmware for these chips has been recently added to the > > > linux-firmware repository and will be a part of the upcoming > > > release. > > Something is wrong with formatting here. > > > > I would personally split the sorting and support for the new model into two > > patches - without and with functional changes respectively - for easier review. > > > > Bartosz > > Yes, I'm now splitting this patch into 2 parts, one for sorting another one > for new model > > support. Please ignore this patch. Please stop adding extra empty lines between (or fix your email client). > > Sorting change has been raised with tittle "[PATCH v1] Bluetooth: qca: > Refactor code on > > the basis of chipset names". Please approve it at quickest so that we can > raise new model > > addition code changes on top of that. Why couldn't you send it as 2 patches in a single series? -- With best wishes Dmitry
On 2/9/2026 5:04 PM, Bartosz Golaszewski wrote: > On Mon, 9 Feb 2026 09:06:13 +0100, Vivek Sahu > <vivek.sahu@oss.qualcomm.com> said: >> QCC2072 is a family of WiFi/BT connectivity chip. >> It requires different firmware files and has different >> configurations , so add it as a separate SoC type. >> >> Correct the sorting of other chipsets for better readability. >> >> The firmware for these chips has been recently added to the >> linux-firmware repository and will be a part of the upcoming >> release. > Something is wrong with formatting here. > > I would personally split the sorting and support for the new model into two > patches - without and with functional changes respectively - for easier review. > > Bartosz I'll divide this patch into 2 parts, one for sorting and another one for adding support for new chip-set.
© 2016 - 2026 Red Hat, Inc.