Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Remo Senekowitsch and committed by
Danilo Krummrich
c79cbde9 c3e05bd1

+21 -1
+7
drivers/of/unittest-data/tests-platform.dtsi
··· 40 40 41 41 test,u32-prop = <0xdeadbeef>; 42 42 test,i16-array = /bits/ 16 <1 2 (-3) (-4)>; 43 + 44 + ref_child_0: child-0 { 45 + test,ref-arg = <&ref_child_1 0x20 0x32>; 46 + }; 47 + ref_child_1: child-1 { 48 + test,ref-arg = <&ref_child_0 0x10 0x64>; 49 + }; 43 50 }; 44 51 }; 45 52
+2
drivers/of/unittest.c
··· 1856 1856 of_platform_populate(np, match, NULL, &test_bus->dev); 1857 1857 for_each_child_of_node(np, child) { 1858 1858 for_each_child_of_node(child, grandchild) { 1859 + if (!of_property_present(grandchild, "compatible")) 1860 + continue; 1859 1861 pdev = of_find_device_by_node(grandchild); 1860 1862 unittest(pdev, 1861 1863 "Could not create device for node '%pOFn'\n",
+12 -1
samples/rust/rust_driver_platform.rs
··· 4 4 5 5 use kernel::{ 6 6 c_str, 7 - device::{self, Core}, 7 + device::{ 8 + self, 9 + property::{FwNodeReferenceArgs, NArgs}, 10 + Core, 11 + }, 8 12 of, platform, 9 13 prelude::*, 10 14 str::CString, ··· 94 90 let name = c_str!("test,i16-array"); 95 91 let prop: KVec<i16> = fwnode.property_read_array_vec(name, 4)?.required_by(dev)?; 96 92 dev_info!(dev, "'{name}'='{prop:?}' (KVec)\n"); 93 + 94 + for child in fwnode.children() { 95 + let name = c_str!("test,ref-arg"); 96 + let nargs = NArgs::N(2); 97 + let prop: FwNodeReferenceArgs = child.property_get_reference_args(name, nargs, 0)?; 98 + dev_info!(dev, "'{name}'='{prop:?}'\n"); 99 + } 97 100 98 101 Ok(()) 99 102 }