From nobody Tue Feb 10 19:48:03 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 87E3429B8E8 for ; Mon, 9 Feb 2026 08:06:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770624395; cv=none; b=mWuUjMBQp8erA3BqvUU7Ii/54ViKUUdra5P6IFgB9HRuJKU6AYlxlAOAPDK26PO3Mby0uB2aAvnFMDW0pImazQL5qsVUhqWJiaZATH3aHkeFeNFQCyEfOb0EJyJlT5US88HKlz+lfLzOcnPhmUBz3GDVe+a6tcsC7oELOylWOBE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770624395; c=relaxed/simple; bh=U5lMaOoZdvqp/rHwv4eXh+WPA2R1p9wSN37z76hWeew=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Dkz6U9JG1iWwo3rx8duRrl8DuQfbmzbENmxy8QIJBjHR7Rd0WMzO6Lr9M+Fg0LaYYhWbj8w2Xsf+VvFCx9I2QMa2NUOYq+w1p5e0rHrOn8IzKGIeJiwywetg49LaSpBbdHRZCeJ46oqFbSqi4bc0NgJqpjGlZbgaTZhP2YgSq7M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=QcTTOzAE; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=cBb1JEpH; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="QcTTOzAE"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="cBb1JEpH" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6195AGE01924447 for ; Mon, 9 Feb 2026 08:06:34 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=/8xGVV6TEm2 SRGgr+FOFMkPrOMpyCAVXyrEME5gPzxA=; b=QcTTOzAEPS86My9qXGZJk82u78q DwPCvTHQKvdSR13ApdW9oQ8ll0HlwcVh8rZfZVfGGsp/U3fJJf2UtBvFZa3pcR3Y IZD9P7Z6NRrdvjxq01tyOfVzioscd8S+RB45eVQgFz9wvgPxP+cftK3G1mq2oG3k q97EBvjngc6tUp6At964zvHRvQ+jYa6X2bTz/qmEwGOb7+jAI7rlqLD/GRVMzhw6 I1BgSQ5WehE7mwsfPng50c0/iDuMMM4D0oL42qGfxOaGUHyGqDQbmaWpr7boLu9D R64RxFbU6xPjN5VLJVQEv/1OL9EtzYgw+KZyi11s+Cpxv8iwIf65jHc7AEg== Received: from mail-pf1-f197.google.com (mail-pf1-f197.google.com [209.85.210.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4c796krk65-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 09 Feb 2026 08:06:33 +0000 (GMT) Received: by mail-pf1-f197.google.com with SMTP id d2e1a72fcca58-82436a49592so2235997b3a.2 for ; Mon, 09 Feb 2026 00:06:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1770624393; x=1771229193; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/8xGVV6TEm2SRGgr+FOFMkPrOMpyCAVXyrEME5gPzxA=; b=cBb1JEpHUqhXIU4Wo/OqWZOpVUuEb9nMta2TEYFcLqvndQy3v9V8/rqgEDUtnjQo9w sNLR+vdUNDC4sS2bMvKjvkoNAVZcNFCsbzDxfBvKevXmW9Ny+nDuye99kb+J8byWGgJa CzQhA3YzR6Dmxu0F03BxhLLJxGV/SgFSsJNhHXU8Hwp/xPQUoZpvD9xDzBLd9FcPLrZo hN1Cfi5oPy4EKcGelzDJQRj+3//eCMa9XvszFh5lldzZ1wBrjzfjAqlCCMmqBENCKX7u YhH5YqY0MN0EdTB7Uw06kt4zfcgHEFoGMA+tVCa7oHCA57hYNj4/EsNbF4fm4zhLIufq sNqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770624393; x=1771229193; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=/8xGVV6TEm2SRGgr+FOFMkPrOMpyCAVXyrEME5gPzxA=; b=At4dIfkwdlY4EyIwYGHjT0YRbNRLMDkK/NEKYKfVfsR5I9LU5TyBXJ8Sqiipf3ZTKQ vMK02LeZqK4zeVT8SL283IVr974JKewtfFod7gxnbdpELAs1Nq8FwZhqWC6F/NhzLqPS YMwBdZ0kbXOyb0ZKFiI09FJp3s0jeVCxstDg1GpijgYlGl+jZfzmfkbqcxWEAZBYkd74 4XjSNS5jBeO3rcPRV2ulYA2PFR3D7A0bxxGfnot/7FxHVi3k+MyyQdGXG1GGokeEW9EK h184e2SwHlSfvpqkjhjWe7rjmHiPMHb11ei8RuF/loifsuBIArM1WGgH+hd+oIubhmsT r1Tw== X-Forwarded-Encrypted: i=1; AJvYcCUG/hBVn8OfXr8P4N5dy894kvQLNkZxUcaNxruDafxugqZnbrGEVXoAjau11p3voJIyz1cB48TR4b90nko=@vger.kernel.org X-Gm-Message-State: AOJu0YzY/6yxd0V9UqMvgUjVpH6O5dIorcrxmVwQKuVll2H5n5EwRByV NjAvRweWm+oVBbSEX/GdiLTxOoNmmRIGNxKllir2YlrmXXL2E/FjDT0iDIb84LVcDOcOX+6ueJu YWDdgIiYKxC3ZX8979aqATLHAJFYpVaM1T8YKTegBFEOZlSsfebahhyNCRkaiwa95yqo= X-Gm-Gg: AZuq6aIKb1KYFK3Gt6A7pxTkhiKiDsBLULFItnKGr18MOzcDNPf9qByakcxkcZ2F6cS STnRfLe2upIMpt8BtUkGq38MPv+cfNlJOyCuy1i3hg4GNU4if/HfxNa8j6K18g3MJbMf5vqackd RgMhyUtfjnyNQ40bWmhLtlgpbF3SHjfFNaGZomizbDh1WQXrqyqJ06iQ68/J0G+ndDdFZv3s4iI ziSpbEnY6HN6FcPSqG8USDIVGA1boUCHgIqt2JXqGVDy7/U8sMTsjSm46ppggdZB1Ox9F6TpWvV d3vQQX/R+ERDyOE9OI7xbfAu49s6jTgs7yApxq1SOHsoFtOrSaZxiv+GY8OmWZIhfmG8q1Niw47 pqJKEAwnxY6Qb2FXoo2nM7y2/08ybvWSSGaKjH7Y= X-Received: by 2002:a05:6a21:1193:b0:35d:d477:a7f3 with SMTP id adf61e73a8af0-393acffd2b0mr9910941637.20.1770624392575; Mon, 09 Feb 2026 00:06:32 -0800 (PST) X-Received: by 2002:a05:6a21:1193:b0:35d:d477:a7f3 with SMTP id adf61e73a8af0-393acffd2b0mr9910907637.20.1770624392016; Mon, 09 Feb 2026 00:06:32 -0800 (PST) Received: from hu-vivesahu-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c6dcb4fb713sm9202221a12.3.2026.02.09.00.06.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Feb 2026 00:06:31 -0800 (PST) From: Vivek Sahu To: Marcel Holtmann , Luiz Augusto von Dentz , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bartosz Golaszewski , Balakrishna Godavarthi , Rocky Liao Cc: quic_mohamull@quicinc.com, quic_hbandi@quicinc.com, linux-bluetooth@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Vivek Sahu Subject: [PATCH v3 2/2] Bluetooth: qca: add QCC2072 support Date: Mon, 9 Feb 2026 13:36:13 +0530 Message-Id: <20260209080613.217578-3-vivek.sahu@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260209080613.217578-1-vivek.sahu@oss.qualcomm.com> References: <20260209080613.217578-1-vivek.sahu@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=IeyKmGqa c=1 sm=1 tr=0 ts=69899589 cx=c_pps a=rEQLjTOiSrHUhVqRoksmgQ==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=EUspDBNiAAAA:8 a=74lwPKb8uR0TJS9oFJ4A:9 a=2VI0MkxyNR6bbpdq8BZq:22 X-Proofpoint-ORIG-GUID: bmk5kcgbDMV6aUh3_Ih7K6DFdTo8ThKN X-Proofpoint-GUID: bmk5kcgbDMV6aUh3_Ih7K6DFdTo8ThKN X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjA5MDA2NSBTYWx0ZWRfXyMno5u1Gkmzq aBk89vJLbD2gJIKmBT2nNQGnhOMFvMq8SnYDu4/oyZ6oPNoPEH9knjes3dS8kuNkSNSqSZhznYK 7/0DGuPlDOA8W0we6i7/D6jFWYRoKuMr7j9hvkgXL1uFV2ziz/YZvQbDqz8VdegRHW1PBsSS897 +9MwqwY71E22jvB8iFI0LFnexmqPUE/DwA5l1vV2cgLDOYP2a07EEEWQc4Cuechv5wLFx7PGQGj lN2WySVGGoOXErpjkmt6OALDoNu9AFADpajMqwFN0CJA1LPJgOKOFyXMjlTUxXC4in/H/F/teh6 U21LM2vJUiJvjbvH/C6HzCpOxC/WQWls6OxEWFEjU7DUGmCkjTDoDib35LcJ2dzCNyTvCfj9PZC Ph8paLTRtNsCjxYDYFcBUu1I2U7wP1x84SFHS36cIaPPBtkG1qCnbqpjvd0Trs0GidvSPgj8ldo rO0VZ1wyybo2rmiWUWQ== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-08_05,2026-02-05_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 priorityscore=1501 malwarescore=0 lowpriorityscore=0 bulkscore=0 impostorscore=0 spamscore=0 clxscore=1015 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602090065 Content-Type: text/plain; charset="utf-8" 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 --- 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 baudr= ate, 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 baudr= ate, 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 baudr= ate, } } 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) =3D=3D QCA_WCN3950_SOC_ID_T) variant =3D "t"; @@ -907,15 +923,6 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudr= ate, 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, }; =20 #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 =3D serdev_device_get_drvdata(hu->serdev); =20 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 qc= a_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 qc= a_speed_type speed_type) } =20 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 qc= a_speed_type speed_type) =20 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 qc= a_speed_type speed_type) } =20 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 =3D "qca2066"; break; =20 + case QCA_QCC2072: + soc_name =3D "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); =20 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) } =20 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 =3D { .dequeue =3D qca_dequeue, }; =20 +static const struct qca_device_data qca_soc_data_qca2066 __maybe_unused = =3D { + .soc_type =3D QCA_QCA2066, + .num_vregs =3D 0, +}; + +static const struct qca_device_data qca_soc_data_qca6390 __maybe_unused = =3D { + .soc_type =3D QCA_QCA6390, + .num_vregs =3D 0, + .capabilities =3D QCA_CAP_WIDEBAND_SPEECH | QCA_CAP_VALID_LE_STATES, +}; + +static const struct qca_device_data qca_soc_data_qcc2072 __maybe_unused = =3D { + .soc_type =3D QCA_QCC2072, + .num_vregs =3D 0, + .capabilities =3D QCA_CAP_WIDEBAND_SPEECH | QCA_CAP_VALID_LE_STATES, +}; + static const struct qca_device_data qca_soc_data_wcn3950 __maybe_unused = =3D { .soc_type =3D QCA_WCN3950, .vregs =3D (struct qca_vreg []) { @@ -2114,17 +2142,6 @@ static const struct qca_device_data qca_soc_data_wcn= 3998 __maybe_unused =3D { .num_vregs =3D 4, }; =20 -static const struct qca_device_data qca_soc_data_qca2066 __maybe_unused = =3D { - .soc_type =3D QCA_QCA2066, - .num_vregs =3D 0, - .capabilities =3D QCA_CAP_WIDEBAND_SPEECH | QCA_CAP_VALID_LE_STATES, -}; - -static const struct qca_device_data qca_soc_data_qca6390 __maybe_unused = =3D { - .soc_type =3D QCA_QCA6390, - .num_vregs =3D 0, -}; - static const struct qca_device_data qca_soc_data_wcn6750 __maybe_unused = =3D { .soc_type =3D QCA_WCN6750, .vregs =3D (struct qca_vreg []) { @@ -2715,6 +2732,7 @@ static const struct of_device_id qca_bluetooth_of_mat= ch[] =3D { { .compatible =3D "qcom,qca6174-bt" }, { .compatible =3D "qcom,qca6390-bt", .data =3D &qca_soc_data_qca6390}, { .compatible =3D "qcom,qca9377-bt" }, + { .compatible =3D "qcom,qcc2072-bt", .data =3D &qca_soc_data_qcc2072}, { .compatible =3D "qcom,wcn3950-bt", .data =3D &qca_soc_data_wcn3950}, { .compatible =3D "qcom,wcn3988-bt", .data =3D &qca_soc_data_wcn3988}, { .compatible =3D "qcom,wcn3990-bt", .data =3D &qca_soc_data_wcn3990}, --=20 2.34.1