]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
samples: rust: platform: Add property child and reference args examples
authorRemo Senekowitsch <remo@buenzli.dev>
Mon, 16 Jun 2025 15:45:11 +0000 (17:45 +0200)
committerDanilo Krummrich <dakr@kernel.org>
Wed, 25 Jun 2025 15:48:41 +0000 (17:48 +0200)
Add some example usage of the device property methods for reading
DT/ACPI/swnode child nodes and reference args.

Signed-off-by: Remo Senekowitsch <remo@buenzli.dev>
Link: https://lore.kernel.org/r/20250616154511.1862909-4-remo@buenzli.dev
[ Convert 'child@{0,1}' to 'child-{0,1}'; skip child nodes without
  'compatible' property in of_unittest_platform_populate() as proposed
  by Rob Herring. - Danilo]
Signed-off-by: Danilo Krummrich <dakr@kernel.org>
drivers/of/unittest-data/tests-platform.dtsi
drivers/of/unittest.c
samples/rust/rust_driver_platform.rs

index 50a51f38afb606dfc776d4f4470efadd7dfaf275..59aa2a9731a7ef5c082b605629c8aa773d17886c 100644 (file)
 
                                test,u32-prop = <0xdeadbeef>;
                                test,i16-array = /bits/ 16 <1 2 (-3) (-4)>;
+
+                               ref_child_0: child-0 {
+                                       test,ref-arg = <&ref_child_1 0x20 0x32>;
+                               };
+                               ref_child_1: child-1 {
+                                       test,ref-arg = <&ref_child_0 0x10 0x64>;
+                               };
                        };
                };
 
index eeb370e0f50777c8faec2f5c64ab8b4fb25668fb..e3503ec20f6cc7e271d57ef0b9f7f6c5d40922a1 100644 (file)
@@ -1856,6 +1856,8 @@ static void __init of_unittest_platform_populate(void)
        of_platform_populate(np, match, NULL, &test_bus->dev);
        for_each_child_of_node(np, child) {
                for_each_child_of_node(child, grandchild) {
+                       if (!of_property_present(grandchild, "compatible"))
+                               continue;
                        pdev = of_find_device_by_node(grandchild);
                        unittest(pdev,
                                 "Could not create device for node '%pOFn'\n",
index c0abf78d0683b53b65540700568a06cc8d67a05e..4dcedb22a4bbc64dc2d9bc87daccc4c85663f792 100644 (file)
@@ -4,7 +4,11 @@
 
 use kernel::{
     c_str,
-    device::{self, Core},
+    device::{
+        self,
+        property::{FwNodeReferenceArgs, NArgs},
+        Core,
+    },
     of, platform,
     prelude::*,
     str::CString,
@@ -91,6 +95,13 @@ impl SampleDriver {
         let prop: KVec<i16> = fwnode.property_read_array_vec(name, 4)?.required_by(dev)?;
         dev_info!(dev, "'{name}'='{prop:?}' (KVec)\n");
 
+        for child in fwnode.children() {
+            let name = c_str!("test,ref-arg");
+            let nargs = NArgs::N(2);
+            let prop: FwNodeReferenceArgs = child.property_get_reference_args(name, nargs, 0)?;
+            dev_info!(dev, "'{name}'='{prop:?}'\n");
+        }
+
         Ok(())
     }
 }