|
|
@@ -34,6 +34,8 @@ struct scpi_clk {
|
|
|
|
|
|
#define to_scpi_clk(clk) container_of(clk, struct scpi_clk, hw)
|
|
|
|
|
|
+static struct platform_device *cpufreq_dev;
|
|
|
+
|
|
|
static unsigned long scpi_clk_recalc_rate(struct clk_hw *hw,
|
|
|
unsigned long parent_rate)
|
|
|
{
|
|
|
@@ -263,6 +265,11 @@ static int scpi_clocks_remove(struct platform_device *pdev)
|
|
|
struct device *dev = &pdev->dev;
|
|
|
struct device_node *child, *np = dev->of_node;
|
|
|
|
|
|
+ if (cpufreq_dev) {
|
|
|
+ platform_device_unregister(cpufreq_dev);
|
|
|
+ cpufreq_dev = NULL;
|
|
|
+ }
|
|
|
+
|
|
|
for_each_available_child_of_node(np, child)
|
|
|
of_clk_del_provider(np);
|
|
|
return 0;
|
|
|
@@ -288,6 +295,12 @@ static int scpi_clocks_probe(struct platform_device *pdev)
|
|
|
return ret;
|
|
|
}
|
|
|
}
|
|
|
+ /* Add the virtual cpufreq device */
|
|
|
+ cpufreq_dev = platform_device_register_simple("scpi-cpufreq",
|
|
|
+ -1, NULL, 0);
|
|
|
+ if (!cpufreq_dev)
|
|
|
+ pr_warn("unable to register cpufreq device");
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|