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
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
WARNING: multiple messages have this Message-ID (diff)
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:19 UTC|newest]
Thread overview: 52+ 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 ` 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 18:18 ` Adrian Hunter
2026-01-29 19:43 ` Frank Li
2026-01-29 19:43 ` Frank Li
2026-01-29 18:18 ` Adrian Hunter [this message]
2026-01-29 18:18 ` [PATCH 2/7] i3c: master: Allow controller drivers to select runtime PM device Adrian Hunter
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 18:18 ` Adrian Hunter
2026-01-29 19:56 ` Frank Li
2026-01-29 19:56 ` Frank Li
2026-01-29 20:42 ` Adrian Hunter
2026-01-29 20:42 ` Adrian Hunter
2026-01-29 20:55 ` Frank Li
2026-01-29 20:55 ` Frank Li
2026-01-30 7:48 ` Adrian Hunter
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 ` 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 18:18 ` Adrian Hunter
2026-01-29 20:00 ` Frank Li
2026-01-29 20:00 ` Frank Li
2026-01-29 20:28 ` Adrian Hunter
2026-01-29 20:28 ` Adrian Hunter
2026-01-29 21:00 ` Frank Li
2026-01-29 21:00 ` Frank Li
2026-01-30 7:00 ` Adrian Hunter
2026-01-30 7:00 ` Adrian Hunter
2026-01-30 15:04 ` Frank Li
2026-01-30 15:04 ` Frank Li
2026-01-30 16:34 ` Adrian Hunter
2026-01-30 16:34 ` Adrian Hunter
2026-01-30 17:11 ` Frank Li
2026-01-30 17:11 ` Frank Li
2026-02-02 16:25 ` Frank Li
2026-02-02 16:25 ` Frank Li
2026-02-03 12:54 ` Adrian Hunter
2026-02-03 12:54 ` Adrian Hunter
2026-02-03 15:59 ` Frank Li
2026-02-03 15:59 ` Frank Li
2026-02-03 16:22 ` Wysocki, Rafael J
2026-02-03 16:22 ` Wysocki, Rafael J
2026-02-03 16:57 ` Adrian Hunter
2026-02-03 16:57 ` Adrian Hunter
2026-02-03 20:20 ` Rafael J. Wysocki
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 ` 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
2026-01-29 18:18 ` 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 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.