mirror of https://gitee.com/openkylin/linux.git
clk: Simplify __of_clk_get_hw_from_provider()
__of_clk_get_hw_from_provider() is confusing because it will return EPROBE_DEFER if there isn't a ->get() or ->get_hw() function pointer in a provider. That's just a bug though, and we used to NULL pointer exception when ->get() was missing anyway, so let's make this more obvious that they're not optional. The assumption is that most providers will implement ->get_hw() so we only fallback to the ->get() function if necessary. This clarifies the intent and removes any possibility of probe defer happening if clk providers are buggy. Reported-by: Masahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
This commit is contained in:
parent
d42c047245
commit
74002fcde0
|
@ -3174,19 +3174,14 @@ __of_clk_get_hw_from_provider(struct of_clk_provider *provider,
|
||||||
struct of_phandle_args *clkspec)
|
struct of_phandle_args *clkspec)
|
||||||
{
|
{
|
||||||
struct clk *clk;
|
struct clk *clk;
|
||||||
struct clk_hw *hw = ERR_PTR(-EPROBE_DEFER);
|
|
||||||
|
|
||||||
if (provider->get_hw) {
|
if (provider->get_hw)
|
||||||
hw = provider->get_hw(clkspec, provider->data);
|
return provider->get_hw(clkspec, provider->data);
|
||||||
} else if (provider->get) {
|
|
||||||
clk = provider->get(clkspec, provider->data);
|
clk = provider->get(clkspec, provider->data);
|
||||||
if (!IS_ERR(clk))
|
if (IS_ERR(clk))
|
||||||
hw = __clk_get_hw(clk);
|
return ERR_CAST(clk);
|
||||||
else
|
return __clk_get_hw(clk);
|
||||||
hw = ERR_CAST(clk);
|
|
||||||
}
|
|
||||||
|
|
||||||
return hw;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct clk *__of_clk_get_from_provider(struct of_phandle_args *clkspec,
|
struct clk *__of_clk_get_from_provider(struct of_phandle_args *clkspec,
|
||||||
|
|
Loading…
Reference in New Issue