mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 01:53:29 +02:00
clk: stm32mp13: use platform device APIs
Convert devm_platform_ioremap_resource() and remove unnecessary dependency check with SCMI clock driver. Signed-off-by: Gabriel Fernandez <gabriel.fernandez@foss.st.com> Link: https://lore.kernel.org/r/20240411092453.243633-2-gabriel.fernandez@foss.st.com Signed-off-by: Stephen Boyd <sboyd@kernel.org>
This commit is contained in:
parent
4cece76496
commit
239d5fb3ba
|
|
@ -25,7 +25,6 @@ static int stm32_rcc_clock_init(struct device *dev,
|
|||
{
|
||||
const struct stm32_rcc_match_data *data = match->data;
|
||||
struct clk_hw_onecell_data *clk_data = data->hw_clks;
|
||||
struct device_node *np = dev_of_node(dev);
|
||||
struct clk_hw **hws;
|
||||
int n, max_binding;
|
||||
|
||||
|
|
@ -64,7 +63,7 @@ static int stm32_rcc_clock_init(struct device *dev,
|
|||
hws[cfg_clock->id] = hw;
|
||||
}
|
||||
|
||||
return of_clk_add_hw_provider(np, of_clk_hw_onecell_get, clk_data);
|
||||
return devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, clk_data);
|
||||
}
|
||||
|
||||
int stm32_rcc_init(struct device *dev, const struct of_device_id *match_data,
|
||||
|
|
@ -638,7 +637,7 @@ struct clk_hw *clk_stm32_mux_register(struct device *dev,
|
|||
mux->lock = lock;
|
||||
mux->clock_data = data->clock_data;
|
||||
|
||||
err = clk_hw_register(dev, hw);
|
||||
err = devm_clk_hw_register(dev, hw);
|
||||
if (err)
|
||||
return ERR_PTR(err);
|
||||
|
||||
|
|
@ -659,7 +658,7 @@ struct clk_hw *clk_stm32_gate_register(struct device *dev,
|
|||
gate->lock = lock;
|
||||
gate->clock_data = data->clock_data;
|
||||
|
||||
err = clk_hw_register(dev, hw);
|
||||
err = devm_clk_hw_register(dev, hw);
|
||||
if (err)
|
||||
return ERR_PTR(err);
|
||||
|
||||
|
|
@ -680,7 +679,7 @@ struct clk_hw *clk_stm32_div_register(struct device *dev,
|
|||
div->lock = lock;
|
||||
div->clock_data = data->clock_data;
|
||||
|
||||
err = clk_hw_register(dev, hw);
|
||||
err = devm_clk_hw_register(dev, hw);
|
||||
if (err)
|
||||
return ERR_PTR(err);
|
||||
|
||||
|
|
@ -701,7 +700,7 @@ struct clk_hw *clk_stm32_composite_register(struct device *dev,
|
|||
composite->lock = lock;
|
||||
composite->clock_data = data->clock_data;
|
||||
|
||||
err = clk_hw_register(dev, hw);
|
||||
err = devm_clk_hw_register(dev, hw);
|
||||
if (err)
|
||||
return ERR_PTR(err);
|
||||
|
||||
|
|
|
|||
|
|
@ -1536,77 +1536,16 @@ static const struct of_device_id stm32mp13_match_data[] = {
|
|||
};
|
||||
MODULE_DEVICE_TABLE(of, stm32mp13_match_data);
|
||||
|
||||
static int stm32mp1_rcc_init(struct device *dev)
|
||||
{
|
||||
void __iomem *rcc_base;
|
||||
int ret = -ENOMEM;
|
||||
|
||||
rcc_base = of_iomap(dev_of_node(dev), 0);
|
||||
if (!rcc_base) {
|
||||
dev_err(dev, "%pOFn: unable to map resource", dev_of_node(dev));
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = stm32_rcc_init(dev, stm32mp13_match_data, rcc_base);
|
||||
out:
|
||||
if (ret) {
|
||||
if (rcc_base)
|
||||
iounmap(rcc_base);
|
||||
|
||||
of_node_put(dev_of_node(dev));
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int get_clock_deps(struct device *dev)
|
||||
{
|
||||
static const char * const clock_deps_name[] = {
|
||||
"hsi", "hse", "csi", "lsi", "lse",
|
||||
};
|
||||
size_t deps_size = sizeof(struct clk *) * ARRAY_SIZE(clock_deps_name);
|
||||
struct clk **clk_deps;
|
||||
int i;
|
||||
|
||||
clk_deps = devm_kzalloc(dev, deps_size, GFP_KERNEL);
|
||||
if (!clk_deps)
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(clock_deps_name); i++) {
|
||||
struct clk *clk = of_clk_get_by_name(dev_of_node(dev),
|
||||
clock_deps_name[i]);
|
||||
|
||||
if (IS_ERR(clk)) {
|
||||
if (PTR_ERR(clk) != -EINVAL && PTR_ERR(clk) != -ENOENT)
|
||||
return PTR_ERR(clk);
|
||||
} else {
|
||||
/* Device gets a reference count on the clock */
|
||||
clk_deps[i] = devm_clk_get(dev, __clk_get_name(clk));
|
||||
clk_put(clk);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int stm32mp1_rcc_clocks_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
int ret = get_clock_deps(dev);
|
||||
void __iomem *base;
|
||||
|
||||
if (!ret)
|
||||
ret = stm32mp1_rcc_init(dev);
|
||||
base = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (WARN_ON(IS_ERR(base)))
|
||||
return PTR_ERR(base);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void stm32mp1_rcc_clocks_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
struct device_node *child, *np = dev_of_node(dev);
|
||||
|
||||
for_each_available_child_of_node(np, child)
|
||||
of_clk_del_provider(child);
|
||||
return stm32_rcc_init(dev, stm32mp13_match_data, base);
|
||||
}
|
||||
|
||||
static struct platform_driver stm32mp13_rcc_clocks_driver = {
|
||||
|
|
@ -1615,7 +1554,6 @@ static struct platform_driver stm32mp13_rcc_clocks_driver = {
|
|||
.of_match_table = stm32mp13_match_data,
|
||||
},
|
||||
.probe = stm32mp1_rcc_clocks_probe,
|
||||
.remove_new = stm32mp1_rcc_clocks_remove,
|
||||
};
|
||||
|
||||
static int __init stm32mp13_clocks_init(void)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user