In order to reset the range on a clock, we need to call clk_set_rate_range with a minimum of 0 and a maximum of ULONG_MAX. Since it's fairly inconvenient, let's introduce a clk_drop_range() function that will do just this. Suggested-by: Stephen Boyd <sboyd@xxxxxxxxxx> Signed-off-by: Maxime Ripard <maxime@xxxxxxxxxx> --- drivers/clk/clk-rate-test.c | 4 ++-- include/linux/clk.h | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/clk/clk-rate-test.c b/drivers/clk/clk-rate-test.c index baf0ea315322..9beed87f663c 100644 --- a/drivers/clk/clk-rate-test.c +++ b/drivers/clk/clk-rate-test.c @@ -458,7 +458,7 @@ static void clk_rate_range_test_multiple_set_range_rate_maximized(struct kunit * KUNIT_ASSERT_TRUE(test, rate > 0); KUNIT_ASSERT_EQ(test, rate, DUMMY_CLOCK_RATE_1); - ret = clk_set_rate_range(user2, 0, ULONG_MAX); + ret = clk_drop_range(user2); KUNIT_ASSERT_EQ(test, ret, 0); rate = clk_get_rate(clk); @@ -570,7 +570,7 @@ static void clk_rate_range_test_multiple_set_range_rate_minimized(struct kunit * KUNIT_ASSERT_TRUE(test, rate > 0); KUNIT_ASSERT_EQ(test, rate, DUMMY_CLOCK_RATE_2); - ret = clk_set_rate_range(user2, 0, ULONG_MAX); + ret = clk_drop_range(user2); KUNIT_ASSERT_EQ(test, ret, 0); rate = clk_get_rate(clk); diff --git a/include/linux/clk.h b/include/linux/clk.h index 266e8de3cb51..f365dac7be17 100644 --- a/include/linux/clk.h +++ b/include/linux/clk.h @@ -1005,6 +1005,17 @@ static inline struct clk *clk_get_optional(struct device *dev, const char *id) return clk; } +/** + * clk_drop_range - Reset any range set on that clock + * @clk: clock source + * + * Returns success (0) or negative errno. + */ +static inline int clk_drop_range(struct clk *clk) +{ + return clk_set_rate_range(clk, 0, ULONG_MAX); +} + #if defined(CONFIG_OF) && defined(CONFIG_COMMON_CLK) struct clk *of_clk_get(struct device_node *np, int index); struct clk *of_clk_get_by_name(struct device_node *np, const char *name); -- 2.34.1