From nobody Tue Dec 2 00:26:27 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 4FA8F3271E7; Tue, 25 Nov 2025 14:45:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764081912; cv=none; b=dcKDjG8RrTYwgn7PaolmfjSe8xRfD+g2nzgyDohzTqMOoVUmNEvQeGHVXZl5hzphgBBh8tlv3UlVsfTjCSalt7jjK7VPLOjEjaasHiPPUQVQacSi+yiG70FUiYUJe+CMAPaxSOBRJ1PdLbNyaA+EvlUYSeh5VPDiz7FDnP1AF4g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764081912; c=relaxed/simple; bh=fQZr7pUYhOD/jEojYwd8ZDtbZU5QJsTZEvoo6g+VOqM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=X7RQ9FsnpNizpFq9H84PlEj2GVuGQoIX6uGm8OpAAnNhR97jPpoOMLSzw5hPXrM/446YO1FefWT3BaoU4hEm8eclFICumqNFu7z6wq5S6pJIv2D7zUhLv8K9BmwVQxiYy9/ktk2crvpy0YrBYtNoM3n5kdL9WDFLTU703qmkN8g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=k6VClFIs; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="k6VClFIs" Received: by smtp.kernel.org (Postfix) with ESMTPS id A26FDC19422; Tue, 25 Nov 2025 14:45:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1764081911; bh=fQZr7pUYhOD/jEojYwd8ZDtbZU5QJsTZEvoo6g+VOqM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=k6VClFIsVWbv8FvSi9LyVIUAs3350bj5ucgvFUvJqfgj8b9XHvTfjzsEtlyRFahqh qIUxRXjv4F9LFlLgCW7H02/Ax4vSqoZUij3DAsGzmEqGPT591rQ+LngcgrxLnwNTO5 OPBAGnCK+vLfQPDKEtKsas7yM/2hw6wg0Vw59oXOnxPHi9TtoWQuQU3ShZdrnpiBGm 7XDZmz8wI5LzeP/J8WDOVNcuSJ1mr/RuUNlE1VIRM0thSVK6kbaGW4LILzIreLbYFX nSNLhryg4fexmvAiK+7XM0DWHhiRh1g2AQiOreSj5PAa8vkqeBTkAuaA6o7YDJ/1+7 FXmA1KwUU6OSg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 95FABD0E6C6; Tue, 25 Nov 2025 14:45:11 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Tue, 25 Nov 2025 20:15:13 +0530 Subject: [PATCH v2 09/10] Bluetooth: hci_qca: Add support for WCN7850 PCIe M.2 card Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251125-pci-m2-e-v2-9-32826de07cc5@oss.qualcomm.com> References: <20251125-pci-m2-e-v2-0-32826de07cc5@oss.qualcomm.com> In-Reply-To: <20251125-pci-m2-e-v2-0-32826de07cc5@oss.qualcomm.com> To: Rob Herring , Greg Kroah-Hartman , Jiri Slaby , Nathan Chancellor , Nicolas Schier , Hans de Goede , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Mark Pearson , "Derek J. Clark" , Manivannan Sadhasivam , Krzysztof Kozlowski , Conor Dooley , Marcel Holtmann , Luiz Augusto von Dentz , Bartosz Golaszewski Cc: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kbuild@vger.kernel.org, platform-driver-x86@vger.kernel.org, linux-pci@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-bluetooth@vger.kernel.org, linux-pm@vger.kernel.org, Stephan Gerhold , Dmitry Baryshkov , Manivannan Sadhasivam X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2637; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=zEZ8rEadVzPrGNr8RLnULvokKFhVGX7/QBoqApf/dmI=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBpJcDzqRvhavEAtyIdpgbq7HdybyTkQukIfRcUV vXmEyI7PJWJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaSXA8wAKCRBVnxHm/pHO 9aQDB/wPxF9hhA7J5V9ZkfTIoBhTIN04bqoZH2i2TrRvvdp+9G18kp/R+SHrCxQtycJZbHPRkx/ DoBUmhkTkkeK7rwp5WIPR97L0JRCUVp7v3oajBLCtUhzuE07rBX4StDpHyFBscYoV8tdITB8Jup OsSCbEScWfaNh7TrL3/7EOqiF5s0sTGMYffGC5+Ta0sJgHYQMz7ApJ/mwtK01nYC9Tt9kUc5+Bo P9HcpV6cBQSZ/GcYn9xtG+8l4ZWMV4LEBdCKcRPmK9Oythi2wZy4gAGtLCOS1udXANa8PuP2RY8 ppz4zSvUZ9mvpGwDs/BCeEPfde5jQtO9OFuO2ns4HZxQNRcf X-Developer-Key: i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp; fpr=C668AEC3C3188E4C611465E7488550E901166008 X-Endpoint-Received: by B4 Relay for manivannan.sadhasivam@oss.qualcomm.com/default with auth_id=461 X-Original-From: Manivannan Sadhasivam Reply-To: manivannan.sadhasivam@oss.qualcomm.com From: Manivannan Sadhasivam The WCN7850 PCIe M.2 card connected to the UART controller exposes the 'WCN7850' serdev device and is controlled using the pwrseq framework. Hence, add support for it in the driver. It reuses the existing 'qca_soc_data_wcn7850' driver data. Signed-off-by: Manivannan Sadhasivam Reviewed-by: Bartosz Golaszewski --- drivers/bluetooth/hci_qca.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index 4cff4d9be313..35d08b455e40 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -2344,6 +2345,9 @@ static int qca_serdev_probe(struct serdev_device *ser= dev) =20 qcadev->serdev_hu.serdev =3D serdev; data =3D device_get_match_data(&serdev->dev); + if (!data && serdev->id) + data =3D (const struct qca_device_data *) serdev->id->driver_data; + serdev_device_set_drvdata(serdev, qcadev); device_property_read_string_array(&serdev->dev, "firmware-name", qcadev->firmware_name, ARRAY_SIZE(qcadev->firmware_name)); @@ -2384,6 +2388,14 @@ static int qca_serdev_probe(struct serdev_device *se= rdev) case QCA_WCN6855: case QCA_WCN7850: case QCA_WCN6750: + if (of_graph_is_present(dev_of_node(&serdev->ctrl->dev))) { + qcadev->bt_power->pwrseq =3D devm_pwrseq_get(&serdev->ctrl->dev, + "uart"); + if (IS_ERR(qcadev->bt_power->pwrseq)) + return PTR_ERR(qcadev->bt_power->pwrseq); + break; + } + if (!device_property_present(&serdev->dev, "enable-gpios")) { /* * Backward compatibility with old DT sources. If the @@ -2740,6 +2752,12 @@ static const struct acpi_device_id qca_bluetooth_acp= i_match[] =3D { MODULE_DEVICE_TABLE(acpi, qca_bluetooth_acpi_match); #endif =20 +static const struct serdev_device_id qca_bluetooth_serdev_match[] =3D { + { "WCN7850", (kernel_ulong_t)&qca_soc_data_wcn7850 }, + { }, +}; +MODULE_DEVICE_TABLE(serdev, qca_bluetooth_serdev_match); + #ifdef CONFIG_DEV_COREDUMP static void hciqca_coredump(struct device *dev) { @@ -2756,6 +2774,7 @@ static void hciqca_coredump(struct device *dev) static struct serdev_device_driver qca_serdev_driver =3D { .probe =3D qca_serdev_probe, .remove =3D qca_serdev_remove, + .id_table =3D qca_bluetooth_serdev_match, .driver =3D { .name =3D "hci_uart_qca", .of_match_table =3D of_match_ptr(qca_bluetooth_of_match), --=20 2.48.1