From nobody Mon May 25 03:55:49 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 0E62A3F074E; Tue, 19 May 2026 08:56:03 +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=1779180964; cv=none; b=hxYKwQQCrOi19q4SaRbjxwI9b/eYClTyTifwZslxJBBpsICIGpsFmEgIiecs/1qgYHfeF5KCgkRd2vkC9ZIZZjUQBL0l7gAHu+cnYke6yG8g/aHYS9l1dN8tk49AY2PqRahul1FWjDR+LKtejdOorlLzCZO84/+A0/scuwKl/Po= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779180964; c=relaxed/simple; bh=68YoT9izcfzey+OgMqPDjVvXKz4xAyWjFsIlXdXFMQQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Q8GWylamsivrzTE/hwlIwv+WyGhohtahZJVtoEywP1TbiJ+PTd0IFF2qd1Z2vqoDsfzZgxcJGk5899OTaUKPLKyZaw6+xx5z3WsgtHPckkYPBd9QfkxdPAh+0VRrvORIdTf6B3o2NSoMcrpTDAN757STZj6SVzJrjYASWJdhhQg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mlgTz6H5; 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="mlgTz6H5" Received: by smtp.kernel.org (Postfix) with ESMTPS id B0C82C2BCC9; Tue, 19 May 2026 08:56:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779180963; bh=68YoT9izcfzey+OgMqPDjVvXKz4xAyWjFsIlXdXFMQQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=mlgTz6H5Z6kMIo+tPhToU7vONrv2MCBbABQU8JOYo9Mkk/zhz9oT9x3oVA9IGQzSH uGcx6KYFnh937s119LToQZlfaQWaa3UeIaG+IHur9+32rsm2tyvBoTCa3nlJd61PAn Y+9vb3iSvP0ycbNMoL5gAFIFwuDoFJbJhT/d71la4CIVFPFqw8YrEXuflbW7q5/LwJ zmKx+qASfzBxqNNXIDfQoYEAxXreUlsAHrGeipiboAnghosZJ7z7lU/NbR/Xt4Fl7q hmGMYohZ/vvkxo9E4POOFzfd2vy34P1x2f/Jl41R2+/XvK1QPsAzixikpJUdgd85oK U/uW8hxCcgJwA== 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 A1135CD4F57; Tue, 19 May 2026 08:56:03 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Tue, 19 May 2026 14:25:56 +0530 Subject: [PATCH v3 1/9] 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: <20260519-pwrseq-m2-bt-v3-1-b39dc2ae3966@oss.qualcomm.com> References: <20260519-pwrseq-m2-bt-v3-0-b39dc2ae3966@oss.qualcomm.com> In-Reply-To: <20260519-pwrseq-m2-bt-v3-0-b39dc2ae3966@oss.qualcomm.com> To: Manivannan Sadhasivam , Bartosz Golaszewski , Marcel Holtmann , Luiz Augusto von Dentz Cc: linux-pci@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-bluetooth@vger.kernel.org, Wei Deng , Manivannan Sadhasivam X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2082; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=OzSOLSJTM2+lHbh50xUinPK/5SSZvR5hJw0X+Sc++Us=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBqDCWdWD0JU00zP67qaszIZN42Iep5F+fvGO6XT cdm4VJ7Ge2JATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCagwlnQAKCRBVnxHm/pHO 9cezCACnXoJ/9spLcDtcdWp966CMw/XJM1luSmhRbMKjaiiZiAjXTi9Go3i2gCmHzI0Hb70Wo5j tYbSLlXPN5HFozEDa50H/qmMqlcrK8QcKaFTSUmx7WtRIgjwH58ev+UqTk4LssB1vRlpSlHectu aEtRlBKRRjarGMymg0o039C5dsvc8UXEZPLYxfKLCIR/JdgZxXi/jv1p8lvjf4LQsolcZRmqtTd 3BALu5S9xP7xppdeBIs3Us6pJTFJAwgK9vW3qYATBto+BOO+wXnCMOGRM+j/CgUBZFXa3qlfomN kykXs/xKsQssVwXadmbya9Tv08wBgp7xPa9OLA2ah+VhN/So 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. Tested-by: Wei Deng Signed-off-by: Manivannan Sadhasivam --- 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 ef69ae268059..b2ed336fd5ad 100644 --- a/drivers/power/sequencing/pwrseq-pcie-m2.c +++ b/drivers/power/sequencing/pwrseq-pcie-m2.c @@ -177,7 +177,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; @@ -254,7 +254,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 @@ -299,7 +299,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); @@ -364,7 +364,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.48.1 From nobody Mon May 25 03:55:49 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 0E5183EFFD6; Tue, 19 May 2026 08:56:03 +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=1779180964; cv=none; b=Xmy7zW63g4+K3Ofo+wDp0V753eWhEfGCUA/Z47QCPXiDRMH2zcQHnTSbFIei+/v8bhmKSNkk3+YcYSt7tcpYyBPG1PlPvkQswPeZqE0NK1ZK+h7bH2epkjqE59QRPuMsh2F1WJ7/q0gvYW7mfxCEpnP9Y4aelo+WWpKFby8spDg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779180964; c=relaxed/simple; bh=XOOgZkMjmCOdxzWCXCORmGtjbP+hEEndsnlcGi0NxCU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SziYOOubU7gy5RQNIDLcw+IJXFL7Y0qJ7uLF69YqNXAhsnDdubkf6O/p/l0lp4g5JUXczVpZ8/x4J2VEbqLiKGWV2ey2TPK+dPBOnjIaKpifx+M/LQjhwRCHbGwMd351l/tZXBFM+ItJ1qKSNRMPW68rkIDiA1U3RaMuH+RiqEI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=W/08SqJg; 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="W/08SqJg" Received: by smtp.kernel.org (Postfix) with ESMTPS id C38BAC4AF09; Tue, 19 May 2026 08:56:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779180963; bh=XOOgZkMjmCOdxzWCXCORmGtjbP+hEEndsnlcGi0NxCU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=W/08SqJge8d0vrKD3X4kmKVgjLnFxIMS578xEONrv99xg3cT3jlKNp1C9tPcJXRY9 kvoNZorh0uaUCmZKQu+WS7ULTBAr+jxLL9FGSFDeroE9vCCjNmXMOKj150AFvQKJ09 zBsopjsJJHcGdFMJZBQ/PEpzDw/4rXhVnMhpC4Am0I18l6TqUHJyR6NHP3k5Ey3t/r Aw9M8o06YXtDSqLtCBs+A8iIMbtqYUB33Afypfq9v9uW0elnbgsAJu0VJRClGyxkTa dKM8qrH+aSoe33L8Z3rYJFWiTVw/ULf56fLtNClDqQsnJMzx5P03bQFLcilcffxpVk npqEnXluVl8xA== 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 B3B1ECD5BA3; Tue, 19 May 2026 08:56:03 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Tue, 19 May 2026 14:25:57 +0530 Subject: [PATCH v3 2/9] 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: <20260519-pwrseq-m2-bt-v3-2-b39dc2ae3966@oss.qualcomm.com> References: <20260519-pwrseq-m2-bt-v3-0-b39dc2ae3966@oss.qualcomm.com> In-Reply-To: <20260519-pwrseq-m2-bt-v3-0-b39dc2ae3966@oss.qualcomm.com> To: Manivannan Sadhasivam , Bartosz Golaszewski , Marcel Holtmann , Luiz Augusto von Dentz Cc: linux-pci@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-bluetooth@vger.kernel.org, Wei Deng , Manivannan Sadhasivam X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=8834; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=3hsOpES3Yk37WGFT4yl/5CzwdSCPi9DcZBWsaTeP5Ag=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBqDCWeN9txK6pvmG+m6zAGfezIzY/zBXdj5TD5b 91zUdvEjTmJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCagwlngAKCRBVnxHm/pHO 9ZtUB/wMvqBxdPACV5lb9yw6Uvq/PvXWI9NWN6B70hcT8EGdENNm7ImTaTOECBOYdWFEGGxiYgs Ht5iIi1l0pNy3t39TrGX7HeNL1WS1x3kWOdcvTIfxvjaWgxNTvlZlbLI1et0z5lW10/l4R+FHA6 6pda/Hbnko+n0H/a/nV/CwclIW23cugKtZqx2gl71ZrkNI3maMyLWbLg2DPH2OSwUEaTkzBEcsc dMGo1zv0RkJm+t9lWTkDe8E7B3WYXzR2swy4STMHIR7Z57DXPgOPvcS6xbibk8O6m+Omv1nLd4P lGos7BPyteBdELqHkba4FLk03bbTp9AcbOFESe4UTpAKURkl 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. Tested-by: Wei Deng Signed-off-by: Manivannan Sadhasivam --- 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 b2ed336fd5ad..469e130330fa 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) @@ -178,38 +186,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; @@ -218,19 +227,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 @@ -248,17 +259,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; @@ -266,37 +283,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, @@ -320,7 +364,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); } @@ -328,7 +372,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; } @@ -432,16 +476,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 @@ -453,7 +501,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.48.1 From nobody Mon May 25 03:55:49 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 0E4863EFFD3; Tue, 19 May 2026 08:56:04 +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=1779180964; cv=none; b=J78cFvByfsSttl+BvUKj3bhjmcE+wDZMcAg69Zwy9HLOFfIABqQ/kuRolgsKhYOdoKaSmCT78Km9xPg+0rM5Mq3/4+rr11fKjBK/OBnG4M4vTCG4iCWjT824JrUWgJZOo5uPBFK3Ip/DRkJO57TLM1SslYz+TT0qpmrjPdzOyos= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779180964; c=relaxed/simple; bh=OOuthL7iIdyXdtvidLIdTJVqEVl+9MBs0h4nZ62FHQ8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tnEZqM8WRu2gjLM2E51bZj82AjxrL76i/Q9eTBAOvcYEGTpU8KPNP3O3iNMJIIoBdCHmTqTCofD7SvPipg2LDZ1VkTOx3Wu3gLt7sNoOH1gyGVeq5iGhYgoYiwSMDALt8shByP18oE5lJ9r7r+wIk4MmI9P2bPxTeverGLeLP0s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=be4MOyGB; 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="be4MOyGB" Received: by smtp.kernel.org (Postfix) with ESMTPS id D199AC4AF0C; Tue, 19 May 2026 08:56:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779180963; bh=OOuthL7iIdyXdtvidLIdTJVqEVl+9MBs0h4nZ62FHQ8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=be4MOyGBaFVXDKsnuxQ0m+wkpuLaHEcyj5jBC/qmTUCxGrGtjaAUZ+XEuJebDhXjF OpUXyQrzgKyQWEkPchea5LfBdWyKRAsSAMyl3In3WWkUTAbBbtj0Bf/ctIeew+ja3b IjJciOh4LsAMZzx2FAV6mAtsI7s2w0iSa9ZmXjBOqXIicm4UxC/hxT5EyEamcwKJb9 K8ebWt4qh3g/YbIJQWe5QX2hnOyRDfU9HAsG65ToWyzFpo8bhw4IFs8d0sTohhf24d bMpdqffMHfRSc6TdoRCJsF5nOdW/ymh0fk2KuyRrBb28RQuboROgdqxh9j++PaZ2Be 7y3IGNef/6FMQ== 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 C7E6DCD4851; Tue, 19 May 2026 08:56:03 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Tue, 19 May 2026 14:25:58 +0530 Subject: [PATCH v3 3/9] 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: <20260519-pwrseq-m2-bt-v3-3-b39dc2ae3966@oss.qualcomm.com> References: <20260519-pwrseq-m2-bt-v3-0-b39dc2ae3966@oss.qualcomm.com> In-Reply-To: <20260519-pwrseq-m2-bt-v3-0-b39dc2ae3966@oss.qualcomm.com> To: Manivannan Sadhasivam , Bartosz Golaszewski , Marcel Holtmann , Luiz Augusto von Dentz Cc: linux-pci@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-bluetooth@vger.kernel.org, Wei Deng , Manivannan Sadhasivam , Konrad Dybcio X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1830; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=125jnc1+c1UGaXHbABRqqlnBuVw3M8AG9KSxYWS1n7s=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBqDCWekTONEFkCmz6SI699/G8UuScoYglNTOeF+ aWlIBlJMJKJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCagwlngAKCRBVnxHm/pHO 9YacB/4+qQ1INbofLwOsC/LruIQxm3l8cmm441FDQ3YemV6LstOcPnUSAo2trW13TThtTtQSirb 5kBJ9BlrBfuDo8uy+dVQYYhJS50KXCqoksBCW+SUbXtLHQBM6+CBh6EeQz3adu97zMcZNQU4qhR smVS7v1i18BpQD7ZMiD1ZK3D91yoRj5CJLE2jGd72kQClxz2Bsjm8KO+bvUh/knF4L7eZoH6t/5 R8XRRyyJe/uhBJcPH729BGq1tE+2sP5bHlipG4tdTrfvsUXsLMzuEHekfij3TrVqMQEYeR4T51/ 78cPR6Dw/DWb7pWBQ3fTIqjIohfzqNv0b2TlxewTlfYsx6Zh 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. Tested-by: Wei Deng Reviewed-by: Konrad Dybcio Signed-off-by: Manivannan Sadhasivam --- 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 469e130330fa..038271207a27 100644 --- a/drivers/power/sequencing/pwrseq-pcie-m2.c +++ b/drivers/power/sequencing/pwrseq-pcie-m2.c @@ -343,6 +343,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) { @@ -362,16 +367,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.48.1 From nobody Mon May 25 03:55:49 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 1C58C3F0751; Tue, 19 May 2026 08:56:04 +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=1779180964; cv=none; b=rJJgzM01IaTL48FB/jZQAxfrNzPVCsmGanz91HASEI3NcfYbZOAlYwlPY0PoKLoUX1uJH4tVZtmbGfC3nlGPZzSlpjXH3ol2KsusXKfHp83o9NmjLbqGT5laIVmKocHEnYlw278SPNEdvrfIIQPbsIB2/bGQa728ItR1D3jJ4C8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779180964; c=relaxed/simple; bh=DVNLzhxZIoTdmt3zoK4l6Qj8OfVUAe8kOwfyEvJIQ30=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YHtGdLEt9QTw290h02RZI65I49s3Gye99ZNEBbiP7Y6IXiw0xLEQL2+6KepMjt1YFkeP+dGcOGnHq2aBA7ZugRniUIuLmZ2M6yYUmndxzvylBObdpmiHEs8NJ81TXAQXvn9Vqr2Ad/rqJIKgmZ0fgXwktFef0aE+tLysjMZ1Hqw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=J4DqQmv9; 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="J4DqQmv9" Received: by smtp.kernel.org (Postfix) with ESMTPS id E3AEFC2BCF6; Tue, 19 May 2026 08:56:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779180963; bh=DVNLzhxZIoTdmt3zoK4l6Qj8OfVUAe8kOwfyEvJIQ30=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=J4DqQmv9uWlyPmrQeA5rMYHIndxE3hLR9+z37CUAxdouulpl7gpDyiGaYkPko+Y0O rpV+gxO6pd3tsjzmLWr2dTt1CNXFlQ1AthuIwjY5X4ZWe8Ue+Z6COrohmEnf2wyXJd ct7xb2+1opkiWpblKLS4SYef1fMMgHjVL9cpSsdu/rMBgoLOzpro6DRuRH1MKVespj x9imZTrUXx0McI8viBOT2MGnGe7n2rvMvmP1eRkrpPCImhmdEsTXeWA4ebsVDRBsLu QUVederWOsmMcUeoMR94+nqlYDWHBOAW/MQT8uRU/3Of3oFUy1KsyU/6Yb20jDhk9i gWk/029rdAIuA== 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 D9E75CD4F5B; Tue, 19 May 2026 08:56:03 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Tue, 19 May 2026 14:25:59 +0530 Subject: [PATCH v3 4/9] 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: <20260519-pwrseq-m2-bt-v3-4-b39dc2ae3966@oss.qualcomm.com> References: <20260519-pwrseq-m2-bt-v3-0-b39dc2ae3966@oss.qualcomm.com> In-Reply-To: <20260519-pwrseq-m2-bt-v3-0-b39dc2ae3966@oss.qualcomm.com> To: Manivannan Sadhasivam , Bartosz Golaszewski , Marcel Holtmann , Luiz Augusto von Dentz Cc: linux-pci@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-bluetooth@vger.kernel.org, Wei Deng , Manivannan Sadhasivam X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=5697; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=iQupElfzV5Zv+Psvc+SXwcpwcKd+BIeeeEJ0chYyZ8s=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBqDCWecGx1fsseQW0Ovecwl7oegEQz0A54gb75z 9GIgEMobZaJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCagwlngAKCRBVnxHm/pHO 9cdcB/9VaEBddb05gUg0n6pvVL1tJoLyFpBpfoIQJSqs+ndw5j1wBaJTV1MgFv+ZPavwTyu0apu tpaa1ttpB1RSLzYFsWdX78rFz07qFSxCBtSJRO1hHlhz23wavgs3t5ch0hA6anOosdthlK/Np+6 M38zWBv8cTZ8kmX2o2oiqvrMUBJeMuXjpqarhhdauv8Kf0CvwP7EK8AGPSuzyK7izkolImFGxFt +3Jqq2OBiCJlSKCekbTbQjVkFKg4Ca+A0hpgfFvtxV0eSiihNnJX2VHvNH8GC/QYgV8lFYqPIHK kCLXK0p8GKOmw15czyX+onTaVKv1TYfuNqbLpvfU82IWu6dE 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. Tested-by: Wei Deng Signed-off-by: Manivannan Sadhasivam --- drivers/power/sequencing/pwrseq-pcie-m2.c | 81 ++++++++++++++++++++++++++-= ---- 1 file changed, 68 insertions(+), 13 deletions(-) diff --git a/drivers/power/sequencing/pwrseq-pcie-m2.c b/drivers/power/sequ= encing/pwrseq-pcie-m2.c index 038271207a27..8164c4428977 100644 --- a/drivers/power/sequencing/pwrseq-pcie-m2.c +++ b/drivers/power/sequencing/pwrseq-pcie-m2.c @@ -236,7 +236,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_one(struct pwrseq_pcie_m2_ctx *ctx, struct pci_dev *pdev) { struct serdev_controller *serdev_ctrl; @@ -259,6 +259,14 @@ 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 */ + scoped_guard(mutex, &ctx->list_lock) { + list_for_each_entry(pci_dev, &ctx->pci_devices, list) { + if (pci_dev->pdev =3D=3D pdev) + return 0; + } + } + pci_dev =3D kzalloc(sizeof(*pci_dev), GFP_KERNEL); if (!pci_dev) { ret =3D -ENOMEM; @@ -368,7 +376,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_one(ctx, pdev); if (ret) return notifier_from_errno(ret); } @@ -400,7 +408,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 @@ -408,18 +416,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_one(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) @@ -481,16 +527,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.48.1 From nobody Mon May 25 03:55:49 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 3C2883F076B; Tue, 19 May 2026 08:56:04 +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=1779180964; cv=none; b=Xtg23k085P+SbvbRB7VXbRd7iZZCA8+Fjky8iw3DV62O4mI6Z/bBx5rY5TitlpcFrdMNQTdUQegghOeJBtPdqTxGarJB7LvltTIpMx+OmMhdn9qkUORoKTIsZuUPivvn0kUErL9hKGxHw8KTPuAR45T8cpIohLLqoWWXYH21TRk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779180964; c=relaxed/simple; bh=Pna6T9IZLDu4HqJ/umZ+NTTEDvabssno6qz2f9hyFnM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GYQnVq6tlhzPRLFRwmGu+rkbi4ao8QEXMstUz1PkAbxzHFe/EPOwPK4mHIPJNZuS+gGuJn//0e0M810kJrk9Fn3mzFMJbEZKKqtYuKkwzTdvx0odXkMryIuRiYAVteoUahZ5kQUa1qk2Fzb5LDwzTQBupt9uOyJQcm1ggYrvupw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=c2O4xaWg; 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="c2O4xaWg" Received: by smtp.kernel.org (Postfix) with ESMTPS id 09D3CC4AF0D; Tue, 19 May 2026 08:56:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779180964; bh=Pna6T9IZLDu4HqJ/umZ+NTTEDvabssno6qz2f9hyFnM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=c2O4xaWgqJV4e+6c1EXf6m4upJ0OckycglwXWE+KWQP4k53g76O+ky5p4Rkdlkaub fXjlxg931km9Xozs1t58Wiw/JXgsziYjPLSDmdmF6Bmo+KhscFjiJ0VYZC+y2Ml3HO A6fKxTVTjs6+ylex1FTV9DFO5OFI+YbR1PmshO2iWKn7yzPaQ/8KEIdg8e68rx5e+0 /Wvq2Dk3dsyLNP62TLODxeavCltjSGAbL3Gps/XO6p4vfCP3A3BJiHTdvXre+jXR43 YB+IPYSizMaWobl3HEsTiaT9JZiZqxWE3hOy0/13PJqS0cjdmb1TVI+QL0WWigcekB /tGX94zmKbNjg== 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 01C24CD4F57; Tue, 19 May 2026 08:56:04 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Tue, 19 May 2026 14:26:00 +0530 Subject: [PATCH v3 5/9] 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: <20260519-pwrseq-m2-bt-v3-5-b39dc2ae3966@oss.qualcomm.com> References: <20260519-pwrseq-m2-bt-v3-0-b39dc2ae3966@oss.qualcomm.com> In-Reply-To: <20260519-pwrseq-m2-bt-v3-0-b39dc2ae3966@oss.qualcomm.com> To: Manivannan Sadhasivam , Bartosz Golaszewski , Marcel Holtmann , Luiz Augusto von Dentz Cc: linux-pci@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-bluetooth@vger.kernel.org, Wei Deng , Manivannan Sadhasivam X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3201; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=rTMeZkV9x+HZuDVq+MMnQQueGW/iEF0ofpOAzeBSnvQ=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBqDCWfn7HtNXJrb9ARsUTEL+69+rwmsb1554kQY ggoLyUZ90OJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCagwlnwAKCRBVnxHm/pHO 9XquB/wNvNaup7XxZTrnkoUfyGihGKPtpQ4X7gpjzt5jC0ATBqePcpqxbt+8nSAbcTtXJSwdLph s5Alt8uZewQ6lsoIcQ0BFTqrKAUxFnWqMBLk03DxgSxx2qLjeF4XaTCAXyfppNxHHrU1BVvpYt/ gwkk4m7rExaI/BQg49Z8hJrJrS/0QjtT8GQDxVOHG6OfS/vt8rE05cJh7tmeVYwNfqz06v4YHuZ r2PaLvc4I/sLTp6sXjhA+di1lQunHDLI9ToMJuaE83S5wxzurx1l6jS3eeusjdq+CN4MBKO7zz2 LTM06x3R+jZ/ULX4iFpMd/Fphw2K3xPMGniQch1DwBNdrpQL 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 Tested-by: Wei Deng Signed-off-by: Manivannan Sadhasivam --- 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 8164c4428977..e82821655fc4 100644 --- a/drivers/power/sequencing/pwrseq-pcie-m2.c +++ b/drivers/power/sequencing/pwrseq-pcie-m2.c @@ -185,14 +185,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; @@ -206,7 +221,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; @@ -279,13 +294,14 @@ static int pwrseq_pcie_m2_create_serdev_one(struct pw= rseq_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 @@ -351,11 +367,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.48.1 From nobody Mon May 25 03:55:49 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 58CB33F0AB6; Tue, 19 May 2026 08:56:04 +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=1779180964; cv=none; b=ZwmJmhMCZ49CT7usYlDoAjcSCimYggARXxqR8upZ7DP3CXaiLhyaoo9amWyT+QBBoDhmEkLt6uE6U9O9LxS3iBIs1uikvIWutd5EWtf+csUirJYiGXeNy0a0c/C4mnZOtvBiIQQaJ89a+OZCSG4zTvnZN74B5Tx5NU0apY1gG4g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779180964; c=relaxed/simple; bh=e/f51wmEbEvWCWfBhaFFQM1VJvMDz0N9wvz/68ZdRDw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jMcVE+SKJ2yaMHNGRnSJsXAlJIfQTXtIp42wu6AfyhbhtM1kgxc6eu1khF0UCsroHjV6jgmRvWLOqsbYvkw0GHayQI7jzwfkX1nEUyDC4nEwuJb5L/VgCrODmJQ9GnWxrxdfz8NcVYDvR5C4OYDMYgFHgEDCXK74f8dCOQmEKG8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=AHWTDqHi; 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="AHWTDqHi" Received: by smtp.kernel.org (Postfix) with ESMTPS id 18BA2C2BCF5; Tue, 19 May 2026 08:56:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779180964; bh=e/f51wmEbEvWCWfBhaFFQM1VJvMDz0N9wvz/68ZdRDw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=AHWTDqHiY4knOo8IxNzxg08wTedQtzUMkH3q/NVEy+xb9PXR0jRk561yGQ9lyT3rr PTcO9NXJBAaG8OqG3OIwqUcb+Mlngdp3NSqoYptF031Wwu2lXa0Oi69N8yAQG6laJF ksZC41HeVwfLPAF9Tum9GbBMR9JaRj1f9KOH4umz7IjhMS51v2uKJGipLYeicCYGfH EO8FMIe1jhyvgCAgb8rqScbepU+RISoiBQXyKTS/nUtRJfpAEFmskZb2vazRRoXb6m 4nHJpIhPvJSHCg3LRSJDsR0lbEnzfBQsdIntHJ1JC/HtmduuFrMlDqhseLvD5RYIag ctv9xV/q7mRGQ== 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 118B1CD4851; Tue, 19 May 2026 08:56:04 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Tue, 19 May 2026 14:26:01 +0530 Subject: [PATCH v3 6/9] power: sequencing: Add an API to return the pwrseq device's 'dev' pointer 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: <20260519-pwrseq-m2-bt-v3-6-b39dc2ae3966@oss.qualcomm.com> References: <20260519-pwrseq-m2-bt-v3-0-b39dc2ae3966@oss.qualcomm.com> In-Reply-To: <20260519-pwrseq-m2-bt-v3-0-b39dc2ae3966@oss.qualcomm.com> To: Manivannan Sadhasivam , Bartosz Golaszewski , Marcel Holtmann , Luiz Augusto von Dentz Cc: linux-pci@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-bluetooth@vger.kernel.org, Wei Deng , Manivannan Sadhasivam X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2045; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=zADSByazZrrmfWmx+ulwGuogrsAOGSim5Z5uII1xUr4=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBqDCWfDRV7LdUoFWUtrVGtOhWtrgun+hmgmkALV BI78o07556JATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCagwlnwAKCRBVnxHm/pHO 9Q4VB/98OOJrEzs8nK5BnEwlQYPWPS0WHYJegif8o0X9ZYToRMTcvL6miALMbQtqz7yU9gTxq99 8ceA2jp50JMMBTF4wBcFSDM6O8/xCZ0e6jUx90XfPMLjN9Xa+OC433UOQGh5qGALsf9IxoT5XmT FxbjmEB0OO+BSGjPEpzgUJYxd+dp5GVJEfQyWgMqwCew94cngjbKg4DYHABRmco5pApJZZNIITE /gSG4HFkfVzMFo5hcvHvhMWYmst2eu6wksQz8J59kcXbMRVlqiIPz7diSAQnTN+GPb0z9Hs98ZQ BR9OR/NJ3kstNajR5vsY30zqt8j632S9hSrpPpCc8TrV4gbA 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 consumer drivers can make use of the pwrseq device's 'dev' pointer to query the pwrseq provider's DT node to check for existence of specific properties. Hence, add an API to return the pwrseq device's 'dev' pointer to consumers. Note that since pwrseq_get() would've increased the pwrseq refcount, there is no need to increase the refcount in this API again. Tested-by: Wei Deng Signed-off-by: Manivannan Sadhasivam --- drivers/power/sequencing/core.c | 9 +++++++++ include/linux/pwrseq/consumer.h | 7 +++++++ 2 files changed, 16 insertions(+) diff --git a/drivers/power/sequencing/core.c b/drivers/power/sequencing/cor= e.c index 4dff71be11b6..96ad557297f5 100644 --- a/drivers/power/sequencing/core.c +++ b/drivers/power/sequencing/core.c @@ -965,6 +965,15 @@ int pwrseq_power_off(struct pwrseq_desc *desc) } EXPORT_SYMBOL_GPL(pwrseq_power_off); =20 +struct device *pwrseq_to_device(struct pwrseq_desc *desc) +{ + if (!desc) + return NULL; + + return &desc->pwrseq->dev; +} +EXPORT_SYMBOL_GPL(pwrseq_to_device); + #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..3c907c9e1885 100644 --- a/include/linux/pwrseq/consumer.h +++ b/include/linux/pwrseq/consumer.h @@ -23,6 +23,8 @@ devm_pwrseq_get(struct device *dev, const char *target); int pwrseq_power_on(struct pwrseq_desc *desc); int pwrseq_power_off(struct pwrseq_desc *desc); =20 +struct device *pwrseq_to_device(struct pwrseq_desc *desc); + #else /* CONFIG_POWER_SEQUENCING */ =20 static inline struct pwrseq_desc * __must_check @@ -51,6 +53,11 @@ static inline int pwrseq_power_off(struct pwrseq_desc *d= esc) return -ENOSYS; } =20 +static inline struct device *pwrseq_to_device(struct pwrseq_desc *desc) +{ + return NULL; +} + #endif /* CONFIG_POWER_SEQUENCING */ =20 #endif /* __POWER_SEQUENCING_CONSUMER_H__ */ --=20 2.48.1 From nobody Mon May 25 03:55:49 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 606513F1648; Tue, 19 May 2026 08:56:04 +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=1779180964; cv=none; b=OvCJrGvBnnQSjFxkbqhTA2aiP5bTqbT2h5oK484lT0qOkQn5j7/XzMdAE0a3AER9bUaFyF+Dcf0yHBjKYUWaH0FcB7i/2aVElX82Q6b54HIeYD2WCt9SkvTjOkYLcW+mqqM5A0du2RFjO/83edQmmntOJFG88BAHoSpYB9aNkXU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779180964; c=relaxed/simple; bh=sLbNPtf1UiAji9Res0qUIW3W7ikPLHQsy+hj05755+s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AbUmG/WtNAbACjtaAkIhTgDROjSX1wBL1W5gHT8e9I4b7FIR5Q8QNbcpbZrahNiNMsQDMgb2zjiELEwoA03JiRJ1Q7MA4acuRK8gNDBF5dawiFhnY8xB6hVL4mC1mIzQ43NxDB/tDM3olpupzH1i6P9bqCltZOuoq6/ASfATbvk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QqXa6sWw; 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="QqXa6sWw" Received: by smtp.kernel.org (Postfix) with ESMTPS id 293F7C2BCFB; Tue, 19 May 2026 08:56:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779180964; bh=sLbNPtf1UiAji9Res0qUIW3W7ikPLHQsy+hj05755+s=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=QqXa6sWw+21sYRnL37QJrJgod6m0/sPGcZGIj7JNN9Qu5HFdRpj6DOzFKwvH1c3so vc/tgaFk9Z015aQ5I/Ar0gDu0GHv108IFqcB/XmkYaGrMaGwvhuLVmnaf8mGR1fwff J0UCCq8s0VHCjdrbrlMlnaAfETZ1iis+JUEhj29Kh8oEaSfm8IWF6YV2QM5f2ubYiy kxuH8HNbcpQmBwGh5OIh9OBdwb52Rs3gUBsy0LlRxv5oLc529f5SAny70POXUkqCG2 L1mJYUPcbNNOZxoKqXTL4EiWHqjvvr1b65nUXkcAqMi5hlVVFqWaZLz3mI80x8lX2s Hv2biZg+wwyqA== 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 215DDCD5BA3; Tue, 19 May 2026 08:56:04 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Tue, 19 May 2026 14:26:02 +0530 Subject: [PATCH v3 7/9] 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: <20260519-pwrseq-m2-bt-v3-7-b39dc2ae3966@oss.qualcomm.com> References: <20260519-pwrseq-m2-bt-v3-0-b39dc2ae3966@oss.qualcomm.com> In-Reply-To: <20260519-pwrseq-m2-bt-v3-0-b39dc2ae3966@oss.qualcomm.com> To: Manivannan Sadhasivam , Bartosz Golaszewski , Marcel Holtmann , Luiz Augusto von Dentz Cc: linux-pci@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-bluetooth@vger.kernel.org, Wei Deng , Manivannan Sadhasivam , Bartosz Golaszewski , Dmitry Baryshkov X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1767; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=GJhR3pGJmBkuBiEdPQiIZNdHJxFMj5cpBFli453SiCY=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBqDCWg/NhLg95CymCV+6e6aupP7h1F+Dx/209WG f2ElDHg9A2JATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCagwloAAKCRBVnxHm/pHO 9RhyB/4qW2SabwLglJuVqNLjX5mS6UgCDHU7M7gLCNR7ptwdlInK6eZw8kFVW16ULVJgiRKYSDp dVFdwttt7eu8tFN3wBCcr168pwI4Vj1NHoJC+vLguUGhHjBd4u1pE6I+C2akORGknv8Quw8+Tya iD4wcFyLlfRkQWbYZnjEnxmPGHw856/qouL46oWFRcEjYrFI/RvCvChs9Pn7+lmMIn3Dw8O6GrK fyednYHarb1ypB8alcjpLOLfAPFIN43mvj00AB4tBr8Vsa4lGWNhKFIG6zEWVQo/iuslD8YH0Yu rJJXOcOkE+Tm4PzpCziVwOmhXBzt0Mp9B4Nb7PCJ7yW35kha 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. Tested-by: Wei Deng Reviewed-by: Bartosz Golaszewski Reviewed-by: Dmitry Baryshkov Signed-off-by: Manivannan Sadhasivam --- 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.48.1 From nobody Mon May 25 03:55:49 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 674E63F1656; Tue, 19 May 2026 08:56:04 +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=1779180964; cv=none; b=XxdjO6/GMABj2BiAeBT0YT7I0C0i6J4lBm6lKZOyKMUSt/vrMCqLtWyuc/a2K9s1Wqyym3EWbZUQ/3piRRCVGH8ad9XL3NpBkZOPt8qERZWaOSURVzSIyoLUAImoqbg15ieooQvo47MKiCuP1fuVVrVNzUtjB4CdELlxxVR056c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779180964; c=relaxed/simple; bh=qgyE4BavcdAMbmH3vIkn/RD22Ci57+1MFvlk9VlBUXg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NO92faaPIeQe1Uk5ISKxMdGBCVRLWpZhvA64HY05YD7hwPKanEGSrwOIWl2CnTcyMM2sJUcr9Gb9CQkjqO8QGoQdb6MdsFwC2K6GfA07EhAPiBeKACfgeaP7JEs2X5YfZDyV3Rc1Nmpy/XTYlxD802uDyM5DBncfoCZl7f666cE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jEV28+Jw; 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="jEV28+Jw" Received: by smtp.kernel.org (Postfix) with ESMTPS id 3A471C4AF0B; Tue, 19 May 2026 08:56:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779180964; bh=qgyE4BavcdAMbmH3vIkn/RD22Ci57+1MFvlk9VlBUXg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=jEV28+JwqqkO/sc1TDm2v8S6VcZUP3oZ8G4F15Q0F2h+HSbru0YG5S5y3bShTqXSF JAQU8F16GVdFblKY0aDHF53J0Mf7WjYkqvNORldSD8EwosVeuHwmNVXi/79Pu4mFdx wPziWEL2XnYnjvwozPhcGj8TB8qGn7bSAf5Vhiski3LSwNl9TumtDeChmNa0Za0QlQ KJB5bgGLc+HBQQVv8PnIKcoAs2wd5GJZrbBxv8kJ+EnAPZq8FtReZycIzByqLpr3Bo P+BkXrfseJADeCYhfqfqL796Y8zaJ7OzDk+YR//pk3y8+ZljYD+R4+/137bHfTx4jE ct1bdiBUq/8MA== 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 33311CD4F5B; Tue, 19 May 2026 08:56:04 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Tue, 19 May 2026 14:26:03 +0530 Subject: [PATCH v3 8/9] 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: <20260519-pwrseq-m2-bt-v3-8-b39dc2ae3966@oss.qualcomm.com> References: <20260519-pwrseq-m2-bt-v3-0-b39dc2ae3966@oss.qualcomm.com> In-Reply-To: <20260519-pwrseq-m2-bt-v3-0-b39dc2ae3966@oss.qualcomm.com> To: Manivannan Sadhasivam , Bartosz Golaszewski , Marcel Holtmann , Luiz Augusto von Dentz Cc: linux-pci@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-bluetooth@vger.kernel.org, Wei Deng , Manivannan Sadhasivam , Dmitry Baryshkov , Bartosz Golaszewski X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2044; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=1JRO5dSGOPrnel/y/+GxWrpu7wlYHN8HrLcjMdVlLBw=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBqDCWgZT1oo7m2+M3nNcF0fXvZRDRGOAP0AxKQb 2GMks2jX7uJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCagwloAAKCRBVnxHm/pHO 9Zt1CACjhzfGGAunlIJwGOW0wmipI/1SxXqQIqU2kw26YlfrNwstH/CIqBTrAAO0sVEH9UsMmA5 7vhj3bZp+NmtKXDzveiTL7H2hOkguMEHY/6RJImjO9/vb+fYbBIlhis6fO7S4F+F/WZWQdnDN4h +0k625nbq/y6zlFiD5+GjKlUbPqlUUymoKcGRv+iwSsgzh35y7zJ33fe06a+aAuGD2qxDzmP27Q Ng5O6lM/9dQZkP1BwczE+8nsSMevYmwoqJdLrY2aa+dYr2PnP9hMTxTSnBGXtz2z0SbIIsVrLrW Lj1V/IYy52KaNIOCuz8jO7lJljmsOb31UmnLtgkY/O3r6OPk 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. Tested-by: Wei Deng Reviewed-by: Dmitry Baryshkov Reviewed-by: Bartosz Golaszewski Signed-off-by: Manivannan Sadhasivam --- 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.48.1 From nobody Mon May 25 03:55:49 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 787373F1665; Tue, 19 May 2026 08:56:04 +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=1779180964; cv=none; b=RAtzELAt0ZwJzF9zszUU0sOcQ9Y+h66YL2wzWcMSZcgNC7PvlxOBOQhEnm72jMoTOSweB7SI7qlEa8rTI32+CHF9dZ5ajVZvHHQJzWlwOkj3IFGqOzxbaJSI3myJThQytBZUFtfNPcpRGj9qXnmyOmrEqeCRAnnptVnjolHhZ7M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779180964; c=relaxed/simple; bh=/yYq1WSrNccr99sqYODgp2VjRUNml4DbJ9vOoFrdW+o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JbtZCN+TQu2HNiBrllqbuEnrsKqxI2uDEpeeBrHPQeR5fxLDoFvfL5qWBgFVtyQXoAE8ZpdjjyOrsKjfzeJViVO4LfJpNCUhGyT1re/sUdJMIjP15aCggy1dmKaAINvftvIHfEPSDy8BR7DTSjwKVuAH5WpZLOyrsiSbdauj2PE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=AzFdfMH2; 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="AzFdfMH2" Received: by smtp.kernel.org (Postfix) with ESMTPS id 566ABC2BCC9; Tue, 19 May 2026 08:56:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779180964; bh=/yYq1WSrNccr99sqYODgp2VjRUNml4DbJ9vOoFrdW+o=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=AzFdfMH2my7e7F6Z6stkWkRGTx4YjkCiLawzCIP+9mSyStNn9ngGSaT33BDNVtDRU skBAFCj2GJlMSDg2/ZzkokzsYr68gSIZGKATRNJNx4Gz4/tRMc29rXQVIfvR0OexgS C8tGRodJK0pzKyJTO+QHCy18jTXOtsdHSewqD79YD47iQ0mYdNaIS83XJgI0rBd/KQ dHeJt3NMzqBR9KZ+5DHRGQKBcUQVbzsXvgs0EZaJkgcUbZNRAnmRFn5BWBYnph/Dv+ 4jJyhkjF3nuoRg6xykJXO8cD37ZFbwdkW28Zv0YalGUjLfOgIREH6VORay4OF87Om/ yTAIjC5U3AkNg== 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 4A139CD4F57; Tue, 19 May 2026 08:56:04 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Tue, 19 May 2026 14:26:04 +0530 Subject: [PATCH v3 9/9] Bluetooth: hci_qca: Set 'bt_en_available' based on W_DISABLE2# presence in M.2 connector 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: <20260519-pwrseq-m2-bt-v3-9-b39dc2ae3966@oss.qualcomm.com> References: <20260519-pwrseq-m2-bt-v3-0-b39dc2ae3966@oss.qualcomm.com> In-Reply-To: <20260519-pwrseq-m2-bt-v3-0-b39dc2ae3966@oss.qualcomm.com> To: Manivannan Sadhasivam , Bartosz Golaszewski , Marcel Holtmann , Luiz Augusto von Dentz Cc: linux-pci@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-bluetooth@vger.kernel.org, Wei Deng , Manivannan Sadhasivam , Bartosz Golaszewski X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1402; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=qhYeDGRs7g3L5EI4vL/aBNiOeNbObMwLbx4vbZzrq4Q=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBqDCWgT26G56u8CFC6bzeX+drLEj2zvQzXmY9jU Ldhw5Am9Y6JATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCagwloAAKCRBVnxHm/pHO 9XLYB/4gTkNUgoM4H4MF6p4LmyPBauiswNdCgjlccfcY7i4nsCjefKTFkCwyGS2kjZUzRiWRzlk MRoPpLy+UF+2gHLZImAf0I/eKE37gB8dUYMeDme7citmtk9fDw4R9ZX1n3Zkr59o8it+O9m59oY FSSF/sm2JojrXmwYB7063rwZ+Sfz7AvBz9sszDk8oLqKZRYrdRtKa8fjXz1SlalZ2k+ATxAn1xR qE8oFx1w6OFHFjtX1fCIEqbs3MB30RErWMXG+icMfTFSdoJep4mmPgguahcQdrThM1AT1eZJp21 yL05JLFNZ+JT2XpeHboyj91u/DTNbcczWJOF7lxVz+HRBjrT 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 Check if the M.2 connector supports the W_DISABLE2# property or not by querying the pwrseq provider's DT node. If not available, then set 'bt_en_available' flag to 'false'. This flag is used to set the HCI_QUIRK_NON_PERSISTENT_SETUP HCI quirk, which informs the HCI layer whether the shutdown() callback for the device can be triggered or not. Tested-by: Wei Deng Reviewed-by: Bartosz Golaszewski Signed-off-by: Manivannan Sadhasivam --- drivers/bluetooth/hci_qca.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index 3e71a72ea7c7..b5439b9956cf 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c @@ -2449,10 +2449,17 @@ static int qca_serdev_probe(struct serdev_device *s= erdev) * the M.2 Key E connector. */ if (of_graph_is_present(dev_of_node(&serdev->ctrl->dev))) { + struct device *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); + + dev =3D pwrseq_to_device(qcadev->bt_power->pwrseq); + if (!device_property_present(dev, "w-disable2-gpios")) + bt_en_available =3D false; + break; } =20 --=20 2.48.1