public inbox for rust-for-linux@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] rust: kernel: device: Add of_platform_populate/depopulate
@ 2025-04-28 14:22 Ayush Singh
  2025-04-28 16:57 ` Greg Kroah-Hartman
  2025-04-28 18:39 ` Danilo Krummrich
  0 siblings, 2 replies; 3+ messages in thread
From: Ayush Singh @ 2025-04-28 14:22 UTC (permalink / raw)
  To: Jason Kridner, Deepak Khatri, Robert Nelson, Dhruva Gole,
	Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
	Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
	Trevor Gross, Danilo Krummrich, Greg Kroah-Hartman,
	Rafael J. Wysocki
  Cc: rust-for-linux, linux-kernel, Ayush Singh

Add abstractions for managed of_platform_populate and
of_platform_depopulate.

Signed-off-by: Ayush Singh <ayush@beagleboard.org>
---
Allow calling platform_populate/depopulate from Rust code.

To see how the bindings look in usage, see my working tree [0] for a
connector driver  I am working on.

Open Questions
***************

1. Function names

The rust implementations are based on devm_* versions of these
functions, i.e of_platform_depopulate() is called when the device is
unbound. Since in case of Rust, these are methods on the Device struct,
I am not sure if the `devm_` prefix is required.

2. Maybe should be functions instead of methods?

Not sure what the policy is regarding this.

[0]: https://github.com/Ayush1325/linux/commits/b4/beagle-cape/
---
 rust/bindings/bindings_helper.h |  1 +
 rust/kernel/device.rs           | 10 ++++++++++
 2 files changed, 11 insertions(+)

diff --git a/rust/bindings/bindings_helper.h b/rust/bindings/bindings_helper.h
index 8a2add69e5d66d1c2ebed9d2c950380e61c48842..51ec0754960377e5fc6bc0703487bf2086eff0e6 100644
--- a/rust/bindings/bindings_helper.h
+++ b/rust/bindings/bindings_helper.h
@@ -25,6 +25,7 @@
 #include <linux/mdio.h>
 #include <linux/miscdevice.h>
 #include <linux/of_device.h>
+#include <linux/of_platform.h>
 #include <linux/pci.h>
 #include <linux/phy.h>
 #include <linux/pid_namespace.h>
diff --git a/rust/kernel/device.rs b/rust/kernel/device.rs
index 40c1f549b0bae9fd9aa3f41539ccb69896c2560d..7186fe9658ff2a143a43bd6b3500c9a6d6ef9630 100644
--- a/rust/kernel/device.rs
+++ b/rust/kernel/device.rs
@@ -207,6 +207,16 @@ pub fn property_present(&self, name: &CStr) -> bool {
         // SAFETY: By the invariant of `CStr`, `name` is null-terminated.
         unsafe { bindings::device_property_present(self.as_raw().cast_const(), name.as_char_ptr()) }
     }
+
+    /// Populate platform_devices from device tree data
+    pub fn of_platform_populate(&self) -> crate::error::Result<()> {
+        crate::error::to_result(unsafe { bindings::devm_of_platform_populate(self.as_raw()) })
+    }
+
+    /// Remove devices populated from device tree
+    pub fn of_platform_depopulate(&self) {
+        unsafe { bindings::devm_of_platform_depopulate(self.as_raw()) }
+    }
 }
 
 // SAFETY: `Device` is a transparent wrapper of a type that doesn't depend on `Device`'s generic

---
base-commit: 33035b665157558254b3c21c3f049fd728e72368
change-id: 20250428-rust-of-populate-b2f961783441

Best regards,
-- 
Ayush Singh <ayush@beagleboard.org>


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-04-28 18:39 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-28 14:22 [PATCH] rust: kernel: device: Add of_platform_populate/depopulate Ayush Singh
2025-04-28 16:57 ` Greg Kroah-Hartman
2025-04-28 18:39 ` Danilo Krummrich

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox