diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-07-19 02:28:27 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-07-19 02:28:27 -0400 |
commit | 084c9cac39ac5c0386ed2c8abb4f3e80e71a3119 (patch) | |
tree | d709883e75f4f4d69ebcff645ea779ab2cae2e59 | |
parent | 3e8e2756b6835d5035ba6ade7b4cc9078e54a0e9 (diff) | |
parent | 3962808023d54f0e1adbde403eb8e572984ccb2a (diff) |
Merge tag 'pm+acpi-3.16-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
Pull ACPI and power management fixes from Rafael Wysocki:
"These are a few recent regression fixes, a revert of the ACPI video
commit I promised, a system resume fix related to request_firmware(),
an ACPI video quirk for one more Win8-oriented BIOS, an ACPI device
enumeration documentation update and a few fixes for ARM cpufreq
drivers.
Specifics:
- Fix for a recently introduced NULL pointer dereference in the core
system suspend code occuring when platforms without ACPI attempt to
use the "freeze" sleep state from Zhang Rui.
- Fix for a recently introduced build warning in cpufreq headers from
Brian W Hart.
- Fix for a 3.13 cpufreq regression related to sysem resume that
triggers on some systems with multiple CPU clusters from Viresh
Kumar.
- Fix for a 3.4 regression in request_firmware() resulting in
WARN_ON()s on some systems during system resume from Takashi Iwai.
- Revert of the ACPI video commit that changed the default value of
the video.brightness_switch_enabled command line argument to 0 as
it has been reported to break existing setups.
- ACPI device enumeration documentation update to take recent code
changes into account and make the documentation match the code
again from Darren Hart.
- Fixes for the sa1110, imx6q, kirkwood, and cpu0 cpufreq drivers
from Linus Walleij, Nicolas Del Piano, Quentin Armitage, Viresh
Kumar.
- New ACPI video blacklist entry for HP ProBook 4540s from Hans de
Goede"
* tag 'pm+acpi-3.16-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
cpufreq: make table sentinel macros unsigned to match use
cpufreq: move policy kobj to policy->cpu at resume
cpufreq: cpu0: OPPs can be populated at runtime
cpufreq: kirkwood: Reinstate cpufreq driver for ARCH_KIRKWOOD
cpufreq: imx6q: Select PM_OPP
cpufreq: sa1110: set memory type for h3600
ACPI / video: Add use_native_backlight quirk for HP ProBook 4540s
PM / sleep: fix freeze_ops NULL pointer dereferences
PM / sleep: Fix request_firmware() error at resume
Revert "ACPI / video: change acpi-video brightness_switch_enabled default to 0"
ACPI / documentation: Remove reference to acpi_platform_device_ids from enumeration.txt
-rw-r--r-- | Documentation/acpi/enumeration.txt | 6 | ||||
-rw-r--r-- | Documentation/devicetree/bindings/cpufreq/cpufreq-cpu0.txt | 6 | ||||
-rw-r--r-- | Documentation/kernel-parameters.txt | 2 | ||||
-rw-r--r-- | drivers/acpi/video.c | 10 | ||||
-rw-r--r-- | drivers/cpufreq/Kconfig.arm | 3 | ||||
-rw-r--r-- | drivers/cpufreq/cpufreq-cpu0.c | 7 | ||||
-rw-r--r-- | drivers/cpufreq/cpufreq.c | 6 | ||||
-rw-r--r-- | drivers/cpufreq/sa1110-cpufreq.c | 2 | ||||
-rw-r--r-- | include/linux/cpufreq.h | 4 | ||||
-rw-r--r-- | kernel/power/process.c | 1 | ||||
-rw-r--r-- | kernel/power/suspend.c | 4 |
11 files changed, 28 insertions, 23 deletions
diff --git a/Documentation/acpi/enumeration.txt b/Documentation/acpi/enumeration.txt index fd786ea13a1f..e182be5e3c83 100644 --- a/Documentation/acpi/enumeration.txt +++ b/Documentation/acpi/enumeration.txt | |||
@@ -60,12 +60,6 @@ If the driver needs to perform more complex initialization like getting and | |||
60 | configuring GPIOs it can get its ACPI handle and extract this information | 60 | configuring GPIOs it can get its ACPI handle and extract this information |
61 | from ACPI tables. | 61 | from ACPI tables. |
62 | 62 | ||
63 | Currently the kernel is not able to automatically determine from which ACPI | ||
64 | device it should make the corresponding platform device so we need to add | ||
65 | the ACPI device explicitly to acpi_platform_device_ids list defined in | ||
66 | drivers/acpi/acpi_platform.c. This limitation is only for the platform | ||
67 | devices, SPI and I2C devices are created automatically as described below. | ||
68 | |||
69 | DMA support | 63 | DMA support |
70 | ~~~~~~~~~~~ | 64 | ~~~~~~~~~~~ |
71 | DMA controllers enumerated via ACPI should be registered in the system to | 65 | DMA controllers enumerated via ACPI should be registered in the system to |
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/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index c1b9aa8c5a52..e332e718cad6 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -3526,7 +3526,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. | |||
3526 | the allocated input device; If set to 0, video driver | 3526 | the allocated input device; If set to 0, video driver |
3527 | will only send out the event without touching backlight | 3527 | will only send out the event without touching backlight |
3528 | brightness level. | 3528 | brightness level. |
3529 | default: 0 | 3529 | default: 1 |
3530 | 3530 | ||
3531 | virtio_mmio.device= | 3531 | virtio_mmio.device= |
3532 | [VMMIO] Memory mapped virtio (platform) device. | 3532 | [VMMIO] Memory mapped virtio (platform) device. |
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c index 071c1dfb93f3..350d52a8f781 100644 --- a/drivers/acpi/video.c +++ b/drivers/acpi/video.c | |||
@@ -68,7 +68,7 @@ MODULE_AUTHOR("Bruno Ducrot"); | |||
68 | MODULE_DESCRIPTION("ACPI Video Driver"); | 68 | MODULE_DESCRIPTION("ACPI Video Driver"); |
69 | MODULE_LICENSE("GPL"); | 69 | MODULE_LICENSE("GPL"); |
70 | 70 | ||
71 | static bool brightness_switch_enabled; | 71 | static bool brightness_switch_enabled = 1; |
72 | module_param(brightness_switch_enabled, bool, 0644); | 72 | module_param(brightness_switch_enabled, bool, 0644); |
73 | 73 | ||
74 | /* | 74 | /* |
@@ -581,6 +581,14 @@ static struct dmi_system_id video_dmi_table[] __initdata = { | |||
581 | }, | 581 | }, |
582 | { | 582 | { |
583 | .callback = video_set_use_native_backlight, | 583 | .callback = video_set_use_native_backlight, |
584 | .ident = "HP ProBook 4540s", | ||
585 | .matches = { | ||
586 | DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), | ||
587 | DMI_MATCH(DMI_PRODUCT_VERSION, "HP ProBook 4540s"), | ||
588 | }, | ||
589 | }, | ||
590 | { | ||
591 | .callback = video_set_use_native_backlight, | ||
584 | .ident = "HP ProBook 2013 models", | 592 | .ident = "HP ProBook 2013 models", |
585 | .matches = { | 593 | .matches = { |
586 | DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), | 594 | DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), |
diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm index ebac67115009..7364a538e056 100644 --- a/drivers/cpufreq/Kconfig.arm +++ b/drivers/cpufreq/Kconfig.arm | |||
@@ -104,6 +104,7 @@ config ARM_IMX6Q_CPUFREQ | |||
104 | tristate "Freescale i.MX6 cpufreq support" | 104 | tristate "Freescale i.MX6 cpufreq support" |
105 | depends on ARCH_MXC | 105 | depends on ARCH_MXC |
106 | depends on REGULATOR_ANATOP | 106 | depends on REGULATOR_ANATOP |
107 | select PM_OPP | ||
107 | help | 108 | help |
108 | This adds cpufreq driver support for Freescale i.MX6 series SoCs. | 109 | This adds cpufreq driver support for Freescale i.MX6 series SoCs. |
109 | 110 | ||
@@ -118,7 +119,7 @@ config ARM_INTEGRATOR | |||
118 | If in doubt, say Y. | 119 | If in doubt, say Y. |
119 | 120 | ||
120 | config ARM_KIRKWOOD_CPUFREQ | 121 | config ARM_KIRKWOOD_CPUFREQ |
121 | def_bool MACH_KIRKWOOD | 122 | def_bool ARCH_KIRKWOOD || MACH_KIRKWOOD |
122 | help | 123 | help |
123 | This adds the CPUFreq driver for Marvell Kirkwood | 124 | This adds the CPUFreq driver for Marvell Kirkwood |
124 | SoCs. | 125 | SoCs. |
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) { |
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index 62259d27f03e..6f024852c6fb 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c | |||
@@ -1153,10 +1153,12 @@ static int __cpufreq_add_dev(struct device *dev, struct subsys_interface *sif) | |||
1153 | * the creation of a brand new one. So we need to perform this update | 1153 | * the creation of a brand new one. So we need to perform this update |
1154 | * by invoking update_policy_cpu(). | 1154 | * by invoking update_policy_cpu(). |
1155 | */ | 1155 | */ |
1156 | if (recover_policy && cpu != policy->cpu) | 1156 | if (recover_policy && cpu != policy->cpu) { |
1157 | update_policy_cpu(policy, cpu); | 1157 | update_policy_cpu(policy, cpu); |
1158 | else | 1158 | WARN_ON(kobject_move(&policy->kobj, &dev->kobj)); |
1159 | } else { | ||
1159 | policy->cpu = cpu; | 1160 | policy->cpu = cpu; |
1161 | } | ||
1160 | 1162 | ||
1161 | cpumask_copy(policy->cpus, cpumask_of(cpu)); | 1163 | cpumask_copy(policy->cpus, cpumask_of(cpu)); |
1162 | 1164 | ||
diff --git a/drivers/cpufreq/sa1110-cpufreq.c b/drivers/cpufreq/sa1110-cpufreq.c index 546376719d8f..b5befc211172 100644 --- a/drivers/cpufreq/sa1110-cpufreq.c +++ b/drivers/cpufreq/sa1110-cpufreq.c | |||
@@ -349,7 +349,7 @@ static int __init sa1110_clk_init(void) | |||
349 | name = "K4S641632D"; | 349 | name = "K4S641632D"; |
350 | if (machine_is_h3100()) | 350 | if (machine_is_h3100()) |
351 | name = "KM416S4030CT"; | 351 | name = "KM416S4030CT"; |
352 | if (machine_is_jornada720()) | 352 | if (machine_is_jornada720() || machine_is_h3600()) |
353 | name = "K4S281632B-1H"; | 353 | name = "K4S281632B-1H"; |
354 | if (machine_is_nanoengine()) | 354 | if (machine_is_nanoengine()) |
355 | name = "MT48LC8M16A2TG-75"; | 355 | name = "MT48LC8M16A2TG-75"; |
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h index ec4112d257bc..8f8ae95c6e27 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h | |||
@@ -482,8 +482,8 @@ extern struct cpufreq_governor cpufreq_gov_conservative; | |||
482 | *********************************************************************/ | 482 | *********************************************************************/ |
483 | 483 | ||
484 | /* Special Values of .frequency field */ | 484 | /* Special Values of .frequency field */ |
485 | #define CPUFREQ_ENTRY_INVALID ~0 | 485 | #define CPUFREQ_ENTRY_INVALID ~0u |
486 | #define CPUFREQ_TABLE_END ~1 | 486 | #define CPUFREQ_TABLE_END ~1u |
487 | /* Special Values of .flags field */ | 487 | /* Special Values of .flags field */ |
488 | #define CPUFREQ_BOOST_FREQ (1 << 0) | 488 | #define CPUFREQ_BOOST_FREQ (1 << 0) |
489 | 489 | ||
diff --git a/kernel/power/process.c b/kernel/power/process.c index 0ca8d83e2369..4ee194eb524b 100644 --- a/kernel/power/process.c +++ b/kernel/power/process.c | |||
@@ -186,6 +186,7 @@ void thaw_processes(void) | |||
186 | 186 | ||
187 | printk("Restarting tasks ... "); | 187 | printk("Restarting tasks ... "); |
188 | 188 | ||
189 | __usermodehelper_set_disable_depth(UMH_FREEZING); | ||
189 | thaw_workqueues(); | 190 | thaw_workqueues(); |
190 | 191 | ||
191 | read_lock(&tasklist_lock); | 192 | read_lock(&tasklist_lock); |
diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c index 4dd8822f732a..ed35a4790afe 100644 --- a/kernel/power/suspend.c +++ b/kernel/power/suspend.c | |||
@@ -306,7 +306,7 @@ int suspend_devices_and_enter(suspend_state_t state) | |||
306 | error = suspend_ops->begin(state); | 306 | error = suspend_ops->begin(state); |
307 | if (error) | 307 | if (error) |
308 | goto Close; | 308 | goto Close; |
309 | } else if (state == PM_SUSPEND_FREEZE && freeze_ops->begin) { | 309 | } else if (state == PM_SUSPEND_FREEZE && freeze_ops && freeze_ops->begin) { |
310 | error = freeze_ops->begin(); | 310 | error = freeze_ops->begin(); |
311 | if (error) | 311 | if (error) |
312 | goto Close; | 312 | goto Close; |
@@ -335,7 +335,7 @@ int suspend_devices_and_enter(suspend_state_t state) | |||
335 | Close: | 335 | Close: |
336 | if (need_suspend_ops(state) && suspend_ops->end) | 336 | if (need_suspend_ops(state) && suspend_ops->end) |
337 | suspend_ops->end(); | 337 | suspend_ops->end(); |
338 | else if (state == PM_SUSPEND_FREEZE && freeze_ops->end) | 338 | else if (state == PM_SUSPEND_FREEZE && freeze_ops && freeze_ops->end) |
339 | freeze_ops->end(); | 339 | freeze_ops->end(); |
340 | 340 | ||
341 | return error; | 341 | return error; |