Commit 55de4d06 authored by Gregory CLEMENT's avatar Gregory CLEMENT Committed by Michael Turquette

clk: mvebu: ap806: do not depend anymore of the *-clock-output-names

As it was done for the cp110, this patch modifies the way the clock names
are created. The name of each clock is now created by using its physical
address as a prefix (as it was done for the platform device
names). Thanks to this we have an automatic way to compute a unique name.
Reviewed-by: default avatarThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Acked-by: default avatarRob Herring <robh@kernel.org>
Signed-off-by: default avatarGregory CLEMENT <gregory.clement@free-electrons.com>
Signed-off-by: default avatarMichael Turquette <mturquette@baylibre.com>
Link: lkml.kernel.org/r/e66cdd54d36c6bef78460a51e577f171b6ccb031.1496239589.git-series.gregory.clement@free-electrons.com
parent d9ff21ee
...@@ -32,6 +32,18 @@ static struct clk_onecell_data ap806_clk_data = { ...@@ -32,6 +32,18 @@ static struct clk_onecell_data ap806_clk_data = {
.clk_num = AP806_CLK_NUM, .clk_num = AP806_CLK_NUM,
}; };
static char *ap806_unique_name(struct device *dev, struct device_node *np,
char *name)
{
const __be32 *reg;
u64 addr;
reg = of_get_property(np, "reg", NULL);
addr = of_translate_address(np, reg);
return devm_kasprintf(dev, GFP_KERNEL, "%llx-%s",
(unsigned long long)addr, name);
}
static int ap806_syscon_clk_probe(struct platform_device *pdev) static int ap806_syscon_clk_probe(struct platform_device *pdev)
{ {
unsigned int freq_mode, cpuclk_freq; unsigned int freq_mode, cpuclk_freq;
...@@ -98,8 +110,7 @@ static int ap806_syscon_clk_probe(struct platform_device *pdev) ...@@ -98,8 +110,7 @@ static int ap806_syscon_clk_probe(struct platform_device *pdev)
cpuclk_freq *= 1000 * 1000; cpuclk_freq *= 1000 * 1000;
/* CPU clocks depend on the Sample At Reset configuration */ /* CPU clocks depend on the Sample At Reset configuration */
of_property_read_string_index(np, "clock-output-names", name = ap806_unique_name(dev, np, "cpu-cluster-0");
0, &name);
ap806_clks[0] = clk_register_fixed_rate(dev, name, NULL, ap806_clks[0] = clk_register_fixed_rate(dev, name, NULL,
0, cpuclk_freq); 0, cpuclk_freq);
if (IS_ERR(ap806_clks[0])) { if (IS_ERR(ap806_clks[0])) {
...@@ -107,8 +118,7 @@ static int ap806_syscon_clk_probe(struct platform_device *pdev) ...@@ -107,8 +118,7 @@ static int ap806_syscon_clk_probe(struct platform_device *pdev)
goto fail0; goto fail0;
} }
of_property_read_string_index(np, "clock-output-names", name = ap806_unique_name(dev, np, "cpu-cluster-1");
1, &name);
ap806_clks[1] = clk_register_fixed_rate(dev, name, NULL, 0, ap806_clks[1] = clk_register_fixed_rate(dev, name, NULL, 0,
cpuclk_freq); cpuclk_freq);
if (IS_ERR(ap806_clks[1])) { if (IS_ERR(ap806_clks[1])) {
...@@ -117,8 +127,7 @@ static int ap806_syscon_clk_probe(struct platform_device *pdev) ...@@ -117,8 +127,7 @@ static int ap806_syscon_clk_probe(struct platform_device *pdev)
} }
/* Fixed clock is always 1200 Mhz */ /* Fixed clock is always 1200 Mhz */
of_property_read_string_index(np, "clock-output-names", fixedclk_name = ap806_unique_name(dev, np, "fixed");
2, &fixedclk_name);
ap806_clks[2] = clk_register_fixed_rate(dev, fixedclk_name, NULL, ap806_clks[2] = clk_register_fixed_rate(dev, fixedclk_name, NULL,
0, 1200 * 1000 * 1000); 0, 1200 * 1000 * 1000);
if (IS_ERR(ap806_clks[2])) { if (IS_ERR(ap806_clks[2])) {
...@@ -127,8 +136,7 @@ static int ap806_syscon_clk_probe(struct platform_device *pdev) ...@@ -127,8 +136,7 @@ static int ap806_syscon_clk_probe(struct platform_device *pdev)
} }
/* MSS Clock is fixed clock divided by 6 */ /* MSS Clock is fixed clock divided by 6 */
of_property_read_string_index(np, "clock-output-names", name = ap806_unique_name(dev, np, "mss");
3, &name);
ap806_clks[3] = clk_register_fixed_factor(NULL, name, fixedclk_name, ap806_clks[3] = clk_register_fixed_factor(NULL, name, fixedclk_name,
0, 1, 6); 0, 1, 6);
if (IS_ERR(ap806_clks[3])) { if (IS_ERR(ap806_clks[3])) {
...@@ -136,13 +144,8 @@ static int ap806_syscon_clk_probe(struct platform_device *pdev) ...@@ -136,13 +144,8 @@ static int ap806_syscon_clk_probe(struct platform_device *pdev)
goto fail3; goto fail3;
} }
/* eMMC Clock is fixed clock divided by 3 */ /* SDIO(/eMMC) Clock is fixed clock divided by 3 */
if (of_property_read_string_index(np, "clock-output-names", name = ap806_unique_name(dev, np, "sdio");
4, &name)) {
ap806_clk_data.clk_num--;
dev_warn(&pdev->dev,
"eMMC clock missing: update the device tree!\n");
} else {
ap806_clks[4] = clk_register_fixed_factor(NULL, name, ap806_clks[4] = clk_register_fixed_factor(NULL, name,
fixedclk_name, fixedclk_name,
0, 1, 3); 0, 1, 3);
...@@ -150,7 +153,6 @@ static int ap806_syscon_clk_probe(struct platform_device *pdev) ...@@ -150,7 +153,6 @@ static int ap806_syscon_clk_probe(struct platform_device *pdev)
ret = PTR_ERR(ap806_clks[4]); ret = PTR_ERR(ap806_clks[4]);
goto fail4; goto fail4;
} }
}
of_clk_add_provider(np, of_clk_src_onecell_get, &ap806_clk_data); of_clk_add_provider(np, of_clk_src_onecell_get, &ap806_clk_data);
ret = of_clk_add_provider(np, of_clk_src_onecell_get, &ap806_clk_data); ret = of_clk_add_provider(np, of_clk_src_onecell_get, &ap806_clk_data);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment