Commit c79cbde9 authored by Remo Senekowitsch's avatar Remo Senekowitsch Committed by Danilo Krummrich
Browse files

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: default avatarRemo 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: default avatarDanilo Krummrich <dakr@kernel.org>
parent c3e05bd1
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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>;
				};
			};
		};

+2 −0
Original line number Diff line number Diff line
@@ -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",
+12 −1
Original line number Diff line number Diff line
@@ -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(())
    }
}