* @np: device node for the device that requests the reset controls array
  * @shared: whether reset controls are shared or not
  * @optional: whether it is optional to get the reset controls
+ * @acquired: only one reset control may be acquired for a given controller
+ *            and ID
  *
  * Returns pointer to allocated reset_control_array on success or
  * error on failure
  */
 struct reset_control *
-of_reset_control_array_get(struct device_node *np, bool shared, bool optional)
+of_reset_control_array_get(struct device_node *np, bool shared, bool optional,
+                          bool acquired)
 {
        struct reset_control_array *resets;
        struct reset_control *rstc;
 
        for (i = 0; i < num; i++) {
                rstc = __of_reset_control_get(np, NULL, i, shared, optional,
-                                             true);
+                                             acquired);
                if (IS_ERR(rstc))
                        goto err_rst;
                resets->rstc[i] = rstc;
        if (!devres)
                return ERR_PTR(-ENOMEM);
 
-       rstc = of_reset_control_array_get(dev->of_node, shared, optional);
+       rstc = of_reset_control_array_get(dev->of_node, shared, optional, true);
        if (IS_ERR(rstc)) {
                devres_free(devres);
                return rstc;
 
                simple->pulse_resets = true;
        }
 
-       simple->resets = of_reset_control_array_get(np, shared_resets, true);
+       simple->resets = of_reset_control_array_get(np, shared_resets, true,
+                                                   true);
        if (IS_ERR(simple->resets)) {
                ret = PTR_ERR(simple->resets);
                dev_err(dev, "failed to get device resets, err=%d\n", ret);
 
 struct reset_control *devm_reset_control_array_get(struct device *dev,
                                                   bool shared, bool optional);
 struct reset_control *of_reset_control_array_get(struct device_node *np,
-                                                bool shared, bool optional);
+                                                bool shared, bool optional,
+                                                bool acquired);
 
 int reset_control_get_count(struct device *dev);
 
 }
 
 static inline struct reset_control *
-of_reset_control_array_get(struct device_node *np, bool shared, bool optional)
+of_reset_control_array_get(struct device_node *np, bool shared, bool optional,
+                          bool acquired)
 {
        return optional ? NULL : ERR_PTR(-ENOTSUPP);
 }
 static inline struct reset_control *
 of_reset_control_array_get_exclusive(struct device_node *node)
 {
-       return of_reset_control_array_get(node, false, false);
+       return of_reset_control_array_get(node, false, false, true);
 }
 
 static inline struct reset_control *
 of_reset_control_array_get_shared(struct device_node *node)
 {
-       return of_reset_control_array_get(node, true, false);
+       return of_reset_control_array_get(node, true, false, true);
 }
 
 static inline struct reset_control *
 of_reset_control_array_get_optional_exclusive(struct device_node *node)
 {
-       return of_reset_control_array_get(node, false, true);
+       return of_reset_control_array_get(node, false, true, true);
 }
 
 static inline struct reset_control *
 of_reset_control_array_get_optional_shared(struct device_node *node)
 {
-       return of_reset_control_array_get(node, true, true);
+       return of_reset_control_array_get(node, true, true, true);
 }
 #endif