Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c0a13aa6 authored by Vince Hsu's avatar Vince Hsu Committed by Philipp Zabel
Browse files

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: default avatarVince 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: default avatarJon Hunter <jonathanh@nvidia.com>
Signed-off-by: default avatarPhilipp Zabel <p.zabel@pengutronix.de>
parent 8005c49d
Loading
Loading
Loading
Loading
+29 −11
Original line number Diff line number Diff line
@@ -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);

/**
+9 −0
Original line number Diff line number Diff line
@@ -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