{"id":2226317,"url":"http://patchwork.ozlabs.org/api/patches/2226317/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-pci/patch/20260422-pwrseq-m2-bt-v1-1-720d02545a64@oss.qualcomm.com/","project":{"id":28,"url":"http://patchwork.ozlabs.org/api/projects/28/?format=json","name":"Linux PCI development","link_name":"linux-pci","list_id":"linux-pci.vger.kernel.org","list_email":"linux-pci@vger.kernel.org","web_url":null,"scm_url":null,"webscm_url":null,"list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20260422-pwrseq-m2-bt-v1-1-720d02545a64@oss.qualcomm.com>","list_archive_url":null,"date":"2026-04-22T11:24:42","name":"[01/12] power: sequencing: Introduce an API to check whether the pwrseq is fixed or controllable","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"e0700929b911ff1fdd035f2339a1a9d458a98d14","submitter":{"id":91277,"url":"http://patchwork.ozlabs.org/api/people/91277/?format=json","name":"Manivannan Sadhasivam via B4 Relay","email":"devnull+manivannan.sadhasivam.oss.qualcomm.com@kernel.org"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linux-pci/patch/20260422-pwrseq-m2-bt-v1-1-720d02545a64@oss.qualcomm.com/mbox/","series":[{"id":500992,"url":"http://patchwork.ozlabs.org/api/series/500992/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-pci/list/?series=500992","date":"2026-04-22T11:24:41","name":"Fixes/improvements for the PCI M.2 power sequencing driver","version":1,"mbox":"http://patchwork.ozlabs.org/series/500992/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2226317/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2226317/checks/","tags":{},"related":[],"headers":{"Return-Path":"\n <linux-pci+bounces-52957-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-pci@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=GiGKdSPi;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c04:e001:36c::12fc:5321; helo=tor.lore.kernel.org;\n envelope-from=linux-pci+bounces-52957-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=\"GiGKdSPi\"","smtp.subspace.kernel.org;\n arc=none smtp.client-ip=10.30.226.201"],"Received":["from tor.lore.kernel.org (tor.lore.kernel.org\n [IPv6:2600:3c04:e001:36c::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g0xkc5xVPz1yCv\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 21:26:32 +1000 (AEST)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby tor.lore.kernel.org (Postfix) with ESMTP id 6D1A93039D8A\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 11:25:21 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 1301D3CFF79;\n\tWed, 22 Apr 2026 11:25:13 +0000 (UTC)","from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org\n [10.30.226.201])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id CB7373C060B;\n\tWed, 22 Apr 2026 11:25:12 +0000 (UTC)","by smtp.kernel.org (Postfix) with ESMTPS id 781D3C2BCB6;\n\tWed, 22 Apr 2026 11:25:12 +0000 (UTC)","from aws-us-west-2-korg-lkml-1.web.codeaurora.org\n (localhost.localdomain [127.0.0.1])\n\tby smtp.lore.kernel.org (Postfix) with ESMTP id 66593F55811;\n\tWed, 22 Apr 2026 11:25:12 +0000 (UTC)"],"ARC-Seal":"i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1776857112; cv=none;\n b=jRq9S/5SoSVJCNg09Sm5NVF321/1cx9FQxT382k3f8sI9+/T9kwzRta+RvYP1vOynMWTEc2tBahhx4/zu+BZeIPcMzzr6oUTuc8upPZbVHaUcVB9WdoYNQgaNAwdXr6yb3Nes1JZGXfpQ87Cm6DY5Ov81pszz8RWoDoJH5aW9ok=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1776857112; c=relaxed/simple;\n\tbh=jonb0+BbdQ6Gol/gdLqxrtYurK7jeakTSV7+fWf3c6M=;\n\th=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:\n\t In-Reply-To:To:Cc;\n b=vCRWGXpYyJUMiU5BG4fQYPWjPIG2M4N6b31z4rHYY3bP9tHXiryfpoBwpOZjlfnTWqyk3TXd1mR5O6kcAZGPBUimEIbrrPShT0ZdKxHseg83jVkd10R5pLHBWmdkJx3xp4D4v7lyXHAVqobK1esmSh8meg0dDN8M201u6LCd+L4=","ARC-Authentication-Results":"i=1; smtp.subspace.kernel.org;\n dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=GiGKdSPi; arc=none smtp.client-ip=10.30.226.201","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1776857112;\n\tbh=jonb0+BbdQ6Gol/gdLqxrtYurK7jeakTSV7+fWf3c6M=;\n\th=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From;\n\tb=GiGKdSPigLO1yfzW/xEabv0WclGB2h92UJ9qop9tk/cubFn7e1vXplJiAcP5obESB\n\t qbIYJ/dK5czrglGIC+pqfluS3aEbli3m/75oP/+jQE+xsfCX4Dl9RY1PPtqy/rj2OQ\n\t xOGFt+9xaB4qX2FkWqm6M4nB1qOUNlAVcVM3vNF+gBAAOMau35RS04wQlPBveSDvto\n\t 6hKwPQXZojouyHWZWcwedSfz8sUN0BKa32GzCA6kJ8kCMzx/Ve9gueeyz4c/JATdqx\n\t EOAZAlrELyRBVP3NrEUeq/pV7gBT1wp0Ke23F8WhUZwvn9Ai2TSPcz8JX3BiNyUgFR\n\t FgfINDiUH9QTQ==","From":"Manivannan Sadhasivam via B4 Relay\n <devnull+manivannan.sadhasivam.oss.qualcomm.com@kernel.org>","Date":"Wed, 22 Apr 2026 16:54:42 +0530","Subject":"[PATCH 01/12] power: sequencing: Introduce an API to check whether\n the pwrseq is fixed or controllable","Precedence":"bulk","X-Mailing-List":"linux-pci@vger.kernel.org","List-Id":"<linux-pci.vger.kernel.org>","List-Subscribe":"<mailto:linux-pci+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-pci+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"7bit","Message-Id":"<20260422-pwrseq-m2-bt-v1-1-720d02545a64@oss.qualcomm.com>","References":"<20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com>","In-Reply-To":"<20260422-pwrseq-m2-bt-v1-0-720d02545a64@oss.qualcomm.com>","To":"Bartosz Golaszewski <brgl@kernel.org>,\n Manivannan Sadhasivam <mani@kernel.org>,\n Marcel Holtmann <marcel@holtmann.org>,\n Luiz Augusto von Dentz <luiz.dentz@gmail.com>,\n Shuai Zhang <quic_shuaz@quicinc.com>","Cc":"linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org,\n linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org,\n linux-bluetooth@vger.kernel.org, Wei Deng <wei.deng@oss.qualcomm.com>,\n Luiz Augusto von Dentz <luiz.von.dentz@intel.com>,\n Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>","X-Mailer":"b4 0.15.0","X-Developer-Signature":"v=1; a=openpgp-sha256; l=4155;\n i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id;\n bh=mBT4+PCQBlLr0gKZw68+7oeiwkEcbJwlfBn1pAauZ/w=;\n b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp6LAUAs/ZvcRX0EUgj9C0brPvG0qUgrCiwiCL+\n Vr8UZyf8b2JATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaeiwFAAKCRBVnxHm/pHO\n 9QzxB/9wBZR66v/P3IP9cDkWqPsdxvV+9r6eMk4nkoOxLgBBFjaOJk9fUo+KSq9rhp0vPPaqVYx\n fxdlj96TMLLr5/iFuJrUIH2IuAMLKdc3OnLMV+k4VeiM+/2/XHWTif+x6GDbfGWNDJQAkamBf6W\n b0e6hGk1dIhQi4lFzYRwAbOW+mg6nv/+7EF/5AMeC+kKLC17CnIR+hEbWxmqYpcTw5pif9Subx9\n mb1PpSFhoG63VAcWsc9D2UPjilHT7mBTp5uOTdRH3ENq9h8ZZneiXxBWmuNOyuU6jErn/7sQ+VR\n Pfo+rLejqNWFROaSf0lknjfgXSW3D2MbuY49j4BXxLKRPWbD","X-Developer-Key":"i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp;\n fpr=C668AEC3C3188E4C611465E7488550E901166008","X-Endpoint-Received":"by B4 Relay for\n manivannan.sadhasivam@oss.qualcomm.com/default with auth_id=461","X-Original-From":"Manivannan Sadhasivam\n <manivannan.sadhasivam@oss.qualcomm.com>","Reply-To":"manivannan.sadhasivam@oss.qualcomm.com"},"content":"From: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>\n\nIntroduce an API pwrseq_is_fixed() so that the consumers can check whether\nthe given power sequencer is fixed or controllable. This will come handy\nin situations where the consumers need to know whether the specific power\nsequencer like 'Bluetooth' can be controllable using properties like BT_EN.\n\nSigned-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>\n---\n drivers/power/sequencing/core.c | 33 +++++++++++++++++++++++++++++++++\n include/linux/pwrseq/consumer.h |  6 ++++++\n include/linux/pwrseq/provider.h |  2 ++\n 3 files changed, 41 insertions(+)","diff":"diff --git a/drivers/power/sequencing/core.c b/drivers/power/sequencing/core.c\nindex 4dff71be11b6..20af9643f1ac 100644\n--- a/drivers/power/sequencing/core.c\n+++ b/drivers/power/sequencing/core.c\n@@ -182,12 +182,14 @@ static void pwrseq_unit_release(struct kref *ref)\n  *               the state lock has been released. It's useful for implementing\n  *               boot-up delays without blocking other users from powering up\n  *               using the same power sequencer.\n+ * @is_fixed: Check whether this target is fixed or not.\n  */\n struct pwrseq_target {\n \tstruct list_head list;\n \tconst char *name;\n \tstruct pwrseq_unit *unit;\n \tpwrseq_power_state_func post_enable;\n+\tbool (*is_fixed)(struct pwrseq_device *pwrseq);\n };\n \n static struct pwrseq_target *\n@@ -206,6 +208,7 @@ pwrseq_target_new(const struct pwrseq_target_data *data)\n \t}\n \n \ttarget->post_enable = data->post_enable;\n+\ttarget->is_fixed = data->is_fixed;\n \n \treturn target;\n }\n@@ -965,6 +968,36 @@ int pwrseq_power_off(struct pwrseq_desc *desc)\n }\n EXPORT_SYMBOL_GPL(pwrseq_power_off);\n \n+/**\n+ * pwrseq_is_fixed() - Check whether the power sequencer is fixed or\n+ * controllable.\n+ * @desc: Descriptor referencing the power sequencer.\n+ *\n+ * This API can be used to check whether a specific power sequencer like\n+ * 'Bluetooth' is fixed or controllable through properties like 'BT_EN' GPIO.\n+ *\n+ * Returns: true if fixed, false if controllable.\n+ */\n+bool pwrseq_is_fixed(struct pwrseq_desc *desc)\n+{\n+\t/*\n+\t * If there is no power sequencer, then the consumer cannot control\n+\t * the power, so it is effectively fixed.\n+\t */\n+\tif (!desc)\n+\t\treturn true;\n+\n+\t/*\n+\t * If the provider hasn't implemented the callback, assume it acts\n+\t * like a controllable power sequencer (for backward compatibility).\n+\t */\n+\tif (!desc->target->is_fixed)\n+\t\treturn false;\n+\n+\treturn desc->target->is_fixed(desc->pwrseq);\n+}\n+EXPORT_SYMBOL_GPL(pwrseq_is_fixed);\n+\n #if IS_ENABLED(CONFIG_DEBUG_FS)\n \n struct pwrseq_debugfs_count_ctx {\ndiff --git a/include/linux/pwrseq/consumer.h b/include/linux/pwrseq/consumer.h\nindex 7d583b4f266e..7c24958880d7 100644\n--- a/include/linux/pwrseq/consumer.h\n+++ b/include/linux/pwrseq/consumer.h\n@@ -22,6 +22,7 @@ devm_pwrseq_get(struct device *dev, const char *target);\n \n int pwrseq_power_on(struct pwrseq_desc *desc);\n int pwrseq_power_off(struct pwrseq_desc *desc);\n+bool pwrseq_is_fixed(struct pwrseq_desc *desc);\n \n #else /* CONFIG_POWER_SEQUENCING */\n \n@@ -51,6 +52,11 @@ static inline int pwrseq_power_off(struct pwrseq_desc *desc)\n \treturn -ENOSYS;\n }\n \n+static inline bool pwrseq_is_fixed(struct pwrseq_desc *desc)\n+{\n+\treturn true;\n+}\n+\n #endif /* CONFIG_POWER_SEQUENCING */\n \n #endif /* __POWER_SEQUENCING_CONSUMER_H__ */\ndiff --git a/include/linux/pwrseq/provider.h b/include/linux/pwrseq/provider.h\nindex 33b3d2c2e39d..11165e98cde0 100644\n--- a/include/linux/pwrseq/provider.h\n+++ b/include/linux/pwrseq/provider.h\n@@ -43,11 +43,13 @@ struct pwrseq_unit_data {\n  *               the state lock has been released. It's useful for implementing\n  *               boot-up delays without blocking other users from powering up\n  *               using the same power sequencer.\n+ * @is_fixed: Callback to check whether this power sequencer is fixed or not.\n  */\n struct pwrseq_target_data {\n \tconst char *name;\n \tconst struct pwrseq_unit_data *unit;\n \tpwrseq_power_state_func post_enable;\n+\tbool (*is_fixed)(struct pwrseq_device *pwrseq);\n };\n \n /**\n","prefixes":["01/12"]}