summaryrefslogtreecommitdiffstats
path: root/target/linux/sunxi/patches-4.4/140-reset-add-of_reset_control_get_by_index.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/sunxi/patches-4.4/140-reset-add-of_reset_control_get_by_index.patch')
-rw-r--r--target/linux/sunxi/patches-4.4/140-reset-add-of_reset_control_get_by_index.patch113
1 files changed, 113 insertions, 0 deletions
diff --git a/target/linux/sunxi/patches-4.4/140-reset-add-of_reset_control_get_by_index.patch b/target/linux/sunxi/patches-4.4/140-reset-add-of_reset_control_get_by_index.patch
new file mode 100644
index 0000000000..1a48d7c23f
--- /dev/null
+++ b/target/linux/sunxi/patches-4.4/140-reset-add-of_reset_control_get_by_index.patch
@@ -0,0 +1,113 @@
+From b4faa163a7ebae9faab5d0aefe70143e3379178b Mon Sep 17 00:00:00 2001
+From: Vince Hsu <vinceh@nvidia.com>
+Date: Mon, 13 Jul 2015 13:39:39 +0100
+Subject: [PATCH] reset: add of_reset_control_get_by_index()
+
+Add of_reset_control_get_by_index() to allow the drivers to get reset
+device without knowing its name.
+
+Signed-off-by: Vince Hsu <vinceh@nvidia.com>
+[jonathanh@nvidia.com: Updated stub function to return -ENOTSUPP instead
+ of -ENOSYS which should only be used for system calls.]
+Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
+Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
+---
+ drivers/reset/core.c | 40 +++++++++++++++++++++++++++++-----------
+ include/linux/reset.h | 9 +++++++++
+ 2 files changed, 38 insertions(+), 11 deletions(-)
+
+diff --git a/drivers/reset/core.c b/drivers/reset/core.c
+index 7955e00..81ae17d 100644
+--- a/drivers/reset/core.c
++++ b/drivers/reset/core.c
+@@ -141,27 +141,24 @@ int reset_control_status(struct reset_control *rstc)
+ EXPORT_SYMBOL_GPL(reset_control_status);
+
+ /**
+- * of_reset_control_get - Lookup and obtain a reference to a reset controller.
++ * of_reset_control_get_by_index - Lookup and obtain a reference to a reset
++ * controller by index.
+ * @node: device to be reset by the controller
+- * @id: reset line name
+- *
+- * Returns a struct reset_control or IS_ERR() condition containing errno.
++ * @index: index of the reset controller
+ *
+- * Use of id names is optional.
++ * This is to be used to perform a list of resets for a device or power domain
++ * in whatever order. Returns a struct reset_control or IS_ERR() condition
++ * containing errno.
+ */
+-struct reset_control *of_reset_control_get(struct device_node *node,
+- const char *id)
++struct reset_control *of_reset_control_get_by_index(struct device_node *node,
++ int index)
+ {
+ struct reset_control *rstc = ERR_PTR(-EPROBE_DEFER);
+ struct reset_controller_dev *r, *rcdev;
+ struct of_phandle_args args;
+- int index = 0;
+ int rstc_id;
+ int ret;
+
+- if (id)
+- index = of_property_match_string(node,
+- "reset-names", id);
+ ret = of_parse_phandle_with_args(node, "resets", "#reset-cells",
+ index, &args);
+ if (ret)
+@@ -202,6 +199,27 @@ struct reset_control *of_reset_control_get(struct device_node *node,
+
+ return rstc;
+ }
++EXPORT_SYMBOL_GPL(of_reset_control_get_by_index);
++
++/**
++ * of_reset_control_get - Lookup and obtain a reference to a reset controller.
++ * @node: device to be reset by the controller
++ * @id: reset line name
++ *
++ * Returns a struct reset_control or IS_ERR() condition containing errno.
++ *
++ * Use of id names is optional.
++ */
++struct reset_control *of_reset_control_get(struct device_node *node,
++ const char *id)
++{
++ int index = 0;
++
++ if (id)
++ index = of_property_match_string(node,
++ "reset-names", id);
++ return of_reset_control_get_by_index(node, index);
++}
+ EXPORT_SYMBOL_GPL(of_reset_control_get);
+
+ /**
+diff --git a/include/linux/reset.h b/include/linux/reset.h
+index 7f65f9c..6db74ad 100644
+--- a/include/linux/reset.h
++++ b/include/linux/reset.h
+@@ -38,6 +38,9 @@ static inline struct reset_control *devm_reset_control_get_optional(
+ struct reset_control *of_reset_control_get(struct device_node *node,
+ const char *id);
+
++struct reset_control *of_reset_control_get_by_index(
++ struct device_node *node, int index);
++
+ #else
+
+ static inline int reset_control_reset(struct reset_control *rstc)
+@@ -106,6 +109,12 @@ static inline struct reset_control *of_reset_control_get(
+ return ERR_PTR(-ENOSYS);
+ }
+
++static inline struct reset_control *of_reset_control_get_by_index(
++ struct device_node *node, int index)
++{
++ return ERR_PTR(-ENOTSUPP);
++}
++
+ #endif /* CONFIG_RESET_CONTROLLER */
+
+ #endif