From nobody Sat Jun 13 11:24:11 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 402A33ED104; Thu, 7 May 2026 16:06:18 +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=1778169978; cv=none; b=h4GrpwR9mhlZllDrPU3yEZjEAcaczoDLo01zGbZ/KACVbE8cumIgJk9fRfrR53jXkldLWwnIr1qBv+TLGiCw7PANhLUkj9y0I+ucPsV767BNNzBJPCYaJmvofXOB+itVktCGjALi5/BMKXy8/IMh6Bllnt5fINAa//MFOTr/c1o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778169978; c=relaxed/simple; bh=zGHrjUbTsBJODVwJt0zPGcwNmFYKbjrI5btim8cwJxA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IKYcGe8Hmvhzhk33vwLfz1FpWnLxqnNboocDOjwc+LluAreea9rKiOmWUyNjBbaMCsMAdAWTWYi+ZGc+gtjGMBlKmqZrjwwZ9Mg9DsSdrOQ0Agd/7dlNOv0vVonbdfvqDAMBHj97Q97nAXb44KUI+j4Y4dYVwVZjYsY/X0+4JD4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Har/HBkR; 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="Har/HBkR" Received: by smtp.kernel.org (Postfix) with ESMTPS id F3FD1C2BCB2; Thu, 7 May 2026 16:06:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778169978; bh=zGHrjUbTsBJODVwJt0zPGcwNmFYKbjrI5btim8cwJxA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=Har/HBkRX7QzEqAwXxRMNulHINL7H1TAOMlOAQdNqkzRK4EyaZJZFGOXZluqarP/Z ogAsaOfi+J68l+ffS0o/5c1uSJf9se41t/yBmgIeyhtn7dn+jIxI6rsAHC05hzIgiu BRrWi83m8UbaGGHimMXBUndbdbMRDXhZwDCqRmJteJSIBjBIeE3PLQ9ifx4vvJ6YKY 25bfaJCK10032zNZPH2h7Jd1lnmA1E3umNY76EdIN44ru238BiLWG6YHg+IG0qoWin PAS5L371/eaKNC7RcOP+U4pTfsIzu0Z9guRdwW9BLwrNaVvVdK08x8b19nFaM8sY9J RkSUPxkaAD/Qw== 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 E5997CD3442; Thu, 7 May 2026 16:06:17 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 07 May 2026 21:36:09 +0530 Subject: [PATCH v2 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: <20260507-pwrseq-m2-bt-v2-1-1740bd478539@oss.qualcomm.com> References: <20260507-pwrseq-m2-bt-v2-0-1740bd478539@oss.qualcomm.com> In-Reply-To: <20260507-pwrseq-m2-bt-v2-0-1740bd478539@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=Uc7cveSGHgeTaUIcgh89hECpJqoA4JfjoqnuyhFDQqg=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp/Lh2LT2yjjAir33NLBnHxeeoubmgYStCcAq9M xXXFJ3vkVqJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCafy4dgAKCRBVnxHm/pHO 9YQpCACbSKaEjzH4pTRNlOO9MMv4qGNFvDJbCSKU+rW0kuy1AOdzEK8DRjMYSniR3vacNqgAaW7 jfdD3nhST6J/Rnf9+jev5SQpRAkKinqaxWh3/1fShDsrtFUvB1F3jwhMJlzRr8YGNtSd2tdfDiF dFxAGaP52L1gOiOsWOlhNYxfiVDVsMcr5nZ9nK5CztsGDPpOA2s4/Pxqi9TgU/bVFHMVN6EFp+p LfzPkrfYv23hVFoB2h+b2zu7McFmTkz4ghpi3o5nxCP/Rp+2I6P67dQdDdgUiJOLvSRQr11o1mP zUCGoHRa1Ex6V0kwn8pQwiMpDRpYEsmiDHurAlsVIiwooNOh 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 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.51.0 From nobody Sat Jun 13 11:24:11 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 403393EF64A; Thu, 7 May 2026 16:06:18 +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=1778169978; cv=none; b=WObQ0NUyUh2zI5rRIsGRPV4DctTl+jVahEHdu4MDYx3XObnRXfUdhoVMxQoUkvWiQwRVTDC3XFkeKNhg5uAAq39a+ZOV/RxNAY5eacKRpPz5Sm2M9n+28n3ay/X5itgg0HBSb7nX7bTy9188KqQ72ShJb7M5XRb4y/FMhKb1/kI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778169978; c=relaxed/simple; bh=rrEd1wLIMkElAsq+6wGbtL192GC11t/kan5vZLSR1Ro=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=n86dRgM5qPxeBMT7neXScIo0s+zP6WMZ4NTzeXknU2mVOpeuySJJKi4DJ0lkT7+HMU9t5I1P940SRckPM+masOUHaqIqnUinvc9VJdo/P8Zgqgsq/ppFqkrP9A06u/qtEBhQq6Hpa+F+nbYfTf8+1gUkeGp15DVbIuBQZOX7dNg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Z4x+1wzX; 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="Z4x+1wzX" Received: by smtp.kernel.org (Postfix) with ESMTPS id 0FAD4C2BCC9; Thu, 7 May 2026 16:06:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778169978; bh=rrEd1wLIMkElAsq+6wGbtL192GC11t/kan5vZLSR1Ro=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=Z4x+1wzXUAoYdslZXOySUiorBdSoOSl2QzaBAm0qI5nuCeMbbtYTrd4eRYeGbvK26 0sBN3JXHi8zx2eDQIJEHTDKQLhvS5J/+qyBkQWiRoc1T3brV4zxEjfBOIgGJu2+gly aLB0LVOyuv3HyRApOlOLL1qSTFBVxE2IP3cYneGqJW3cthbCRbr3oiJ88CGi3m5Ngt ETrgSbgvGkURCoFu8oKQSM2lVfJRU47dbLPQzM3ufPWwLMhpYAXku+H//hL9bpG0h2 19paUxSRJPEgOYW+UxWbu3LwJjZlNE1I/o7QxAG68nxDdnn9puqi8hX0QaYLOzD0F4 T7VMabxFEwRzg== 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 02365CD3447; Thu, 7 May 2026 16:06:18 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 07 May 2026 21:36:10 +0530 Subject: [PATCH v2 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: <20260507-pwrseq-m2-bt-v2-2-1740bd478539@oss.qualcomm.com> References: <20260507-pwrseq-m2-bt-v2-0-1740bd478539@oss.qualcomm.com> In-Reply-To: <20260507-pwrseq-m2-bt-v2-0-1740bd478539@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=vzhbGjUjbRiDUlIlvxgj075kXyfrRp5oZqumtPMUE+I=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp/Lh2alH/xZrJjq3IVk/9KPmJNzniwtHHME9uQ HfFyroPGtuJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCafy4dgAKCRBVnxHm/pHO 9fJ/B/4umDHDmrck6qjthpJzuaDZucEctawMPCxoSsxqCfikju7Fb3u6hBgM01gWhIxM36ozeil ilWAOIGEg2drfyNofkN722mlRMgHlWbyoa0NdQBpTfZe8ftaQMLBmhxnq1oqMO3LDkmtigZsoOg TwIOsCmt6FpHmGf9XU3tFEMJdGWghgKwoDDHCZZ6ZACrcxV9keKkP8jYT91Nq3l1XyTcKFRhNv7 iUYP2jsT96y6j59CBlPv0m4ckoXIYdUcA6NFzS5NH1A0A7Agp1Opr/BHhcW8MMYQ6Kn2dyc1C74 WnlzusMn6M0Zc1JA7wJAlOJm2aHjQHitEB6UF1ib+61Qn7rd 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 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.51.0 From nobody Sat Jun 13 11:24:11 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 4CAA03F20EF; Thu, 7 May 2026 16:06:18 +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=1778169978; cv=none; b=j3QLdcUw0SdO4I/L5OCxlXt5/OfnGdmeX0czWW5cP8OGIH7Nvx9oe8pR7OtkD6s+ciBc2zM3nYzXcIbYFS+Z4OK1pae69i71t5e4dTm5gqFX+/p78dW7ll51vsuADP0Zl9GqnY/qlOAFQP0eNSz0j9fr37yZvvsAm8p3yeYNbHs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778169978; c=relaxed/simple; bh=1kU9oAqoS3HVSM+ImlILsRWAgX9G6w98W2IXLdlUQ+8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=it13WEFwERfJWCJDQtuOqBy4oyg2zZU5BuigrSL50elbwApclrpYBESD8Qd1xSUbpeKoR7djxNO3bVuzq5dbGGNnbcsvKMLVGs73sV8tshKI0bjcD33R8/piN+aN0Y4rWcvg30MrLtSYqMx2wt3v6PmM8zKvo1vYzszQPjs+Nk0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cOX1Xk3b; 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="cOX1Xk3b" Received: by smtp.kernel.org (Postfix) with ESMTPS id 1A423C2BCF6; Thu, 7 May 2026 16:06:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778169978; bh=1kU9oAqoS3HVSM+ImlILsRWAgX9G6w98W2IXLdlUQ+8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=cOX1Xk3b/13kV96R2qpze3LL+9mVQ3LACToIocC8PvcGpRHbHR5hWTM/NczLwKjq1 ivHf8+GoGZYlBq8yKO5/PoQX2jWh3r7J59qCos5Ni/ckXHS4zXxXpROTbBYw+w5dv1 OPZ4pMPf+h17+v3+WmdfDlCiTDGIDDJt3pJvHKh+xM1oWP6PA2XLKjGicIYJByitKZ coIuZESUK/rphx1cV7rZkjCF3l5OQLEl7A6Z1xtjK4Jgqw+njlRgF7F+KoUEDoG5nl QsAfxygm5slw9KR13IBpsJ9VeVYOGstHNdhQSJqFldWjPb8vKAwbQoH11CMR9eTb2d cbFHOVU6AMtFg== 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 1280CCD3439; Thu, 7 May 2026 16:06:18 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 07 May 2026 21:36:11 +0530 Subject: [PATCH v2 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: <20260507-pwrseq-m2-bt-v2-3-1740bd478539@oss.qualcomm.com> References: <20260507-pwrseq-m2-bt-v2-0-1740bd478539@oss.qualcomm.com> In-Reply-To: <20260507-pwrseq-m2-bt-v2-0-1740bd478539@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 , Konrad Dybcio X-Mailer: b4 0.15.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1781; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=8A3jxl2QdUuP5KU+w9PLhgemuGtALcmy2NxpKxBwBT8=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp/Lh2TDAvxxjvZtrtADHQF0z/JDOamCojQkHE3 K6Pm1DtPTiJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCafy4dgAKCRBVnxHm/pHO 9cVzB/4ohIU0XRnYHWB45I0Mwpu/iTt83ZvLI0NFytSIkWBMwDHYlx9EkFrdH/T72dd/E4zxGei K+WfR12Kj1+DuU1DcqXoVyqIAb6QgGIMGaG9VfINxANB671iUD9iPM3da9npdv7WvVv7d1VGGbw mVDUp4hXCn65H38uKafSYfx9shPz4YZyy7kQgZdQPXnlgpo9JSceJUBHNZSwYzzArwnsd57n9of 5+MgPX+wKrpBO1gE18f01B5rgSCb0ZrZIOlaVtEThLfaxP7KoQ3FZABL7GPgyknQo4ANPsefYSG oquofbqKA8Orr4CcbIfFVh7xZNBsEmbgrATbRfzFkHmxLVXU 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. Reviewed-by: Konrad Dybcio Signed-off-by: Manivannan Sadhasivam 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 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.51.0 From nobody Sat Jun 13 11:24:11 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 5D27E3F7894; Thu, 7 May 2026 16:06:18 +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=1778169978; cv=none; b=oAx4dZ3ImwZyHZC/oqUNxewWz0+kH7eje3v6A8HpWr5n6Q6LET7r17m2v8sypHbNsYtIuuSdD6+VkjyCmO5wM4KdwLxdmnj5NN9aftpZNBUkuK8GlfscrBZ0ySRuwTzWbLBKpkzxjfV6Rdl032JAf6Ouauu7p7fk2KkvCn69GoE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778169978; c=relaxed/simple; bh=Aj7wqGAsinwRyY2Thhf6enyU/amf+rlgq30hOEneaMA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mP4stxDWRNMVtya3hUrQr03N6P5YY2dEGf+/xWeSz0SJvMqxkRoWIu/jMLzQeYwtDvWTLwjyNwvZhmd6ly97iny4rwUk7inCdsdXRswhlQInUCLMCrQM5Fmu5iyASfssdV+fopD1ucp2PWXdFp6g8lgLm8v+1ekFqMsgxD4Uoek= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Z5JGmsba; 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="Z5JGmsba" Received: by smtp.kernel.org (Postfix) with ESMTPS id 31F2CC2BCFB; Thu, 7 May 2026 16:06:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778169978; bh=Aj7wqGAsinwRyY2Thhf6enyU/amf+rlgq30hOEneaMA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=Z5JGmsbaEBB7H5izSS/wW6PFtY7rWg4ayj65Znhtf1BWanpBq3J0i7cwjparQB/BD dUFTQ39DKdGCTMd8e9NS4wCOhi2C1u0B0u4xoMJ/WRAR2iljzLu4mQrIJtqtH7++Ux ZqATzJwvV4M9Ee9fvXOGDQDR2dOwCzz0hgEW3xBPGgstVb5GsI3Y8EUUKaGyu2cPye AMf/fQbthsTAR4FGJe8FOXnBF/OXk7VPM4e6zufPlMfF2t76k68/J41eUegv3wug4M DXInLzW48v6dg6DUCuzp694BaW1kUFGDDabndPqv3Nlrk9Jsj3V85jdjJ8L3gwrFir BZHDjrTxNM3vQ== 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 22BAFCD379F; Thu, 7 May 2026 16:06:18 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 07 May 2026 21:36:12 +0530 Subject: [PATCH v2 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: <20260507-pwrseq-m2-bt-v2-4-1740bd478539@oss.qualcomm.com> References: <20260507-pwrseq-m2-bt-v2-0-1740bd478539@oss.qualcomm.com> In-Reply-To: <20260507-pwrseq-m2-bt-v2-0-1740bd478539@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=aKjieTyPG/SFfzxey+ZuP2uoBN9Zt2Bpb6qUKB7ysug=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp/Lh34xVuq5y1krgxQNTX6vnr3TwhfSLIm3jAg lAjHXTQjoqJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCafy4dwAKCRBVnxHm/pHO 9cLTB/4lJRLOiVvVLmAMjTlzCCXLBeUdUjlVjddyIeMymrW56AUaZhQv/7R4BkQw1lYzS67n20s vQo7X82Qws3y7QjtQUAHbPTI0sDovP+Px7MwkKpraNP8O7K3N6A+/s1ixYIpd8d9HPVy3fUDecb o0zkYQ46U/Mpc1Sw2PqTmwvOkEQD3mHbUGhyYwB3Flwfjj2GtCHPvIIphugDhozxTmDLVOq+Bky im30elhGYIwZz22Ok5FO+ZxIgbKXQrUooX/7/6PXrLqUV65xmZWGv85Mmt5WuNJrrfB5wruxbAN aRMJx0FpGJJWx3xxX/PCpcxjKEagbGu2Xxjo4pW1k/QC7eC3 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 038271207a27..0a37a375a89d 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(struct pwrseq_pcie_m2_ctx *ctx, struct pci_dev *pdev) { struct serdev_controller *serdev_ctrl; @@ -259,6 +259,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; @@ -368,7 +378,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); } @@ -400,7 +410,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 +418,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) @@ -481,16 +529,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 Sat Jun 13 11:24:11 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 6868044B68D; Thu, 7 May 2026 16:06:18 +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=1778169978; cv=none; b=seWmVEkaMO7XtPf2dACNhBLFEIfmqZabVrabjj8fy8+4lcx9nqpH0QMi+7sB2iM+L9CLpCRrf6CThV2L0caczxoPOUoOqVmYd6HeoPX1e82QHBD4lx5rd17kqVED4ZtdEPAB++bAnNMM+9ULNJp5B0Mq1UsZXXe87Fle0/CoRMs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778169978; c=relaxed/simple; bh=4n1I9oI3eMG4upUXXN8n/9Z86UiaZWYxbvDtBalxfHw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=u2VlyrqFBKmXDEffTnRlW9JgVCJmdk9me7XQS5qKScmu3CFzde9NnYsWobkbq5hxS0b+lR7Y+UYUpN+IcSKZ7bp7+/X84obOK3lyi7YztjCFDvWentjOs3itLWjFCmvfSjlRgm4RUbCfvYRQY6yVlSiFTasMBSNKQKRPs2jN5wU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=V/51pAYb; 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="V/51pAYb" Received: by smtp.kernel.org (Postfix) with ESMTPS id 41909C2BCFA; Thu, 7 May 2026 16:06:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778169978; bh=4n1I9oI3eMG4upUXXN8n/9Z86UiaZWYxbvDtBalxfHw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=V/51pAYbAf0pcVgxwacJ2Xyq+cuCy3NAPCVtWHSFYw3mogx2bFEgv0MEda3ijBSiR 1oGZslfDiv8KqbqR382/u90+Pfk4bHU/t2rnNgC++BRHiEpMzg2y7fHZiInj2wrkSC QkEFdNeql+EfoUnvfCMk0nULBQCjPOk6BREXFBMQ9s1pKlBZ0xqxPs+hQ/7sY1FU1p WveOiD9kYNcQgrCFSNj8kw9naL3N0YmYIv4mvLJSJoK9881P50rCRpgTHpGsckIgQM 64O5ScDsaniYP57S+2dqY4LtV7CzQw6cTW0HqBeqQaB50pumT0naJ8lr1Zcb+e3wFN K5SRcCI5Z0jCg== 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 39863CD343B; Thu, 7 May 2026 16:06:18 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 07 May 2026 21:36:13 +0530 Subject: [PATCH v2 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: <20260507-pwrseq-m2-bt-v2-5-1740bd478539@oss.qualcomm.com> References: <20260507-pwrseq-m2-bt-v2-0-1740bd478539@oss.qualcomm.com> In-Reply-To: <20260507-pwrseq-m2-bt-v2-0-1740bd478539@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=xjEm538gZBQEYn7oXNptHVF8tgSr+6Z5aqABuWX2NJ4=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp/Lh3GF+LKDHDTzP32ISWBbWA+aulCjKfYYm/4 +4h88PcA42JATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCafy4dwAKCRBVnxHm/pHO 9aySB/0YT7cVdCU8BXzt6eK4adbfX2b1bCryMl6/yQx2rTULDy84LDi9fl1gABZXAS33kBp3o0s Ist/m/urLflOd55P5TahBo7YcBlLes7y2jAyQHo++LfTWQSm7Wzsl/sUKy5sdQZIkQjiZllbs5w ww3ig7P5rQFq51LEEbAGQeBP/+v7Gd0KYlDqmVsZyOEyhNIOE2MpQ+hR91sFxHtmJGVcwczTNGc Hk+NFf1hencRYFEG68VbvmQunm++6vuhgmIzUP2LnP2GVCDYlIoV61+b1dXY1ugzH8X/iz68vt0 i+uaz+ily2+AS0UWyA0w4I0F6MWAjpOtzC+oyaEd8Bs3AxCv 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 0a37a375a89d..efeb25ba9c79 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; @@ -281,13 +296,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 @@ -353,11 +369,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 Sat Jun 13 11:24:11 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 8539D44DB63; Thu, 7 May 2026 16:06:18 +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=1778169978; cv=none; b=BOLQqz1XPtDBDFfQIj5IMqXiLMzQtXmEanHeDUaZSOytW9JDwScxIW9fr2Nv3V7YTkahpeeo17slgodGTODUM6TqOxpr01sl4QyYfgCbPajsS/995IIn2JydXGykCb+sY+ipOX1MOk+e0JZAwYG+Ig66NJ5RTQd/Rv3B5XtN9RM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778169978; c=relaxed/simple; bh=K5lKxcKH4fmRhknhlE5axpq22XQnDH4mLawgXRhcu38=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CaGpikloifwIbrD4cfWGi4fH6m+8llFpItQi7RGis7S/VKvdK4d5nkhCbz94atNwr9ziHfc3OoG+fZJU6YVt4XKMF8hzW4xkjsyLW1jynheix3wu+6UyWfcU0twWDiEs0OfcJHwrXKvN0Wf3J+zxaEhOBP6+VDrT8hEakGgKcUM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=U//BkpTN; 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="U//BkpTN" Received: by smtp.kernel.org (Postfix) with ESMTPS id 50529C2BCC4; Thu, 7 May 2026 16:06:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778169978; bh=K5lKxcKH4fmRhknhlE5axpq22XQnDH4mLawgXRhcu38=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=U//BkpTNb4VyAw2ZImn+1pGS+RsafjIPYwqZPhJ0Jweb1c37/h4JgAhantULDaiOS DrsmVNUqTdG0Mv1UlbjulxyGTMYuMJIVEFgwPcrxCC8fPjc4FPzvzgNAvxRqLXQQLf 79QZEAiq0Mt/UAZSbyCioMzSRjVlxdDayWnORbnYutXd7VRQQ12bhmJXAcWsOBbG8Y peVObaIap+eaytF/v9o2u29vdhFRuABVqI8etG/Cle9KpxeYhsn7T1eAt06mYweUSE SFZhUkgM9u3UckJTtZlTrGHj/pw2iIKSydHlwCxUebzzgI7LGc4ao5fP9DFkvIu7l1 SPNHvs17bYJgg== 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 49207CD3442; Thu, 7 May 2026 16:06:18 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 07 May 2026 21:36:14 +0530 Subject: [PATCH v2 6/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: <20260507-pwrseq-m2-bt-v2-6-1740bd478539@oss.qualcomm.com> References: <20260507-pwrseq-m2-bt-v2-0-1740bd478539@oss.qualcomm.com> In-Reply-To: <20260507-pwrseq-m2-bt-v2-0-1740bd478539@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 , Dmitry Baryshkov X-Mailer: b4 0.15.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1718; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=IvZ9CIq//p0HdqR9ryzttaoiBLfV1zSyMeR7RNa/KYI=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp/Lh3/yNB+NsR8etCxiPVXy5R8wdmBIwBzwR2x TgElyscP1mJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCafy4dwAKCRBVnxHm/pHO 9Xu2B/9xt6sFExZbI2SblITHoNVnKQOz1ua7YHC/biIJgmPcV1nLazK2H/1bpFfwZvPsBwMVHjY Eh8+0b3c9eIP1fmRcoLuAIL7nahCNE8H1itohGdhjYxoqMOYrVUilw9fXzRiggM8OTYSdKvI0n4 YEVrM8XWSJ0So63GVk/JU2quPE5Woy3rjiONApOjH4FcLgSpctKPlqFkGqsgqr8RSsN4Jo5U3Mg 2upVXxEcg/Vu/Tu2lacdvOviSLjHR2WEm2cCG2nDpCCyYlVg3S6BRTO23KGVRlCv0D/30NmfLXx PZk3xUiYcymv6WhGsdeX9VGRqO3Nh7MeFtccs8qHE0UfbuX7 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 Reviewed-by: Dmitry Baryshkov Signed-off-by: Manivannan Sadhasivam 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 Sat Jun 13 11:24:11 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 82CB044D6BB; Thu, 7 May 2026 16:06:18 +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=1778169978; cv=none; b=PSi3PFjoMkAONeA4b9gySVaDymJnGaAhH+SwUX+u6ibLPWpPN9bAMQoo07Ct+VcXzMdnvD5Jrrk8twv+rckvhPvp01xkbUzuDIZI1vRK35/CxcPS4V6MWY32WMe7BfzdOZnKv2fZy6iCZxrtv1c3pOJzuaQRoMRFuuYoYEr/gcI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778169978; c=relaxed/simple; bh=O8fpOi53fM+qI7x3ITJVYJNULeeoK/xucU41zL9ZEHg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CqnXjw68ZualZizjUFyClG1WXX/vByPpqSsZLRSL6uTpvz8DRggfQErtrkaJbr63N/DPnwWywf4xX4a/d4H1ln1MKTSJ5rdCtlkahpKl9xB4rwD5qgHq/xqeoGqv3DnhBBBXypH7GzUbUMCCa5YHNu5F2y/6SJhnpWdLfjKX83Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=bTL7oAMl; 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="bTL7oAMl" Received: by smtp.kernel.org (Postfix) with ESMTPS id 6049EC2BCF4; Thu, 7 May 2026 16:06:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778169978; bh=O8fpOi53fM+qI7x3ITJVYJNULeeoK/xucU41zL9ZEHg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=bTL7oAMlVv5XVZsAp2i7dZJ+KjGm1D5aX6QmySUKDtO37KlsCmWj0gGvM2oyFr9Gh 2IYh2/LDR76YoEKyVRgVRR1EWpeapWTtguDtpIrh14cFn4wea/sQVRnrLC3mNpfYyq AxTHPqbrKhLBHV2SaHlFRmOxB5rj3Cdxj7zqPYYZdYP8QelBW43pRxh/GHXaAo0/zg 6Xd4zi6HB4HhFEo9XSPXIsyKnhkHZVM7D7ZabK/08FAYxthrXMfU6xa9r4631I8qxC ZTEwqcGFaMmmwmotjtAXALr07u0NVITe3tIEUmFcMhuwVgAc+9KY1ms7COzZKYn/Gp 3BlvEgu9Vj5Lw== 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 59AE6CD3447; Thu, 7 May 2026 16:06:18 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 07 May 2026 21:36:15 +0530 Subject: [PATCH v2 7/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: <20260507-pwrseq-m2-bt-v2-7-1740bd478539@oss.qualcomm.com> References: <20260507-pwrseq-m2-bt-v2-0-1740bd478539@oss.qualcomm.com> In-Reply-To: <20260507-pwrseq-m2-bt-v2-0-1740bd478539@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 , Dmitry Baryshkov X-Mailer: b4 0.15.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1922; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=EanTaWVkJi/ee+/EvgVfMzEF7nvDtp3Ra7zj0YVTEu8=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp/Lh3AUrUdWPJerwKqiSDQnGP7jLUXCOkt69bI wCasFbC1YWJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCafy4dwAKCRBVnxHm/pHO 9R0ZB/9PqwLllRQIitwVELu/cyLrU3c2SxfZ6j2vDtm+eKOc1zu0oX8PHyavxaIn925MSs2S3s9 waVuR+chhcuSwamnL+x6Z0ZmvbaKJbb+sYdssMFHq8UhU3JOj4jLOSKAYBQo/h4uI/lrcs+1Z0P fxwQsjsbyHt5h68igZ/em2YfMVdL7lsWLBOaSZVInHtoXAJdOFNR70SrG9tGbOv9Iv+Wrjijyuh uT5WZ4f1hLLfaFxVl5REYIrQwL+nlJ5jwDhHNp8W8nxv4EpmttjYDXp+5QQ3uORYbHB3CxYsH0q 1Or5nJUDE9EyEuHMGBdO5WjOU3IplVOjpIaayOrwk4pm6F+r 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. Reviewed-by: Dmitry Baryshkov Signed-off-by: Manivannan Sadhasivam Reviewed-by: Bartosz Golaszewski 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 Sat Jun 13 11:24:11 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 8FAA344E025; Thu, 7 May 2026 16:06:18 +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=1778169978; cv=none; b=ke+x5lTjQWcQZhx/+IoPfWkFaf0BNrKmklMpA7i0lGvKrUzjDqotSclTej+rUxgtAZ/Yi67V1h7DEugvsZt8yFhcy2Aj8CYOxRz+cv7qPmaBvyzrpjLhgXRfS3ttddTLeHPoJSCHvfJ+5+5wwfc8bJxM6YkWRH1ULNg0yIApgQ4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778169978; c=relaxed/simple; bh=EZPpoMOL9WihziC/MK2MjaWdKbXNphkZbHMgn6LGG0g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=iwAPRQ2Li0qIqlLKkeORcuYBYRmkaYNW5s3byTV7nhvNPjc3CQDAhiepP/v0yktkDq8k1x8um79mdPyEjU83RMEcgb5SZXoUQBkSppaiPh4xmh7MKc/zGLyw9LrGxC+SquQTMEzAoYuJgIp63DHUvUsBhwiiFFo+HqzCYBwYS10= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kMw6DyNu; 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="kMw6DyNu" Received: by smtp.kernel.org (Postfix) with ESMTPS id 70E82C2BCB8; Thu, 7 May 2026 16:06:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778169978; bh=EZPpoMOL9WihziC/MK2MjaWdKbXNphkZbHMgn6LGG0g=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=kMw6DyNuD4OBY1OXoPpw5iYUZUwrrc2DHGel+8V5gT3acFALfxOcCHYzMnbqdWX78 Cm6H+hAVonovQBlSG9BJZEAs0xy7pq8N+Je+dRrJO0pk7ZgZ+fOX6aVyTBCECjzSAC 7sfuf9n533Q5SiY/M4DqbB+1vHSDm9S+qDtlKHRmgutrmVYios+W9MVTmhc4l0ObYp suPCRCVISVzNiIU6ZdFULRix2Dnlhsitec2Wa9DVqgtSssJNfkM5qDlhpYJ78CpHMe WPpg2RSNRaGPp+JQ2yaXSNwgJIWex09nvxjGoVomN1Z/kUiC9qvdIp4liCXEb76XLC 9teC/wgP94+gw== 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 6B18BCD37A7; Thu, 7 May 2026 16:06:18 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 07 May 2026 21:36:16 +0530 Subject: [PATCH v2 8/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: <20260507-pwrseq-m2-bt-v2-8-1740bd478539@oss.qualcomm.com> References: <20260507-pwrseq-m2-bt-v2-0-1740bd478539@oss.qualcomm.com> In-Reply-To: <20260507-pwrseq-m2-bt-v2-0-1740bd478539@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=1996; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=rxWzd4lr/8TaHGBWfbY6c8DXpO+mcIR8KKWvZPYGs/8=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp/Lh3s0snxu5XC7qLccfWlPE3hKIzKV4GGi7e3 8QeFiRRSwSJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCafy4dwAKCRBVnxHm/pHO 9V6sB/9dGLubTojDBWN2BmdXreaZ18o+YkI9g8c06570gHpIzSqGQwMHDpveuJBSustypNYCWL+ zgdNYOwlUPKOGtggun8PmHXi4F9XwgiDQmOZaDJK7703pt37dT3CNBs6G3exxUzj1I7Wy3twwt0 KLdqje33t3XIqFVNK999y6xSChc9VjFn6QGw0Lvm595kBD85xio0GKgc/DXeP31rBj167WnHuhj /r1Z2zyN/3nP1UGzcINgeBW0el+wh7cMnO/O2EbHTNG5VWhaBirrxaX7/5RRt5HeRltTlbvwcKs NsEJ/uo4ckZzOOH1mqre+ruIraL18RyYpmItzOniTQC5urk9 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. Signed-off-by: Manivannan Sadhasivam Tested-by: Wei Deng --- 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.51.0 From nobody Sat Jun 13 11:24:11 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 9E9504508F2; Thu, 7 May 2026 16:06:18 +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=1778169978; cv=none; b=dayUQaHH2AcMD2FeDTt2QtEoLK+WIDKFvQdVpDnkvIzhl0VAz8fK57qWrNVfG7g61mGeaoSdd7aO2Zeu0We6tF3utbzuEXjB9wbWc34pr6wZ894fIkjF9yvHqBSbNHtydT2uFdPww2yxNEoFx+/Lzs/yt5XKjEc5DFQvT9wmb4I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778169978; c=relaxed/simple; bh=aNhmryQKE395W4APYigHylzo2/j+j50biYPcg5iB8Ns=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=D9enl6YdhPCDOWsQVpVc9Tsa4Y2Onz9ewkPAXYVZCcu22IxQEoTqlj3JQFCUg4HpcwuMneTRGsVjpMmiKRK+rt/QmY94RmQicIp/+G6lF3dYApOcj80Pla4hmTRb+eL7N5eFS0TXXLPQnGhuSE99lvRWvwdU4bco17crAWqSvTo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qGykYgPG; 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="qGykYgPG" Received: by smtp.kernel.org (Postfix) with ESMTPS id 8353AC2BCB2; Thu, 7 May 2026 16:06:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778169978; bh=aNhmryQKE395W4APYigHylzo2/j+j50biYPcg5iB8Ns=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=qGykYgPGQ1F1vJkiDVZ3m6JEZ0OwWb8W/escRi1aoONHoqCqMOKzkPISI9Xzx4NNH WuF1ZUBTdm/hbeym2W+xTHSab9HhSCibBnV/jHS2mz0/Ujxa7RdByDskZev4h3r7qH hDrl0e/tfm4XPgBMBb3M8zTrOguTmDAOG7FQoU11kPkGtpCMb4GTPIM6w2OVgDCZPB CxC07yCUm4lZp1NxtfuIxSedoTEnIon4xX8zN40h6WMliuq5PNN1j4Is1EhhA0k/M3 EZFzrYOsngYvlSmet6uroOUIedNnaYNwK7O+wduZJX0p6JCmpWKilPjWjO5Wua+c44 FSO3IZrZSWpkw== 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 7B2FDCD3442; Thu, 7 May 2026 16:06:18 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 07 May 2026 21:36:17 +0530 Subject: [PATCH v2 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: <20260507-pwrseq-m2-bt-v2-9-1740bd478539@oss.qualcomm.com> References: <20260507-pwrseq-m2-bt-v2-0-1740bd478539@oss.qualcomm.com> In-Reply-To: <20260507-pwrseq-m2-bt-v2-0-1740bd478539@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=1280; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=kT/daCATvUeblQjstk/xz8aGuQ4+x8sVK/KhZTDC6as=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp/Lh3qBHbqcZIzl+5YqO+PrOKii2iHINB9NljG TRznrWuJaGJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCafy4dwAKCRBVnxHm/pHO 9dQAB/9HaNIKcu7vecDN+DH8+r+PzhQyxhZlVjgokj6XPnBAtQXxdPZn699QwTXKoypwr4XcS65 2J+gS2k8DRc3GVP3nADCvi0rLacpymyyucsPKiAmZGVXOn24XH6YDzhoO3ki4OUyfsb+D7D7GbR E2e8KpXCaVg94siJVNbfD9z+U6fyUEQvJ3G5vG0+DN4wcNxD9huMPcL74NCw+6eYjfy7Pwyo2VI 6hf6age9p8eUQ+OriJXToL6Dt0nQjzSBbVUNpnMCKZc7CgCgbSQfGRJZw1ZeAy62ADFx7cgdm9i 2yfrUrQ9Mfhm29bBqDTYgAHGqMWqkxmqF7A5IFBI/YzDbZUK 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. Signed-off-by: Manivannan Sadhasivam Reviewed-by: Bartosz Golaszewski Tested-by: Wei Deng --- 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.51.0