summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Hunter <adrian.hunter@intel.com>2026-01-13 09:27:02 +0200
committerAlexandre Belloni <alexandre.belloni@bootlin.com>2026-01-14 17:21:10 +0100
commit95cb1935168ab8f637bd0bf64b9ec6f5667d1d8e (patch)
treee8a8159cb8e52bf5ed76c39dad86cbbb46cc8c30
parentb9a15012a14520b2b006ecb770f32eb9a57d4b8b (diff)
i3c: mipi-i3c-hci-pci: Add Runtime PM support
Enable Runtime PM for the mipi_i3c_hci_pci driver. Introduce helpers to allow and forbid Runtime PM during probe and remove, using pm_runtime APIs. Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Reviewed-by: Frank Li <Frank.Li@nxp.com> Link: https://patch.msgid.link/20260113072702.16268-22-adrian.hunter@intel.com Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
-rw-r--r--drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
index 458f871a2e61..1b38771667e5 100644
--- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
+++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
@@ -18,6 +18,7 @@
#include <linux/platform_data/mipi-i3c-hci.h>
#include <linux/platform_device.h>
#include <linux/pm_qos.h>
+#include <linux/pm_runtime.h>
/*
* There can up to 15 instances, but implementations have at most 2 at this
@@ -208,6 +209,18 @@ static const struct mipi_i3c_hci_pci_info intel_si_2_info = {
.instance_count = 1,
};
+static void mipi_i3c_hci_pci_rpm_allow(struct device *dev)
+{
+ pm_runtime_put(dev);
+ pm_runtime_allow(dev);
+}
+
+static void mipi_i3c_hci_pci_rpm_forbid(struct device *dev)
+{
+ pm_runtime_forbid(dev);
+ pm_runtime_get_sync(dev);
+}
+
struct mipi_i3c_hci_pci_cell_data {
struct mipi_i3c_hci_platform_data pdata;
struct resource res;
@@ -285,6 +298,8 @@ static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
pci_set_drvdata(pci, hci);
+ mipi_i3c_hci_pci_rpm_allow(&pci->dev);
+
return 0;
err_exit:
@@ -300,6 +315,8 @@ static void mipi_i3c_hci_pci_remove(struct pci_dev *pci)
if (hci->info->exit)
hci->info->exit(hci);
+ mipi_i3c_hci_pci_rpm_forbid(&pci->dev);
+
mfd_remove_devices(&pci->dev);
}