aboutsummaryrefslogtreecommitdiff
path: root/drivers/reset/core.c
diff options
context:
space:
mode:
authorGravatar Maxime Ripard <maxime.ripard@free-electrons.com> 2016-01-14 16:24:44 +0100
committerGravatar Philipp Zabel <p.zabel@pengutronix.de> 2016-01-25 10:58:44 +0100
commite677774f502635c70cb3180fc51ec7ff8c4b27ea (patch)
tree621da84d99220fb2c78d7613b76b8b5bb222efb8 /drivers/reset/core.c
parentreset: Make reset_control_ops const (diff)
downloadlinux-e677774f502635c70cb3180fc51ec7ff8c4b27ea.tar.gz
linux-e677774f502635c70cb3180fc51ec7ff8c4b27ea.tar.bz2
linux-e677774f502635c70cb3180fc51ec7ff8c4b27ea.zip
reset: Move DT cell size check to the core
The core currently doesn't check that the DT cell size matches what the driver declares, which means that every xlate function needs to duplicate that check. Make sure that of_reset_control_get checks for this to avoid duplication and errors. Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Diffstat (limited to 'drivers/reset/core.c')
-rw-r--r--drivers/reset/core.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/reset/core.c b/drivers/reset/core.c
index 4a63b379361c..f15f150b79da 100644
--- a/drivers/reset/core.c
+++ b/drivers/reset/core.c
@@ -45,9 +45,6 @@ struct reset_control {
static int of_reset_simple_xlate(struct reset_controller_dev *rcdev,
const struct of_phandle_args *reset_spec)
{
- if (WARN_ON(reset_spec->args_count != rcdev->of_reset_n_cells))
- return -EINVAL;
-
if (reset_spec->args[0] >= rcdev->nr_resets)
return -EINVAL;
@@ -178,6 +175,11 @@ struct reset_control *of_reset_control_get_by_index(struct device_node *node,
return ERR_PTR(-EPROBE_DEFER);
}
+ if (WARN_ON(args.args_count != rcdev->of_reset_n_cells)) {
+ mutex_unlock(&reset_controller_list_mutex);
+ return ERR_PTR(-EINVAL);
+ }
+
rstc_id = rcdev->of_xlate(rcdev, &args);
if (rstc_id < 0) {
mutex_unlock(&reset_controller_list_mutex);