[PATCH v2 2/3] rust: platform: wire runtime PM callbacks

Beata Michalska <[email protected]>
Newsgroups org.kernel.vger.rust-for-linux,dev.linux.lists.driver-core,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pm
Message-ID <[email protected]>
Allow Rust platform drivers to expose runtime PM callbacks to the driver core.

The runtime PM abstraction builds a dev_pm_ops table for the concrete driver
implementation, but the platform bus still needs to receive that table through
struct platform_driver. Add an optional PM_OPS associated constant to
platform::Driver and initialize the coresponding C device_driver struct
accordingly during registration. The platform glue only wires the callback
table into the C driver model; ownership of the callback payload and
runtime PM teardown remain with the pm module.

Signed-off-by: Beata Michalska <[email protected]>
---
 rust/kernel/platform.rs | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/rust/kernel/platform.rs b/rust/kernel/platform.rs
index d8d48f60b0b9..b7e422388634 100644
--- a/rust/kernel/platform.rs
+++ b/rust/kernel/platform.rs
@@ -72,6 +72,11 @@ unsafe fn register(
             None => core::ptr::null(),
         };
 
+        let pm_ops = match T::PM_OPS {
+            Some(ops) => ops,
+            None => core::ptr::null(),
+        };
+
         // SAFETY: It's safe to set the fields of `struct platform_driver` on initialization.
         unsafe {
             (*pdrv.get()).driver.name = name.as_char_ptr();
@@ -79,6 +84,7 @@ unsafe fn register(
             (*pdrv.get()).remove = Some(Self::remove_callback);
             (*pdrv.get()).driver.of_match_table = of_table;
             (*pdrv.get()).driver.acpi_match_table = acpi_table;
+            (*pdrv.get()).driver.pm = pm_ops;
         }
 
         // SAFETY: `pdrv` is guaranteed to be a valid `DriverType`.
@@ -222,6 +228,9 @@ pub trait Driver {
     /// The table of ACPI device ids supported by the driver.
     const ACPI_ID_TABLE: Option<acpi::IdTable<Self::IdInfo>> = None;
 
+    /// Runtime PM callbacks
+    const PM_OPS: Option<&'static bindings::dev_pm_ops> = None;
+
     /// Platform driver probe.
     ///
     /// Called when a new platform device is added or discovered.
-- 
2.43.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.