diff options
author | Viresh Kumar <viresh.kumar@linaro.org> | 2014-07-11 10:54:19 -0400 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2014-07-16 09:12:52 -0400 |
commit | 1bf8cc3d017575a38d4361f56ccc0a670a16bcd9 (patch) | |
tree | 1b85c86196b6089907f7e56b7a1220b884b4194d | |
parent | 2fa1adc07089020984d52bb55c5af0b9d86dff21 (diff) |
cpufreq: cpu0: OPPs can be populated at runtime
OPPs can be populated statically, via DT, or added at run time with
dev_pm_opp_add().
While this driver handles the first case correctly, it would fail to populate
OPPs added at runtime. Because call to of_init_opp_table() would fail as there
are no OPPs in DT and probe will return early.
To fix this, remove error checking and call dev_pm_opp_init_cpufreq_table()
unconditionally.
Update bindings as well.
Suggested-by: Stephen Boyd <sboyd@codeaurora.org>
Tested-by: Stephen Boyd <sboyd@codeaurora.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-rw-r--r-- | Documentation/devicetree/bindings/cpufreq/cpufreq-cpu0.txt | 6 | ||||
-rw-r--r-- | drivers/cpufreq/cpufreq-cpu0.c | 7 |
2 files changed, 6 insertions, 7 deletions
diff --git a/Documentation/devicetree/bindings/cpufreq/cpufreq-cpu0.txt b/Documentation/devicetree/bindings/cpufreq/cpufreq-cpu0.txt index f055515d2b62..366690cb86a3 100644 --- a/Documentation/devicetree/bindings/cpufreq/cpufreq-cpu0.txt +++ b/Documentation/devicetree/bindings/cpufreq/cpufreq-cpu0.txt | |||
@@ -8,10 +8,12 @@ Both required and optional properties listed below must be defined | |||
8 | under node /cpus/cpu@0. | 8 | under node /cpus/cpu@0. |
9 | 9 | ||
10 | Required properties: | 10 | Required properties: |
11 | - operating-points: Refer to Documentation/devicetree/bindings/power/opp.txt | 11 | - None |
12 | for details | ||
13 | 12 | ||
14 | Optional properties: | 13 | Optional properties: |
14 | - operating-points: Refer to Documentation/devicetree/bindings/power/opp.txt for | ||
15 | details. OPPs *must* be supplied either via DT, i.e. this property, or | ||
16 | populated at runtime. | ||
15 | - clock-latency: Specify the possible maximum transition latency for clock, | 17 | - clock-latency: Specify the possible maximum transition latency for clock, |
16 | in unit of nanoseconds. | 18 | in unit of nanoseconds. |
17 | - voltage-tolerance: Specify the CPU voltage tolerance in percentage. | 19 | - voltage-tolerance: Specify the CPU voltage tolerance in percentage. |
diff --git a/drivers/cpufreq/cpufreq-cpu0.c b/drivers/cpufreq/cpufreq-cpu0.c index ee1ae303a07c..86beda9f950b 100644 --- a/drivers/cpufreq/cpufreq-cpu0.c +++ b/drivers/cpufreq/cpufreq-cpu0.c | |||
@@ -152,11 +152,8 @@ static int cpu0_cpufreq_probe(struct platform_device *pdev) | |||
152 | goto out_put_reg; | 152 | goto out_put_reg; |
153 | } | 153 | } |
154 | 154 | ||
155 | ret = of_init_opp_table(cpu_dev); | 155 | /* OPPs might be populated at runtime, don't check for error here */ |
156 | if (ret) { | 156 | of_init_opp_table(cpu_dev); |
157 | pr_err("failed to init OPP table: %d\n", ret); | ||
158 | goto out_put_clk; | ||
159 | } | ||
160 | 157 | ||
161 | ret = dev_pm_opp_init_cpufreq_table(cpu_dev, &freq_table); | 158 | ret = dev_pm_opp_init_cpufreq_table(cpu_dev, &freq_table); |
162 | if (ret) { | 159 | if (ret) { |