mirror of https://gitee.com/openkylin/linux.git
More ACPI and power management updates for 3.19-rc1
- Fix a regression in leds-gpio introduced by a recent commit that inadvertently changed the name of one of the properties used by the driver (Fabio Estevam). - Fix a regression in the ACPI backlight driver introduced by a recent fix that missed one special case that had to be taken into account (Aaron Lu). - Drop the level of some new kernel messages from the ACPI core introduced by a recent commit to KERN_DEBUG which they should have used from the start and drop some other unuseful KERN_ERR messages printed by ACPI (Rafael J Wysocki). - Revert an incorrect commit modifying the cpupower tool (Prarit Bhargava). - Fix two regressions introduced by recent commits in the OPP library and clean up some existing minor issues in that code (Viresh Kumar). - Continue to replace CONFIG_PM_RUNTIME with CONFIG_PM throughout the tree (or drop it where that can be done) in order to make it possible to eliminate CONFIG_PM_RUNTIME (Rafael J Wysocki, Ulf Hansson, Ludovic Desroches). There will be one more "CONFIG_PM_RUNTIME removal" batch after this one, because some new uses of it have been introduced during the current merge window, but that should be sufficient to finally get rid of it. - Make the ACPI EC driver more robust against race conditions related to GPE handler installation failures (Lv Zheng). - Prevent the ACPI device PM core code from attempting to disable GPEs that it has not enabled which confuses ACPICA and makes it report errors unnecessarily (Rafael J Wysocki). - Add a "force" command line switch to the intel_pstate driver to make it possible to override the blacklisting of some systems in that driver if needed (Ethan Zhao). - Improve intel_pstate code documentation and add a MAINTAINERS entry for it (Kristen Carlson Accardi). - Make the ACPI fan driver create cooling device interfaces witn names that reflect the IDs of the ACPI device objects they are associated with, except for "generic" ACPI fans (PNP ID "PNP0C0B"). That's necessary for user space thermal management tools to be able to connect the fans with the parts of the system they are supposed to be cooling properly. From Srinivas Pandruvada. / -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQIcBAABCAAGBQJUk0IDAAoJEILEb/54YlRx7fgP/3+yF/0TnEW93j2ALDAQFiLF tSv2A2vQC8vtMJjjWx0z/HqPh86gfaReEFZmUJD/Q/e2LXEnxNZJ+QMjcekPVkDM mTvcIMc2MR8vOA/oMkgxeaKregrrx7RkCfojd+NWZhVukkjl+mvBHgAnYjXRL+NZ unDWGlbHG97vq/3kGjPYhDS00nxHblw8NHFBu5HL5RxwABdWoeZJITwqxXWyuPLw nlqNWlOxmwvtSbw2VMKz0uof1nFHyQLykYsMG0ZsyayCRdWUZYkEqmE7GGpCLkLu D6yfmlpen6ccIOsEAae0eXBt50IFY9Tihk5lovx1mZmci2SNRg29BqMI105wIn0u 8b8Ej7MNHp7yMxRpB5WfU90p/y7ioJns9guFZxY0CKaRnrI2+BLt3RscMi3MPI06 Cu2/WkSSa09fhDPA+pk+VDYsmWgyVawigesNmMP5/cvYO/yYywVRjOuO1k77qQGp 4dSpFYEHfpxinejZnVZOk2V9MkvSLoSMux6wPV0xM0IE1iD0ulVpHjTJrwp80ph4 +bfUFVr/vrD1y7EKbf1PD363ZKvJhWhvQWDgETsM1vgLf21PfWO7C2kflIAsWsdQ 1ukD5nCBRlP4K73hG7bdM6kRztXhUdR0SHg85/t0KB/ExiVqtcXIzB60D0G1lENd QlKbq3O4lim1WGuhazQY =5fo2 -----END PGP SIGNATURE----- Merge tag 'pm+acpi-3.19-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm Pull more ACPI and power management updates from Rafael Wysocki: "These are regression fixes (leds-gpio, ACPI backlight driver, operating performance points library, ACPI device enumeration messages, cpupower tool), other bug fixes (ACPI EC driver, ACPI device PM), some cleanups in the operating performance points (OPP) framework, continuation of CONFIG_PM_RUNTIME elimination, a couple of minor intel_pstate driver changes, a new MAINTAINERS entry for it and an ACPI fan driver change needed for better support of thermal management in user space. Specifics: - Fix a regression in leds-gpio introduced by a recent commit that inadvertently changed the name of one of the properties used by the driver (Fabio Estevam). - Fix a regression in the ACPI backlight driver introduced by a recent fix that missed one special case that had to be taken into account (Aaron Lu). - Drop the level of some new kernel messages from the ACPI core introduced by a recent commit to KERN_DEBUG which they should have used from the start and drop some other unuseful KERN_ERR messages printed by ACPI (Rafael J Wysocki). - Revert an incorrect commit modifying the cpupower tool (Prarit Bhargava). - Fix two regressions introduced by recent commits in the OPP library and clean up some existing minor issues in that code (Viresh Kumar). - Continue to replace CONFIG_PM_RUNTIME with CONFIG_PM throughout the tree (or drop it where that can be done) in order to make it possible to eliminate CONFIG_PM_RUNTIME (Rafael J Wysocki, Ulf Hansson, Ludovic Desroches). There will be one more "CONFIG_PM_RUNTIME removal" batch after this one, because some new uses of it have been introduced during the current merge window, but that should be sufficient to finally get rid of it. - Make the ACPI EC driver more robust against race conditions related to GPE handler installation failures (Lv Zheng). - Prevent the ACPI device PM core code from attempting to disable GPEs that it has not enabled which confuses ACPICA and makes it report errors unnecessarily (Rafael J Wysocki). - Add a "force" command line switch to the intel_pstate driver to make it possible to override the blacklisting of some systems in that driver if needed (Ethan Zhao). - Improve intel_pstate code documentation and add a MAINTAINERS entry for it (Kristen Carlson Accardi). - Make the ACPI fan driver create cooling device interfaces witn names that reflect the IDs of the ACPI device objects they are associated with, except for "generic" ACPI fans (PNP ID "PNP0C0B"). That's necessary for user space thermal management tools to be able to connect the fans with the parts of the system they are supposed to be cooling properly. From Srinivas Pandruvada" * tag 'pm+acpi-3.19-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (32 commits) MAINTAINERS: add entry for intel_pstate ACPI / video: update the skip case for acpi_video_device_in_dod() power / PM: Eliminate CONFIG_PM_RUNTIME NFC / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM SCSI / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM ACPI / EC: Fix unexpected ec_remove_handlers() invocations Revert "tools: cpupower: fix return checks for sysfs_get_idlestate_count()" tracing / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM x86 / PM: Replace CONFIG_PM_RUNTIME in io_apic.c PM: Remove the SET_PM_RUNTIME_PM_OPS() macro mmc: atmel-mci: use SET_RUNTIME_PM_OPS() macro PM / Kconfig: Replace PM_RUNTIME with PM in dependencies ARM / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM sound / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM phy / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM video / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM tty / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM spi: Replace CONFIG_PM_RUNTIME with CONFIG_PM ACPI / PM: Do not disable wakeup GPEs that have not been enabled ACPI / utils: Drop error messages from acpi_evaluate_reference() ...
This commit is contained in:
commit
c0f486fde3
|
@ -1457,6 +1457,15 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
|||
disable
|
||||
Do not enable intel_pstate as the default
|
||||
scaling driver for the supported processors
|
||||
force
|
||||
Enable intel_pstate on systems that prohibit it by default
|
||||
in favor of acpi-cpufreq. Forcing the intel_pstate driver
|
||||
instead of acpi-cpufreq may disable platform features, such
|
||||
as thermal controls and power capping, that rely on ACPI
|
||||
P-States information being indicated to OSPM and therefore
|
||||
should be used with caution. This option does not work with
|
||||
processors that aren't supported by the intel_pstate driver
|
||||
or on platforms that use pcc-cpufreq instead of acpi-cpufreq.
|
||||
no_hwp
|
||||
Do not enable hardware P state control (HWP)
|
||||
if available.
|
||||
|
|
|
@ -4963,6 +4963,12 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux.git
|
|||
S: Supported
|
||||
F: drivers/idle/intel_idle.c
|
||||
|
||||
INTEL PSTATE DRIVER
|
||||
M: Kristen Carlson Accardi <kristen@linux.intel.com>
|
||||
L: linux-pm@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/cpufreq/intel_pstate.c
|
||||
|
||||
INTEL FRAMEBUFFER DRIVER (excluding 810 and 815)
|
||||
M: Maik Broemme <mbroemme@plusserver.de>
|
||||
L: linux-fbdev@vger.kernel.org
|
||||
|
|
|
@ -484,7 +484,7 @@ static void armpmu_disable(struct pmu *pmu)
|
|||
armpmu->stop(armpmu);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int armpmu_runtime_resume(struct device *dev)
|
||||
{
|
||||
struct arm_pmu_platdata *plat = dev_get_platdata(dev);
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
#include <linux/pm_clock.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int davinci_pm_runtime_suspend(struct device *dev)
|
||||
{
|
||||
int ret;
|
||||
|
|
|
@ -21,7 +21,7 @@ menuconfig ARCH_EXYNOS
|
|||
select HAVE_S3C_RTC if RTC_CLASS
|
||||
select PINCTRL
|
||||
select PINCTRL_EXYNOS
|
||||
select PM_GENERIC_DOMAINS if PM_RUNTIME
|
||||
select PM_GENERIC_DOMAINS if PM
|
||||
select S5P_DEV_MFC
|
||||
select SRAM
|
||||
select MFD_SYSCON
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#include <linux/clk-provider.h>
|
||||
#include <linux/of.h>
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int keystone_pm_runtime_suspend(struct device *dev)
|
||||
{
|
||||
int ret;
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
#include "soc.h"
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int omap1_pm_runtime_suspend(struct device *dev)
|
||||
{
|
||||
int ret;
|
||||
|
@ -59,7 +59,7 @@ static struct dev_pm_domain default_pm_domain = {
|
|||
#define OMAP1_PM_DOMAIN (&default_pm_domain)
|
||||
#else
|
||||
#define OMAP1_PM_DOMAIN NULL
|
||||
#endif /* CONFIG_PM_RUNTIME */
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
static struct pm_clk_notifier_block platform_bus_notifier = {
|
||||
.pm_domain = OMAP1_PM_DOMAIN,
|
||||
|
|
|
@ -361,7 +361,7 @@ static void __init omap_hwmod_init_postsetup(void)
|
|||
u8 postsetup_state;
|
||||
|
||||
/* Set the default postsetup state for all hwmods */
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
postsetup_state = _HWMOD_STATE_IDLE;
|
||||
#else
|
||||
postsetup_state = _HWMOD_STATE_ENABLED;
|
||||
|
|
|
@ -588,7 +588,7 @@ struct platform_device __init *omap_device_build_ss(const char *pdev_name,
|
|||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int _od_runtime_suspend(struct device *dev)
|
||||
{
|
||||
struct platform_device *pdev = to_platform_device(dev);
|
||||
|
|
|
@ -231,7 +231,7 @@ config IA64_SGI_UV
|
|||
config IA64_HP_SIM
|
||||
bool "Ski-simulator"
|
||||
select SWIOTLB
|
||||
depends on !PM_RUNTIME
|
||||
depends on !PM
|
||||
|
||||
endchoice
|
||||
|
||||
|
|
|
@ -3968,7 +3968,7 @@ bool mp_should_keep_irq(struct device *dev)
|
|||
{
|
||||
if (dev->power.is_prepared)
|
||||
return true;
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
if (dev->power.runtime_status == RPM_SUSPENDING)
|
||||
return true;
|
||||
#endif
|
||||
|
|
|
@ -680,13 +680,21 @@ static int acpi_device_wakeup(struct acpi_device *adev, u32 target_state,
|
|||
if (error)
|
||||
return error;
|
||||
|
||||
if (adev->wakeup.flags.enabled)
|
||||
return 0;
|
||||
|
||||
res = acpi_enable_gpe(wakeup->gpe_device, wakeup->gpe_number);
|
||||
if (ACPI_FAILURE(res)) {
|
||||
if (ACPI_SUCCESS(res)) {
|
||||
adev->wakeup.flags.enabled = 1;
|
||||
} else {
|
||||
acpi_disable_wakeup_device_power(adev);
|
||||
return -EIO;
|
||||
}
|
||||
} else {
|
||||
acpi_disable_gpe(wakeup->gpe_device, wakeup->gpe_number);
|
||||
if (adev->wakeup.flags.enabled) {
|
||||
acpi_disable_gpe(wakeup->gpe_device, wakeup->gpe_number);
|
||||
adev->wakeup.flags.enabled = 0;
|
||||
}
|
||||
acpi_disable_wakeup_device_power(adev);
|
||||
}
|
||||
return 0;
|
||||
|
|
|
@ -844,6 +844,8 @@ static int ec_install_handlers(struct acpi_ec *ec)
|
|||
|
||||
static void ec_remove_handlers(struct acpi_ec *ec)
|
||||
{
|
||||
if (!test_bit(EC_FLAGS_HANDLERS_INSTALLED, &ec->flags))
|
||||
return;
|
||||
acpi_disable_gpe(NULL, ec->gpe);
|
||||
if (ACPI_FAILURE(acpi_remove_address_space_handler(ec->handle,
|
||||
ACPI_ADR_SPACE_EC, &acpi_ec_space_handler)))
|
||||
|
|
|
@ -325,6 +325,7 @@ static int acpi_fan_probe(struct platform_device *pdev)
|
|||
struct thermal_cooling_device *cdev;
|
||||
struct acpi_fan *fan;
|
||||
struct acpi_device *device = ACPI_COMPANION(&pdev->dev);
|
||||
char *name;
|
||||
|
||||
fan = devm_kzalloc(&pdev->dev, sizeof(*fan), GFP_KERNEL);
|
||||
if (!fan) {
|
||||
|
@ -346,7 +347,12 @@ static int acpi_fan_probe(struct platform_device *pdev)
|
|||
}
|
||||
}
|
||||
|
||||
cdev = thermal_cooling_device_register("Fan", device,
|
||||
if (!strncmp(pdev->name, "PNP0C0B", strlen("PNP0C0B")))
|
||||
name = "Fan";
|
||||
else
|
||||
name = acpi_device_bid(device);
|
||||
|
||||
cdev = thermal_cooling_device_register(name, device,
|
||||
&fan_cooling_ops);
|
||||
if (IS_ERR(cdev)) {
|
||||
result = PTR_ERR(cdev);
|
||||
|
|
|
@ -2214,7 +2214,7 @@ static void acpi_device_dep_initialize(struct acpi_device *adev)
|
|||
status = acpi_evaluate_reference(adev->handle, "_DEP", NULL,
|
||||
&dep_devices);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
dev_err(&adev->dev, "Failed to evaluate _DEP.\n");
|
||||
dev_dbg(&adev->dev, "Failed to evaluate _DEP.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2224,7 +2224,7 @@ static void acpi_device_dep_initialize(struct acpi_device *adev)
|
|||
|
||||
status = acpi_get_object_info(dep_devices.handles[i], &info);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
dev_err(&adev->dev, "Error reading device info\n");
|
||||
dev_dbg(&adev->dev, "Error reading _DEP device info\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -346,22 +346,16 @@ acpi_evaluate_reference(acpi_handle handle,
|
|||
package = buffer.pointer;
|
||||
|
||||
if ((buffer.length == 0) || !package) {
|
||||
printk(KERN_ERR PREFIX "No return object (len %X ptr %p)\n",
|
||||
(unsigned)buffer.length, package);
|
||||
status = AE_BAD_DATA;
|
||||
acpi_util_eval_error(handle, pathname, status);
|
||||
goto end;
|
||||
}
|
||||
if (package->type != ACPI_TYPE_PACKAGE) {
|
||||
printk(KERN_ERR PREFIX "Expecting a [Package], found type %X\n",
|
||||
package->type);
|
||||
status = AE_BAD_DATA;
|
||||
acpi_util_eval_error(handle, pathname, status);
|
||||
goto end;
|
||||
}
|
||||
if (!package->package.count) {
|
||||
printk(KERN_ERR PREFIX "[Package] has zero elements (%p)\n",
|
||||
package);
|
||||
status = AE_BAD_DATA;
|
||||
acpi_util_eval_error(handle, pathname, status);
|
||||
goto end;
|
||||
|
@ -380,17 +374,13 @@ acpi_evaluate_reference(acpi_handle handle,
|
|||
|
||||
if (element->type != ACPI_TYPE_LOCAL_REFERENCE) {
|
||||
status = AE_BAD_DATA;
|
||||
printk(KERN_ERR PREFIX
|
||||
"Expecting a [Reference] package element, found type %X\n",
|
||||
element->type);
|
||||
acpi_util_eval_error(handle, pathname, status);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!element->reference.handle) {
|
||||
printk(KERN_WARNING PREFIX "Invalid reference in"
|
||||
" package %s\n", pathname);
|
||||
status = AE_NULL_ENTRY;
|
||||
acpi_util_eval_error(handle, pathname, status);
|
||||
break;
|
||||
}
|
||||
/* Get the acpi_handle. */
|
||||
|
|
|
@ -155,6 +155,7 @@ struct acpi_video_bus {
|
|||
u8 dos_setting;
|
||||
struct acpi_video_enumerated_device *attached_array;
|
||||
u8 attached_count;
|
||||
u8 child_count;
|
||||
struct acpi_video_bus_cap cap;
|
||||
struct acpi_video_bus_flags flags;
|
||||
struct list_head video_device_list;
|
||||
|
@ -1159,8 +1160,12 @@ static bool acpi_video_device_in_dod(struct acpi_video_device *device)
|
|||
struct acpi_video_bus *video = device->video;
|
||||
int i;
|
||||
|
||||
/* If we have a broken _DOD, no need to test */
|
||||
if (!video->attached_count)
|
||||
/*
|
||||
* If we have a broken _DOD or we have more than 8 output devices
|
||||
* under the graphics controller node that we can't proper deal with
|
||||
* in the operation region code currently, no need to test.
|
||||
*/
|
||||
if (!video->attached_count || video->child_count > 8)
|
||||
return true;
|
||||
|
||||
for (i = 0; i < video->attached_count; i++) {
|
||||
|
@ -1413,6 +1418,7 @@ acpi_video_bus_get_devices(struct acpi_video_bus *video,
|
|||
dev_err(&dev->dev, "Can't attach device\n");
|
||||
break;
|
||||
}
|
||||
video->child_count++;
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
|
|
@ -61,7 +61,7 @@ config ATA_ACPI
|
|||
|
||||
config SATA_ZPODD
|
||||
bool "SATA Zero Power Optical Disc Drive (ZPODD) support"
|
||||
depends on ATA_ACPI && PM_RUNTIME
|
||||
depends on ATA_ACPI && PM
|
||||
default n
|
||||
help
|
||||
This option adds support for SATA Zero Power Optical Disc
|
||||
|
|
|
@ -84,7 +84,11 @@ struct dev_pm_opp {
|
|||
*
|
||||
* This is an internal data structure maintaining the link to opps attached to
|
||||
* a device. This structure is not meant to be shared to users as it is
|
||||
* meant for book keeping and private to OPP library
|
||||
* meant for book keeping and private to OPP library.
|
||||
*
|
||||
* Because the opp structures can be used from both rcu and srcu readers, we
|
||||
* need to wait for the grace period of both of them before freeing any
|
||||
* resources. And so we have used kfree_rcu() from within call_srcu() handlers.
|
||||
*/
|
||||
struct device_opp {
|
||||
struct list_head node;
|
||||
|
@ -382,12 +386,34 @@ struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_floor);
|
||||
|
||||
static struct device_opp *add_device_opp(struct device *dev)
|
||||
{
|
||||
struct device_opp *dev_opp;
|
||||
|
||||
/*
|
||||
* Allocate a new device OPP table. In the infrequent case where a new
|
||||
* device is needed to be added, we pay this penalty.
|
||||
*/
|
||||
dev_opp = kzalloc(sizeof(*dev_opp), GFP_KERNEL);
|
||||
if (!dev_opp)
|
||||
return NULL;
|
||||
|
||||
dev_opp->dev = dev;
|
||||
srcu_init_notifier_head(&dev_opp->srcu_head);
|
||||
INIT_LIST_HEAD(&dev_opp->opp_list);
|
||||
|
||||
/* Secure the device list modification */
|
||||
list_add_rcu(&dev_opp->node, &dev_opp_list);
|
||||
return dev_opp;
|
||||
}
|
||||
|
||||
static int dev_pm_opp_add_dynamic(struct device *dev, unsigned long freq,
|
||||
unsigned long u_volt, bool dynamic)
|
||||
{
|
||||
struct device_opp *dev_opp = NULL;
|
||||
struct dev_pm_opp *opp, *new_opp;
|
||||
struct list_head *head;
|
||||
int ret;
|
||||
|
||||
/* allocate new OPP node */
|
||||
new_opp = kzalloc(sizeof(*new_opp), GFP_KERNEL);
|
||||
|
@ -400,7 +426,6 @@ static int dev_pm_opp_add_dynamic(struct device *dev, unsigned long freq,
|
|||
mutex_lock(&dev_opp_list_lock);
|
||||
|
||||
/* populate the opp table */
|
||||
new_opp->dev_opp = dev_opp;
|
||||
new_opp->rate = freq;
|
||||
new_opp->u_volt = u_volt;
|
||||
new_opp->available = true;
|
||||
|
@ -409,27 +434,12 @@ static int dev_pm_opp_add_dynamic(struct device *dev, unsigned long freq,
|
|||
/* Check for existing list for 'dev' */
|
||||
dev_opp = find_device_opp(dev);
|
||||
if (IS_ERR(dev_opp)) {
|
||||
/*
|
||||
* Allocate a new device OPP table. In the infrequent case
|
||||
* where a new device is needed to be added, we pay this
|
||||
* penalty.
|
||||
*/
|
||||
dev_opp = kzalloc(sizeof(struct device_opp), GFP_KERNEL);
|
||||
dev_opp = add_device_opp(dev);
|
||||
if (!dev_opp) {
|
||||
mutex_unlock(&dev_opp_list_lock);
|
||||
kfree(new_opp);
|
||||
dev_warn(dev,
|
||||
"%s: Unable to create device OPP structure\n",
|
||||
__func__);
|
||||
return -ENOMEM;
|
||||
ret = -ENOMEM;
|
||||
goto free_opp;
|
||||
}
|
||||
|
||||
dev_opp->dev = dev;
|
||||
srcu_init_notifier_head(&dev_opp->srcu_head);
|
||||
INIT_LIST_HEAD(&dev_opp->opp_list);
|
||||
|
||||
/* Secure the device list modification */
|
||||
list_add_rcu(&dev_opp->node, &dev_opp_list);
|
||||
head = &dev_opp->opp_list;
|
||||
goto list_add;
|
||||
}
|
||||
|
@ -448,18 +458,17 @@ static int dev_pm_opp_add_dynamic(struct device *dev, unsigned long freq,
|
|||
|
||||
/* Duplicate OPPs ? */
|
||||
if (new_opp->rate == opp->rate) {
|
||||
int ret = opp->available && new_opp->u_volt == opp->u_volt ?
|
||||
ret = opp->available && new_opp->u_volt == opp->u_volt ?
|
||||
0 : -EEXIST;
|
||||
|
||||
dev_warn(dev, "%s: duplicate OPPs detected. Existing: freq: %lu, volt: %lu, enabled: %d. New: freq: %lu, volt: %lu, enabled: %d\n",
|
||||
__func__, opp->rate, opp->u_volt, opp->available,
|
||||
new_opp->rate, new_opp->u_volt, new_opp->available);
|
||||
mutex_unlock(&dev_opp_list_lock);
|
||||
kfree(new_opp);
|
||||
return ret;
|
||||
goto free_opp;
|
||||
}
|
||||
|
||||
list_add:
|
||||
new_opp->dev_opp = dev_opp;
|
||||
list_add_rcu(&new_opp->node, head);
|
||||
mutex_unlock(&dev_opp_list_lock);
|
||||
|
||||
|
@ -469,6 +478,11 @@ static int dev_pm_opp_add_dynamic(struct device *dev, unsigned long freq,
|
|||
*/
|
||||
srcu_notifier_call_chain(&dev_opp->srcu_head, OPP_EVENT_ADD, new_opp);
|
||||
return 0;
|
||||
|
||||
free_opp:
|
||||
mutex_unlock(&dev_opp_list_lock);
|
||||
kfree(new_opp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -511,10 +525,11 @@ static void kfree_device_rcu(struct rcu_head *head)
|
|||
{
|
||||
struct device_opp *device_opp = container_of(head, struct device_opp, rcu_head);
|
||||
|
||||
kfree(device_opp);
|
||||
kfree_rcu(device_opp, rcu_head);
|
||||
}
|
||||
|
||||
void __dev_pm_opp_remove(struct device_opp *dev_opp, struct dev_pm_opp *opp)
|
||||
static void __dev_pm_opp_remove(struct device_opp *dev_opp,
|
||||
struct dev_pm_opp *opp)
|
||||
{
|
||||
/*
|
||||
* Notify the changes in the availability of the operable
|
||||
|
@ -592,7 +607,7 @@ EXPORT_SYMBOL_GPL(dev_pm_opp_remove);
|
|||
static int opp_set_availability(struct device *dev, unsigned long freq,
|
||||
bool availability_req)
|
||||
{
|
||||
struct device_opp *tmp_dev_opp, *dev_opp = ERR_PTR(-ENODEV);
|
||||
struct device_opp *dev_opp;
|
||||
struct dev_pm_opp *new_opp, *tmp_opp, *opp = ERR_PTR(-ENODEV);
|
||||
int r = 0;
|
||||
|
||||
|
@ -606,12 +621,7 @@ static int opp_set_availability(struct device *dev, unsigned long freq,
|
|||
mutex_lock(&dev_opp_list_lock);
|
||||
|
||||
/* Find the device_opp */
|
||||
list_for_each_entry(tmp_dev_opp, &dev_opp_list, node) {
|
||||
if (dev == tmp_dev_opp->dev) {
|
||||
dev_opp = tmp_dev_opp;
|
||||
break;
|
||||
}
|
||||
}
|
||||
dev_opp = find_device_opp(dev);
|
||||
if (IS_ERR(dev_opp)) {
|
||||
r = PTR_ERR(dev_opp);
|
||||
dev_warn(dev, "%s: Device OPP not found (%d)\n", __func__, r);
|
||||
|
@ -768,7 +778,7 @@ EXPORT_SYMBOL_GPL(of_init_opp_table);
|
|||
*/
|
||||
void of_free_opp_table(struct device *dev)
|
||||
{
|
||||
struct device_opp *dev_opp = find_device_opp(dev);
|
||||
struct device_opp *dev_opp;
|
||||
struct dev_pm_opp *opp, *tmp;
|
||||
|
||||
/* Check for existing list for 'dev' */
|
||||
|
|
|
@ -199,7 +199,14 @@ static signed int pid_calc(struct _pid *pid, int32_t busy)
|
|||
|
||||
pid->integral += fp_error;
|
||||
|
||||
/* limit the integral term */
|
||||
/*
|
||||
* We limit the integral here so that it will never
|
||||
* get higher than 30. This prevents it from becoming
|
||||
* too large an input over long periods of time and allows
|
||||
* it to get factored out sooner.
|
||||
*
|
||||
* The value of 30 was chosen through experimentation.
|
||||
*/
|
||||
integral_limit = int_tofp(30);
|
||||
if (pid->integral > integral_limit)
|
||||
pid->integral = integral_limit;
|
||||
|
@ -616,6 +623,11 @@ static void intel_pstate_get_min_max(struct cpudata *cpu, int *min, int *max)
|
|||
if (limits.no_turbo || limits.turbo_disabled)
|
||||
max_perf = cpu->pstate.max_pstate;
|
||||
|
||||
/*
|
||||
* performance can be limited by user through sysfs, by cpufreq
|
||||
* policy, or by cpu specific default values determined through
|
||||
* experimentation.
|
||||
*/
|
||||
max_perf_adj = fp_toint(mul_fp(int_tofp(max_perf), limits.max_perf));
|
||||
*max = clamp_t(int, max_perf_adj,
|
||||
cpu->pstate.min_pstate, cpu->pstate.turbo_pstate);
|
||||
|
@ -717,11 +729,29 @@ static inline int32_t intel_pstate_get_scaled_busy(struct cpudata *cpu)
|
|||
u32 duration_us;
|
||||
u32 sample_time;
|
||||
|
||||
/*
|
||||
* core_busy is the ratio of actual performance to max
|
||||
* max_pstate is the max non turbo pstate available
|
||||
* current_pstate was the pstate that was requested during
|
||||
* the last sample period.
|
||||
*
|
||||
* We normalize core_busy, which was our actual percent
|
||||
* performance to what we requested during the last sample
|
||||
* period. The result will be a percentage of busy at a
|
||||
* specified pstate.
|
||||
*/
|
||||
core_busy = cpu->sample.core_pct_busy;
|
||||
max_pstate = int_tofp(cpu->pstate.max_pstate);
|
||||
current_pstate = int_tofp(cpu->pstate.current_pstate);
|
||||
core_busy = mul_fp(core_busy, div_fp(max_pstate, current_pstate));
|
||||
|
||||
/*
|
||||
* Since we have a deferred timer, it will not fire unless
|
||||
* we are in C0. So, determine if the actual elapsed time
|
||||
* is significantly greater (3x) than our sample interval. If it
|
||||
* is, then we were idle for a long enough period of time
|
||||
* to adjust our busyness.
|
||||
*/
|
||||
sample_time = pid_params.sample_rate_ms * USEC_PER_MSEC;
|
||||
duration_us = (u32) ktime_us_delta(cpu->sample.time,
|
||||
cpu->last_sample_time);
|
||||
|
@ -948,6 +978,7 @@ static struct cpufreq_driver intel_pstate_driver = {
|
|||
|
||||
static int __initdata no_load;
|
||||
static int __initdata no_hwp;
|
||||
static unsigned int force_load;
|
||||
|
||||
static int intel_pstate_msrs_not_valid(void)
|
||||
{
|
||||
|
@ -1094,7 +1125,8 @@ static bool intel_pstate_platform_pwr_mgmt_exists(void)
|
|||
case PSS:
|
||||
return intel_pstate_no_acpi_pss();
|
||||
case PPC:
|
||||
return intel_pstate_has_acpi_ppc();
|
||||
return intel_pstate_has_acpi_ppc() &&
|
||||
(!force_load);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1175,6 +1207,8 @@ static int __init intel_pstate_setup(char *str)
|
|||
no_load = 1;
|
||||
if (!strcmp(str, "no_hwp"))
|
||||
no_hwp = 1;
|
||||
if (!strcmp(str, "force"))
|
||||
force_load = 1;
|
||||
return 0;
|
||||
}
|
||||
early_param("intel_pstate", intel_pstate_setup);
|
||||
|
|
|
@ -203,7 +203,7 @@ static struct gpio_leds_priv *gpio_leds_create(struct platform_device *pdev)
|
|||
fwnode_property_read_string(child, "linux,default-trigger",
|
||||
&led.default_trigger);
|
||||
|
||||
if (!fwnode_property_read_string(child, "linux,default_state",
|
||||
if (!fwnode_property_read_string(child, "default-state",
|
||||
&state)) {
|
||||
if (!strcmp(state, "keep"))
|
||||
led.default_state = LEDS_GPIO_DEFSTATE_KEEP;
|
||||
|
|
|
@ -104,7 +104,7 @@ config VIDEO_OMAP3_DEBUG
|
|||
config VIDEO_S3C_CAMIF
|
||||
tristate "Samsung S3C24XX/S3C64XX SoC Camera Interface driver"
|
||||
depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API
|
||||
depends on PM_RUNTIME
|
||||
depends on PM
|
||||
depends on ARCH_S3C64XX || PLAT_S3C24XX || COMPILE_TEST
|
||||
depends on HAS_DMA
|
||||
select VIDEOBUF2_DMA_CONTIG
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
config VIDEO_SAMSUNG_S5P_TV
|
||||
bool "Samsung TV driver for S5P platform"
|
||||
depends on PM_RUNTIME
|
||||
depends on PM
|
||||
depends on ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST
|
||||
default n
|
||||
---help---
|
||||
|
|
|
@ -2561,7 +2561,7 @@ static int atmci_runtime_resume(struct device *dev)
|
|||
static const struct dev_pm_ops atmci_dev_pm_ops = {
|
||||
SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
|
||||
pm_runtime_force_resume)
|
||||
SET_PM_RUNTIME_PM_OPS(atmci_runtime_suspend, atmci_runtime_resume, NULL)
|
||||
SET_RUNTIME_PM_OPS(atmci_runtime_suspend, atmci_runtime_resume, NULL)
|
||||
};
|
||||
|
||||
static struct platform_driver atmci_driver = {
|
||||
|
|
|
@ -2154,7 +2154,7 @@ static int trf7970a_resume(struct device *dev)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int trf7970a_pm_runtime_suspend(struct device *dev)
|
||||
{
|
||||
struct spi_device *spi = container_of(dev, struct spi_device, dev);
|
||||
|
|
|
@ -318,7 +318,7 @@ static int omap_usb2_remove(struct platform_device *pdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
|
||||
static int omap_usb2_runtime_suspend(struct device *dev)
|
||||
{
|
||||
|
|
|
@ -423,7 +423,7 @@ static int ti_pipe3_remove(struct platform_device *pdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
|
||||
static int ti_pipe3_runtime_suspend(struct device *dev)
|
||||
{
|
||||
|
|
|
@ -951,8 +951,6 @@ static int pm2xxx_wall_charger_suspend(struct device *dev)
|
|||
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
|
||||
static int pm2xxx_runtime_suspend(struct device *dev)
|
||||
{
|
||||
struct i2c_client *pm2xxx_i2c_client = to_i2c_client(dev);
|
||||
|
@ -977,8 +975,6 @@ static int pm2xxx_runtime_resume(struct device *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static const struct dev_pm_ops pm2xxx_pm_ops = {
|
||||
SET_SYSTEM_SLEEP_PM_OPS(pm2xxx_wall_charger_suspend,
|
||||
pm2xxx_wall_charger_resume)
|
||||
|
|
|
@ -213,8 +213,6 @@ static int scsi_bus_restore(struct device *dev)
|
|||
|
||||
#endif /* CONFIG_PM_SLEEP */
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
|
||||
static int sdev_runtime_suspend(struct device *dev)
|
||||
{
|
||||
const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
|
||||
|
@ -332,14 +330,6 @@ void scsi_autopm_put_host(struct Scsi_Host *shost)
|
|||
pm_runtime_put_sync(&shost->shost_gendev);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#define scsi_runtime_suspend NULL
|
||||
#define scsi_runtime_resume NULL
|
||||
#define scsi_runtime_idle NULL
|
||||
|
||||
#endif /* CONFIG_PM_RUNTIME */
|
||||
|
||||
const struct dev_pm_ops scsi_bus_pm_ops = {
|
||||
.prepare = scsi_bus_prepare,
|
||||
.suspend = scsi_bus_suspend,
|
||||
|
|
|
@ -155,8 +155,7 @@ static inline void scsi_netlink_exit(void) {}
|
|||
/* scsi_pm.c */
|
||||
#ifdef CONFIG_PM
|
||||
extern const struct dev_pm_ops scsi_bus_pm_ops;
|
||||
#endif
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
|
||||
extern void scsi_autopm_get_target(struct scsi_target *);
|
||||
extern void scsi_autopm_put_target(struct scsi_target *);
|
||||
extern int scsi_autopm_get_host(struct Scsi_Host *);
|
||||
|
@ -166,7 +165,7 @@ static inline void scsi_autopm_get_target(struct scsi_target *t) {}
|
|||
static inline void scsi_autopm_put_target(struct scsi_target *t) {}
|
||||
static inline int scsi_autopm_get_host(struct Scsi_Host *h) { return 0; }
|
||||
static inline void scsi_autopm_put_host(struct Scsi_Host *h) {}
|
||||
#endif /* CONFIG_PM_RUNTIME */
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
extern struct async_domain scsi_sd_pm_domain;
|
||||
extern struct async_domain scsi_sd_probe_domain;
|
||||
|
|
|
@ -62,12 +62,7 @@ static int ufshcd_pci_resume(struct device *dev)
|
|||
{
|
||||
return ufshcd_system_resume(dev_get_drvdata(dev));
|
||||
}
|
||||
#else
|
||||
#define ufshcd_pci_suspend NULL
|
||||
#define ufshcd_pci_resume NULL
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
static int ufshcd_pci_runtime_suspend(struct device *dev)
|
||||
{
|
||||
return ufshcd_runtime_suspend(dev_get_drvdata(dev));
|
||||
|
@ -80,11 +75,13 @@ static int ufshcd_pci_runtime_idle(struct device *dev)
|
|||
{
|
||||
return ufshcd_runtime_idle(dev_get_drvdata(dev));
|
||||
}
|
||||
#else /* !CONFIG_PM_RUNTIME */
|
||||
#else /* !CONFIG_PM */
|
||||
#define ufshcd_pci_suspend NULL
|
||||
#define ufshcd_pci_resume NULL
|
||||
#define ufshcd_pci_runtime_suspend NULL
|
||||
#define ufshcd_pci_runtime_resume NULL
|
||||
#define ufshcd_pci_runtime_idle NULL
|
||||
#endif /* CONFIG_PM_RUNTIME */
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
/**
|
||||
* ufshcd_pci_shutdown - main function to put the controller in reset state
|
||||
|
|
|
@ -261,12 +261,7 @@ static int ufshcd_pltfrm_resume(struct device *dev)
|
|||
{
|
||||
return ufshcd_system_resume(dev_get_drvdata(dev));
|
||||
}
|
||||
#else
|
||||
#define ufshcd_pltfrm_suspend NULL
|
||||
#define ufshcd_pltfrm_resume NULL
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
static int ufshcd_pltfrm_runtime_suspend(struct device *dev)
|
||||
{
|
||||
return ufshcd_runtime_suspend(dev_get_drvdata(dev));
|
||||
|
@ -279,11 +274,13 @@ static int ufshcd_pltfrm_runtime_idle(struct device *dev)
|
|||
{
|
||||
return ufshcd_runtime_idle(dev_get_drvdata(dev));
|
||||
}
|
||||
#else /* !CONFIG_PM_RUNTIME */
|
||||
#else /* !CONFIG_PM */
|
||||
#define ufshcd_pltfrm_suspend NULL
|
||||
#define ufshcd_pltfrm_resume NULL
|
||||
#define ufshcd_pltfrm_runtime_suspend NULL
|
||||
#define ufshcd_pltfrm_runtime_resume NULL
|
||||
#define ufshcd_pltfrm_runtime_idle NULL
|
||||
#endif /* CONFIG_PM_RUNTIME */
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
static void ufshcd_pltfrm_shutdown(struct platform_device *pdev)
|
||||
{
|
||||
|
|
|
@ -491,7 +491,7 @@ static int mcfqspi_resume(struct device *dev)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int mcfqspi_runtime_suspend(struct device *dev)
|
||||
{
|
||||
struct spi_master *master = dev_get_drvdata(dev);
|
||||
|
|
|
@ -523,7 +523,7 @@ static int orion_spi_remove(struct platform_device *pdev)
|
|||
|
||||
MODULE_ALIAS("platform:" DRIVER_NAME);
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int orion_spi_runtime_suspend(struct device *dev)
|
||||
{
|
||||
struct spi_master *master = dev_get_drvdata(dev);
|
||||
|
|
|
@ -1531,7 +1531,7 @@ static int pxa2xx_spi_resume(struct device *dev)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int pxa2xx_spi_runtime_suspend(struct device *dev)
|
||||
{
|
||||
struct driver_data *drv_data = dev_get_drvdata(dev);
|
||||
|
|
|
@ -646,7 +646,7 @@ static int spi_qup_probe(struct platform_device *pdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int spi_qup_pm_suspend_runtime(struct device *device)
|
||||
{
|
||||
struct spi_master *master = dev_get_drvdata(device);
|
||||
|
@ -672,7 +672,7 @@ static int spi_qup_pm_resume_runtime(struct device *device)
|
|||
writel_relaxed(config, controller->base + QUP_CONFIG);
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_PM_RUNTIME */
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int spi_qup_suspend(struct device *device)
|
||||
|
|
|
@ -799,7 +799,7 @@ static int rockchip_spi_resume(struct device *dev)
|
|||
}
|
||||
#endif /* CONFIG_PM_SLEEP */
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int rockchip_spi_runtime_suspend(struct device *dev)
|
||||
{
|
||||
struct spi_master *master = dev_get_drvdata(dev);
|
||||
|
@ -827,7 +827,7 @@ static int rockchip_spi_runtime_resume(struct device *dev)
|
|||
|
||||
return ret;
|
||||
}
|
||||
#endif /* CONFIG_PM_RUNTIME */
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
static const struct dev_pm_ops rockchip_spi_pm = {
|
||||
SET_SYSTEM_SLEEP_PM_OPS(rockchip_spi_suspend, rockchip_spi_resume)
|
||||
|
|
|
@ -1267,7 +1267,7 @@ static int s3c64xx_spi_resume(struct device *dev)
|
|||
}
|
||||
#endif /* CONFIG_PM_SLEEP */
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int s3c64xx_spi_runtime_suspend(struct device *dev)
|
||||
{
|
||||
struct spi_master *master = dev_get_drvdata(dev);
|
||||
|
@ -1297,7 +1297,7 @@ static int s3c64xx_spi_runtime_resume(struct device *dev)
|
|||
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_PM_RUNTIME */
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
static const struct dev_pm_ops s3c64xx_spi_pm = {
|
||||
SET_SYSTEM_SLEEP_PM_OPS(s3c64xx_spi_suspend, s3c64xx_spi_resume)
|
||||
|
|
|
@ -53,7 +53,7 @@ if WIMAX_GDM72XX_USB
|
|||
|
||||
config WIMAX_GDM72XX_USB_PM
|
||||
bool "Enable power management support"
|
||||
depends on PM_RUNTIME
|
||||
depends on PM
|
||||
help
|
||||
Enable USB power management in order to reduce power consumption
|
||||
while the interface is not in use.
|
||||
|
|
|
@ -530,7 +530,7 @@ static int dw8250_resume(struct device *dev)
|
|||
}
|
||||
#endif /* CONFIG_PM_SLEEP */
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int dw8250_runtime_suspend(struct device *dev)
|
||||
{
|
||||
struct dw8250_data *data = dev_get_drvdata(dev);
|
||||
|
|
|
@ -244,7 +244,7 @@ static int mtk8250_resume(struct device *dev)
|
|||
}
|
||||
#endif /* CONFIG_PM_SLEEP */
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int mtk8250_runtime_suspend(struct device *dev)
|
||||
{
|
||||
struct mtk8250_data *data = dev_get_drvdata(dev);
|
||||
|
|
|
@ -1252,12 +1252,7 @@ static int serial_hsu_resume(struct pci_dev *pdev)
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#define serial_hsu_suspend NULL
|
||||
#define serial_hsu_resume NULL
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
static int serial_hsu_runtime_idle(struct device *dev)
|
||||
{
|
||||
pm_schedule_suspend(dev, 500);
|
||||
|
@ -1274,6 +1269,8 @@ static int serial_hsu_runtime_resume(struct device *dev)
|
|||
return 0;
|
||||
}
|
||||
#else
|
||||
#define serial_hsu_suspend NULL
|
||||
#define serial_hsu_resume NULL
|
||||
#define serial_hsu_runtime_idle NULL
|
||||
#define serial_hsu_runtime_suspend NULL
|
||||
#define serial_hsu_runtime_resume NULL
|
||||
|
|
|
@ -1792,7 +1792,7 @@ static void __exit msm_serial_hs_exit(void)
|
|||
}
|
||||
module_exit(msm_serial_hs_exit);
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int msm_hs_runtime_idle(struct device *dev)
|
||||
{
|
||||
/*
|
||||
|
|
|
@ -1776,7 +1776,7 @@ static void serial_omap_mdr1_errataset(struct uart_omap_port *up, u8 mdr1)
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static void serial_omap_restore_context(struct uart_omap_port *up)
|
||||
{
|
||||
if (up->errata & UART_ERRATA_i202_MDR1_ACCESS)
|
||||
|
|
|
@ -43,7 +43,7 @@ config USB_DYNAMIC_MINORS
|
|||
|
||||
config USB_OTG
|
||||
bool "OTG support"
|
||||
depends on PM_RUNTIME
|
||||
depends on PM
|
||||
default n
|
||||
help
|
||||
The most notable feature of USB OTG is support for a
|
||||
|
|
|
@ -20,7 +20,7 @@ config AB8500_USB
|
|||
|
||||
config FSL_USB2_OTG
|
||||
bool "Freescale USB OTG Transceiver Driver"
|
||||
depends on USB_EHCI_FSL && USB_FSL_USB2 && USB_OTG_FSM && PM_RUNTIME
|
||||
depends on USB_EHCI_FSL && USB_FSL_USB2 && USB_OTG_FSM && PM
|
||||
select USB_OTG
|
||||
select USB_PHY
|
||||
help
|
||||
|
@ -153,7 +153,7 @@ config USB_MSM_OTG
|
|||
|
||||
config USB_MV_OTG
|
||||
tristate "Marvell USB OTG support"
|
||||
depends on USB_EHCI_MV && USB_MV_UDC && PM_RUNTIME
|
||||
depends on USB_EHCI_MV && USB_MV_UDC && PM
|
||||
select USB_OTG
|
||||
select USB_PHY
|
||||
help
|
||||
|
|
|
@ -41,7 +41,7 @@ config USB_STORAGE_REALTEK
|
|||
|
||||
config REALTEK_AUTOPM
|
||||
bool "Realtek Card Reader autosuspend support"
|
||||
depends on USB_STORAGE_REALTEK && PM_RUNTIME
|
||||
depends on USB_STORAGE_REALTEK && PM
|
||||
default y
|
||||
|
||||
config USB_STORAGE_DATAFAB
|
||||
|
|
|
@ -1630,7 +1630,7 @@ static int s3c_fb_resume(struct device *dev)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int s3c_fb_runtime_suspend(struct device *dev)
|
||||
{
|
||||
struct s3c_fb *sfb = dev_get_drvdata(dev);
|
||||
|
|
|
@ -569,7 +569,7 @@ EXPORT_SYMBOL_GPL(sh_mobile_meram_cache_update);
|
|||
* Power management
|
||||
*/
|
||||
|
||||
#if defined(CONFIG_PM_SLEEP) || defined(CONFIG_PM_RUNTIME)
|
||||
#ifdef CONFIG_PM
|
||||
static int sh_mobile_meram_suspend(struct device *dev)
|
||||
{
|
||||
struct platform_device *pdev = to_platform_device(dev);
|
||||
|
@ -612,7 +612,7 @@ static int sh_mobile_meram_resume(struct device *dev)
|
|||
meram_write_reg(priv->base, common_regs[i], priv->regs[i]);
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_PM_SLEEP || CONFIG_PM_RUNTIME */
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
static UNIVERSAL_DEV_PM_OPS(sh_mobile_meram_dev_pm_ops,
|
||||
sh_mobile_meram_suspend,
|
||||
|
|
|
@ -313,6 +313,7 @@ struct acpi_device_wakeup_flags {
|
|||
u8 valid:1; /* Can successfully enable wakeup? */
|
||||
u8 run_wake:1; /* Run-Wake GPE devices */
|
||||
u8 notifier_present:1; /* Wake-up notify handler has been installed */
|
||||
u8 enabled:1; /* Enabled for wakeup */
|
||||
};
|
||||
|
||||
struct acpi_device_wakeup_context {
|
||||
|
|
|
@ -351,8 +351,6 @@ struct dev_pm_ops {
|
|||
#define SET_RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn)
|
||||
#endif
|
||||
|
||||
#define SET_PM_RUNTIME_PM_OPS SET_RUNTIME_PM_OPS
|
||||
|
||||
/*
|
||||
* Use this if you want to use the same suspend and resume callbacks for suspend
|
||||
* to RAM and hibernation.
|
||||
|
|
|
@ -441,13 +441,13 @@ static inline int scsi_execute_req(struct scsi_device *sdev,
|
|||
extern void sdev_disable_disk_events(struct scsi_device *sdev);
|
||||
extern void sdev_enable_disk_events(struct scsi_device *sdev);
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
extern int scsi_autopm_get_device(struct scsi_device *);
|
||||
extern void scsi_autopm_put_device(struct scsi_device *);
|
||||
#else
|
||||
static inline int scsi_autopm_get_device(struct scsi_device *d) { return 0; }
|
||||
static inline void scsi_autopm_put_device(struct scsi_device *d) {}
|
||||
#endif /* CONFIG_PM_RUNTIME */
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
static inline int __must_check scsi_device_reprobe(struct scsi_device *sdev)
|
||||
{
|
||||
|
|
|
@ -55,7 +55,7 @@ obj-$(CONFIG_EVENT_TRACING) += trace_events_filter.o
|
|||
obj-$(CONFIG_EVENT_TRACING) += trace_events_trigger.o
|
||||
obj-$(CONFIG_KPROBE_EVENT) += trace_kprobe.o
|
||||
obj-$(CONFIG_TRACEPOINTS) += power-traces.o
|
||||
ifeq ($(CONFIG_PM_RUNTIME),y)
|
||||
ifeq ($(CONFIG_PM),y)
|
||||
obj-$(CONFIG_TRACEPOINTS) += rpm-traces.o
|
||||
endif
|
||||
ifeq ($(CONFIG_TRACING),y)
|
||||
|
|
|
@ -1676,7 +1676,7 @@ irqreturn_t azx_interrupt(int irq, void *dev_id)
|
|||
u8 sd_status;
|
||||
int i;
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
if (chip->driver_caps & AZX_DCAPS_PM_RUNTIME)
|
||||
if (!pm_runtime_active(chip->card->dev))
|
||||
return IRQ_NONE;
|
||||
|
|
|
@ -872,7 +872,7 @@ static int azx_resume(struct device *dev)
|
|||
}
|
||||
#endif /* CONFIG_PM_SLEEP || SUPPORT_VGA_SWITCHEROO */
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int azx_runtime_suspend(struct device *dev)
|
||||
{
|
||||
struct snd_card *card = dev_get_drvdata(dev);
|
||||
|
@ -970,9 +970,6 @@ static int azx_runtime_idle(struct device *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_PM_RUNTIME */
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static const struct dev_pm_ops azx_pm = {
|
||||
SET_SYSTEM_SLEEP_PM_OPS(azx_suspend, azx_resume)
|
||||
SET_RUNTIME_PM_OPS(azx_runtime_suspend, azx_runtime_resume, azx_runtime_idle)
|
||||
|
|
|
@ -550,7 +550,7 @@ static int cs35l32_i2c_remove(struct i2c_client *i2c_client)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int cs35l32_runtime_suspend(struct device *dev)
|
||||
{
|
||||
struct cs35l32_private *cs35l32 = dev_get_drvdata(dev);
|
||||
|
|
|
@ -537,7 +537,7 @@ int cs42xx8_probe(struct device *dev, struct regmap *regmap)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(cs42xx8_probe);
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int cs42xx8_runtime_resume(struct device *dev)
|
||||
{
|
||||
struct cs42xx8_priv *cs42xx8 = dev_get_drvdata(dev);
|
||||
|
|
|
@ -2611,7 +2611,7 @@ static int max98090_i2c_remove(struct i2c_client *client)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int max98090_runtime_resume(struct device *dev)
|
||||
{
|
||||
struct max98090_priv *max98090 = dev_get_drvdata(dev);
|
||||
|
|
|
@ -517,7 +517,7 @@ void pcm512x_remove(struct device *dev)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(pcm512x_remove);
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int pcm512x_suspend(struct device *dev)
|
||||
{
|
||||
struct pcm512x_priv *pcm512x = dev_get_drvdata(dev);
|
||||
|
|
|
@ -115,7 +115,7 @@ static const struct snd_soc_dapm_route tas2552_audio_map[] = {
|
|||
{"ClassD", NULL, "PLL"},
|
||||
};
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static void tas2552_sw_shutdown(struct tas2552_data *tas_data, int sw_shutdown)
|
||||
{
|
||||
u8 cfg1_reg;
|
||||
|
@ -264,7 +264,7 @@ static int tas2552_mute(struct snd_soc_dai *dai, int mute)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int tas2552_runtime_suspend(struct device *dev)
|
||||
{
|
||||
struct tas2552_data *tas2552 = dev_get_drvdata(dev);
|
||||
|
|
|
@ -2440,7 +2440,7 @@ static int wm2200_i2c_remove(struct i2c_client *i2c)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int wm2200_runtime_suspend(struct device *dev)
|
||||
{
|
||||
struct wm2200_priv *wm2200 = dev_get_drvdata(dev);
|
||||
|
|
|
@ -2664,7 +2664,7 @@ static int wm5100_i2c_remove(struct i2c_client *i2c)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int wm5100_runtime_suspend(struct device *dev)
|
||||
{
|
||||
struct wm5100_priv *wm5100 = dev_get_drvdata(dev);
|
||||
|
|
|
@ -3785,7 +3785,7 @@ static int wm8962_i2c_remove(struct i2c_client *client)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int wm8962_runtime_resume(struct device *dev)
|
||||
{
|
||||
struct wm8962_priv *wm8962 = dev_get_drvdata(dev);
|
||||
|
|
|
@ -928,7 +928,7 @@ static int fsl_asrc_probe(struct platform_device *pdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int fsl_asrc_runtime_resume(struct device *dev)
|
||||
{
|
||||
struct fsl_asrc *asrc_priv = dev_get_drvdata(dev);
|
||||
|
@ -954,7 +954,7 @@ static int fsl_asrc_runtime_suspend(struct device *dev)
|
|||
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_PM_RUNTIME */
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int fsl_asrc_suspend(struct device *dev)
|
||||
|
|
|
@ -1135,7 +1135,7 @@ static inline const struct samsung_i2s_dai_data *samsung_i2s_get_driver_data(
|
|||
platform_get_device_id(pdev)->driver_data;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
#ifdef CONFIG_PM
|
||||
static int i2s_runtime_suspend(struct device *dev)
|
||||
{
|
||||
struct i2s_dai *i2s = dev_get_drvdata(dev);
|
||||
|
@ -1153,7 +1153,7 @@ static int i2s_runtime_resume(struct device *dev)
|
|||
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_PM_RUNTIME */
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
static int samsung_i2s_probe(struct platform_device *pdev)
|
||||
{
|
||||
|
|
|
@ -22,13 +22,13 @@
|
|||
|
||||
static void cpuidle_cpu_output(unsigned int cpu, int verbose)
|
||||
{
|
||||
int idlestates, idlestate;
|
||||
unsigned int idlestates, idlestate;
|
||||
char *tmp;
|
||||
|
||||
printf(_ ("Analyzing CPU %d:\n"), cpu);
|
||||
|
||||
idlestates = sysfs_get_idlestate_count(cpu);
|
||||
if (idlestates < 1) {
|
||||
if (idlestates == 0) {
|
||||
printf(_("CPU %u: No idle states\n"), cpu);
|
||||
return;
|
||||
}
|
||||
|
@ -100,10 +100,10 @@ static void cpuidle_general_output(void)
|
|||
static void proc_cpuidle_cpu_output(unsigned int cpu)
|
||||
{
|
||||
long max_allowed_cstate = 2000000000;
|
||||
int cstate, cstates;
|
||||
unsigned int cstate, cstates;
|
||||
|
||||
cstates = sysfs_get_idlestate_count(cpu);
|
||||
if (cstates < 1) {
|
||||
if (cstates == 0) {
|
||||
printf(_("CPU %u: No C-states info\n"), cpu);
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue