Messages in this thread Patch in this message | | | From | <> | Subject | [PATCH] reset: add reset_control_status helper function | Date | Wed, 8 Oct 2014 17:45:51 -0500 |
| |
From: Dinh Nguyen <dinguyen@opensource.altera.com>
There are cases where a system will want to read a reset status bit before doing any other toggling. Add a reset_control_status helper function to the reset controller API.
Signed-off-by: Dinh Nguyen <dinguyen@opensource.altera.com> --- drivers/reset/core.c | 13 +++++++++++++ include/linux/reset-controller.h | 1 + include/linux/reset.h | 7 +++++++ 3 files changed, 21 insertions(+)
diff --git a/drivers/reset/core.c b/drivers/reset/core.c index baeaf82..06387a4 100644 --- a/drivers/reset/core.c +++ b/drivers/reset/core.c @@ -126,6 +126,19 @@ int reset_control_deassert(struct reset_control *rstc) EXPORT_SYMBOL_GPL(reset_control_deassert); /** + * reset_control_status - returns a status of a reset bit + * @rstc: reset controller + */ +unsigned int reset_control_status(struct reset_control *rstc) +{ + if (rstc->rcdev->ops->status) + return rstc->rcdev->ops->status(rstc->rcdev, rstc->id); + + return -ENOSYS; +} +EXPORT_SYMBOL_GPL(reset_control_status); + +/** * 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 diff --git a/include/linux/reset-controller.h b/include/linux/reset-controller.h index 41a4695..8e659d5 100644 --- a/include/linux/reset-controller.h +++ b/include/linux/reset-controller.h @@ -17,6 +17,7 @@ struct reset_control_ops { int (*reset)(struct reset_controller_dev *rcdev, unsigned long id); int (*assert)(struct reset_controller_dev *rcdev, unsigned long id); int (*deassert)(struct reset_controller_dev *rcdev, unsigned long id); + unsigned int (*status)(struct reset_controller_dev *rcdev, unsigned long id); }; struct module; diff --git a/include/linux/reset.h b/include/linux/reset.h index 349f150..09233ee 100644 --- a/include/linux/reset.h +++ b/include/linux/reset.h @@ -10,6 +10,7 @@ struct reset_control; int reset_control_reset(struct reset_control *rstc); int reset_control_assert(struct reset_control *rstc); int reset_control_deassert(struct reset_control *rstc); +unsigned int reset_control_status(struct reset_control *rstc); struct reset_control *reset_control_get(struct device *dev, const char *id); void reset_control_put(struct reset_control *rstc); @@ -57,6 +58,12 @@ static inline int reset_control_deassert(struct reset_control *rstc) return 0; } +static inline unsigned int reset_control_status(struct reset_control *rstc) +{ + WARN_ON(1); + return 0; +} + static inline void reset_control_put(struct reset_control *rstc) { WARN_ON(1); -- 2.0.3
| |