From fe7933da09cfadd75af72256a1d11f41ea5e46f0 Mon Sep 17 00:00:00 2001 From: Jerome Brunet Date: Mon, 20 Mar 2017 15:02:19 +0100 Subject: [PATCH 52/79] clk: rollback set_rate_range changes on failure Signed-off-by: Jerome Brunet Signed-off-by: Neil Armstrong --- drivers/clk/clk.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index d91236e..253f1d3 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -1864,6 +1864,7 @@ int clk_set_rate_protect(struct clk *clk, unsigned long rate) int clk_set_rate_range(struct clk *clk, unsigned long min, unsigned long max) { int ret = 0; + unsigned int old_min, old_max; if (!clk) return 0; @@ -1881,9 +1882,16 @@ int clk_set_rate_range(struct clk *clk, unsigned long min, unsigned long max) clk_core_rate_unprotect(clk->core); if (min != clk->min_rate || max != clk->max_rate) { + old_min = clk->min_rate; + old_max = clk->max_rate; clk->min_rate = min; clk->max_rate = max; ret = clk_core_set_rate_nolock(clk->core, clk->core->req_rate); + if (ret) { + /* undo changes */ + clk->min_rate = old_min; + clk->max_rate = old_max; + } } if (clk->protect_count) -- 1.9.1