git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge git://git.infradead.org/~dwmw2/mtd-2.6.35
[pandora-kernel.git]
/
drivers
/
acpi
/
sleep.c
diff --git
a/drivers/acpi/sleep.c
b/drivers/acpi/sleep.c
index
4ab2275
..
3fb4bde
100644
(file)
--- a/
drivers/acpi/sleep.c
+++ b/
drivers/acpi/sleep.c
@@
-94,11
+94,13
@@
void __init acpi_old_suspend_ordering(void)
}
/**
}
/**
- *
acpi_pm_disable_gpes - Disable the GPE
s.
+ *
acpi_pm_freeze - Disable the GPEs and suspend EC transaction
s.
*/
*/
-static int acpi_pm_
disable_gpes
(void)
+static int acpi_pm_
freeze
(void)
{
acpi_disable_all_gpes();
{
acpi_disable_all_gpes();
+ acpi_os_wait_events_complete(NULL);
+ acpi_ec_block_transactions();
return 0;
}
return 0;
}
@@
-126,7
+128,8
@@
static int acpi_pm_prepare(void)
int error = __acpi_pm_prepare();
if (!error)
int error = __acpi_pm_prepare();
if (!error)
- acpi_disable_all_gpes();
+ acpi_pm_freeze();
+
return error;
}
return error;
}
@@
-256,6
+259,8
@@
static int acpi_suspend_enter(suspend_state_t pm_state)
* acpi_leave_sleep_state will reenable specific GPEs later
*/
acpi_disable_all_gpes();
* acpi_leave_sleep_state will reenable specific GPEs later
*/
acpi_disable_all_gpes();
+ /* Allow EC transactions to happen. */
+ acpi_ec_unblock_transactions_early();
local_irq_restore(flags);
printk(KERN_DEBUG "Back to C!\n");
local_irq_restore(flags);
printk(KERN_DEBUG "Back to C!\n");
@@
-267,6
+272,12
@@
static int acpi_suspend_enter(suspend_state_t pm_state)
return ACPI_SUCCESS(status) ? 0 : -EFAULT;
}
return ACPI_SUCCESS(status) ? 0 : -EFAULT;
}
+static void acpi_suspend_finish(void)
+{
+ acpi_ec_unblock_transactions();
+ acpi_pm_finish();
+}
+
static int acpi_suspend_state_valid(suspend_state_t pm_state)
{
u32 acpi_state;
static int acpi_suspend_state_valid(suspend_state_t pm_state)
{
u32 acpi_state;
@@
-288,7
+299,7
@@
static struct platform_suspend_ops acpi_suspend_ops = {
.begin = acpi_suspend_begin,
.prepare_late = acpi_pm_prepare,
.enter = acpi_suspend_enter,
.begin = acpi_suspend_begin,
.prepare_late = acpi_pm_prepare,
.enter = acpi_suspend_enter,
- .wake = acpi_
pm
_finish,
+ .wake = acpi_
suspend
_finish,
.end = acpi_pm_end,
};
.end = acpi_pm_end,
};
@@
-314,9
+325,9
@@
static int acpi_suspend_begin_old(suspend_state_t pm_state)
static struct platform_suspend_ops acpi_suspend_ops_old = {
.valid = acpi_suspend_state_valid,
.begin = acpi_suspend_begin_old,
static struct platform_suspend_ops acpi_suspend_ops_old = {
.valid = acpi_suspend_state_valid,
.begin = acpi_suspend_begin_old,
- .prepare_late = acpi_pm_
disable_gpes
,
+ .prepare_late = acpi_pm_
freeze
,
.enter = acpi_suspend_enter,
.enter = acpi_suspend_enter,
- .wake = acpi_
pm
_finish,
+ .wake = acpi_
suspend
_finish,
.end = acpi_pm_end,
.recover = acpi_pm_finish,
};
.end = acpi_pm_end,
.recover = acpi_pm_finish,
};
@@
-433,6
+444,7
@@
static int acpi_hibernation_enter(void)
static void acpi_hibernation_finish(void)
{
hibernate_nvs_free();
static void acpi_hibernation_finish(void)
{
hibernate_nvs_free();
+ acpi_ec_unblock_transactions();
acpi_pm_finish();
}
acpi_pm_finish();
}
@@
-453,19
+465,13
@@
static void acpi_hibernation_leave(void)
}
/* Restore the NVS memory area */
hibernate_nvs_restore();
}
/* Restore the NVS memory area */
hibernate_nvs_restore();
+ /* Allow EC transactions to happen. */
+ acpi_ec_unblock_transactions_early();
}
}
-static int acpi_pm_pre_restore(void)
-{
- acpi_disable_all_gpes();
- acpi_os_wait_events_complete(NULL);
- acpi_ec_suspend_transactions();
- return 0;
-}
-
-static void acpi_pm_restore_cleanup(void)
+static void acpi_pm_thaw(void)
{
{
- acpi_ec_
resume
_transactions();
+ acpi_ec_
unblock
_transactions();
acpi_enable_all_runtime_gpes();
}
acpi_enable_all_runtime_gpes();
}
@@
-477,8
+483,8
@@
static struct platform_hibernation_ops acpi_hibernation_ops = {
.prepare = acpi_pm_prepare,
.enter = acpi_hibernation_enter,
.leave = acpi_hibernation_leave,
.prepare = acpi_pm_prepare,
.enter = acpi_hibernation_enter,
.leave = acpi_hibernation_leave,
- .pre_restore = acpi_pm_
pre_restor
e,
- .restore_cleanup = acpi_pm_
restore_cleanup
,
+ .pre_restore = acpi_pm_
freez
e,
+ .restore_cleanup = acpi_pm_
thaw
,
};
/**
};
/**
@@
-510,12
+516,9
@@
static int acpi_hibernation_begin_old(void)
static int acpi_hibernation_pre_snapshot_old(void)
{
static int acpi_hibernation_pre_snapshot_old(void)
{
- int error = acpi_pm_disable_gpes();
-
- if (!error)
- hibernate_nvs_save();
-
- return error;
+ acpi_pm_freeze();
+ hibernate_nvs_save();
+ return 0;
}
/*
}
/*
@@
-527,11
+530,11
@@
static struct platform_hibernation_ops acpi_hibernation_ops_old = {
.end = acpi_pm_end,
.pre_snapshot = acpi_hibernation_pre_snapshot_old,
.finish = acpi_hibernation_finish,
.end = acpi_pm_end,
.pre_snapshot = acpi_hibernation_pre_snapshot_old,
.finish = acpi_hibernation_finish,
- .prepare = acpi_pm_
disable_gpes
,
+ .prepare = acpi_pm_
freeze
,
.enter = acpi_hibernation_enter,
.leave = acpi_hibernation_leave,
.enter = acpi_hibernation_enter,
.leave = acpi_hibernation_leave,
- .pre_restore = acpi_pm_
pre_restor
e,
- .restore_cleanup = acpi_pm_
restore_cleanup
,
+ .pre_restore = acpi_pm_
freez
e,
+ .restore_cleanup = acpi_pm_
thaw
,
.recover = acpi_pm_finish,
};
#endif /* CONFIG_HIBERNATION */
.recover = acpi_pm_finish,
};
#endif /* CONFIG_HIBERNATION */