mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 02:15:45 +01:00 
			
		
		
		
	dm: core: add ofnode and dev function to iterate on node property
Add functions to iterate on all property with livetree
- dev_read_first_prop
- dev_read_next_prop
- dev_read_prop_by_prop
and
- ofnode_get_first_property
- ofnode_get_next_property
- ofnode_get_property_by_prop
And helper: dev_for_each_property
For example:
struct ofprop property;
dev_for_each_property(property, config) {
	value = dev_read_prop_by_prop(&property, &propname, &len);
or:
for (res = ofnode_get_first_property(node, &property);
     !res;
     res = ofnode_get_next_property(&property))
{
     value = ofnode_get_property_by_prop(&property, &propname, &len);
....
}
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
			
			
This commit is contained in:
		
				
					committed by
					
						 Tom Rini
						Tom Rini
					
				
			
			
				
	
			
			
			
						parent
						
							719cab6d2e
						
					
				
				
					commit
					ce891fcada
				
			| @@ -58,6 +58,31 @@ struct ofnode_phandle_args { | ||||
| 	uint32_t args[OF_MAX_PHANDLE_ARGS]; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * ofprop - reference to a property of a device tree node | ||||
|  * | ||||
|  * This struct hold the reference on one property of one node, | ||||
|  * using struct ofnode and an offset within the flat device tree or either | ||||
|  * a pointer to a struct property in the live device tree. | ||||
|  * | ||||
|  * Thus we can reference arguments in both the live tree and the flat tree. | ||||
|  * | ||||
|  * The property reference can also hold a null reference. This corresponds to | ||||
|  * a struct property NULL pointer or an offset of -1. | ||||
|  * | ||||
|  * @node: Pointer to device node | ||||
|  * @offset: Pointer into flat device tree, used for flat tree. | ||||
|  * @prop: Pointer to property, used for live treee. | ||||
|  */ | ||||
|  | ||||
| struct ofprop { | ||||
| 	ofnode node; | ||||
| 	union { | ||||
| 		int offset; | ||||
| 		const struct property *prop; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * _ofnode_to_np() - convert an ofnode to a live DT node pointer | ||||
|  * | ||||
| @@ -595,7 +620,7 @@ int ofnode_decode_display_timing(ofnode node, int index, | ||||
| 				 struct display_timing *config); | ||||
|  | ||||
| /** | ||||
|  * ofnode_get_property()- - get a pointer to the value of a node property | ||||
|  * ofnode_get_property() - get a pointer to the value of a node property | ||||
|  * | ||||
|  * @node: node to read | ||||
|  * @propname: property to read | ||||
| @@ -604,6 +629,42 @@ int ofnode_decode_display_timing(ofnode node, int index, | ||||
|  */ | ||||
| const void *ofnode_get_property(ofnode node, const char *propname, int *lenp); | ||||
|  | ||||
| /** | ||||
|  * ofnode_get_first_property()- get the reference of the first property | ||||
|  * | ||||
|  * Get reference to the first property of the node, it is used to iterate | ||||
|  * and read all the property with ofnode_get_property_by_prop(). | ||||
|  * | ||||
|  * @node: node to read | ||||
|  * @prop: place to put argument reference | ||||
|  * @return 0 if OK, -ve on error. -FDT_ERR_NOTFOUND if not found | ||||
|  */ | ||||
| int ofnode_get_first_property(ofnode node, struct ofprop *prop); | ||||
|  | ||||
| /** | ||||
|  * ofnode_get_next_property() - get the reference of the next property | ||||
|  * | ||||
|  * Get reference to the next property of the node, it is used to iterate | ||||
|  * and read all the property with ofnode_get_property_by_prop(). | ||||
|  * | ||||
|  * @prop: reference of current argument and place to put reference of next one | ||||
|  * @return 0 if OK, -ve on error. -FDT_ERR_NOTFOUND if not found | ||||
|  */ | ||||
| int ofnode_get_next_property(struct ofprop *prop); | ||||
|  | ||||
| /** | ||||
|  * ofnode_get_property_by_prop() - get a pointer to the value of a property | ||||
|  * | ||||
|  * Get value for the property identified by the provided reference. | ||||
|  * | ||||
|  * @prop: reference on property | ||||
|  * @propname: If non-NULL, place to property name on success, | ||||
|  * @lenp: If non-NULL, place to put length on success | ||||
|  * @return 0 if OK, -ve on error. -FDT_ERR_NOTFOUND if not found | ||||
|  */ | ||||
| const void *ofnode_get_property_by_prop(const struct ofprop *prop, | ||||
| 					const char **propname, int *lenp); | ||||
|  | ||||
| /** | ||||
|  * ofnode_is_available() - check if a node is marked available | ||||
|  * | ||||
|   | ||||
		Reference in New Issue
	
	Block a user