mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-02 15:18:19 +00:00
clk: samsung: Extract parent clock enabling to common function
Extract parent clock enabling from exynos_arm64_register_cmu() to dedicated function. Tested-by: Marek Szyprowski <m.szyprowski@samsung.com> Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org> Link: https://lore.kernel.org/r/20230307002423.24454-3-semen.protsenko@linaro.org Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
This commit is contained in:
parent
bed76f697a
commit
454e8d296c
1 changed files with 40 additions and 15 deletions
|
@ -56,6 +56,37 @@ static void __init exynos_arm64_init_clocks(struct device_node *np,
|
|||
iounmap(reg_base);
|
||||
}
|
||||
|
||||
/**
|
||||
* exynos_arm64_enable_bus_clk - Enable parent clock of specified CMU
|
||||
*
|
||||
* @dev: Device object; may be NULL if this function is not being
|
||||
* called from platform driver probe function
|
||||
* @np: CMU device tree node
|
||||
* @cmu: CMU data
|
||||
*
|
||||
* Keep CMU parent clock running (needed for CMU registers access).
|
||||
*
|
||||
* Return: 0 on success or a negative error code on failure.
|
||||
*/
|
||||
static int __init exynos_arm64_enable_bus_clk(struct device *dev,
|
||||
struct device_node *np, const struct samsung_cmu_info *cmu)
|
||||
{
|
||||
struct clk *parent_clk;
|
||||
|
||||
if (!cmu->clk_name)
|
||||
return 0;
|
||||
|
||||
if (dev)
|
||||
parent_clk = clk_get(dev, cmu->clk_name);
|
||||
else
|
||||
parent_clk = of_clk_get_by_name(np, cmu->clk_name);
|
||||
|
||||
if (IS_ERR(parent_clk))
|
||||
return PTR_ERR(parent_clk);
|
||||
|
||||
return clk_prepare_enable(parent_clk);
|
||||
}
|
||||
|
||||
/**
|
||||
* exynos_arm64_register_cmu - Register specified Exynos CMU domain
|
||||
* @dev: Device object; may be NULL if this function is not being
|
||||
|
@ -72,22 +103,16 @@ static void __init exynos_arm64_init_clocks(struct device_node *np,
|
|||
void __init exynos_arm64_register_cmu(struct device *dev,
|
||||
struct device_node *np, const struct samsung_cmu_info *cmu)
|
||||
{
|
||||
/* Keep CMU parent clock running (needed for CMU registers access) */
|
||||
if (cmu->clk_name) {
|
||||
struct clk *parent_clk;
|
||||
int err;
|
||||
|
||||
if (dev)
|
||||
parent_clk = clk_get(dev, cmu->clk_name);
|
||||
else
|
||||
parent_clk = of_clk_get_by_name(np, cmu->clk_name);
|
||||
|
||||
if (IS_ERR(parent_clk)) {
|
||||
pr_err("%s: could not find bus clock %s; err = %ld\n",
|
||||
__func__, cmu->clk_name, PTR_ERR(parent_clk));
|
||||
} else {
|
||||
clk_prepare_enable(parent_clk);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Try to boot even if the parent clock enablement fails, as it might be
|
||||
* already enabled by bootloader.
|
||||
*/
|
||||
err = exynos_arm64_enable_bus_clk(dev, np, cmu);
|
||||
if (err)
|
||||
pr_err("%s: could not enable bus clock %s; err = %d\n",
|
||||
__func__, cmu->clk_name, err);
|
||||
|
||||
exynos_arm64_init_clocks(np, cmu->clk_regs, cmu->nr_clk_regs);
|
||||
samsung_cmu_register_one(np, cmu);
|
||||
|
|
Loading…
Reference in a new issue