|
@@ -494,6 +494,42 @@ int dev_read_phandle(const struct udevice *dev);
|
|
|
const void *dev_read_prop(const struct udevice *dev, const char *propname,
|
|
|
int *lenp);
|
|
|
|
|
|
+/**
|
|
|
+ * dev_read_first_prop()- 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 dev_read_prop_by_prop().
|
|
|
+ *
|
|
|
+ * @dev: device to check
|
|
|
+ * @prop: place to put argument reference
|
|
|
+ * @return 0 if OK, -ve on error. -FDT_ERR_NOTFOUND if not found
|
|
|
+ */
|
|
|
+int dev_read_first_prop(const struct udevice *dev, 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 dev_read_prop_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 dev_read_next_prop(struct ofprop *prop);
|
|
|
+
|
|
|
+/**
|
|
|
+ * dev_read_prop_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 *dev_read_prop_by_prop(struct ofprop *prop,
|
|
|
+ const char **propname, int *lenp);
|
|
|
+
|
|
|
/**
|
|
|
* dev_read_alias_seq() - Get the alias sequence number of a node
|
|
|
*
|
|
@@ -860,6 +896,23 @@ static inline const void *dev_read_prop(const struct udevice *dev,
|
|
|
return ofnode_get_property(dev_ofnode(dev), propname, lenp);
|
|
|
}
|
|
|
|
|
|
+static inline int dev_read_first_prop(const struct udevice *dev, struct ofprop *prop)
|
|
|
+{
|
|
|
+ return ofnode_get_first_property(dev_ofnode(dev), prop);
|
|
|
+}
|
|
|
+
|
|
|
+static inline int dev_read_next_prop(struct ofprop *prop)
|
|
|
+{
|
|
|
+ return ofnode_get_next_property(prop);
|
|
|
+}
|
|
|
+
|
|
|
+static inline const void *dev_read_prop_by_prop(struct ofprop *prop,
|
|
|
+ const char **propname,
|
|
|
+ int *lenp)
|
|
|
+{
|
|
|
+ return ofnode_get_property_by_prop(prop, propname, lenp);
|
|
|
+}
|
|
|
+
|
|
|
static inline int dev_read_alias_seq(const struct udevice *dev, int *devnump)
|
|
|
{
|
|
|
return fdtdec_get_alias_seq(gd->fdt_blob, dev->uclass->uc_drv->name,
|
|
@@ -941,4 +994,18 @@ static inline int dev_read_alias_highest_id(const char *stem)
|
|
|
ofnode_valid(subnode); \
|
|
|
subnode = ofnode_next_subnode(subnode))
|
|
|
|
|
|
+/**
|
|
|
+ * dev_for_each_property() - Helper function to iterate through property
|
|
|
+ *
|
|
|
+ * This creates a for() loop which works through the property in a device's
|
|
|
+ * device-tree node.
|
|
|
+ *
|
|
|
+ * @prop: struct ofprop holding the current property
|
|
|
+ * @dev: device to use for interation (struct udevice *)
|
|
|
+ */
|
|
|
+#define dev_for_each_property(prop, dev) \
|
|
|
+ for (int ret_prop = dev_read_first_prop(dev, &prop); \
|
|
|
+ !ret_prop; \
|
|
|
+ ret_prop = dev_read_next_prop(&prop))
|
|
|
+
|
|
|
#endif
|