aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/base
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-02-20 14:26:56 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-02-20 14:26:56 -0500
commit8793422fd9ac5037f5047f80473007301df3689f (patch)
treef5aa3b3a564f053e1b5604c45db80193abc734a4 /drivers/base
parentb3cdda2b4f541439ca4205793040aa2e1c852e3b (diff)
parent10baf04e95fbf7eb6089410220a547211dd2ffa7 (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.c3
-rw-r--r--drivers/base/power/opp.c19
-rw-r--r--drivers/base/power/wakeup.c6
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 */
434void genpd_queue_power_off_work(struct generic_pm_domain *genpd) 434void 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}
165EXPORT_SYMBOL(opp_get_voltage); 165EXPORT_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}
195EXPORT_SYMBOL(opp_get_freq); 195EXPORT_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}
228EXPORT_SYMBOL(opp_get_opp_count); 228EXPORT_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}
279EXPORT_SYMBOL(opp_find_freq_exact); 279EXPORT_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}
326EXPORT_SYMBOL(opp_find_freq_ceil); 326EXPORT_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}
377EXPORT_SYMBOL(opp_find_freq_floor); 377EXPORT_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}
571EXPORT_SYMBOL(opp_enable); 571EXPORT_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}
593EXPORT_SYMBOL(opp_disable); 593EXPORT_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}
664EXPORT_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}
682EXPORT_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}
743EXPORT_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();