From: Bartosz Golaszewski <brgl@bgdev.pl>
To: Bjorn Andersson <andersson@kernel.org>,
Konrad Dybcio <konrad.dybcio@linaro.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Conor Dooley <conor+dt@kernel.org>,
Marcel Holtmann <marcel@holtmann.org>,
Luiz Augusto von Dentz <luiz.dentz@gmail.com>,
Bjorn Helgaas <bhelgaas@google.com>,
Neil Armstrong <neil.armstrong@linaro.org>,
Alex Elder <elder@linaro.org>,
Srini Kandagatla <srinivas.kandagatla@linaro.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Arnd Bergmann <arnd@arndb.de>, Abel Vesa <abel.vesa@linaro.org>,
Manivannan Sadhasivam <mani@kernel.org>,
Lukas Wunner <lukas@wunner.de>
Cc: linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-bluetooth@vger.kernel.org,
linux-pci@vger.kernel.org,
Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Subject: [RFC 9/9] PCI/pwrctl: add a PCI power control driver for power sequenced devices
Date: Thu, 1 Feb 2024 16:55:32 +0100 [thread overview]
Message-ID: <20240201155532.49707-10-brgl@bgdev.pl> (raw)
In-Reply-To: <20240201155532.49707-1-brgl@bgdev.pl>
From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Add a PCI power control driver that's capable of correctly powering up
devices using the power sequencing subsystem. For now we support the
ath11k module on QCA6390.
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
---
drivers/pci/pwrctl/Kconfig | 9 +++
drivers/pci/pwrctl/Makefile | 1 +
drivers/pci/pwrctl/pci-pwrctl-pwrseq.c | 83 ++++++++++++++++++++++++++
3 files changed, 93 insertions(+)
create mode 100644 drivers/pci/pwrctl/pci-pwrctl-pwrseq.c
diff --git a/drivers/pci/pwrctl/Kconfig b/drivers/pci/pwrctl/Kconfig
index e2dc5e5d2af1..bca72dc08e79 100644
--- a/drivers/pci/pwrctl/Kconfig
+++ b/drivers/pci/pwrctl/Kconfig
@@ -5,4 +5,13 @@ menu "PCI Power control drivers"
config PCI_PWRCTL
bool
+config PCI_PWRCTL_PWRSEQ
+ tristate "PCI Power Control driver using the Power Sequencing subsystem"
+ select POWER_SEQUENCING
+ select PCI_PWRCTL
+ default m if (ATH11K_PCI && ARCH_QCOM)
+ help
+ Enable support for the PCI power control driver for device
+ drivers using the Power Sequencing subsystem.
+
endmenu
diff --git a/drivers/pci/pwrctl/Makefile b/drivers/pci/pwrctl/Makefile
index 4381cfbf3f21..919c0f704ee9 100644
--- a/drivers/pci/pwrctl/Makefile
+++ b/drivers/pci/pwrctl/Makefile
@@ -1,3 +1,4 @@
# SPDX-License-Identifier: GPL-2.0
obj-$(CONFIG_PCI_PWRCTL) += core.o
+obj-$(CONFIG_PCI_PWRCTL_PWRSEQ) += pci-pwrctl-pwrseq.o
diff --git a/drivers/pci/pwrctl/pci-pwrctl-pwrseq.c b/drivers/pci/pwrctl/pci-pwrctl-pwrseq.c
new file mode 100644
index 000000000000..510598c4edc4
--- /dev/null
+++ b/drivers/pci/pwrctl/pci-pwrctl-pwrseq.c
@@ -0,0 +1,83 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2023-2024 Linaro Ltd.
+ */
+
+#include <linux/device.h>
+#include <linux/mod_devicetable.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/pci-pwrctl.h>
+#include <linux/platform_device.h>
+#include <linux/pwrseq/consumer.h>
+#include <linux/slab.h>
+#include <linux/types.h>
+
+struct pci_pwrctl_pwrseq_data {
+ struct pci_pwrctl ctx;
+ struct pwrseq_desc *pwrseq;
+};
+
+static void devm_pci_pwrctl_pwrseq_power_off(void *data)
+{
+ struct pwrseq_desc *pwrseq = data;
+
+ pwrseq_power_off(pwrseq);
+}
+
+static int pci_pwrctl_pwrseq_probe(struct platform_device *pdev)
+{
+ struct pci_pwrctl_pwrseq_data *data;
+ struct device *dev = &pdev->dev;
+ int ret;
+
+ data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
+ if (!data)
+ return -ENOMEM;
+
+ data->pwrseq = devm_pwrseq_get(dev);
+ if (IS_ERR(data->pwrseq))
+ return dev_err_probe(dev, PTR_ERR(data->pwrseq),
+ "Failed to get the power sequencer\n");
+
+ ret = pwrseq_power_on(data->pwrseq);
+ if (ret)
+ return dev_err_probe(dev, ret,
+ "Failed to power-on the device\n");
+
+ ret = devm_add_action_or_reset(dev, devm_pci_pwrctl_pwrseq_power_off,
+ data->pwrseq);
+ if (ret)
+ return ret;
+
+ data->ctx.dev = dev;
+
+ ret = devm_pci_pwrctl_device_enable(dev, &data->ctx);
+ if (ret)
+ return dev_err_probe(dev, ret,
+ "Failed to register the pwrctl wrapper\n");
+
+ return 0;
+}
+
+static const struct of_device_id pci_pwrctl_pwrseq_of_match[] = {
+ {
+ /* ATH11K in QCA6390 package. */
+ .compatible = "pci17cb,1101",
+ },
+ { }
+};
+MODULE_DEVICE_TABLE(of, pci_pwrctl_pwrseq_of_match);
+
+static struct platform_driver pci_pwrctl_pwrseq_driver = {
+ .driver = {
+ .name = "pci-pwrctl-pwrseq",
+ .of_match_table = pci_pwrctl_pwrseq_of_match,
+ },
+ .probe = pci_pwrctl_pwrseq_probe,
+};
+module_platform_driver(pci_pwrctl_pwrseq_driver);
+
+MODULE_AUTHOR("Bartosz Golaszewski <bartosz.golaszewski@linaro.org>");
+MODULE_DESCRIPTION("Generic PCI Power Control module for power sequenced devices");
+MODULE_LICENSE("GPL");
--
2.40.1
next prev parent reply other threads:[~2024-02-01 15:55 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-01 15:55 [RFC 0/9] power: sequencing: implement the subsystem and add first users Bartosz Golaszewski
2024-02-01 15:55 ` [RFC 1/9] of: provide a cleanup helper for OF nodes Bartosz Golaszewski
2024-02-01 16:14 ` power: sequencing: implement the subsystem and add first users bluez.test.bot
2024-02-01 22:18 ` [RFC 1/9] of: provide a cleanup helper for OF nodes Rob Herring
2024-02-04 19:18 ` Bartosz Golaszewski
2024-02-02 21:57 ` power: sequencing: implement the subsystem and add first users bluez.test.bot
2024-02-01 15:55 ` [RFC 2/9] arm64: dts: qcom: qrb5165-rb5: model the PMU of the QCA6391 Bartosz Golaszewski
2024-02-02 4:34 ` Bjorn Andersson
2024-02-02 4:59 ` Dmitry Baryshkov
2024-02-02 16:09 ` Bjorn Andersson
2024-02-02 13:23 ` Bartosz Golaszewski
2024-02-02 16:41 ` Bjorn Andersson
2024-02-02 16:47 ` Bjorn Andersson
2024-02-05 7:51 ` Krzysztof Kozlowski
2024-02-01 15:55 ` [RFC 3/9] power: sequencing: new subsystem Bartosz Golaszewski
2024-02-01 22:25 ` Rob Herring
2024-02-03 15:15 ` kernel test robot
2024-02-03 16:54 ` kernel test robot
2024-02-04 9:07 ` kernel test robot
2024-02-01 15:55 ` [RFC 4/9] power: pwrseq: add a driver for the QCA6390 PMU module Bartosz Golaszewski
2024-02-02 4:54 ` Bjorn Andersson
2024-02-02 7:48 ` Dmitry Baryshkov
2024-02-02 9:01 ` Bartosz Golaszewski
2024-02-01 15:55 ` [RFC 5/9] Bluetooth: qca: use the power sequencer for QCA6390 Bartosz Golaszewski
2024-02-01 15:55 ` [RFC 6/9] PCI: create platform devices for child OF nodes of the port node Bartosz Golaszewski
2024-02-02 2:59 ` Bjorn Andersson
2024-02-02 9:03 ` Bartosz Golaszewski
2024-02-01 15:55 ` [RFC 7/9] PCI: hold the rescan mutex when scanning for the first time Bartosz Golaszewski
2024-02-01 15:55 ` [RFC 8/9] PCI/pwrctl: add PCI power control core code Bartosz Golaszewski
2024-02-02 3:53 ` Bjorn Andersson
2024-02-02 9:11 ` Bartosz Golaszewski
2024-02-02 16:52 ` Bjorn Andersson
2024-02-07 16:26 ` Bartosz Golaszewski
2024-02-09 9:04 ` Lukas Wunner
2024-02-09 9:38 ` Manivannan Sadhasivam
2024-02-08 11:32 ` Manivannan Sadhasivam
2024-02-09 23:43 ` Bjorn Andersson
2024-02-14 14:28 ` Manivannan Sadhasivam
2024-02-14 15:46 ` Bartosz Golaszewski
2024-02-01 15:55 ` Bartosz Golaszewski [this message]
2024-02-02 4:03 ` [RFC 9/9] PCI/pwrctl: add a PCI power control driver for power sequenced devices Bjorn Andersson
2024-02-02 13:05 ` Bartosz Golaszewski
2024-02-09 23:37 ` Bjorn Andersson
2024-02-02 0:40 ` [RFC 0/9] power: sequencing: implement the subsystem and add first users Bjorn Andersson
2024-02-02 8:53 ` Bartosz Golaszewski
2024-02-02 4:10 ` Bjorn Andersson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240201155532.49707-10-brgl@bgdev.pl \
--to=brgl@bgdev.pl \
--cc=abel.vesa@linaro.org \
--cc=andersson@kernel.org \
--cc=arnd@arndb.de \
--cc=bartosz.golaszewski@linaro.org \
--cc=bhelgaas@google.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=elder@linaro.org \
--cc=gregkh@linuxfoundation.org \
--cc=konrad.dybcio@linaro.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-bluetooth@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=luiz.dentz@gmail.com \
--cc=lukas@wunner.de \
--cc=mani@kernel.org \
--cc=marcel@holtmann.org \
--cc=neil.armstrong@linaro.org \
--cc=robh@kernel.org \
--cc=srinivas.kandagatla@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.