aboutsummaryrefslogtreecommitdiff
path: root/sys/contrib/dev/acpica/hwsleep.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/contrib/dev/acpica/hwsleep.c')
-rw-r--r--sys/contrib/dev/acpica/hwsleep.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/sys/contrib/dev/acpica/hwsleep.c b/sys/contrib/dev/acpica/hwsleep.c
index d58e3a538cf5..cc4aae2761d3 100644
--- a/sys/contrib/dev/acpica/hwsleep.c
+++ b/sys/contrib/dev/acpica/hwsleep.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Name: hwsleep.c - ACPI Hardware Sleep/Wake Interface
- * $Revision: 12 $
+ * $Revision: 14 $
*
*****************************************************************************/
@@ -283,7 +283,7 @@ AcpiEnterSleepState (
PM1AControl |= (TypeA << AcpiHwGetBitShift (SLP_TYPE_X_MASK));
PM1BControl |= (TypeB << AcpiHwGetBitShift (SLP_TYPE_X_MASK));
- /* write #1: fill in SLP_TYPE data */
+ /* write #1: fill in SLP_TYP data */
AcpiHwRegisterWrite(ACPI_MTX_LOCK, PM1A_CONTROL, PM1AControl);
AcpiHwRegisterWrite(ACPI_MTX_LOCK, PM1B_CONTROL, PM1BControl);
@@ -291,10 +291,16 @@ AcpiEnterSleepState (
PM1AControl |= (1 << AcpiHwGetBitShift (SLP_EN_MASK));
PM1BControl |= (1 << AcpiHwGetBitShift (SLP_EN_MASK));
- /* write #2: the whole tamale */
+ /* write #2: SLP_TYP + SLP_EN */
AcpiHwRegisterWrite(ACPI_MTX_LOCK, PM1A_CONTROL, PM1AControl);
AcpiHwRegisterWrite(ACPI_MTX_LOCK, PM1B_CONTROL, PM1BControl);
+ /* wait a second, then try again */
+ AcpiOsStall(1000000);
+
+ AcpiHwRegisterWrite(ACPI_MTX_LOCK, PM1_CONTROL,
+ (1 << AcpiHwGetBitShift (SLP_EN_MASK)));
+
enable();
return_ACPI_STATUS (AE_OK);