From: Adrian Hunter <adrian.hunter@intel.com>
To: alexandre.belloni@bootlin.com
Cc: Frank.Li@nxp.com, linux-i3c@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org
Subject: [PATCH 2/7] i3c: master: Allow controller drivers to select runtime PM device
Date: Thu, 29 Jan 2026 20:18:36 +0200 [thread overview]
Message-ID: <20260129181841.130864-3-adrian.hunter@intel.com> (raw)
In-Reply-To: <20260129181841.130864-1-adrian.hunter@intel.com>
Some I3C controller drivers need runtime PM to operate on a device other
than the parent device. To support that, add an rpm_dev pointer to
struct i3c_master_controller so drivers can specify which device should
be used for runtime power management.
If a driver does not set rpm_dev explicitly, default to using the parent
device to maintain existing behaviour.
Update the runtime PM helpers to use rpm_dev instead of dev.parent.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
drivers/i3c/master.c | 9 ++++++---
include/linux/i3c/master.h | 2 ++
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c
index 49fb6e30a68e..bcc493dc9d04 100644
--- a/drivers/i3c/master.c
+++ b/drivers/i3c/master.c
@@ -108,10 +108,10 @@ static struct i3c_master_controller *dev_to_i3cmaster(struct device *dev)
static int __must_check i3c_master_rpm_get(struct i3c_master_controller *master)
{
- int ret = master->rpm_allowed ? pm_runtime_resume_and_get(master->dev.parent) : 0;
+ int ret = master->rpm_allowed ? pm_runtime_resume_and_get(master->rpm_dev) : 0;
if (ret < 0) {
- dev_err(master->dev.parent, "runtime resume failed, error %d\n", ret);
+ dev_err(master->rpm_dev, "runtime resume failed, error %d\n", ret);
return ret;
}
return 0;
@@ -120,7 +120,7 @@ static int __must_check i3c_master_rpm_get(struct i3c_master_controller *master)
static void i3c_master_rpm_put(struct i3c_master_controller *master)
{
if (master->rpm_allowed)
- pm_runtime_put_autosuspend(master->dev.parent);
+ pm_runtime_put_autosuspend(master->rpm_dev);
}
int i3c_bus_rpm_get(struct i3c_bus *bus)
@@ -2975,6 +2975,9 @@ int i3c_master_register(struct i3c_master_controller *master,
INIT_LIST_HEAD(&master->boardinfo.i2c);
INIT_LIST_HEAD(&master->boardinfo.i3c);
+ if (!master->rpm_dev)
+ master->rpm_dev = parent;
+
ret = i3c_master_rpm_get(master);
if (ret)
return ret;
diff --git a/include/linux/i3c/master.h b/include/linux/i3c/master.h
index af2bb48363ba..4be67a902dd8 100644
--- a/include/linux/i3c/master.h
+++ b/include/linux/i3c/master.h
@@ -501,6 +501,7 @@ struct i3c_master_controller_ops {
* registered to the I2C subsystem to be as transparent as possible to
* existing I2C drivers
* @ops: master operations. See &struct i3c_master_controller_ops
+ * @rpm_dev: Runtime PM device
* @secondary: true if the master is a secondary master
* @init_done: true when the bus initialization is done
* @hotjoin: true if the master support hotjoin
@@ -526,6 +527,7 @@ struct i3c_master_controller {
struct i3c_dev_desc *this;
struct i2c_adapter i2c;
const struct i3c_master_controller_ops *ops;
+ struct device *rpm_dev;
unsigned int secondary : 1;
unsigned int init_done : 1;
unsigned int hotjoin: 1;
--
2.51.0
next prev parent reply other threads:[~2026-01-29 18:18 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-29 18:18 [PATCH 0/7] i3c: mipi-i3c-hci-pci: Enable IBI while runtime suspended for Intel controllers Adrian Hunter
2026-01-29 18:18 ` [PATCH 1/7] i3c: mipi-i3c-hci-pci: Set d3hot_delay to 0 " Adrian Hunter
2026-01-29 19:43 ` Frank Li
2026-01-29 18:18 ` Adrian Hunter [this message]
2026-01-29 18:18 ` [PATCH 3/7] i3c: master: Mark last_busy on IBI when runtime PM is allowed Adrian Hunter
2026-01-29 19:56 ` Frank Li
2026-01-29 20:42 ` Adrian Hunter
2026-01-29 20:55 ` Frank Li
2026-01-30 7:48 ` Adrian Hunter
2026-01-29 18:18 ` [PATCH 4/7] i3c: mipi-i3c-hci: Add quirk to allow IBI while runtime suspended Adrian Hunter
2026-01-29 18:18 ` [PATCH 5/7] i3c: mipi-i3c-hci: Allow parent to manage runtime PM Adrian Hunter
2026-01-29 20:00 ` Frank Li
2026-01-29 20:28 ` Adrian Hunter
2026-01-29 21:00 ` Frank Li
2026-01-30 7:00 ` Adrian Hunter
2026-01-30 15:04 ` Frank Li
2026-01-30 16:34 ` Adrian Hunter
2026-01-30 17:11 ` Frank Li
2026-02-02 16:25 ` Frank Li
2026-02-03 12:54 ` Adrian Hunter
2026-02-03 15:59 ` Frank Li
2026-02-03 16:22 ` Wysocki, Rafael J
2026-02-03 16:57 ` Adrian Hunter
2026-02-03 20:20 ` Rafael J. Wysocki
2026-01-29 18:18 ` [PATCH 6/7] i3c: mipi-i3c-hci-pci: Add optional ability to manage child " Adrian Hunter
2026-01-29 18:18 ` [PATCH 7/7] i3c: mipi-i3c-hci-pci: Enable IBI while runtime suspended for Intel controllers Adrian Hunter
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=20260129181841.130864-3-adrian.hunter@intel.com \
--to=adrian.hunter@intel.com \
--cc=Frank.Li@nxp.com \
--cc=alexandre.belloni@bootlin.com \
--cc=linux-i3c@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox