Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 376302
b: refs/heads/master
c: 955ef48
h: refs/heads/master
v: v3
  • Loading branch information
Viresh Kumar authored and Rafael J. Wysocki committed May 21, 2013
1 parent 665e624 commit 0d9eb02
Show file tree
Hide file tree
Showing 6 changed files with 106 additions and 81 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f1a0b8310c99a0e3d579e61d81870caec058db46
refs/heads/master: 955ef4833574636819cd269cfbae12f79cbde63a
2 changes: 1 addition & 1 deletion trunk/drivers/acpi/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ acpi-y += nvs.o
# Power management related files
acpi-y += wakeup.o
acpi-y += sleep.o
acpi-y += device_pm.o
acpi-$(CONFIG_PM) += device_pm.o
acpi-$(CONFIG_ACPI_SLEEP) += proc.o


Expand Down
126 changes: 62 additions & 64 deletions trunk/drivers/acpi/device_pm.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,68 @@
#define _COMPONENT ACPI_POWER_COMPONENT
ACPI_MODULE_NAME("device_pm");

static DEFINE_MUTEX(acpi_pm_notifier_lock);

/**
* acpi_add_pm_notifier - Register PM notifier for given ACPI device.
* @adev: ACPI device to add the notifier for.
* @context: Context information to pass to the notifier routine.
*
* NOTE: @adev need not be a run-wake or wakeup device to be a valid source of
* PM wakeup events. For example, wakeup events may be generated for bridges
* if one of the devices below the bridge is signaling wakeup, even if the
* bridge itself doesn't have a wakeup GPE associated with it.
*/
acpi_status acpi_add_pm_notifier(struct acpi_device *adev,
acpi_notify_handler handler, void *context)
{
acpi_status status = AE_ALREADY_EXISTS;

mutex_lock(&acpi_pm_notifier_lock);

if (adev->wakeup.flags.notifier_present)
goto out;

status = acpi_install_notify_handler(adev->handle,
ACPI_SYSTEM_NOTIFY,
handler, context);
if (ACPI_FAILURE(status))
goto out;

adev->wakeup.flags.notifier_present = true;

out:
mutex_unlock(&acpi_pm_notifier_lock);
return status;
}

/**
* acpi_remove_pm_notifier - Unregister PM notifier from given ACPI device.
* @adev: ACPI device to remove the notifier from.
*/
acpi_status acpi_remove_pm_notifier(struct acpi_device *adev,
acpi_notify_handler handler)
{
acpi_status status = AE_BAD_PARAMETER;

mutex_lock(&acpi_pm_notifier_lock);

if (!adev->wakeup.flags.notifier_present)
goto out;

status = acpi_remove_notify_handler(adev->handle,
ACPI_SYSTEM_NOTIFY,
handler);
if (ACPI_FAILURE(status))
goto out;

adev->wakeup.flags.notifier_present = false;

out:
mutex_unlock(&acpi_pm_notifier_lock);
return status;
}

/**
* acpi_power_state_string - String representation of ACPI device power state.
* @state: ACPI device power state to return the string representation of.
Expand Down Expand Up @@ -323,69 +385,6 @@ bool acpi_bus_power_manageable(acpi_handle handle)
}
EXPORT_SYMBOL(acpi_bus_power_manageable);

#ifdef CONFIG_PM
static DEFINE_MUTEX(acpi_pm_notifier_lock);

/**
* acpi_add_pm_notifier - Register PM notifier for given ACPI device.
* @adev: ACPI device to add the notifier for.
* @context: Context information to pass to the notifier routine.
*
* NOTE: @adev need not be a run-wake or wakeup device to be a valid source of
* PM wakeup events. For example, wakeup events may be generated for bridges
* if one of the devices below the bridge is signaling wakeup, even if the
* bridge itself doesn't have a wakeup GPE associated with it.
*/
acpi_status acpi_add_pm_notifier(struct acpi_device *adev,
acpi_notify_handler handler, void *context)
{
acpi_status status = AE_ALREADY_EXISTS;

mutex_lock(&acpi_pm_notifier_lock);

if (adev->wakeup.flags.notifier_present)
goto out;

status = acpi_install_notify_handler(adev->handle,
ACPI_SYSTEM_NOTIFY,
handler, context);
if (ACPI_FAILURE(status))
goto out;

adev->wakeup.flags.notifier_present = true;

out:
mutex_unlock(&acpi_pm_notifier_lock);
return status;
}

/**
* acpi_remove_pm_notifier - Unregister PM notifier from given ACPI device.
* @adev: ACPI device to remove the notifier from.
*/
acpi_status acpi_remove_pm_notifier(struct acpi_device *adev,
acpi_notify_handler handler)
{
acpi_status status = AE_BAD_PARAMETER;

mutex_lock(&acpi_pm_notifier_lock);

if (!adev->wakeup.flags.notifier_present)
goto out;

status = acpi_remove_notify_handler(adev->handle,
ACPI_SYSTEM_NOTIFY,
handler);
if (ACPI_FAILURE(status))
goto out;

adev->wakeup.flags.notifier_present = false;

out:
mutex_unlock(&acpi_pm_notifier_lock);
return status;
}

bool acpi_bus_can_wakeup(acpi_handle handle)
{
struct acpi_device *device;
Expand Down Expand Up @@ -1024,4 +1023,3 @@ void acpi_dev_pm_remove_dependent(acpi_handle handle, struct device *depdev)
mutex_unlock(&adev->physical_node_lock);
}
EXPORT_SYMBOL_GPL(acpi_dev_pm_remove_dependent);
#endif /* CONFIG_PM */
8 changes: 0 additions & 8 deletions trunk/drivers/acpi/video_detect.c
Original file line number Diff line number Diff line change
Expand Up @@ -161,14 +161,6 @@ static struct dmi_system_id video_detect_dmi_table[] = {
DMI_MATCH(DMI_PRODUCT_NAME, "UL30VT"),
},
},
{
.callback = video_detect_force_vendor,
.ident = "Asus UL30A",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "UL30A"),
},
},
{ },
};

Expand Down
9 changes: 7 additions & 2 deletions trunk/drivers/cpufreq/cpufreq.c
Original file line number Diff line number Diff line change
Expand Up @@ -1729,18 +1729,23 @@ static int __cpufreq_set_policy(struct cpufreq_policy *data,
/* end old governor */
if (data->governor) {
__cpufreq_governor(data, CPUFREQ_GOV_STOP);
unlock_policy_rwsem_write(policy->cpu);
__cpufreq_governor(data,
CPUFREQ_GOV_POLICY_EXIT);
lock_policy_rwsem_write(policy->cpu);
}

/* start new governor */
data->governor = policy->governor;
if (!__cpufreq_governor(data, CPUFREQ_GOV_POLICY_INIT)) {
if (!__cpufreq_governor(data, CPUFREQ_GOV_START))
if (!__cpufreq_governor(data, CPUFREQ_GOV_START)) {
failed = 0;
else
} else {
unlock_policy_rwsem_write(policy->cpu);
__cpufreq_governor(data,
CPUFREQ_GOV_POLICY_EXIT);
lock_policy_rwsem_write(policy->cpu);
}
}

if (failed) {
Expand Down
40 changes: 35 additions & 5 deletions trunk/include/acpi/acpi_bus.h
Original file line number Diff line number Diff line change
Expand Up @@ -377,19 +377,49 @@ acpi_status acpi_bus_get_status_handle(acpi_handle handle,
unsigned long long *sta);
int acpi_bus_get_status(struct acpi_device *device);

#ifdef CONFIG_PM
int acpi_bus_set_power(acpi_handle handle, int state);
const char *acpi_power_state_string(int state);
int acpi_device_get_power(struct acpi_device *device, int *state);
int acpi_device_set_power(struct acpi_device *device, int state);
int acpi_bus_init_power(struct acpi_device *device);
int acpi_bus_update_power(acpi_handle handle, int *state_p);
bool acpi_bus_power_manageable(acpi_handle handle);

#ifdef CONFIG_PM
bool acpi_bus_can_wakeup(acpi_handle handle);
#else
static inline bool acpi_bus_can_wakeup(acpi_handle handle) { return false; }
#endif
#else /* !CONFIG_PM */
static inline int acpi_bus_set_power(acpi_handle handle, int state)
{
return 0;
}
static inline const char *acpi_power_state_string(int state)
{
return "D0";
}
static inline int acpi_device_get_power(struct acpi_device *device, int *state)
{
return 0;
}
static inline int acpi_device_set_power(struct acpi_device *device, int state)
{
return 0;
}
static inline int acpi_bus_init_power(struct acpi_device *device)
{
return 0;
}
static inline int acpi_bus_update_power(acpi_handle handle, int *state_p)
{
return 0;
}
static inline bool acpi_bus_power_manageable(acpi_handle handle)
{
return false;
}
static inline bool acpi_bus_can_wakeup(acpi_handle handle)
{
return false;
}
#endif /* !CONFIG_PM */

#ifdef CONFIG_ACPI_PROC_EVENT
int acpi_bus_generate_proc_event(struct acpi_device *device, u8 type, int data);
Expand Down

0 comments on commit 0d9eb02

Please sign in to comment.