samples: rust: platform: Add property child and reference args examples

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>
This commit is contained in:
Remo Senekowitsch 2025-06-16 17:45:11 +02:00 committed by Danilo Krummrich
parent c3e05bd15e
commit c79cbde9b7
3 changed files with 21 additions and 1 deletions

View File

@ -40,6 +40,13 @@ test-device@2 {
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>;
};
};
};

View 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",

View 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 @@ fn properties_parse(dev: &device::Device) -> Result {
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(())
}
}