diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-20 14:26:56 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-20 14:26:56 -0500 |
commit | 8793422fd9ac5037f5047f80473007301df3689f (patch) | |
tree | f5aa3b3a564f053e1b5604c45db80193abc734a4 /drivers/base | |
parent | b3cdda2b4f541439ca4205793040aa2e1c852e3b (diff) | |
parent | 10baf04e95fbf7eb6089410220a547211dd2ffa7 (diff) |
Merge tag 'pm+acpi-3.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
Pull ACPI and power management updates from Rafael Wysocki:
- Rework of the ACPI namespace scanning code from Rafael J. Wysocki
with contributions from Bjorn Helgaas, Jiang Liu, Mika Westerberg,
Toshi Kani, and Yinghai Lu.
- ACPI power resources handling and ACPI device PM update from Rafael
J Wysocki.
- ACPICA update to version 20130117 from Bob Moore and Lv Zheng with
contributions from Aaron Lu, Chao Guan, Jesper Juhl, and Tim Gardner.
- Support for Intel Lynxpoint LPSS from Mika Westerberg.
- cpuidle update from Len Brown including Intel Haswell support, C1
state for intel_idle, removal of global pm_idle.
- cpuidle fixes and cleanups from Daniel Lezcano.
- cpufreq fixes and cleanups from Viresh Kumar and Fabio Baltieri with
contributions from Stratos Karafotis and Rickard Andersson.
- Intel P-states driver for Sandy Bridge processors from Dirk
Brandewie.
- cpufreq driver for Marvell Kirkwood SoCs from Andrew Lunn.
- cpufreq fixes related to ordering issues between acpi-cpufreq and
powernow-k8 from Borislav Petkov and Matthew Garrett.
- cpufreq support for Calxeda Highbank processors from Mark Langsdorf
and Rob Herring.
- cpufreq driver for the Freescale i.MX6Q SoC and cpufreq-cpu0 update
from Shawn Guo.
- cpufreq Exynos fixes and cleanups from Jonghwan Choi, Sachin Kamat,
and Inderpal Singh.
- Support for "lightweight suspend" from Zhang Rui.
- Removal of the deprecated power trace API from Paul Gortmaker.
- Assorted updates from Andreas Fleig, Colin Ian King, Davidlohr Bueso,
Joseph Salisbury, Kees Cook, Li Fei, Nishanth Menon, ShuoX Liu,
Srinivas Pandruvada, Tejun Heo, Thomas Renninger, and Yasuaki
Ishimatsu.
* tag 'pm+acpi-3.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (267 commits)
PM idle: remove global declaration of pm_idle
unicore32 idle: delete stray pm_idle comment
openrisc idle: delete pm_idle
mn10300 idle: delete pm_idle
microblaze idle: delete pm_idle
m32r idle: delete pm_idle, and other dead idle code
ia64 idle: delete pm_idle
cris idle: delete idle and pm_idle
ARM64 idle: delete pm_idle
ARM idle: delete pm_idle
blackfin idle: delete pm_idle
sparc idle: rename pm_idle to sparc_idle
sh idle: rename global pm_idle to static sh_idle
x86 idle: rename global pm_idle to static x86_idle
APM idle: register apm_cpu_idle via cpuidle
cpufreq / intel_pstate: Add kernel command line option disable intel_pstate.
cpufreq / intel_pstate: Change to disallow module build
tools/power turbostat: display SMI count by default
intel_idle: export both C1 and C1E
ACPI / hotplug: Fix concurrency issues and memory leaks
...
Diffstat (limited to 'drivers/base')
-rw-r--r-- | drivers/base/power/domain.c | 3 | ||||
-rw-r--r-- | drivers/base/power/opp.c | 19 | ||||
-rw-r--r-- | drivers/base/power/wakeup.c | 6 |
3 files changed, 18 insertions, 10 deletions
diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index acc3a8ded29d..9a6b05a35603 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c | |||
@@ -433,8 +433,7 @@ static bool genpd_abort_poweroff(struct generic_pm_domain *genpd) | |||
433 | */ | 433 | */ |
434 | void genpd_queue_power_off_work(struct generic_pm_domain *genpd) | 434 | void genpd_queue_power_off_work(struct generic_pm_domain *genpd) |
435 | { | 435 | { |
436 | if (!work_pending(&genpd->power_off_work)) | 436 | queue_work(pm_wq, &genpd->power_off_work); |
437 | queue_work(pm_wq, &genpd->power_off_work); | ||
438 | } | 437 | } |
439 | 438 | ||
440 | /** | 439 | /** |
diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c index 50b2831e027d..32ee0fc7ea54 100644 --- a/drivers/base/power/opp.c +++ b/drivers/base/power/opp.c | |||
@@ -162,7 +162,7 @@ unsigned long opp_get_voltage(struct opp *opp) | |||
162 | 162 | ||
163 | return v; | 163 | return v; |
164 | } | 164 | } |
165 | EXPORT_SYMBOL(opp_get_voltage); | 165 | EXPORT_SYMBOL_GPL(opp_get_voltage); |
166 | 166 | ||
167 | /** | 167 | /** |
168 | * opp_get_freq() - Gets the frequency corresponding to an available opp | 168 | * opp_get_freq() - Gets the frequency corresponding to an available opp |
@@ -192,7 +192,7 @@ unsigned long opp_get_freq(struct opp *opp) | |||
192 | 192 | ||
193 | return f; | 193 | return f; |
194 | } | 194 | } |
195 | EXPORT_SYMBOL(opp_get_freq); | 195 | EXPORT_SYMBOL_GPL(opp_get_freq); |
196 | 196 | ||
197 | /** | 197 | /** |
198 | * opp_get_opp_count() - Get number of opps available in the opp list | 198 | * opp_get_opp_count() - Get number of opps available in the opp list |
@@ -225,7 +225,7 @@ int opp_get_opp_count(struct device *dev) | |||
225 | 225 | ||
226 | return count; | 226 | return count; |
227 | } | 227 | } |
228 | EXPORT_SYMBOL(opp_get_opp_count); | 228 | EXPORT_SYMBOL_GPL(opp_get_opp_count); |
229 | 229 | ||
230 | /** | 230 | /** |
231 | * opp_find_freq_exact() - search for an exact frequency | 231 | * opp_find_freq_exact() - search for an exact frequency |
@@ -276,7 +276,7 @@ struct opp *opp_find_freq_exact(struct device *dev, unsigned long freq, | |||
276 | 276 | ||
277 | return opp; | 277 | return opp; |
278 | } | 278 | } |
279 | EXPORT_SYMBOL(opp_find_freq_exact); | 279 | EXPORT_SYMBOL_GPL(opp_find_freq_exact); |
280 | 280 | ||
281 | /** | 281 | /** |
282 | * opp_find_freq_ceil() - Search for an rounded ceil freq | 282 | * opp_find_freq_ceil() - Search for an rounded ceil freq |
@@ -323,7 +323,7 @@ struct opp *opp_find_freq_ceil(struct device *dev, unsigned long *freq) | |||
323 | 323 | ||
324 | return opp; | 324 | return opp; |
325 | } | 325 | } |
326 | EXPORT_SYMBOL(opp_find_freq_ceil); | 326 | EXPORT_SYMBOL_GPL(opp_find_freq_ceil); |
327 | 327 | ||
328 | /** | 328 | /** |
329 | * opp_find_freq_floor() - Search for a rounded floor freq | 329 | * opp_find_freq_floor() - Search for a rounded floor freq |
@@ -374,7 +374,7 @@ struct opp *opp_find_freq_floor(struct device *dev, unsigned long *freq) | |||
374 | 374 | ||
375 | return opp; | 375 | return opp; |
376 | } | 376 | } |
377 | EXPORT_SYMBOL(opp_find_freq_floor); | 377 | EXPORT_SYMBOL_GPL(opp_find_freq_floor); |
378 | 378 | ||
379 | /** | 379 | /** |
380 | * opp_add() - Add an OPP table from a table definitions | 380 | * opp_add() - Add an OPP table from a table definitions |
@@ -568,7 +568,7 @@ int opp_enable(struct device *dev, unsigned long freq) | |||
568 | { | 568 | { |
569 | return opp_set_availability(dev, freq, true); | 569 | return opp_set_availability(dev, freq, true); |
570 | } | 570 | } |
571 | EXPORT_SYMBOL(opp_enable); | 571 | EXPORT_SYMBOL_GPL(opp_enable); |
572 | 572 | ||
573 | /** | 573 | /** |
574 | * opp_disable() - Disable a specific OPP | 574 | * opp_disable() - Disable a specific OPP |
@@ -590,7 +590,7 @@ int opp_disable(struct device *dev, unsigned long freq) | |||
590 | { | 590 | { |
591 | return opp_set_availability(dev, freq, false); | 591 | return opp_set_availability(dev, freq, false); |
592 | } | 592 | } |
593 | EXPORT_SYMBOL(opp_disable); | 593 | EXPORT_SYMBOL_GPL(opp_disable); |
594 | 594 | ||
595 | #ifdef CONFIG_CPU_FREQ | 595 | #ifdef CONFIG_CPU_FREQ |
596 | /** | 596 | /** |
@@ -661,6 +661,7 @@ int opp_init_cpufreq_table(struct device *dev, | |||
661 | 661 | ||
662 | return 0; | 662 | return 0; |
663 | } | 663 | } |
664 | EXPORT_SYMBOL_GPL(opp_init_cpufreq_table); | ||
664 | 665 | ||
665 | /** | 666 | /** |
666 | * opp_free_cpufreq_table() - free the cpufreq table | 667 | * opp_free_cpufreq_table() - free the cpufreq table |
@@ -678,6 +679,7 @@ void opp_free_cpufreq_table(struct device *dev, | |||
678 | kfree(*table); | 679 | kfree(*table); |
679 | *table = NULL; | 680 | *table = NULL; |
680 | } | 681 | } |
682 | EXPORT_SYMBOL_GPL(opp_free_cpufreq_table); | ||
681 | #endif /* CONFIG_CPU_FREQ */ | 683 | #endif /* CONFIG_CPU_FREQ */ |
682 | 684 | ||
683 | /** | 685 | /** |
@@ -738,4 +740,5 @@ int of_init_opp_table(struct device *dev) | |||
738 | 740 | ||
739 | return 0; | 741 | return 0; |
740 | } | 742 | } |
743 | EXPORT_SYMBOL_GPL(of_init_opp_table); | ||
741 | #endif | 744 | #endif |
diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c index e6ee5e80e546..79715e7fa43e 100644 --- a/drivers/base/power/wakeup.c +++ b/drivers/base/power/wakeup.c | |||
@@ -382,6 +382,12 @@ static void wakeup_source_activate(struct wakeup_source *ws) | |||
382 | { | 382 | { |
383 | unsigned int cec; | 383 | unsigned int cec; |
384 | 384 | ||
385 | /* | ||
386 | * active wakeup source should bring the system | ||
387 | * out of PM_SUSPEND_FREEZE state | ||
388 | */ | ||
389 | freeze_wake(); | ||
390 | |||
385 | ws->active = true; | 391 | ws->active = true; |
386 | ws->active_count++; | 392 | ws->active_count++; |
387 | ws->last_time = ktime_get(); | 393 | ws->last_time = ktime_get(); |