diff mbox

[U-Boot,v3,01/35] dm: core: Add ofnode_read_string_count()

Message ID 20170612122202.3379-2-sjg@chromium.org
State Accepted
Delegated to: Simon Glass
Headers show

Commit Message

Simon Glass June 12, 2017, 12:21 p.m. UTC
This provides a way to find the number of strings in a string list. Add it
and also fix up the comment for ofnode_read_string_index().

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v3:
- Add new patch to add ofnode_read_string_count()

Changes in v2: None

 drivers/core/ofnode.c  | 10 ++++++++++
 include/dm/of_access.h | 18 ++++++++++++++++++
 include/dm/ofnode.h    | 12 +++++++++++-
 3 files changed, 39 insertions(+), 1 deletion(-)

Comments

Simon Glass July 6, 2017, 5:36 p.m. UTC | #1
This provides a way to find the number of strings in a string list. Add it
and also fix up the comment for ofnode_read_string_index().

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v3:
- Add new patch to add ofnode_read_string_count()

Changes in v2: None

 drivers/core/ofnode.c  | 10 ++++++++++
 include/dm/of_access.h | 18 ++++++++++++++++++
 include/dm/ofnode.h    | 12 +++++++++++-
 3 files changed, 39 insertions(+), 1 deletion(-)

Applied to u-boot-dm, thanks!
diff mbox

Patch

diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c
index ac312d6546..79c80df7f4 100644
--- a/drivers/core/ofnode.c
+++ b/drivers/core/ofnode.c
@@ -260,6 +260,16 @@  int ofnode_read_string_index(ofnode node, const char *property, int index,
 	}
 }
 
+int ofnode_read_string_count(ofnode node, const char *property)
+{
+	if (ofnode_is_np(node)) {
+		return of_property_count_strings(ofnode_to_np(node), property);
+	} else {
+		return fdt_stringlist_count(gd->fdt_blob,
+					    ofnode_to_offset(node), property);
+	}
+}
+
 static void ofnode_from_fdtdec_phandle_args(struct fdtdec_phandle_args *in,
 					    struct ofnode_phandle_args *out)
 {
diff --git a/include/dm/of_access.h b/include/dm/of_access.h
index 142f0f43c9..d2827001e2 100644
--- a/include/dm/of_access.h
+++ b/include/dm/of_access.h
@@ -260,6 +260,24 @@  static inline int of_property_read_string_index(const struct device_node *np,
 	return rc < 0 ? rc : 0;
 }
 
+/**
+ * of_property_count_strings() - Find and return the number of strings from a
+ * multiple strings property.
+ * @np:		device node from which the property value is to be read.
+ * @propname:	name of the property to be searched.
+ *
+ * Search for a property in a device tree node and retrieve the number of null
+ * terminated string contain in it. Returns the number of strings on
+ * success, -EINVAL if the property does not exist, -ENODATA if property
+ * does not have a value, and -EILSEQ if the string is not null-terminated
+ * within the length of the property data.
+ */
+static inline int of_property_count_strings(const struct device_node *np,
+					    const char *propname)
+{
+	return of_property_read_string_helper(np, propname, NULL, 0, 0);
+}
+
 /**
  * of_parse_phandle - Resolve a phandle property to a device_node pointer
  * @np: Pointer to device node holding phandle property
diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h
index 149622a0b2..d261a61e91 100644
--- a/include/dm/ofnode.h
+++ b/include/dm/ofnode.h
@@ -359,7 +359,7 @@  int ofnode_stringlist_search(ofnode node, const char *propname,
 			     const char *string);
 
 /**
- * fdt_stringlist_get() - obtain the string at a given index in a string list
+ * ofnode_read_string_index() - obtain an indexed string from a string list
  *
  * Note that this will successfully extract strings from properties with
  * non-NUL-terminated values. For example on small-valued cell properties
@@ -379,6 +379,16 @@  int ofnode_stringlist_search(ofnode node, const char *propname,
 int ofnode_read_string_index(ofnode node, const char *propname, int index,
 			     const char **outp);
 
+/**
+ * ofnode_read_string_count() - find the number of strings in a string list
+ *
+ * @node: node to check
+ * @propname: name of the property containing the string list
+ * @return:
+ *   number of strings in the list, or -ve error value if not found
+ */
+int ofnode_read_string_count(ofnode node, const char *property);
+
 /**
  * ofnode_parse_phandle_with_args() - Find a node pointed by phandle in a list
  *