diff mbox

[U-Boot,v6,02/11] reset: add reset_count()

Message ID 1496655731-2251-3-git-send-email-patrice.chotard@st.com
State Superseded
Delegated to: Marek Vasut
Headers show

Commit Message

Patrice CHOTARD June 5, 2017, 9:42 a.m. UTC
From: Patrice Chotard <patrice.chotard@st.com>

Add reset_count() method to be able to get the number
of resets contained into a resets property. This will allow
to allocate the right amount of memory in order to keep resets
reference. These resets reference can be used later on error path
or in .remove callback to release these resets.

Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
v6:	_ add Reviewed-by Simon Glass
v5: 	_ replace fdtdec_parse_phandle_with_args() by dev_read_phandle_with_args()
v4:     _ add reset_count() method

 drivers/reset/reset-uclass.c | 13 +++++++++++++
 include/reset.h              | 11 +++++++++++
 2 files changed, 24 insertions(+)
diff mbox

Patch

diff --git a/drivers/reset/reset-uclass.c b/drivers/reset/reset-uclass.c
index 4fd82b9..4b17d4c 100644
--- a/drivers/reset/reset-uclass.c
+++ b/drivers/reset/reset-uclass.c
@@ -97,6 +97,19 @@  int reset_get_by_name(struct udevice *dev, const char *name,
 	return reset_get_by_index(dev, index, reset_ctl);
 }
 
+int reset_count(struct udevice *dev)
+{
+	int count;
+	struct ofnode_phandle_args args;
+
+	for (count = 0; ; count++) {
+		if (dev_read_phandle_with_args(dev,
+					       "resets", "#reset-cells", 0,
+					       count, &args))
+			return count;
+	}
+}
+
 int reset_request(struct reset_ctl *reset_ctl)
 {
 	struct reset_ops *ops = reset_dev_ops(reset_ctl->dev);
diff --git a/include/reset.h b/include/reset.h
index 4f2e35f..e8e68b6 100644
--- a/include/reset.h
+++ b/include/reset.h
@@ -100,6 +100,17 @@  int reset_get_by_name(struct udevice *dev, const char *name,
 		      struct reset_ctl *reset_ctl);
 
 /**
+ * reset_count - Get reset count contained in the "resets" property.
+ *
+ * This returns the count of reset found into the "resets" property. This
+ * allows to allocate the right amount of memory to keep reset reference.
+ *
+ * @dev:	The client device.
+ * @return number of resets found.
+ */
+int reset_count(struct udevice *dev);
+
+/**
  * reset_request - Request a reset signal.
  *
  * @reset_ctl:	A reset control struct.