From nobody Wed Jun 17 04:14:31 2026 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 CB7373C060B; Wed, 22 Apr 2026 11:25: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=1776857112; cv=none; b=jRq9S/5SoSVJCNg09Sm5NVF321/1cx9FQxT382k3f8sI9+/T9kwzRta+RvYP1vOynMWTEc2tBahhx4/zu+BZeIPcMzzr6oUTuc8upPZbVHaUcVB9WdoYNQgaNAwdXr6yb3Nes1JZGXfpQ87Cm6DY5Ov81pszz8RWoDoJH5aW9ok= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776857112; c=relaxed/simple; bh=jonb0+BbdQ6Gol/gdLqxrtYurK7jeakTSV7+fWf3c6M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=vCRWGXpYyJUMiU5BG4fQYPWjPIG2M4N6b31z4rHYY3bP9tHXiryfpoBwpOZjlfnTWqyk3TXd1mR5O6kcAZGPBUimEIbrrPShT0ZdKxHseg83jVkd10R5pLHBWmdkJx3xp4D4v7lyXHAVqobK1esmSh8meg0dDN8M201u6LCd+L4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GiGKdSPi; 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="GiGKdSPi" Received: by smtp.kernel.org (Postfix) with ESMTPS id 781D3C2BCB6; Wed, 22 Apr 2026 11:25:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776857112; bh=jonb0+BbdQ6Gol/gdLqxrtYurK7jeakTSV7+fWf3c6M=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=GiGKdSPigLO1yfzW/xEabv0WclGB2h92UJ9qop9tk/cubFn7e1vXplJiAcP5obESB qbIYJ/dK5czrglGIC+pqfluS3aEbli3m/75oP/+jQE+xsfCX4Dl9RY1PPtqy/rj2OQ xOGFt+9xaB4qX2FkWqm6M4nB1qOUNlAVcVM3vNF+gBAAOMau35RS04wQlPBveSDvto 6hKwPQXZojouyHWZWcwedSfz8sUN0BKa32GzCA6kJ8kCMzx/Ve9gueeyz4c/JATdqx EOAZAlrELyRBVP3NrEUeq/pV7gBT1wp0Ke23F8WhUZwvn9Ai2TSPcz8JX3BiNyUgFR FgfINDiUH9QTQ== 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 66593F55811; Wed, 22 Apr 2026 11:25:12 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Wed, 22 Apr 2026 16:54:42 +0530 Subject: [PATCH 01/12] power: sequencing: Introduce an API to check whether the pwrseq is fixed or controllable 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: <20260422-pwrseq-m2-bt-v1-1-720d02545a64@oss.qualcomm.com> References: <20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com> In-Reply-To: <20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com> To: Bartosz Golaszewski , Manivannan Sadhasivam , Marcel Holtmann , Luiz Augusto von Dentz , Shuai Zhang Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-bluetooth@vger.kernel.org, Wei Deng , Luiz Augusto von Dentz , Manivannan Sadhasivam X-Mailer: b4 0.15.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=4155; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=mBT4+PCQBlLr0gKZw68+7oeiwkEcbJwlfBn1pAauZ/w=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp6LAUAs/ZvcRX0EUgj9C0brPvG0qUgrCiwiCL+ Vr8UZyf8b2JATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaeiwFAAKCRBVnxHm/pHO 9QzxB/9wBZR66v/P3IP9cDkWqPsdxvV+9r6eMk4nkoOxLgBBFjaOJk9fUo+KSq9rhp0vPPaqVYx fxdlj96TMLLr5/iFuJrUIH2IuAMLKdc3OnLMV+k4VeiM+/2/XHWTif+x6GDbfGWNDJQAkamBf6W b0e6hGk1dIhQi4lFzYRwAbOW+mg6nv/+7EF/5AMeC+kKLC17CnIR+hEbWxmqYpcTw5pif9Subx9 mb1PpSFhoG63VAcWsc9D2UPjilHT7mBTp5uOTdRH3ENq9h8ZZneiXxBWmuNOyuU6jErn/7sQ+VR Pfo+rLejqNWFROaSf0lknjfgXSW3D2MbuY49j4BXxLKRPWbD 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 Introduce an API pwrseq_is_fixed() so that the consumers can check whether the given power sequencer is fixed or controllable. This will come handy in situations where the consumers need to know whether the specific power sequencer like 'Bluetooth' can be controllable using properties like BT_EN. Signed-off-by: Manivannan Sadhasivam Tested-by: Wei Deng --- drivers/power/sequencing/core.c | 33 +++++++++++++++++++++++++++++++++ include/linux/pwrseq/consumer.h | 6 ++++++ include/linux/pwrseq/provider.h | 2 ++ 3 files changed, 41 insertions(+) diff --git a/drivers/power/sequencing/core.c b/drivers/power/sequencing/cor= e.c index 4dff71be11b6..20af9643f1ac 100644 --- a/drivers/power/sequencing/core.c +++ b/drivers/power/sequencing/core.c @@ -182,12 +182,14 @@ static void pwrseq_unit_release(struct kref *ref) * the state lock has been released. It's useful for impleme= nting * boot-up delays without blocking other users from powering= up * using the same power sequencer. + * @is_fixed: Check whether this target is fixed or not. */ struct pwrseq_target { struct list_head list; const char *name; struct pwrseq_unit *unit; pwrseq_power_state_func post_enable; + bool (*is_fixed)(struct pwrseq_device *pwrseq); }; =20 static struct pwrseq_target * @@ -206,6 +208,7 @@ pwrseq_target_new(const struct pwrseq_target_data *data) } =20 target->post_enable =3D data->post_enable; + target->is_fixed =3D data->is_fixed; =20 return target; } @@ -965,6 +968,36 @@ int pwrseq_power_off(struct pwrseq_desc *desc) } EXPORT_SYMBOL_GPL(pwrseq_power_off); =20 +/** + * pwrseq_is_fixed() - Check whether the power sequencer is fixed or + * controllable. + * @desc: Descriptor referencing the power sequencer. + * + * This API can be used to check whether a specific power sequencer like + * 'Bluetooth' is fixed or controllable through properties like 'BT_EN' GP= IO. + * + * Returns: true if fixed, false if controllable. + */ +bool pwrseq_is_fixed(struct pwrseq_desc *desc) +{ + /* + * If there is no power sequencer, then the consumer cannot control + * the power, so it is effectively fixed. + */ + if (!desc) + return true; + + /* + * If the provider hasn't implemented the callback, assume it acts + * like a controllable power sequencer (for backward compatibility). + */ + if (!desc->target->is_fixed) + return false; + + return desc->target->is_fixed(desc->pwrseq); +} +EXPORT_SYMBOL_GPL(pwrseq_is_fixed); + #if IS_ENABLED(CONFIG_DEBUG_FS) =20 struct pwrseq_debugfs_count_ctx { diff --git a/include/linux/pwrseq/consumer.h b/include/linux/pwrseq/consume= r.h index 7d583b4f266e..7c24958880d7 100644 --- a/include/linux/pwrseq/consumer.h +++ b/include/linux/pwrseq/consumer.h @@ -22,6 +22,7 @@ devm_pwrseq_get(struct device *dev, const char *target); =20 int pwrseq_power_on(struct pwrseq_desc *desc); int pwrseq_power_off(struct pwrseq_desc *desc); +bool pwrseq_is_fixed(struct pwrseq_desc *desc); =20 #else /* CONFIG_POWER_SEQUENCING */ =20 @@ -51,6 +52,11 @@ static inline int pwrseq_power_off(struct pwrseq_desc *d= esc) return -ENOSYS; } =20 +static inline bool pwrseq_is_fixed(struct pwrseq_desc *desc) +{ + return true; +} + #endif /* CONFIG_POWER_SEQUENCING */ =20 #endif /* __POWER_SEQUENCING_CONSUMER_H__ */ diff --git a/include/linux/pwrseq/provider.h b/include/linux/pwrseq/provide= r.h index 33b3d2c2e39d..11165e98cde0 100644 --- a/include/linux/pwrseq/provider.h +++ b/include/linux/pwrseq/provider.h @@ -43,11 +43,13 @@ struct pwrseq_unit_data { * the state lock has been released. It's useful for impleme= nting * boot-up delays without blocking other users from powering= up * using the same power sequencer. + * @is_fixed: Callback to check whether this power sequencer is fixed or n= ot. */ struct pwrseq_target_data { const char *name; const struct pwrseq_unit_data *unit; pwrseq_power_state_func post_enable; + bool (*is_fixed)(struct pwrseq_device *pwrseq); }; =20 /** --=20 2.51.0 From nobody Wed Jun 17 04:14:31 2026 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 CB6A63BF694; Wed, 22 Apr 2026 11:25: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=1776857112; cv=none; b=KRYi2DOQMftbX5Wo+WCy4lng40j4anXWztUKybpt37suPF9vOMtjbJDCADtuv7tpFSCIHASg3a4qqESWBocJp7p5bTsD6uxLg9f+bK34pkOHg26KjD6QGC9UMqwFgLH4LaE/Gu0OkrMr9vny0ReB08B0CUbCXW1WK5lyLsvU1PU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776857112; c=relaxed/simple; bh=zG3I57WWplMJcf/hk5ar7t1I+jzieYtwUyZKV6LKybs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=STqquz9zpNljHfwF7GUOn/lJgHrHoae9wDm/VTntzWF7lHXa74DhLKXsBYpE3GKsA9L84B6h6gq3RMN/QnYNhRykrELIpxlv+6m9jSu/n2f3QB+gATUl0nZn0p+uTRAVgsy/7QKRtynB18L1Gfo2eWMi+R35ZgGldl8aobfqrX4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=PqeJP+Bq; 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="PqeJP+Bq" Received: by smtp.kernel.org (Postfix) with ESMTPS id 84DDEC2BCB4; Wed, 22 Apr 2026 11:25:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776857112; bh=zG3I57WWplMJcf/hk5ar7t1I+jzieYtwUyZKV6LKybs=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=PqeJP+BqAQNRVQ5d8J+yX9lmRAYBOZbzLhf3hOWPfj+bO9AVKYYEXiPKV3EdCL3j8 1WFnLPWWoDTPYJrcTyCbM+k9iYsAAzOBiCyVd9t+HHdyBUVXJXN9eHmOuMmtsRTLIP suszwhALSNVKiK9HR3+4zydyaWaAIOIq3OScqwCB4THzRpNdGZ0jhcfi+m8ngAcgTJ +59kJIneqwZPXn3wtFzvzWEK2UlXJ+8zPEzk/hGoZh1Z6KEH4SnEXufK35jtB2iTas Ha7ZGLV9fOCo80LLw8QovqG3v/NCGG6+PcMiUxpJmwZr+f2/eK/nHbOLCsN8V53CHX PH2ncJQMbXA9Q== 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 76381F5A8DD; Wed, 22 Apr 2026 11:25:12 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Wed, 22 Apr 2026 16:54:43 +0530 Subject: [PATCH 02/12] power: sequencing: pcie-m2: Add support for 'is_fixed()' callback to 'uart' target 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: <20260422-pwrseq-m2-bt-v1-2-720d02545a64@oss.qualcomm.com> References: <20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com> In-Reply-To: <20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com> To: Bartosz Golaszewski , Manivannan Sadhasivam , Marcel Holtmann , Luiz Augusto von Dentz , Shuai Zhang Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-bluetooth@vger.kernel.org, Wei Deng , Luiz Augusto von Dentz , Manivannan Sadhasivam X-Mailer: b4 0.15.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1269; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=KrtcCm7OcSv08XpTnM/lQ/uL0Jkw1/hkwY8pIBjRoGw=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp6LAUHpCgMluCaUwOrCltzrJ6ja/gcCe4jKxCe rrgJaYjXUOJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaeiwFAAKCRBVnxHm/pHO 9Q1fB/9YdhK57pITNVRy/bWS9zw1nLMkSCIl1c9LaHMyPWQl+jBVvrhgMJvyuGZVFrDFUdXjoDj mjyPROGFEv9J2oYrtv/9RRz96bujgr7l55UtBwkc3AykDGQEYw8c0wWVUrnhpDD9DhzwZxrYJlH UpNIj1l/cU8a7xyUzg1kn5IPEIPe8SnGxNPMz1uRIs853ozxAq885PAMZ82uxJSFVsiKiEVwMJQ gpR8Vbl1ep2SwszXzShwqEgqcK1QeRrOFgk0pZeVFnrmgzevKnn7RlAqOLEiet30EUiJ98f47O8 Oir94HPSNehL9jijUIksuWgaYhLOLF5X1qHe3w0y9X7Rvlr4 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 Add support for 'is_fixed()' callback to tell the consumers whether this power sequencer target 'uart' is fixed or controllable. This is decided based on the availability of the 'W_DISABLE2#' GPIO in DT. Signed-off-by: Manivannan Sadhasivam Tested-by: Wei Deng --- drivers/power/sequencing/pwrseq-pcie-m2.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/power/sequencing/pwrseq-pcie-m2.c b/drivers/power/sequ= encing/pwrseq-pcie-m2.c index ef69ae268059..2b79f2e34079 100644 --- a/drivers/power/sequencing/pwrseq-pcie-m2.c +++ b/drivers/power/sequencing/pwrseq-pcie-m2.c @@ -121,10 +121,18 @@ static int pwrseq_pcie_m2_e_pwup_delay(struct pwrseq_= device *pwrseq) return 0; } =20 +static bool pwrseq_pcie_m2_e_uart_is_fixed(struct pwrseq_device *pwrseq) +{ + struct pwrseq_pcie_m2_ctx *ctx =3D pwrseq_device_get_drvdata(pwrseq); + + return !ctx->w_disable2_gpio; +} + static const struct pwrseq_target_data pwrseq_pcie_m2_e_uart_target_data = =3D { .name =3D "uart", .unit =3D &pwrseq_pcie_m2_e_uart_unit_data, .post_enable =3D pwrseq_pcie_m2_e_pwup_delay, + .is_fixed =3D pwrseq_pcie_m2_e_uart_is_fixed, }; =20 static const struct pwrseq_target_data pwrseq_pcie_m2_e_pcie_target_data = =3D { --=20 2.51.0 From nobody Wed Jun 17 04:14:31 2026 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 CB550376496; Wed, 22 Apr 2026 11:25: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=1776857112; cv=none; b=NQ1W0D3B/6uPoYAsrSjbTWV1SCO28UpnM5cT3qjXSvt8oX7eT1zXvsoyVhN7z5tLKbTAsDxe5pgBlF8XNc18EhKl1CsXud0KBsoi6PHqEgi2riPLVN43cbCj+P7I5JPoYPrVCmraDVfs1Mppd4lE0/GUeG1OCyf6Ir1SNF9vPvs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776857112; c=relaxed/simple; bh=eBmp37Fh5ZTlSrodz8LYA7+9XM/VHH8EMneGh3WJBVA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Up3lFu3Kuw5slrnankvHwNXtdPjG9anUct2SmosKbLlmRMfFWsWc52n1UUokTy29PzmMiLxMTQUjl3HF+Au5zUZV++LOzK/zQR8fTXOBY/YUNtNKZctM7YXAF1I8rT1rVbOFQnrDIdp4FwfoCMwpIlgN0gZ+ZNFXCl+/QA3jIas= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=c8gGNfkD; 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="c8gGNfkD" Received: by smtp.kernel.org (Postfix) with ESMTPS id 971F7C2BCB8; Wed, 22 Apr 2026 11:25:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776857112; bh=eBmp37Fh5ZTlSrodz8LYA7+9XM/VHH8EMneGh3WJBVA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=c8gGNfkDPhwuVFHuYlh7ySuag3bN2J3tGptEhSsinFDqvr3XJvL1IyhHtV8/rOdTo QnLE7IzRCG7CjZkARPE1/EflVemx1Mo0qGrnWBPsEl86vet8nUmQrlUN98wywV+4eM PShHqQuDvCUg21g5AkkTAcCEGUKh79iB0RpwUEP2uOM5uRFW0sSw+JfxzCMoDG8iVQ GF0y8nlr8dMmSIyOKn078vni/xIVw/UwZVUt+lj9a3+ORaBDPhsS+HmutFsE8BBg/r ujsJADzdFHtl8XiAnYekJhzxrziCZ6qN/u9qtRIV7jsKj0+boLzzi43FpDjMY6q38S /mm0h/Wq7yKdw== 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 8596FF8FA87; Wed, 22 Apr 2026 11:25:12 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Wed, 22 Apr 2026 16:54:44 +0530 Subject: [PATCH 03/12] power: sequencing: qcom-wcn: Add support for 'is_fixed()' callback to 'bluetooth' target 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: <20260422-pwrseq-m2-bt-v1-3-720d02545a64@oss.qualcomm.com> References: <20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com> In-Reply-To: <20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com> To: Bartosz Golaszewski , Manivannan Sadhasivam , Marcel Holtmann , Luiz Augusto von Dentz , Shuai Zhang Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-bluetooth@vger.kernel.org, Wei Deng , Luiz Augusto von Dentz , Manivannan Sadhasivam X-Mailer: b4 0.15.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1665; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=OSA0rk78WdDSmkcO/t8XlaqhuYDC5RIPI2ByJSjXDI8=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp6LAVY4ZUMxgx8tEOqbhjBW009KzxqC7sLg0vT YkPI3/4rnmJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaeiwFQAKCRBVnxHm/pHO 9XLTCACmBOZ/6vCM4GiNJ4EAGBbpjMZp+nMbfjxiLoBS84VUGeB8Hj8Xoy1cIX1iWY4oEe2c2/D YkmNGMDuV4gDCUu4QClzMHbBZeBfAkOLRttaC2X+uY24y0qyyiBqW7zuZD+KyCY+/dtNooVG/8V t/nqfqoVvJAW1FXZ6yXL0G6rxs3RCZZv61pGlJf4jr7OOoc4RvTMTLXfiBqSaKvXFiuKNN60/bJ 2/ERYv1EOw0+oo3S8KroevAAVwhTmM6JePXZpuqJZEizu+GBsRnA3CZOLAwoKl3x6MFjSTxv6nT NcYo1MoZvG8k7207e3Byz4wsXLkXTgGq68ShZY0sUYUDpVSb 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 Add support for 'is_fixed()' callback to indicate the consumers whether this power sequencer target 'bluetooth' is fixed or controllable. This is decided based on the availability of the 'bt-enable' GPIO in DT. Signed-off-by: Manivannan Sadhasivam Tested-by: Wei Deng --- drivers/power/sequencing/pwrseq-qcom-wcn.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/power/sequencing/pwrseq-qcom-wcn.c b/drivers/power/seq= uencing/pwrseq-qcom-wcn.c index b55b4317e21b..50ac5973b8e7 100644 --- a/drivers/power/sequencing/pwrseq-qcom-wcn.c +++ b/drivers/power/sequencing/pwrseq-qcom-wcn.c @@ -254,10 +254,18 @@ static int pwrseq_qcom_wcn6855_xo_clk_deassert(struct= pwrseq_device *pwrseq) return pwrseq_qcom_wcn_pwup_delay(pwrseq); } =20 +static bool pwrseq_qcom_wcn_bt_is_fixed(struct pwrseq_device *pwrseq) +{ + struct pwrseq_qcom_wcn_ctx *ctx =3D pwrseq_device_get_drvdata(pwrseq); + + return !ctx->bt_gpio; +} + static const struct pwrseq_target_data pwrseq_qcom_wcn_bt_target_data =3D { .name =3D "bluetooth", .unit =3D &pwrseq_qcom_wcn_bt_unit_data, .post_enable =3D pwrseq_qcom_wcn_pwup_delay, + .is_fixed =3D pwrseq_qcom_wcn_bt_is_fixed, }; =20 static const struct pwrseq_target_data pwrseq_qcom_wcn_wlan_target_data = =3D { @@ -281,6 +289,7 @@ static const struct pwrseq_target_data pwrseq_qcom_wcn6= 855_bt_target_data =3D { .name =3D "bluetooth", .unit =3D &pwrseq_qcom_wcn6855_bt_unit_data, .post_enable =3D pwrseq_qcom_wcn6855_xo_clk_deassert, + .is_fixed =3D pwrseq_qcom_wcn_bt_is_fixed, }; =20 static const struct pwrseq_target_data pwrseq_qcom_wcn6855_wlan_target_dat= a =3D { --=20 2.51.0 From nobody Wed Jun 17 04:14:31 2026 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 CFF963C3C00; Wed, 22 Apr 2026 11:25: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=1776857112; cv=none; b=FuIHl0OD4wP6aBu1c4c+DZ8lRLDmbRZ+2Q3q9jLrq/KS3/MYzyp+Ly/RZB1mKWwBpY+/actKnbpDpIQbivMAA5+bgdA+0253H/4tb5t0lZdaNtG/NGkYexlpuuRb3WQwXDoa7l/7Td9jJVbIl+f8kMOfsd6qHjlMrgwhiHjW1EE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776857112; c=relaxed/simple; bh=sbvus7COxlYStZyNLdPGuM195ZbWanAbQzRhkGoHqvY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=s6yU+zBxxzz29vRhJctn+Sv7w8/Mg5STg1GQdzFeNlBgHZpbLC96rnT/wxaKeWQrPuIGX30eZetfkCp2lbnunGYOt+53/MzhqlMO6WKIEJKU0WcXHl0gEprwvsZYUyKa3NHymQd0AH77ifuMOj+M14rkRlM8O25R6uTNxejmsc4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Gcxc1h2W; 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="Gcxc1h2W" Received: by smtp.kernel.org (Postfix) with ESMTPS id 9F936C2BCB9; Wed, 22 Apr 2026 11:25:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776857112; bh=sbvus7COxlYStZyNLdPGuM195ZbWanAbQzRhkGoHqvY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=Gcxc1h2WWVO0IAttW8KOWVPt/46hHwOYJlc/jSjio/RzOgpubHmhsd3rjaBfiw4Ax cShAR8BAwsEDHtjY9+h8fLwbHr9beUAAwzgYNqT78XQgeh0Yn9lXKr359f2ZTzNIz8 AAyiC62rqnOqeBhdJlK+Y+RLRGdEdvCcNEm4fKkp1zv4Q2i3IWzzODzxOgWO5wBrQJ zFUoytUs9vrZR1TJuKfD7snIZSfGhyzdROoNvN7stoNBBtlMR9pRXOAjS5oqX/eMRv GJP5Nt02P4Wu1tr3SXqgwXovQy0zkCc4oHKGBUaUI8apV/b/tauyx3GcRw3rCku7az kMaS2KOLh8YeQ== 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 948DBF5A8DE; Wed, 22 Apr 2026 11:25:12 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Wed, 22 Apr 2026 16:54:45 +0530 Subject: [PATCH 04/12] power: sequencing: pcie-m2: Fix inconsistent function prefixes 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: <20260422-pwrseq-m2-bt-v1-4-720d02545a64@oss.qualcomm.com> References: <20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com> In-Reply-To: <20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com> To: Bartosz Golaszewski , Manivannan Sadhasivam , Marcel Holtmann , Luiz Augusto von Dentz , Shuai Zhang Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-bluetooth@vger.kernel.org, Wei Deng , Luiz Augusto von Dentz , Manivannan Sadhasivam X-Mailer: b4 0.15.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2033; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=LWnLixKrQibhExb1i5PgPATDR3O5JAuvbsbZ6mK36Y0=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp6LAV/F3/E3MFsCt+z73n6IYm6bHQcgOZG2VRM CxU6IxmeSCJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaeiwFQAKCRBVnxHm/pHO 9c+EB/9BLUydP/0XPcughRS5adJ+af8FQiEMYmytsxappZ2jIRxbkBmaT82LwuU/Q320mvHGQrJ jiHgYOtNU/xdlRIsKQwgJRrb8DTDC167WE7lA6/x0JHQh+bBLTYTzqNMeoAD4SG9uptegH1DhUM /4DAZpj2bWt6kBgbe8XB2QAIx7c9ZjTbP1HS8oNRDM1nt9M2pFpGsAt49eLzdhbRjFtBvkI2TEu vNyOUx3jlrJ0ypPCqHNwGG6BBdsiLNpJrHwX6fUURFEDX340NTUF5oX73AfVsfNGiRpa1VUD6a9 WwRHQtkyUe/kFnf7UtzGwgXzvy83NwpMZWmILCO+s4FK8gZU 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 All functions in this driver follow 'pwrseq_pcie_m2' prefix except a few. Fix them to avoid inconsistency. Signed-off-by: Manivannan Sadhasivam Tested-by: Wei Deng --- drivers/power/sequencing/pwrseq-pcie-m2.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/power/sequencing/pwrseq-pcie-m2.c b/drivers/power/sequ= encing/pwrseq-pcie-m2.c index 2b79f2e34079..49c326a6e445 100644 --- a/drivers/power/sequencing/pwrseq-pcie-m2.c +++ b/drivers/power/sequencing/pwrseq-pcie-m2.c @@ -185,7 +185,7 @@ static int pwrseq_pcie_m2_match(struct pwrseq_device *p= wrseq, return PWRSEQ_NO_MATCH; } =20 -static int pwrseq_m2_pcie_create_bt_node(struct pwrseq_pcie_m2_ctx *ctx, +static int pwrseq_pcie_m2_create_bt_node(struct pwrseq_pcie_m2_ctx *ctx, struct device_node *parent) { struct device *dev =3D ctx->dev; @@ -262,7 +262,7 @@ static int pwrseq_pcie_m2_create_serdev(struct pwrseq_p= cie_m2_ctx *ctx) goto err_put_ctrl; } =20 - ret =3D pwrseq_m2_pcie_create_bt_node(ctx, serdev_parent); + ret =3D pwrseq_pcie_m2_create_bt_node(ctx, serdev_parent); if (ret) goto err_free_serdev; =20 @@ -307,7 +307,7 @@ static void pwrseq_pcie_m2_remove_serdev(struct pwrseq_= pcie_m2_ctx *ctx) } } =20 -static int pwrseq_m2_pcie_notify(struct notifier_block *nb, unsigned long = action, +static int pwrseq_pcie_m2_notify(struct notifier_block *nb, unsigned long = action, void *data) { struct pwrseq_pcie_m2_ctx *ctx =3D container_of(nb, struct pwrseq_pcie_m2= _ctx, nb); @@ -372,7 +372,7 @@ static int pwrseq_pcie_m2_register_notifier(struct pwrs= eq_pcie_m2_ctx *ctx, stru if (pwrseq_pcie_m2_check_remote_node(dev, 3, 0, "serial")) { if (pwrseq_pcie_m2_check_remote_node(dev, 0, 0, "pcie")) { ctx->dev =3D dev; - ctx->nb.notifier_call =3D pwrseq_m2_pcie_notify; + ctx->nb.notifier_call =3D pwrseq_pcie_m2_notify; ret =3D bus_register_notifier(&pci_bus_type, &ctx->nb); if (ret) return dev_err_probe(dev, ret, --=20 2.51.0 From nobody Wed Jun 17 04:14:31 2026 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 054933CFF72; Wed, 22 Apr 2026 11:25:13 +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=1776857113; cv=none; b=II7gL7NHVr4aMLY9Lnx99BCNj1xUAAzz2Gp8yE2NRbcYjQRd1lRrmB1WvVJnI5wVI+grbrZgrKi8f9sXcWSZE+Uyq8h4/PVe1JiRzG5V2TDCjxG8hVCckvnmlaBqBBrc1KEFABS/VbkVOj/OfviMMJUf4qfYbVVlNLhgQZe6u4M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776857113; c=relaxed/simple; bh=9F43q4LX2CRP2OAr3Vb2VkjV9k0yS3vMdJovyQFhUmw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=opd5zwARxmsy5ZqazqJ78dBMRP1bbdjsgyHh7n3r3T1OO55FUDxiwnDIciNMYcvAJZzcfPkOq6EyF5rIKeKh3I47R1N3IGsw5glAOjp3+UVFQKgHyzwADNeqceta0gQUp9FdAep7ZTKp51QBZ+UahTTi8mmIa+e/mKh94Wa0ESo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=YTmIhP1/; 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="YTmIhP1/" Received: by smtp.kernel.org (Postfix) with ESMTPS id ACEDFC2BCF4; Wed, 22 Apr 2026 11:25:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776857112; bh=9F43q4LX2CRP2OAr3Vb2VkjV9k0yS3vMdJovyQFhUmw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=YTmIhP1/4/0huxfWE6k1OCmuR3JduP17gLJN+wom8GMutTo1Vm0kYhGQWxQv+xslY jxxuR6edzSKLTV/1nCXUmghwTQ4yR5UdJcDVHEemZ33Z8URaXwQl52NC2RvsQgWdy9 s82PAwWJzyX9rt6prm6w0zK5WuqhjjWUFP2uNngezhgolmxm+2qCZvOqiateOQtHGS F/T359WnQeJPNqS3lnvDFDnzbGLwMYX3QGp4bcVlUFSJpwKDDc/kN38gvTDwh1vkjK WBb3zOTJG6dhETjySjM/gsT2Rl7lyD1DeDlUx2tS71qZ6tlZudHgFSFZPUyt+EdCL5 t7j2+OGQ7uiUg== 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 A48EBF9B606; Wed, 22 Apr 2026 11:25:12 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Wed, 22 Apr 2026 16:54:46 +0530 Subject: [PATCH 05/12] power: sequencing: pcie-m2: Allow creating serdev for multiple PCI devices 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: <20260422-pwrseq-m2-bt-v1-5-720d02545a64@oss.qualcomm.com> References: <20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com> In-Reply-To: <20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com> To: Bartosz Golaszewski , Manivannan Sadhasivam , Marcel Holtmann , Luiz Augusto von Dentz , Shuai Zhang Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-bluetooth@vger.kernel.org, Wei Deng , Luiz Augusto von Dentz , Manivannan Sadhasivam X-Mailer: b4 0.15.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=8785; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=Nr5rSy3SSUTggm3+ROd35J+oxjoGsrNW4JatIPPtA+U=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp6LAVsOFwr2jZ0pC3vJWJ7Xd9TOjf4JQ0GVTxe M78Mf0R8IyJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaeiwFQAKCRBVnxHm/pHO 9VLNCACMEYYenEdy1q3hAR7XmXlWPLdjwwYKLDO+V2e4BFHFjfg03/h50NyMEGxpnDSdHQEpgDU EOkTeEK5rmtLadZw9uJWrK2GgM88UoP2iC3oWLPvgV01AiTEDk4Oi4DdVVOtR598ltuBzYfvirh xN/AzEm/nIfhC9gxddIPM021hr0apwKqzbQQJIgUZx4BOtXMpSYv4Sn8nB3M7mKXwMZh57OE4cv chJVCWQsTxudpR4grpSTSX/ky3TkZZxgmlX6clHXxp3rGrIJtUtDVxo1/12gSnSUtoLM7xtGKuB V2aDllOAUSjFoMpH47tiaaEUxy+B/V3jx/lDaTnS3TsdsiiC 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 Current code makes it possible to create serdev for only one PCI device. But for scaling this driver, it is necessary to allow creating serdev for multiple PCI devices. Hence, add provision for it by creating 'struct pwrseq_pci_dev' for each PCI device that requires serdev and add them to 'pwrseq_pcie_m2_ctx::pci_devices' list. Signed-off-by: Manivannan Sadhasivam Tested-by: Wei Deng --- drivers/power/sequencing/pwrseq-pcie-m2.c | 127 +++++++++++++++++++++-----= ---- 1 file changed, 88 insertions(+), 39 deletions(-) diff --git a/drivers/power/sequencing/pwrseq-pcie-m2.c b/drivers/power/sequ= encing/pwrseq-pcie-m2.c index 49c326a6e445..d4d246a30a97 100644 --- a/drivers/power/sequencing/pwrseq-pcie-m2.c +++ b/drivers/power/sequencing/pwrseq-pcie-m2.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -19,6 +20,13 @@ #include #include =20 +struct pwrseq_pci_dev { + struct serdev_device *serdev; + struct of_changeset *ocs; + struct pci_dev *pdev; + struct list_head list; +}; + struct pwrseq_pcie_m2_pdata { const struct pwrseq_target_data **targets; }; @@ -32,9 +40,9 @@ struct pwrseq_pcie_m2_ctx { struct notifier_block nb; struct gpio_desc *w_disable1_gpio; struct gpio_desc *w_disable2_gpio; - struct serdev_device *serdev; - struct of_changeset *ocs; struct device *dev; + struct list_head pci_devices; + struct mutex list_lock; }; =20 static int pwrseq_pcie_m2_vregs_enable(struct pwrseq_device *pwrseq) @@ -186,38 +194,39 @@ static int pwrseq_pcie_m2_match(struct pwrseq_device = *pwrseq, } =20 static int pwrseq_pcie_m2_create_bt_node(struct pwrseq_pcie_m2_ctx *ctx, + struct pwrseq_pci_dev *pci_dev, struct device_node *parent) { struct device *dev =3D ctx->dev; struct device_node *np; int ret; =20 - ctx->ocs =3D kzalloc_obj(*ctx->ocs); - if (!ctx->ocs) + pci_dev->ocs =3D kzalloc_obj(*pci_dev->ocs); + if (!pci_dev->ocs) return -ENOMEM; =20 - of_changeset_init(ctx->ocs); + of_changeset_init(pci_dev->ocs); =20 - np =3D of_changeset_create_node(ctx->ocs, parent, "bluetooth"); + np =3D of_changeset_create_node(pci_dev->ocs, parent, "bluetooth"); if (!np) { dev_err(dev, "Failed to create bluetooth node\n"); ret =3D -ENODEV; goto err_destroy_changeset; } =20 - ret =3D of_changeset_add_prop_string(ctx->ocs, np, "compatible", "qcom,wc= n7850-bt"); + ret =3D of_changeset_add_prop_string(pci_dev->ocs, np, "compatible", "qco= m,wcn7850-bt"); if (ret) { dev_err(dev, "Failed to add bluetooth compatible: %d\n", ret); goto err_destroy_changeset; } =20 - ret =3D of_changeset_apply(ctx->ocs); + ret =3D of_changeset_apply(pci_dev->ocs); if (ret) { dev_err(dev, "Failed to apply changeset: %d\n", ret); goto err_destroy_changeset; } =20 - ret =3D device_add_of_node(&ctx->serdev->dev, np); + ret =3D device_add_of_node(&pci_dev->serdev->dev, np); if (ret) { dev_err(dev, "Failed to add OF node: %d\n", ret); goto err_revert_changeset; @@ -226,19 +235,21 @@ static int pwrseq_pcie_m2_create_bt_node(struct pwrse= q_pcie_m2_ctx *ctx, return 0; =20 err_revert_changeset: - of_changeset_revert(ctx->ocs); + of_changeset_revert(pci_dev->ocs); err_destroy_changeset: - of_changeset_destroy(ctx->ocs); - kfree(ctx->ocs); - ctx->ocs =3D NULL; + of_changeset_destroy(pci_dev->ocs); + kfree(pci_dev->ocs); + pci_dev->ocs =3D NULL; =20 return ret; } =20 -static int pwrseq_pcie_m2_create_serdev(struct pwrseq_pcie_m2_ctx *ctx) +static int pwrseq_pcie_m2_create_serdev(struct pwrseq_pcie_m2_ctx *ctx, + struct pci_dev *pdev) { struct serdev_controller *serdev_ctrl; struct device *dev =3D ctx->dev; + struct pwrseq_pci_dev *pci_dev; int ret; =20 struct device_node *serdev_parent __free(device_node) =3D @@ -256,17 +267,23 @@ static int pwrseq_pcie_m2_create_serdev(struct pwrseq= _pcie_m2_ctx *ctx) return 0; } =20 - ctx->serdev =3D serdev_device_alloc(serdev_ctrl); - if (!ctx->serdev) { + pci_dev =3D kzalloc(sizeof(*pci_dev), GFP_KERNEL); + if (!pci_dev) { ret =3D -ENOMEM; goto err_put_ctrl; } =20 - ret =3D pwrseq_pcie_m2_create_bt_node(ctx, serdev_parent); + pci_dev->serdev =3D serdev_device_alloc(serdev_ctrl); + if (!pci_dev->serdev) { + ret =3D -ENOMEM; + goto err_free_pci_dev; + } + + ret =3D pwrseq_pcie_m2_create_bt_node(ctx, pci_dev, serdev_parent); if (ret) goto err_free_serdev; =20 - ret =3D serdev_device_add(ctx->serdev); + ret =3D serdev_device_add(pci_dev->serdev); if (ret) { dev_err(dev, "Failed to add serdev for WCN7850: %d\n", ret); goto err_free_dt_node; @@ -274,37 +291,64 @@ static int pwrseq_pcie_m2_create_serdev(struct pwrseq= _pcie_m2_ctx *ctx) =20 serdev_controller_put(serdev_ctrl); =20 + pci_dev->pdev =3D pci_dev_get(pdev); + + mutex_lock(&ctx->list_lock); + list_add_tail(&pci_dev->list, &ctx->pci_devices); + mutex_unlock(&ctx->list_lock); + return 0; =20 err_free_dt_node: - device_remove_of_node(&ctx->serdev->dev); - of_changeset_revert(ctx->ocs); - of_changeset_destroy(ctx->ocs); - kfree(ctx->ocs); - ctx->ocs =3D NULL; + device_remove_of_node(&pci_dev->serdev->dev); + of_changeset_revert(pci_dev->ocs); + of_changeset_destroy(pci_dev->ocs); + kfree(pci_dev->ocs); + pci_dev->ocs =3D NULL; err_free_serdev: - serdev_device_put(ctx->serdev); - ctx->serdev =3D NULL; + serdev_device_put(pci_dev->serdev); + pci_dev->serdev =3D NULL; +err_free_pci_dev: + kfree(pci_dev); err_put_ctrl: serdev_controller_put(serdev_ctrl); =20 return ret; } =20 -static void pwrseq_pcie_m2_remove_serdev(struct pwrseq_pcie_m2_ctx *ctx) +static void __pwrseq_pcie_m2_remove_serdev(struct pwrseq_pcie_m2_ctx *ctx, + struct pwrseq_pci_dev *pci_dev) { - if (ctx->serdev) { - device_remove_of_node(&ctx->serdev->dev); - serdev_device_remove(ctx->serdev); - ctx->serdev =3D NULL; + if (pci_dev->serdev) { + device_remove_of_node(&pci_dev->serdev->dev); + serdev_device_remove(pci_dev->serdev); } =20 - if (ctx->ocs) { - of_changeset_revert(ctx->ocs); - of_changeset_destroy(ctx->ocs); - kfree(ctx->ocs); - ctx->ocs =3D NULL; + if (pci_dev->ocs) { + of_changeset_revert(pci_dev->ocs); + of_changeset_destroy(pci_dev->ocs); + kfree(pci_dev->ocs); } + + pci_dev_put(pci_dev->pdev); + list_del(&pci_dev->list); + kfree(pci_dev); +} + +static void pwrseq_pcie_m2_remove_serdev(struct pwrseq_pcie_m2_ctx *ctx, + struct pci_dev *pdev) +{ + struct pwrseq_pci_dev *pci_dev, *tmp; + + mutex_lock(&ctx->list_lock); + list_for_each_entry_safe(pci_dev, tmp, &ctx->pci_devices, list) { + if (!pdev || pci_dev->pdev =3D=3D pdev) { + __pwrseq_pcie_m2_remove_serdev(ctx, pci_dev); + if (pdev) + break; + } + } + mutex_unlock(&ctx->list_lock); } =20 static int pwrseq_pcie_m2_notify(struct notifier_block *nb, unsigned long = action, @@ -328,7 +372,7 @@ static int pwrseq_pcie_m2_notify(struct notifier_block = *nb, unsigned long action case BUS_NOTIFY_ADD_DEVICE: /* Create serdev device for WCN7850 */ if (pdev->vendor =3D=3D PCI_VENDOR_ID_QCOM && pdev->device =3D=3D 0x1107= ) { - ret =3D pwrseq_pcie_m2_create_serdev(ctx); + ret =3D pwrseq_pcie_m2_create_serdev(ctx, pdev); if (ret) return notifier_from_errno(ret); } @@ -336,7 +380,7 @@ static int pwrseq_pcie_m2_notify(struct notifier_block = *nb, unsigned long action case BUS_NOTIFY_REMOVED_DEVICE: /* Destroy serdev device for WCN7850 */ if (pdev->vendor =3D=3D PCI_VENDOR_ID_QCOM && pdev->device =3D=3D 0x1107) - pwrseq_pcie_m2_remove_serdev(ctx); + pwrseq_pcie_m2_remove_serdev(ctx, pdev); =20 break; } @@ -440,16 +484,20 @@ static int pwrseq_pcie_m2_probe(struct platform_devic= e *pdev) goto err_free_regulators; } =20 + mutex_init(&ctx->list_lock); + INIT_LIST_HEAD(&ctx->pci_devices); /* * Register a notifier for creating protocol devices for * non-discoverable busses like UART. */ ret =3D pwrseq_pcie_m2_register_notifier(ctx, dev); if (ret) - goto err_free_regulators; + goto err_destroy_mutex; =20 return 0; =20 +err_destroy_mutex: + mutex_destroy(&ctx->list_lock); err_free_regulators: regulator_bulk_free(ctx->num_vregs, ctx->regs); =20 @@ -461,7 +509,8 @@ static void pwrseq_pcie_m2_remove(struct platform_devic= e *pdev) struct pwrseq_pcie_m2_ctx *ctx =3D platform_get_drvdata(pdev); =20 bus_unregister_notifier(&pci_bus_type, &ctx->nb); - pwrseq_pcie_m2_remove_serdev(ctx); + pwrseq_pcie_m2_remove_serdev(ctx, NULL); + mutex_destroy(&ctx->list_lock); =20 regulator_bulk_free(ctx->num_vregs, ctx->regs); } --=20 2.51.0 From nobody Wed Jun 17 04:14:31 2026 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 0597D3CFF77; Wed, 22 Apr 2026 11:25:13 +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=1776857113; cv=none; b=X0cEQNtpKtktMEvzUqUgq57J6+iJOo0dsgQWorwhadrO0p6dYBjpgprRZ04cto9dHnisCq6chwh7P9Jgmj9qAxiYiuv/8mOQ7tNodoBy4NPhMku9e7F2a5+S30QT0HSykNRO6xXi+GdAdg5TPsZ68uFL+zl02DSoFgDcw4ox/iY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776857113; c=relaxed/simple; bh=wNTq8bfKOhZVwTEppK+NyCHIphFCJQ60hjAPS6sIl0o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=sK4ewD1KMP7Qi0ODLbfNdd9aBuKv8IgNiaFhtV7EYaqClVdVD0VF/59jwZeqRPKrTytdFcA5cXh9CldSEfjlXfFc6uplllRADF+WgkrylU0TN0JaieikN7NC8lks6dyqDG2Z3Q67QpcW8KFLXYclkfDM9NA9i2JE6YuLphpKWQs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hZ/KR+Ed; 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="hZ/KR+Ed" Received: by smtp.kernel.org (Postfix) with ESMTPS id BC2CFC2BCFB; Wed, 22 Apr 2026 11:25:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776857112; bh=wNTq8bfKOhZVwTEppK+NyCHIphFCJQ60hjAPS6sIl0o=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=hZ/KR+EdTgCtvzftOXnka8ufdsQ8E0d3oClRZ/Fu1CJFxzKmrUiozfHvC1Vz0unWC Lwsae1hnpOxouAdT7+gnLgHyzM0piV2MTbvxWoL6ENaMsPfYpVp4LdtgDsfDbFqwnj Nxt/IrPHT2Xh4ELBiCa8AWfgHC/6JKw930ngulS8bIYPiH2+dRAtmn9ugZBt7n8myh 5ijgyTlqAkqOEFZL8yYkxhF9jCc7dR6+7S00S8DWw7Vu8U9imJ2L+VSmY2QF0onzwZ /r0Q2L2TK6VtoukZVOeYXOQtvpx5cvytqLyy4xgA4oYtZE93fcyKF1oNkKFfrdVy2s BajDzqnA0JHjw== 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 B291BF55811; Wed, 22 Apr 2026 11:25:12 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Wed, 22 Apr 2026 16:54:47 +0530 Subject: [PATCH 06/12] power: sequencing: pcie-m2: Improve PCI device ID check 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: <20260422-pwrseq-m2-bt-v1-6-720d02545a64@oss.qualcomm.com> References: <20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com> In-Reply-To: <20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com> To: Bartosz Golaszewski , Manivannan Sadhasivam , Marcel Holtmann , Luiz Augusto von Dentz , Shuai Zhang Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-bluetooth@vger.kernel.org, Wei Deng , Luiz Augusto von Dentz , Manivannan Sadhasivam X-Mailer: b4 0.15.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1720; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=9jfNJVU1vG/IbMKLhPiGnv2Pu5DaJsF1czYa74dvxC8=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp6LAVzU48uaYh+mvxiCOrWmi+W6DA8++Z7TQUW F9ykItrraeJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaeiwFQAKCRBVnxHm/pHO 9TMTB/4wjc06WrFlO67nknTrUbRTVk22SzZRLP0y7hGCxhH2bcDY6dP53eBF6VnVyrYlOky26w3 yDu/gudrLaly4zkvZJe4XB4R99+Z7MCtkznFzIhDIOWQoJoPtkonDP3Y6rTakg2Qul482SxWzCI 4t3roP9/VioL73rX5GfPrf3jZcDoigkdUoShVh9GcQvdZexO9jbFFUjfktKoHZf3sRmyUYmHg3F xtBhWGhJeSP+a1t8rTNSS+P/IY+jI8arIwGIvC1F800X13qyXmv4nQDy4nu45kA7vWaOJ4VOQIs SPTfTcGs4LrHANnvsVd71jPZX8d+ATtyTDy6g8jiHOLb17M7 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 Instead of hardcoding the PCI device check, use pci_match_id() to check for the known IDs using the pwrseq_m2_pci_ids[] array. This makes adding support for new devices easier. Signed-off-by: Manivannan Sadhasivam Reviewed-by: Konrad Dybcio Tested-by: Wei Deng --- drivers/power/sequencing/pwrseq-pcie-m2.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/power/sequencing/pwrseq-pcie-m2.c b/drivers/power/sequ= encing/pwrseq-pcie-m2.c index d4d246a30a97..bdc4391c87c9 100644 --- a/drivers/power/sequencing/pwrseq-pcie-m2.c +++ b/drivers/power/sequencing/pwrseq-pcie-m2.c @@ -351,6 +351,11 @@ static void pwrseq_pcie_m2_remove_serdev(struct pwrseq= _pcie_m2_ctx *ctx, mutex_unlock(&ctx->list_lock); } =20 +static const struct pci_device_id pwrseq_m2_pci_ids[] =3D { + { PCI_DEVICE(PCI_VENDOR_ID_QCOM, 0x1107) }, + { } /* Sentinel */ +}; + static int pwrseq_pcie_m2_notify(struct notifier_block *nb, unsigned long = action, void *data) { @@ -370,16 +375,14 @@ static int pwrseq_pcie_m2_notify(struct notifier_bloc= k *nb, unsigned long action =20 switch (action) { case BUS_NOTIFY_ADD_DEVICE: - /* Create serdev device for WCN7850 */ - if (pdev->vendor =3D=3D PCI_VENDOR_ID_QCOM && pdev->device =3D=3D 0x1107= ) { + if (pci_match_id(pwrseq_m2_pci_ids, pdev)) { ret =3D pwrseq_pcie_m2_create_serdev(ctx, pdev); if (ret) return notifier_from_errno(ret); } break; case BUS_NOTIFY_REMOVED_DEVICE: - /* Destroy serdev device for WCN7850 */ - if (pdev->vendor =3D=3D PCI_VENDOR_ID_QCOM && pdev->device =3D=3D 0x1107) + if (pci_match_id(pwrseq_m2_pci_ids, pdev)) pwrseq_pcie_m2_remove_serdev(ctx, pdev); =20 break; --=20 2.51.0 From nobody Wed Jun 17 04:14:31 2026 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 01BCD3CFF64; Wed, 22 Apr 2026 11:25:13 +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=1776857113; cv=none; b=Uk/fRsU6NerrGXRMs64g3xylBkXnIR4AdX+Pm1UBf7X+rtZchERy5/+WEq2Zn1cF5lDbfVQu9236YP4trMHxgwuzFuXT5gR63oncRfAB5N3zN4j7/7SaVLhPafgH21n7j6Q7oS2H1xfeCfzvZRV6KEyjDYwHezCn4qGaUlkd2yg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776857113; c=relaxed/simple; bh=J5UBlxRINX616sHAIUpg5vnrM9/UWUYaECY6bNwQgdc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=M3fr+DJFs28HUysQ+Dq93CdsC1JwLwueBHRr1n6gLVoEUdlTFyZljA3MS0Q2xSCXA2CCk7FHJe/rUmDttaOosgdLfkuv0N1SOFnbsiZfIFRAmfHK1DAfAP0jrIVNICKUCUkj9nwWYziCYyAi+C89xlQ9307uDANy138EhB0Kfj0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jkPF46Ua; 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="jkPF46Ua" Received: by smtp.kernel.org (Postfix) with ESMTPS id C815EC2BCFC; Wed, 22 Apr 2026 11:25:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776857112; bh=J5UBlxRINX616sHAIUpg5vnrM9/UWUYaECY6bNwQgdc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=jkPF46UaDCQDsujCNnGdPs454GmNrpOw/u8uuvo6yFnEXY/tpSGlP9OqG4qC2iudw 6xnnnm//JmzI+1H7xehBMu5hGUBFH0D4Eis+3jl03YFNWx2wvFAtF4nnP9CeZLZxoE iecuxRB5mS7mI7raNXMgIYpSPfcQtvgYDUIErcUg0q2cAYmyVXPUhY8FhHMsuBXbGO ydjq5XjiEZ+3+IViYg2ScN4MemCTA+SAhHV6iIQ3rFAdSrNKwAFF1bEV5lq31lsIce l5Y8eZ2f3jQ0DZywQpxuBgp6JhdDPT95Pmzuce3THrWw8OZtoa0pIBs9e9ehSJpu4G +Aq1UF+RlnQVQ== 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 C1367F5A8DD; Wed, 22 Apr 2026 11:25:12 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Wed, 22 Apr 2026 16:54:48 +0530 Subject: [PATCH 07/12] power: sequencing: pcie-m2: Create serdev for PCI devices present before probe 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: <20260422-pwrseq-m2-bt-v1-7-720d02545a64@oss.qualcomm.com> References: <20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com> In-Reply-To: <20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com> To: Bartosz Golaszewski , Manivannan Sadhasivam , Marcel Holtmann , Luiz Augusto von Dentz , Shuai Zhang Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-bluetooth@vger.kernel.org, Wei Deng , Luiz Augusto von Dentz , Manivannan Sadhasivam X-Mailer: b4 0.15.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=5701; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=KxccIL0wAbXZIjNEfSWb+27f0NvPCoI50tHq4aONrQs=; b=owEBbAGT/pANAwAKAVWfEeb+kc71AcsmYgBp6LAVbba+rmaoWNsPlB2IV19Sjs+xxhqc3+Nvv 4wQMp8j32WJATIEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaeiwFQAKCRBVnxHm/pHO 9ceQB/jmXhyv+IU0xoV41g0QAsVGsLDcguP0JPoHg+6zANCkUnyxVDC01ECWG1sT87CqbkQatNP A6tZzfebquQ7lY7QHu4bR0eHU1iIwjF8vlclN5B6HtumHDOlknbEE3lj/ATuJ/rWp0LQOMPSYgW nrBNYVDccO3t8vCM+LWe0mrnf2ae6qUa5jqS3nfOngknN7CWu3mL5+B/XaDT6iV9cMjedVZxGQo KVZvn4FzlJW0iEuxDRAiQjljVBl0jwctqdhsrvSINq+h68jOKbEz/n5R5gMc0wqNeUCeT97WW7J /PACoCeSEslXf+JX6FtULcPrP0SxSsWDW4gKdA4oXOO47QE= 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 So far, the driver is registering a notifier to create serdev for the PCI devices that are going to be attached after probe. But it doesn't handle the devices present before probe. Due to this, serdev is not getting created for those existing devices. Hence, create serdev for PCI devices available before probe as well. Note that the serdev for available devices are created before registering the notifier. There is a small window where a device could appear after pwrseq_pcie_m2_create_serdev(), before notifier registration. But since M.2 cards are fixed to a slot, they are mostly added either before booting the host or after using hotplug. So this window is mostly theoretical. Signed-off-by: Manivannan Sadhasivam Tested-by: Wei Deng --- drivers/power/sequencing/pwrseq-pcie-m2.c | 83 ++++++++++++++++++++++++++-= ---- 1 file changed, 70 insertions(+), 13 deletions(-) diff --git a/drivers/power/sequencing/pwrseq-pcie-m2.c b/drivers/power/sequ= encing/pwrseq-pcie-m2.c index bdc4391c87c9..b21fcc089580 100644 --- a/drivers/power/sequencing/pwrseq-pcie-m2.c +++ b/drivers/power/sequencing/pwrseq-pcie-m2.c @@ -244,7 +244,7 @@ static int pwrseq_pcie_m2_create_bt_node(struct pwrseq_= pcie_m2_ctx *ctx, return ret; } =20 -static int pwrseq_pcie_m2_create_serdev(struct pwrseq_pcie_m2_ctx *ctx, +static int __pwrseq_pcie_m2_create_serdev(struct pwrseq_pcie_m2_ctx *ctx, struct pci_dev *pdev) { struct serdev_controller *serdev_ctrl; @@ -267,6 +267,16 @@ static int pwrseq_pcie_m2_create_serdev(struct pwrseq_= pcie_m2_ctx *ctx, return 0; } =20 + /* Bail out if the serdev device was already created for the PCI dev */ + mutex_lock(&ctx->list_lock); + list_for_each_entry(pci_dev, &ctx->pci_devices, list) { + if (pci_dev->pdev =3D=3D pdev) { + mutex_unlock(&ctx->list_lock); + return 0; + } + } + mutex_unlock(&ctx->list_lock); + pci_dev =3D kzalloc(sizeof(*pci_dev), GFP_KERNEL); if (!pci_dev) { ret =3D -ENOMEM; @@ -376,7 +386,7 @@ static int pwrseq_pcie_m2_notify(struct notifier_block = *nb, unsigned long action switch (action) { case BUS_NOTIFY_ADD_DEVICE: if (pci_match_id(pwrseq_m2_pci_ids, pdev)) { - ret =3D pwrseq_pcie_m2_create_serdev(ctx, pdev); + ret =3D __pwrseq_pcie_m2_create_serdev(ctx, pdev); if (ret) return notifier_from_errno(ret); } @@ -408,7 +418,7 @@ static bool pwrseq_pcie_m2_check_remote_node(struct dev= ice *dev, u8 port, u8 end * protocol device needs to be created manually with the help of the notif= ier * of the discoverable bus like PCIe. */ -static int pwrseq_pcie_m2_register_notifier(struct pwrseq_pcie_m2_ctx *ctx= , struct device *dev) +static int pwrseq_pcie_m2_register_notifier(struct pwrseq_pcie_m2_ctx *ctx) { int ret; =20 @@ -416,18 +426,56 @@ static int pwrseq_pcie_m2_register_notifier(struct pw= rseq_pcie_m2_ctx *ctx, stru * Register a PCI notifier for Key E connector that has PCIe as Port * 0/Endpoint 0 interface and Serial as Port 3/Endpoint 0 interface. */ - if (pwrseq_pcie_m2_check_remote_node(dev, 3, 0, "serial")) { - if (pwrseq_pcie_m2_check_remote_node(dev, 0, 0, "pcie")) { - ctx->dev =3D dev; - ctx->nb.notifier_call =3D pwrseq_pcie_m2_notify; - ret =3D bus_register_notifier(&pci_bus_type, &ctx->nb); - if (ret) - return dev_err_probe(dev, ret, - "Failed to register notifier for serdev\n"); + if (!pwrseq_pcie_m2_check_remote_node(ctx->dev, 3, 0, "serial") || + !pwrseq_pcie_m2_check_remote_node(ctx->dev, 0, 0, "pcie")) + return 0; + + ctx->nb.notifier_call =3D pwrseq_pcie_m2_notify; + ret =3D bus_register_notifier(&pci_bus_type, &ctx->nb); + if (ret) + return dev_err_probe(ctx->dev, ret, + "Failed to register notifier for serdev\n"); + return 0; +} + +static int pwrseq_pcie_m2_create_serdev(struct pwrseq_pcie_m2_ctx *ctx) +{ + struct pci_dev *pdev =3D NULL; + int ret; + + if (!pwrseq_pcie_m2_check_remote_node(ctx->dev, 3, 0, "serial") || + !pwrseq_pcie_m2_check_remote_node(ctx->dev, 0, 0, "pcie")) + return 0; + + struct device_node *pci_parent __free(device_node) =3D + of_graph_get_remote_node(dev_of_node(ctx->dev), 0, 0); + if (!pci_parent) + return 0; + + /* Create serdev for existing PCI devices if required */ + for_each_pci_dev(pdev) { + if (!pdev->dev.parent || pci_parent !=3D pdev->dev.parent->of_node) + continue; + + if (!pci_match_id(pwrseq_m2_pci_ids, pdev)) + continue; + + ret =3D __pwrseq_pcie_m2_create_serdev(ctx, pdev); + if (ret) { + dev_err_probe(ctx->dev, ret, + "Failed to create serdev for PCI device (%s)\n", + pci_name(pdev)); + pci_dev_put(pdev); + goto err_remove_serdev; } } =20 return 0; + +err_remove_serdev: + pwrseq_pcie_m2_remove_serdev(ctx, NULL); + + return ret; } =20 static int pwrseq_pcie_m2_probe(struct platform_device *pdev) @@ -489,16 +537,25 @@ static int pwrseq_pcie_m2_probe(struct platform_devic= e *pdev) =20 mutex_init(&ctx->list_lock); INIT_LIST_HEAD(&ctx->pci_devices); + ctx->dev =3D dev; + + /* Create serdev for available PCI devices (if required) */ + ret =3D pwrseq_pcie_m2_create_serdev(ctx); + if (ret) + goto err_destroy_mutex; + /* * Register a notifier for creating protocol devices for * non-discoverable busses like UART. */ - ret =3D pwrseq_pcie_m2_register_notifier(ctx, dev); + ret =3D pwrseq_pcie_m2_register_notifier(ctx); if (ret) - goto err_destroy_mutex; + goto err_remove_serdev; =20 return 0; =20 +err_remove_serdev: + pwrseq_pcie_m2_remove_serdev(ctx, NULL); err_destroy_mutex: mutex_destroy(&ctx->list_lock); err_free_regulators: --=20 2.51.0 From nobody Wed Jun 17 04:14:31 2026 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 055293CFF73; Wed, 22 Apr 2026 11:25:13 +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=1776857113; cv=none; b=Ud6+9yjKjp23h7qU3vMKEMp/PR+2b8K/0u/IjqnDjbn4vG78SbrcdeYVhPrl+0MK4WkWoMG7rZSjPflkT4pE8mxGAbKRTob+Ju6h22Q2dkvyrr2Um0JzZBtrQV4+t0VL39kV+gmvWBEQLvbs4nNvehjvXpADbJ1dPQ/8ONincU8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776857113; c=relaxed/simple; bh=rahIK407Uf2DgR2AcY120luq+IbRKhapEgJAn9AFJa4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PCDgNc940WgnZdJFBNICDD36IitGo+/XJl4WuM8Aw4AbkJxD2Fqnfaa/UB3bZWJc1Gg6Ty7HfT0BkmJtxra3DebA7PNA8YLvRDIyJsKrDN7pvo5GvG3Us6eQWnxPtRSsIFXmgw/i+kZsb1q++ziLlxBSMZpf7HJJxsNML1ZIgi4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=N+5UYEQH; 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="N+5UYEQH" Received: by smtp.kernel.org (Postfix) with ESMTPS id D7387C2BCC9; Wed, 22 Apr 2026 11:25:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776857112; bh=rahIK407Uf2DgR2AcY120luq+IbRKhapEgJAn9AFJa4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=N+5UYEQHoaK8Q60BrBtaMgSadbgDe6ZzQJa3IcQS1G0ZRPh5aqlpu3qrlSjwnRyJt O9fHeuuOU+0Vy8j7Kn7rcd0HogXMbeiIWDnLJ1YG9j+FQkJNiPQfzfw4nR9W1ursUa 0TLMI5Mn78uB9stpSc9l/l3knuBFlU89TYotARX+zokGj4y48OT9RwNNJjVqCQ7vQ8 RrkFQXPmdWfI6mtHqGxqrJAatzw3eixCOA07NWlMNyyli27DtiC/GpHYi/nvUJB79T 1Sicwb1N+pSDOMSPRK340alro3Q10A22er/cgWoJleTl2O2V/5P6j34Mclb2RMcL7i NnF4GO5dmru+A== 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 CF0D4F5A8DE; Wed, 22 Apr 2026 11:25:12 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Wed, 22 Apr 2026 16:54:49 +0530 Subject: [PATCH 08/12] power: sequencing: pcie-m2: Create BT node based on the pci_device_id[] table 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: <20260422-pwrseq-m2-bt-v1-8-720d02545a64@oss.qualcomm.com> References: <20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com> In-Reply-To: <20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com> To: Bartosz Golaszewski , Manivannan Sadhasivam , Marcel Holtmann , Luiz Augusto von Dentz , Shuai Zhang Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-bluetooth@vger.kernel.org, Wei Deng , Luiz Augusto von Dentz , Manivannan Sadhasivam X-Mailer: b4 0.15.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=3150; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=gwqWztQ2vBGh5JXCHhwF7Sem2dA5HgVW+YJLGPrMk3w=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp6LAVV9Sl4KSgjtyUczECqKLK18IZ+VW0DgOZs CMcQtapewqJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaeiwFQAKCRBVnxHm/pHO 9TCsB/9hzdnKbSX7cxGGZtqiNVW08cTyu3KNGCbmesZe7YNrw4yKGzcElM0lXYbtu/dJsmlXf9A x0EFRzFyajbrKsaURicDPjIpgJTJZHXx22YLxNWzq6PdW691FZrcfE4+rrzHJGVYdbVfpYmC+/u qSfzNvtYSds4KrzsJzhyaqTGNIlRjTRZnCpeRtSv4ZJzh3UHaknbS6UVOnwZs2t9ayrNdWZsZBn HLsYjjYItl2WX3mTShfTncKzSYONlWaQW8D0E4Av9j9hBWnb9KvpadcIAoCX7sHkqMUhJF3Apdy IzRryhYX9fMapEJrQVm0fkc1bSCN/dHq3DoD1cCK48p+RNz3 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 Currently, pwrseq_pcie_m2_create_bt_node() hardcodes the BT compatible for creating the devicetree node. But to allow adding support for more devices in the future, create the BT node based on the pci_device_id[] table. The BT compatible is passed using 'driver_data'. Co-developed-by: Wei Deng Signed-off-by: Wei Deng Signed-off-by: Manivannan Sadhasivam Tested-by: Wei Deng --- drivers/power/sequencing/pwrseq-pcie-m2.c | 29 ++++++++++++++++++++-------= -- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/drivers/power/sequencing/pwrseq-pcie-m2.c b/drivers/power/sequ= encing/pwrseq-pcie-m2.c index b21fcc089580..23dc91e2b128 100644 --- a/drivers/power/sequencing/pwrseq-pcie-m2.c +++ b/drivers/power/sequencing/pwrseq-pcie-m2.c @@ -193,14 +193,29 @@ static int pwrseq_pcie_m2_match(struct pwrseq_device = *pwrseq, return PWRSEQ_NO_MATCH; } =20 +static const struct pci_device_id pwrseq_m2_pci_ids[] =3D { + { PCI_DEVICE(PCI_VENDOR_ID_QCOM, 0x1107), + .driver_data =3D (kernel_ulong_t)"qcom,wcn7850-bt" }, + { } /* Sentinel */ +}; + static int pwrseq_pcie_m2_create_bt_node(struct pwrseq_pcie_m2_ctx *ctx, struct pwrseq_pci_dev *pci_dev, - struct device_node *parent) + struct device_node *parent, + struct pci_dev *pdev) { + const struct pci_device_id *id; struct device *dev =3D ctx->dev; + const char *compatible; struct device_node *np; int ret; =20 + id =3D pci_match_id(pwrseq_m2_pci_ids, pdev); + if (WARN_ON_ONCE(!id)) /* Shouldn't happen */ + return -ENODEV; + + compatible =3D (const char *)id->driver_data; + pci_dev->ocs =3D kzalloc_obj(*pci_dev->ocs); if (!pci_dev->ocs) return -ENOMEM; @@ -214,7 +229,7 @@ static int pwrseq_pcie_m2_create_bt_node(struct pwrseq_= pcie_m2_ctx *ctx, goto err_destroy_changeset; } =20 - ret =3D of_changeset_add_prop_string(pci_dev->ocs, np, "compatible", "qco= m,wcn7850-bt"); + ret =3D of_changeset_add_prop_string(pci_dev->ocs, np, "compatible", comp= atible); if (ret) { dev_err(dev, "Failed to add bluetooth compatible: %d\n", ret); goto err_destroy_changeset; @@ -289,13 +304,14 @@ static int __pwrseq_pcie_m2_create_serdev(struct pwrs= eq_pcie_m2_ctx *ctx, goto err_free_pci_dev; } =20 - ret =3D pwrseq_pcie_m2_create_bt_node(ctx, pci_dev, serdev_parent); + ret =3D pwrseq_pcie_m2_create_bt_node(ctx, pci_dev, serdev_parent, pdev); if (ret) goto err_free_serdev; =20 ret =3D serdev_device_add(pci_dev->serdev); if (ret) { - dev_err(dev, "Failed to add serdev for WCN7850: %d\n", ret); + dev_err(dev, "Failed to add serdev for PCI device (%s): %d\n", + pci_name(pdev), ret); goto err_free_dt_node; } =20 @@ -361,11 +377,6 @@ static void pwrseq_pcie_m2_remove_serdev(struct pwrseq= _pcie_m2_ctx *ctx, mutex_unlock(&ctx->list_lock); } =20 -static const struct pci_device_id pwrseq_m2_pci_ids[] =3D { - { PCI_DEVICE(PCI_VENDOR_ID_QCOM, 0x1107) }, - { } /* Sentinel */ -}; - static int pwrseq_pcie_m2_notify(struct notifier_block *nb, unsigned long = action, void *data) { --=20 2.51.0 From nobody Wed Jun 17 04:14:31 2026 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 13D6C3D0907; Wed, 22 Apr 2026 11:25:13 +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=1776857113; cv=none; b=puh5rE6YbG9KuhkpTcE5/Vxft1r+BoNGxZ08cupT3fy+D9YG6GAit8FSEYbItwpH7EihLPWH65d6Ysc1bgeHLMvVxOuIZJAareuHRfmFPqbbZvfne1M32rq0N6WGnbmcRDB7Euuj4BMqGFt2krLSoi46hz2FD+z5931oeqfAiPE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776857113; c=relaxed/simple; bh=+pPEoQPVaB6vrIwyqUBpjpkwH0SKrC3vOXGouN0HuCA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KdDQSjL4oUtHKXsKGnmMNwVXB+QuShXDkFDtuQOlaCESdJ2TCYTZbPA9EzTZm0/vV8n4ZYv5dm2jshANM1a1qNdmbgGIfQ+Jz4JcHWwl1hyW9W7WPENTDxPLiwJDzqbElOS9h5InbvBU6gNqYMQmGp283AUxwB7gjMuq/UkE7Qc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dhM2P/Vp; 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="dhM2P/Vp" Received: by smtp.kernel.org (Postfix) with ESMTPS id E6A94C2BD01; Wed, 22 Apr 2026 11:25:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776857112; bh=+pPEoQPVaB6vrIwyqUBpjpkwH0SKrC3vOXGouN0HuCA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=dhM2P/Vp6qrX4A7LjwBDF7+tnpgKyrQ+LPkye1o6jxS562KguRPAy/oUGVF2Hs7sC DA3NdYqdT60pWvirFW3Xz/32EI8qKKx3f+/tWzgXt8psykm50GoMXLcReEtf0gA4Zq Zsg2TqDzAOpUS4lCJYll/5LUXW8SqvyrSAEBEoZQRVW3JDVrS40FpdDq0QEPxE3XIP Vbse+D293jNP3eeLn/MH77APA8NiB4D/hJsLdBIwToxeW5ju36L8ZM5ywp87Ezn6nb f5k1y0qeBTzhvNZsmJzwlbc6UCTsVAWAE48klQSurFr0zqYw737+Cx5oQnalnzjNCN jX1dWNl1WjkCQ== 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 DE013F5A8DD; Wed, 22 Apr 2026 11:25:12 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Wed, 22 Apr 2026 16:54:50 +0530 Subject: [PATCH 09/12] Bluetooth: hci_qca: Add M.2 Bluetooth device support using pwrseq 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: <20260422-pwrseq-m2-bt-v1-9-720d02545a64@oss.qualcomm.com> References: <20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com> In-Reply-To: <20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com> To: Bartosz Golaszewski , Manivannan Sadhasivam , Marcel Holtmann , Luiz Augusto von Dentz , Shuai Zhang Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-bluetooth@vger.kernel.org, Wei Deng , Luiz Augusto von Dentz , Manivannan Sadhasivam , Bartosz Golaszewski X-Mailer: b4 0.15.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1651; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=qvK9ciP9Mieq+7bzZAQ97BmIuJooRLI2mcgnenl9gDE=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp6LAVVuUjoZeqgIvI+Eh9dYh8Z1Endxct3JPBg LpEE1N6j2KJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaeiwFQAKCRBVnxHm/pHO 9UxvB/9FVPbDboBVhdi4RzMfCrwPtrAQFlqXLDsyG/Krp20mLA2rUfusw3SKzfIvcg7D4B5hduy ICBO/nlJO9AmlUcOxEEZHJrzO2F1ktuUwVrcvFPtpa6d0VMG91uh9rNJChdQI0sKNuWHioaghqA BOltkglY6kZ+ZUVMyQFX9sEWWPTnXw29wbSIKNFbGCwXm6hT44tOA73+gOlz2eGYqYPuZcpYr4L DT83m7DCYQqQCsdrnuIfZg3G4JCpZkMbml7vqe4LrEZqx8qwDs6bW8BHnDZs8Rw58P4C8UsceUs 1kp/pceLn0NkibTWlvurvQ32jtJWSLPjAPO2dexj1tJcXSJA 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 Power supply to the M.2 Bluetooth device attached to the host using M.2 connector is controlled using the 'uart' pwrseq device. So add support for getting the pwrseq device if the OF graph link is present. Once obtained, the existing pwrseq APIs can be used to control the power supplies of the M.2 card. Reviewed-by: Bartosz Golaszewski Signed-off-by: Manivannan Sadhasivam Reviewed-by: Dmitry Baryshkov Tested-by: Wei Deng --- drivers/bluetooth/hci_qca.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index cd1834246b47..c83fe72bc549 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -2443,6 +2444,18 @@ static int qca_serdev_probe(struct serdev_device *se= rdev) case QCA_WCN6750: case QCA_WCN6855: case QCA_WCN7850: + /* + * OF graph link is only present for BT devices attached through + * the M.2 Key E connector. + */ + 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 --=20 2.51.0 From nobody Wed Jun 17 04:14:31 2026 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 1E3413D0922; Wed, 22 Apr 2026 11:25:13 +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=1776857113; cv=none; b=PIsYXFltC/aG5rbqE/ucrfyEp+IAQ/6sVgSibeVd62MnpnJiwhS9XCPD9l4gMmSMwS06qdXZe0Ao9+Tga0gNprgbNa9+GG18MkjWJ1Odk03W/YueRLyofjO8hr3zcI9y0KIwopQ/Dac9buNXw+fbS21bDB91tw3MyGw5Q+XHuRY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776857113; c=relaxed/simple; bh=Tg7SOw3s/lafvQJmQvIbW/95bIZ182IZGFX/NqvyLac=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LkEl+Awq4ZavrllSFQUfNjvMZdCuAOjkAkiE95TckRjNruWDnSG+6bbRaTDmFH8kPQHQhCslu3gS+bJP+XojPk36oeMiGNbbJWFOcAx36vDEKg07bJ2p3HZ+onul++VCck5d1mlnNwid42WPZczCvNqh54l5YgxoXSwEETF9Utw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=fduyQp40; 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="fduyQp40" Received: by smtp.kernel.org (Postfix) with ESMTPS id 0044FC2BCB6; Wed, 22 Apr 2026 11:25:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776857113; bh=Tg7SOw3s/lafvQJmQvIbW/95bIZ182IZGFX/NqvyLac=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=fduyQp40SyGAKvw2nJLGHmxrE6YdxQQH7HWscbrKrlYA8cDazXPfY6jynK8AC1ASp 4nPTKuE9rjJsKPes8cOT//XQK9wFB2GpQqcAz5FWr4805LAugsDVrF6c59tIb8l/f1 2lKjMBp3Yyzl7E9ZiEAA2jmvj6L2xA4vEeV4BvYeSsSS/bECqIYYpjAeOBG0L3P2p4 rpyTKNiCnWuV8ZyAgLsMX+IsmtWzN/Gwfpxetmt96jA4XdeLhU/6eqZo9JKZ8BONsw GUHOrtWI1IshEa+NRTcwoN9/wkSDcWply5FWZBxahQ7s/JZYb8fXqwV6VGyvBiS51s H1Fm0HnWWvuog== 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 EC4D8F55811; Wed, 22 Apr 2026 11:25:12 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Wed, 22 Apr 2026 16:54:51 +0530 Subject: [PATCH 10/12] Bluetooth: hci_qca: Rename 'power_ctrl_enabled' to 'bt_en_available' 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: <20260422-pwrseq-m2-bt-v1-10-720d02545a64@oss.qualcomm.com> References: <20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com> In-Reply-To: <20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com> To: Bartosz Golaszewski , Manivannan Sadhasivam , Marcel Holtmann , Luiz Augusto von Dentz , Shuai Zhang Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-bluetooth@vger.kernel.org, Wei Deng , Luiz Augusto von Dentz , Manivannan Sadhasivam X-Mailer: b4 0.15.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1855; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=CYtLXv4mDbkKU8ZXR0dOu/yzt7lNw0H8EDwMcs3qDA4=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp6LAVg3I8YJy0MeD42TYKbsZ3Hmz05FP5VLWr2 CRMx/3aU5GJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaeiwFQAKCRBVnxHm/pHO 9Qe/B/49VnD5xEguAAq4cD9f3UojRirIXC0j8AIO/Qub7Spl76Ah6J6kzmHNQXzGf5Gfp/FzEiw M4HnURHWVyJoGm+KkB8SkM1Dso5OvR+afSAbcVwRspogwtcWxoRpXAGt/naLBJw/90tGJMoRO4Q QwD8zIzOrsvRFvIsgb/ncE2Za9TctJPfdNOe6OYRs+vT3udzlwpfxp2PJ3Mo9i1CeSrMN6Ykk/y OfBWyToJr2ukIWA9UDeGru+1xk4KYxk7hMz/ybJJk1JbFbacQ5wcqijEBu6/oGC9f6wpeX1doAz 5rBbtFdsgI22/wq1pqL6UBUty7qKAOMEJfZhgqyxv8cn2xeL 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 'power_ctrl_enabled' flag is used to indicate the availability of the BT_EN GPIO in devicetree. But the naming causes confusion with the new pwrctrl framework. So rename it to 'bt_en_available' to make it clear and explicit. Signed-off-by: Manivannan Sadhasivam Reviewed-by: Dmitry Baryshkov Tested-by: Wei Deng --- drivers/bluetooth/hci_qca.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index c83fe72bc549..3e71a72ea7c7 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c @@ -2391,7 +2391,7 @@ static int qca_serdev_probe(struct serdev_device *ser= dev) struct hci_dev *hdev; const struct qca_device_data *data; int err; - bool power_ctrl_enabled =3D true; + bool bt_en_available =3D true; =20 qcadev =3D devm_kzalloc(&serdev->dev, sizeof(*qcadev), GFP_KERNEL); if (!qcadev) @@ -2499,7 +2499,7 @@ static int qca_serdev_probe(struct serdev_device *ser= dev) (data->soc_type =3D=3D QCA_WCN6750 || data->soc_type =3D=3D QCA_WCN6855 || data->soc_type =3D=3D QCA_WCN7850)) - power_ctrl_enabled =3D false; + bt_en_available =3D false; =20 qcadev->sw_ctrl =3D devm_gpiod_get_optional(&serdev->dev, "swctrl", GPIOD_IN); @@ -2537,7 +2537,7 @@ static int qca_serdev_probe(struct serdev_device *ser= dev) } =20 if (!qcadev->bt_en) - power_ctrl_enabled =3D false; + bt_en_available =3D false; =20 qcadev->susclk =3D devm_clk_get_optional_enabled_with_rate( &serdev->dev, NULL, SUSCLK_RATE_32KHZ); @@ -2555,7 +2555,7 @@ static int qca_serdev_probe(struct serdev_device *ser= dev) =20 hdev =3D qcadev->serdev_hu.hdev; =20 - if (power_ctrl_enabled) { + if (bt_en_available) { hci_set_quirk(hdev, HCI_QUIRK_NON_PERSISTENT_SETUP); hdev->shutdown =3D qca_hci_shutdown; } --=20 2.51.0 From nobody Wed Jun 17 04:14:31 2026 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 28F883D093E; Wed, 22 Apr 2026 11:25:13 +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=1776857113; cv=none; b=h1Pj7VvVHB55fsWM0SKnL8rfwsxZ3p2ODbEm2UCee91amQd1wmImVx22eQk2gCad9K8vEbaNJfrCX1xFiC/uUUGISYHaVOkfmFjcKgN9Tx2DynBdS3YV4ZK2479igy2TR/D8kVlwbI3hLiKoM3qrbznmqgQ86v8MAl4BUirVjyE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776857113; c=relaxed/simple; bh=Z2XhQFgSczXs6etj6Kn9gFI9cgZPNFDDhuehnrLVz74=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pf1Nb8I5ZYuzX1GRy4qTpTxsmG48mC7NjzRGlJGn4M49Waz1U4NNtGmqKflZV5KrnIiTY6PIj7sWQ7eGJa/YNwmEuqDZ/iH/1k4pJomZUJIZUZFuRoxAlurvXYAS9bemjnBnXVKDOE4/cB2WWsGbcbsPbnG1hbl4RYfsd/DT6f0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=b1Cz3LBh; 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="b1Cz3LBh" Received: by smtp.kernel.org (Postfix) with ESMTPS id 0E3D1C2BCB8; Wed, 22 Apr 2026 11:25:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776857113; bh=Z2XhQFgSczXs6etj6Kn9gFI9cgZPNFDDhuehnrLVz74=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=b1Cz3LBhxbeq2LUjcli9VxWIWXdR3eYAI7Zbv5ir8grKEv5nkKP7YSSyszJ9fA6hq yqmQx1XSYR2hwjKYir0Gumb6uacJpAEW2yDyYPoyC/z7zahK10jsxaGsFsuldw46SM o+5hb9eTb12sbFj1ZxNaUjsSRIVPtC72a/Z9mJDfvMDI4qbIvR/Y7cDt0h4Az0pjQ/ ZllZNu94n+q+CSR1G/AkAlgwWWq5cwvOTNGioC/nweV4a72qGBTyJ6v9ID2BoZqg9F BSNpVuIlvV2VDK/5+iPnRAvP6KEqP0tCVdY19CdHk6W7VFJvgL6NnDx1REVdQ+geXi YiIVrst69W8Rw== 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 06985F8FA9E; Wed, 22 Apr 2026 11:25:13 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Wed, 22 Apr 2026 16:54:52 +0530 Subject: [PATCH 11/12] Bluetooth: hci_qca: Check whether the M.2 UART interface is fixed or not 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: <20260422-pwrseq-m2-bt-v1-11-720d02545a64@oss.qualcomm.com> References: <20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com> In-Reply-To: <20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com> To: Bartosz Golaszewski , Manivannan Sadhasivam , Marcel Holtmann , Luiz Augusto von Dentz , Shuai Zhang Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-bluetooth@vger.kernel.org, Wei Deng , Luiz Augusto von Dentz , Manivannan Sadhasivam X-Mailer: b4 0.15.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1019; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=QIQ7zI+FcCO4Ozijr68y6L0R3ZFIXMS+JR88yCNclek=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp6LAVR3W3V/KaHFdujOJwfJZ0I+8jLydfeBZ8c C328qYFsrOJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaeiwFQAKCRBVnxHm/pHO 9YQwB/0SQX+/Rbzc9tYYkKZ8hAXIlBudrTL7cV4f3GeBe+ZtK6NTWCunNb7eXa9yuHvHCd9rl3k q3rztVESPA7EUkULnNf3vf69nKap5M8nXd5LoUFcL6F/3b4WhDkUoAPCC4dpT1fYfLR4kqp4k/F adD+fVrocmi0ny4WJxDSF31GfJjsi+Hkp23SqSfIOvgcU/d3sTZVro8VRjvt64KXqfbgWf5rZtg qhYP9GXbF/4T6a83od1As5/ZPGYlb1DJPYysyepKTx91EWhl78i48qE4wM2oLiMv3ohsqVyqKUy B73fONwa5nr+RdRHt8DVLfnQtWt6ukk5yzMGy8jpFxfpcwvG 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 In the M.2 connector, the UART interface is controlled through the W_DISABLE2# signal. But the BT driver cannot know directly whether this signal is available or not. Hence, use the new pwrseq API 'pwrseq_is_fixed()' to check whether the UART interface on the M.2 connector is fixed or controllable and set the 'bt_en_available' flag accordingly. Signed-off-by: Manivannan Sadhasivam Reviewed-by: Dmitry Baryshkov Tested-by: Wei Deng --- drivers/bluetooth/hci_qca.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index 3e71a72ea7c7..27e52b08ec47 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c @@ -2453,6 +2453,10 @@ static int qca_serdev_probe(struct serdev_device *se= rdev) "uart"); if (IS_ERR(qcadev->bt_power->pwrseq)) return PTR_ERR(qcadev->bt_power->pwrseq); + + if (pwrseq_is_fixed(qcadev->bt_power->pwrseq)) + bt_en_available =3D false; + break; } =20 --=20 2.51.0 From nobody Wed Jun 17 04:14:31 2026 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 392DC3D16F2; Wed, 22 Apr 2026 11:25:13 +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=1776857113; cv=none; b=LZqpbhY9V455PjgOn2tohThIMkXcXTMTNC9K6fXEwuLAHXUGJgaUTR+YdLTvlgjNz7/BTtrEvmEjKbAUsx3/Ma8hjvc4DIThZtjXDvV4lIP+v3CR4q/wJoyzBf8ifu55U9GP/VSlSKtYaudN6gv1d6SSTt37aIeWVwVzkWlo9+Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776857113; c=relaxed/simple; bh=aC3N0vFLQqJ9pWeBGkZU7n1kGC1cK0vsr+ydfhVVUxM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HzftSp6E2BKtHJVc2ZCP/Z9WrprLPZwaBNqJ46UjY/BsGn4ikxCAYl8guwOBxV7XUgOSsVRO94SougoJJEuEr2cauzuYNFlRdhdL7Z+WdoFRCYEItsNOnsIpzhEcSlz7S7Y3YLyGsr+f402lWKQTG5ez4Efve/UHBqz20n1s+JA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=oLu72SdG; 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="oLu72SdG" Received: by smtp.kernel.org (Postfix) with ESMTPS id 1DAE3C2BCB9; Wed, 22 Apr 2026 11:25:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776857113; bh=aC3N0vFLQqJ9pWeBGkZU7n1kGC1cK0vsr+ydfhVVUxM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=oLu72SdGs8LDg14oaxCuiOnuBXWounJvSv9QHX1RPk/M6w1qw8LPx4kZQPzl0Glds 62TnNJod6g9OpUjzLGzK5EX44bOQTdvjY+pggFyVQR37/R3pB5LPbuYEfGHSaX2vBF NCvj/ffWTdUcq4nu+dPbvQBq+F/bIvZ0ScwxO7ScK84CPSnWgq1uNZ7HHJKrKteWfk B6Y4DLTJXa2+u9lvDgb9rm+vQr5gMbq/GwI/HIeHuiS0KNL7XDYx3r47KPhR3rCWR1 JYWdO60zI+ixcCFE7d7sC/sH9YwgmLQu1rAoGGwhH+kk8cQpnAn5aZm5QVyIhUh5jY lvyEO91fwsRrQ== 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 15442F5A8DE; Wed, 22 Apr 2026 11:25:13 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Wed, 22 Apr 2026 16:54:53 +0530 Subject: [PATCH 12/12] Bluetooth: hci_qca: Fix the broken BT_EN GPIO detection for Qcom WCN devices 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: <20260422-pwrseq-m2-bt-v1-12-720d02545a64@oss.qualcomm.com> References: <20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com> In-Reply-To: <20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com> To: Bartosz Golaszewski , Manivannan Sadhasivam , Marcel Holtmann , Luiz Augusto von Dentz , Shuai Zhang Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-bluetooth@vger.kernel.org, Wei Deng , Luiz Augusto von Dentz , Manivannan Sadhasivam , stable+noautosel@kernel.org X-Mailer: b4 0.15.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2538; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=MQK4uW+3KV6qGFqWC5yEYOtbmFTmhw+bW5cuFTU5wq0=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp6LAWuB2qxpCLf/GFBYjifLzZ8B9XHNP/TnaUg 6BT6IqwDcqJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaeiwFgAKCRBVnxHm/pHO 9UrGCACcW+dlfQav+XDBsT8HgQvBy6YlJjwgniDIlcAYbGTDuMmfs1PqEWivUb4lfHSSOMkUUAp mB+c9oOr7b08WeHiuO6gEtLJx1hITwXtZuJsrWjr5/dMeWwH1uIhIrbQc0XobrppCNb1YtkqPy2 d34tGCxvjcH+Bzhz1IaNm4kW/FVogCv4LDi3K6zN3yHVVTghJpX8K6ZbuGtl/WcxHoouM4+nRty /jzTiLzt2Ax8VKjr19NAR/tStQGbufxp3PK/g6FmNE75k/teM3lF+ujGx52i5s7Cjdd+8CtthCJ ffU2AI06ZtQBFJVIFeYP684R9qS+CZYFDcNr1H5dPzJwE7Kk 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 Commit 'db0ff7e15923 ("driver: bluetooth: hci_qca:fix unable to load the BT driver")' tried to check the presence of the BT_EN GPIO in Qcom WCN devices to indicate the HCI layer whether this BT device can be power controlled or not. But it was broken for two reasons: 1. Assumes that when devm_pwrseq_get() API returns an error, BT_EN is not controllable. This is no way true as the API can fail for various reasons and also the pwrseq-qcom-wcn driver treats the BT_EN GPIO as optional. So even if the GPIO is not present, it will not fail the probe and this API will not fail. 2. By skipping the error return, probe deferral is completely broken as the API may return -EPROBE_DEFER to indicate the caller that the pwrseq driver is not yet probed. Skipping the return value means, this driver is not going to depend on pwrseq driver probing again and it just assumes that the pwrseq is not available. So to fix these issues, fail the probe if devm_pwrseq_get() returns an error and if it succeeds, use the newly introduced pwrseq_is_fixed() API to check whether the power sequencer is fixed or not (i.e., whether the Bluetooth interface on the Qcom WCN device is controllable using BT_EN GPIO or not) and set the 'bt_en_available' flag accordingly. Cc: # Depends on pwrseq change Fixes: db0ff7e15923 ("driver: bluetooth: hci_qca:fix unable to load the BT = driver") Signed-off-by: Manivannan Sadhasivam Tested-by: Wei Deng --- drivers/bluetooth/hci_qca.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index 27e52b08ec47..dd1d93cbb3d8 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c @@ -2470,16 +2470,13 @@ static int qca_serdev_probe(struct serdev_device *s= erdev) qcadev->bt_power->pwrseq =3D devm_pwrseq_get(&serdev->dev, "bluetooth"); =20 - /* - * Some modules have BT_EN enabled via a hardware pull-up, - * meaning it is not defined in the DTS and is not controlled - * through the power sequence. In such cases, fall through - * to follow the legacy flow. - */ if (IS_ERR(qcadev->bt_power->pwrseq)) - qcadev->bt_power->pwrseq =3D NULL; - else - break; + return PTR_ERR(qcadev->bt_power->pwrseq); + + if (pwrseq_is_fixed(qcadev->bt_power->pwrseq)) + bt_en_available =3D false; + + break; } =20 qcadev->bt_power->dev =3D &serdev->dev; --=20 2.51.0