Commit ee222c5d authored by Thierry Reding's avatar Thierry Reding

Merge branch 'reset/acquire' of git://git.pengutronix.de/git/pza/linux into drm/tegra/for-next

parents 9e98c678 22815f18
This diff is collapsed.
...@@ -107,7 +107,8 @@ static int dwc3_of_simple_probe(struct platform_device *pdev) ...@@ -107,7 +107,8 @@ static int dwc3_of_simple_probe(struct platform_device *pdev)
simple->pulse_resets = true; 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)) { if (IS_ERR(simple->resets)) {
ret = PTR_ERR(simple->resets); ret = PTR_ERR(simple->resets);
dev_err(dev, "failed to get device resets, err=%d\n", ret); dev_err(dev, "failed to get device resets, err=%d\n", ret);
......
...@@ -14,23 +14,26 @@ int reset_control_reset(struct reset_control *rstc); ...@@ -14,23 +14,26 @@ int reset_control_reset(struct reset_control *rstc);
int reset_control_assert(struct reset_control *rstc); int reset_control_assert(struct reset_control *rstc);
int reset_control_deassert(struct reset_control *rstc); int reset_control_deassert(struct reset_control *rstc);
int reset_control_status(struct reset_control *rstc); int reset_control_status(struct reset_control *rstc);
int reset_control_acquire(struct reset_control *rstc);
void reset_control_release(struct reset_control *rstc);
struct reset_control *__of_reset_control_get(struct device_node *node, struct reset_control *__of_reset_control_get(struct device_node *node,
const char *id, int index, bool shared, const char *id, int index, bool shared,
bool optional); bool optional, bool acquired);
struct reset_control *__reset_control_get(struct device *dev, const char *id, struct reset_control *__reset_control_get(struct device *dev, const char *id,
int index, bool shared, int index, bool shared,
bool optional); bool optional, bool acquired);
void reset_control_put(struct reset_control *rstc); void reset_control_put(struct reset_control *rstc);
int __device_reset(struct device *dev, bool optional); int __device_reset(struct device *dev, bool optional);
struct reset_control *__devm_reset_control_get(struct device *dev, struct reset_control *__devm_reset_control_get(struct device *dev,
const char *id, int index, bool shared, const char *id, int index, bool shared,
bool optional); bool optional, bool acquired);
struct reset_control *devm_reset_control_array_get(struct device *dev, struct reset_control *devm_reset_control_array_get(struct device *dev,
bool shared, bool optional); bool shared, bool optional);
struct reset_control *of_reset_control_array_get(struct device_node *np, 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); int reset_control_get_count(struct device *dev);
...@@ -56,6 +59,15 @@ static inline int reset_control_status(struct reset_control *rstc) ...@@ -56,6 +59,15 @@ static inline int reset_control_status(struct reset_control *rstc)
return 0; return 0;
} }
static inline int reset_control_acquire(struct reset_control *rstc)
{
return 0;
}
static inline void reset_control_release(struct reset_control *rstc)
{
}
static inline void reset_control_put(struct reset_control *rstc) static inline void reset_control_put(struct reset_control *rstc)
{ {
} }
...@@ -68,21 +80,23 @@ static inline int __device_reset(struct device *dev, bool optional) ...@@ -68,21 +80,23 @@ static inline int __device_reset(struct device *dev, bool optional)
static inline struct reset_control *__of_reset_control_get( static inline struct reset_control *__of_reset_control_get(
struct device_node *node, struct device_node *node,
const char *id, int index, bool shared, const char *id, int index, bool shared,
bool optional) bool optional, bool acquired)
{ {
return optional ? NULL : ERR_PTR(-ENOTSUPP); return optional ? NULL : ERR_PTR(-ENOTSUPP);
} }
static inline struct reset_control *__reset_control_get( static inline struct reset_control *__reset_control_get(
struct device *dev, const char *id, struct device *dev, const char *id,
int index, bool shared, bool optional) int index, bool shared, bool optional,
bool acquired)
{ {
return optional ? NULL : ERR_PTR(-ENOTSUPP); return optional ? NULL : ERR_PTR(-ENOTSUPP);
} }
static inline struct reset_control *__devm_reset_control_get( static inline struct reset_control *__devm_reset_control_get(
struct device *dev, const char *id, struct device *dev, const char *id,
int index, bool shared, bool optional) int index, bool shared, bool optional,
bool acquired)
{ {
return optional ? NULL : ERR_PTR(-ENOTSUPP); return optional ? NULL : ERR_PTR(-ENOTSUPP);
} }
...@@ -94,7 +108,8 @@ devm_reset_control_array_get(struct device *dev, bool shared, bool optional) ...@@ -94,7 +108,8 @@ devm_reset_control_array_get(struct device *dev, bool shared, bool optional)
} }
static inline struct reset_control * 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); return optional ? NULL : ERR_PTR(-ENOTSUPP);
} }
...@@ -134,7 +149,28 @@ static inline int device_reset_optional(struct device *dev) ...@@ -134,7 +149,28 @@ static inline int device_reset_optional(struct device *dev)
static inline struct reset_control * static inline struct reset_control *
__must_check reset_control_get_exclusive(struct device *dev, const char *id) __must_check reset_control_get_exclusive(struct device *dev, const char *id)
{ {
return __reset_control_get(dev, id, 0, false, false); return __reset_control_get(dev, id, 0, false, false, true);
}
/**
* reset_control_get_exclusive_released - Lookup and obtain a temoprarily
* exclusive reference to a reset
* controller.
* @dev: device to be reset by the controller
* @id: reset line name
*
* Returns a struct reset_control or IS_ERR() condition containing errno.
* reset-controls returned by this function must be acquired via
* reset_control_acquire() before they can be used and should be released
* via reset_control_release() afterwards.
*
* Use of id names is optional.
*/
static inline struct reset_control *
__must_check reset_control_get_exclusive_released(struct device *dev,
const char *id)
{
return __reset_control_get(dev, id, 0, false, false, false);
} }
/** /**
...@@ -162,19 +198,19 @@ __must_check reset_control_get_exclusive(struct device *dev, const char *id) ...@@ -162,19 +198,19 @@ __must_check reset_control_get_exclusive(struct device *dev, const char *id)
static inline struct reset_control *reset_control_get_shared( static inline struct reset_control *reset_control_get_shared(
struct device *dev, const char *id) struct device *dev, const char *id)
{ {
return __reset_control_get(dev, id, 0, true, false); return __reset_control_get(dev, id, 0, true, false, false);
} }
static inline struct reset_control *reset_control_get_optional_exclusive( static inline struct reset_control *reset_control_get_optional_exclusive(
struct device *dev, const char *id) struct device *dev, const char *id)
{ {
return __reset_control_get(dev, id, 0, false, true); return __reset_control_get(dev, id, 0, false, true, true);
} }
static inline struct reset_control *reset_control_get_optional_shared( static inline struct reset_control *reset_control_get_optional_shared(
struct device *dev, const char *id) struct device *dev, const char *id)
{ {
return __reset_control_get(dev, id, 0, true, true); return __reset_control_get(dev, id, 0, true, true, false);
} }
/** /**
...@@ -190,7 +226,7 @@ static inline struct reset_control *reset_control_get_optional_shared( ...@@ -190,7 +226,7 @@ static inline struct reset_control *reset_control_get_optional_shared(
static inline struct reset_control *of_reset_control_get_exclusive( static inline struct reset_control *of_reset_control_get_exclusive(
struct device_node *node, const char *id) struct device_node *node, const char *id)
{ {
return __of_reset_control_get(node, id, 0, false, false); return __of_reset_control_get(node, id, 0, false, false, true);
} }
/** /**
...@@ -215,7 +251,7 @@ static inline struct reset_control *of_reset_control_get_exclusive( ...@@ -215,7 +251,7 @@ static inline struct reset_control *of_reset_control_get_exclusive(
static inline struct reset_control *of_reset_control_get_shared( static inline struct reset_control *of_reset_control_get_shared(
struct device_node *node, const char *id) struct device_node *node, const char *id)
{ {
return __of_reset_control_get(node, id, 0, true, false); return __of_reset_control_get(node, id, 0, true, false, false);
} }
/** /**
...@@ -232,7 +268,7 @@ static inline struct reset_control *of_reset_control_get_shared( ...@@ -232,7 +268,7 @@ static inline struct reset_control *of_reset_control_get_shared(
static inline struct reset_control *of_reset_control_get_exclusive_by_index( static inline struct reset_control *of_reset_control_get_exclusive_by_index(
struct device_node *node, int index) struct device_node *node, int index)
{ {
return __of_reset_control_get(node, NULL, index, false, false); return __of_reset_control_get(node, NULL, index, false, false, true);
} }
/** /**
...@@ -260,7 +296,7 @@ static inline struct reset_control *of_reset_control_get_exclusive_by_index( ...@@ -260,7 +296,7 @@ static inline struct reset_control *of_reset_control_get_exclusive_by_index(
static inline struct reset_control *of_reset_control_get_shared_by_index( static inline struct reset_control *of_reset_control_get_shared_by_index(
struct device_node *node, int index) struct device_node *node, int index)
{ {
return __of_reset_control_get(node, NULL, index, true, false); return __of_reset_control_get(node, NULL, index, true, false, false);
} }
/** /**
...@@ -279,7 +315,26 @@ static inline struct reset_control * ...@@ -279,7 +315,26 @@ static inline struct reset_control *
__must_check devm_reset_control_get_exclusive(struct device *dev, __must_check devm_reset_control_get_exclusive(struct device *dev,
const char *id) const char *id)
{ {
return __devm_reset_control_get(dev, id, 0, false, false); return __devm_reset_control_get(dev, id, 0, false, false, true);
}
/**
* devm_reset_control_get_exclusive_released - resource managed
* reset_control_get_exclusive_released()
* @dev: device to be reset by the controller
* @id: reset line name
*
* Managed reset_control_get_exclusive_released(). For reset controllers
* returned from this function, reset_control_put() is called automatically on
* driver detach.
*
* See reset_control_get_exclusive_released() for more information.
*/
static inline struct reset_control *
__must_check devm_reset_control_get_exclusive_released(struct device *dev,
const char *id)
{
return __devm_reset_control_get(dev, id, 0, false, false, false);
} }
/** /**
...@@ -294,19 +349,19 @@ __must_check devm_reset_control_get_exclusive(struct device *dev, ...@@ -294,19 +349,19 @@ __must_check devm_reset_control_get_exclusive(struct device *dev,
static inline struct reset_control *devm_reset_control_get_shared( static inline struct reset_control *devm_reset_control_get_shared(
struct device *dev, const char *id) struct device *dev, const char *id)
{ {
return __devm_reset_control_get(dev, id, 0, true, false); return __devm_reset_control_get(dev, id, 0, true, false, false);
} }
static inline struct reset_control *devm_reset_control_get_optional_exclusive( static inline struct reset_control *devm_reset_control_get_optional_exclusive(
struct device *dev, const char *id) struct device *dev, const char *id)
{ {
return __devm_reset_control_get(dev, id, 0, false, true); return __devm_reset_control_get(dev, id, 0, false, true, true);
} }
static inline struct reset_control *devm_reset_control_get_optional_shared( static inline struct reset_control *devm_reset_control_get_optional_shared(
struct device *dev, const char *id) struct device *dev, const char *id)
{ {
return __devm_reset_control_get(dev, id, 0, true, true); return __devm_reset_control_get(dev, id, 0, true, true, false);
} }
/** /**
...@@ -324,7 +379,7 @@ static inline struct reset_control *devm_reset_control_get_optional_shared( ...@@ -324,7 +379,7 @@ static inline struct reset_control *devm_reset_control_get_optional_shared(
static inline struct reset_control * static inline struct reset_control *
devm_reset_control_get_exclusive_by_index(struct device *dev, int index) devm_reset_control_get_exclusive_by_index(struct device *dev, int index)
{ {
return __devm_reset_control_get(dev, NULL, index, false, false); return __devm_reset_control_get(dev, NULL, index, false, false, true);
} }
/** /**
...@@ -340,7 +395,7 @@ devm_reset_control_get_exclusive_by_index(struct device *dev, int index) ...@@ -340,7 +395,7 @@ devm_reset_control_get_exclusive_by_index(struct device *dev, int index)
static inline struct reset_control * static inline struct reset_control *
devm_reset_control_get_shared_by_index(struct device *dev, int index) devm_reset_control_get_shared_by_index(struct device *dev, int index)
{ {
return __devm_reset_control_get(dev, NULL, index, true, false); return __devm_reset_control_get(dev, NULL, index, true, false, false);
} }
/* /*
...@@ -412,24 +467,30 @@ devm_reset_control_array_get_optional_shared(struct device *dev) ...@@ -412,24 +467,30 @@ devm_reset_control_array_get_optional_shared(struct device *dev)
static inline struct reset_control * static inline struct reset_control *
of_reset_control_array_get_exclusive(struct device_node *node) 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_exclusive_released(struct device_node *node)
{
return of_reset_control_array_get(node, false, false, false);
} }
static inline struct reset_control * static inline struct reset_control *
of_reset_control_array_get_shared(struct device_node *node) 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 * static inline struct reset_control *
of_reset_control_array_get_optional_exclusive(struct device_node *node) 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 * static inline struct reset_control *
of_reset_control_array_get_optional_shared(struct device_node *node) 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 #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment