Skip to content

Commit

Permalink
reset: Supply *_shared variant calls when using of_* API
Browse files Browse the repository at this point in the history
Consumers need to be able to specify whether they are requesting an
'exclusive' or 'shared' reset line no matter which API (of_*, devm_*,
etc) they are using.  This change allows users of the of_* API in
particular to specify that their request is for a 'shared' line.

Signed-off-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
  • Loading branch information
Lee Jones authored and Philipp Zabel committed Jun 29, 2016
1 parent a53e35d commit 40faee8
Showing 1 changed file with 53 additions and 0 deletions.
53 changes: 53 additions & 0 deletions include/linux/reset.h
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,31 @@ static inline struct reset_control *of_reset_control_get_exclusive(
return __of_reset_control_get(node, id, 0, 0);
}

/**
* of_reset_control_get_shared - Lookup and obtain an shared reference
* to a reset controller.
* @node: device to be reset by the controller
* @id: reset line name
*
* When a reset-control is shared, the behavior of reset_control_assert /
* deassert is changed, the reset-core will keep track of a deassert_count
* and only (re-)assert the reset after reset_control_assert has been called
* as many times as reset_control_deassert was called. Also see the remark
* about shared reset-controls in the reset_control_assert docs.
*
* Calling reset_control_assert without first calling reset_control_deassert
* is not allowed on a shared reset control. Calling reset_control_reset is
* also not allowed on a shared reset control.
* Returns a struct reset_control or IS_ERR() condition containing errno.
*
* Use of id names is optional.
*/
static inline struct reset_control *of_reset_control_get_shared(
struct device_node *node, const char *id)
{
return __of_reset_control_get(node, id, 0, 1);
}

/**
* of_reset_control_get_exclusive_by_index - Lookup and obtain an exclusive
* reference to a reset controller
Expand All @@ -174,6 +199,34 @@ static inline struct reset_control *of_reset_control_get_exclusive_by_index(
return __of_reset_control_get(node, NULL, index, 0);
}

/**
* of_reset_control_get_shared_by_index - Lookup and obtain an shared
* reference to a reset controller
* by index.
* @node: device to be reset by the controller
* @index: index of the reset controller
*
* When a reset-control is shared, the behavior of reset_control_assert /
* deassert is changed, the reset-core will keep track of a deassert_count
* and only (re-)assert the reset after reset_control_assert has been called
* as many times as reset_control_deassert was called. Also see the remark
* about shared reset-controls in the reset_control_assert docs.
*
* Calling reset_control_assert without first calling reset_control_deassert
* is not allowed on a shared reset control. Calling reset_control_reset is
* also not allowed on a shared reset control.
* Returns a struct reset_control or IS_ERR() condition containing errno.
*
* 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.
*/
static inline struct reset_control *of_reset_control_get_shared_by_index(
struct device_node *node, int index)
{
return __of_reset_control_get(node, NULL, index, 1);
}

/**
* devm_reset_control_get_exclusive - resource managed
* reset_control_get_exclusive()
Expand Down

0 comments on commit 40faee8

Please sign in to comment.