|
@@ -147,9 +147,8 @@ acpi_status acpi_enter_sleep_state_prep(u8 sleep_state)
|
|
|
|
|
|
ACPI_FUNCTION_TRACE(acpi_enter_sleep_state_prep);
|
|
|
|
|
|
- /*
|
|
|
- * _PSW methods could be run here to enable wake-on keyboard, LAN, etc.
|
|
|
- */
|
|
|
+ /* _PSW methods could be run here to enable wake-on keyboard, LAN, etc. */
|
|
|
+
|
|
|
status = acpi_get_sleep_type_data(sleep_state,
|
|
|
&acpi_gbl_sleep_type_a,
|
|
|
&acpi_gbl_sleep_type_b);
|
|
@@ -223,8 +222,8 @@ ACPI_EXPORT_SYMBOL(acpi_enter_sleep_state_prep)
|
|
|
******************************************************************************/
|
|
|
acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state)
|
|
|
{
|
|
|
- u32 PM1Acontrol;
|
|
|
- u32 PM1Bcontrol;
|
|
|
+ u32 pm1a_control;
|
|
|
+ u32 pm1b_control;
|
|
|
struct acpi_bit_register_info *sleep_type_reg_info;
|
|
|
struct acpi_bit_register_info *sleep_enable_reg_info;
|
|
|
u32 in_value;
|
|
@@ -289,24 +288,25 @@ acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state)
|
|
|
|
|
|
/* Get current value of PM1A control */
|
|
|
|
|
|
- status = acpi_hw_register_read(ACPI_REGISTER_PM1_CONTROL, &PM1Acontrol);
|
|
|
+ status = acpi_hw_register_read(ACPI_REGISTER_PM1_CONTROL,
|
|
|
+ &pm1a_control);
|
|
|
if (ACPI_FAILURE(status)) {
|
|
|
return_ACPI_STATUS(status);
|
|
|
}
|
|
|
ACPI_DEBUG_PRINT((ACPI_DB_INIT,
|
|
|
"Entering sleep state [S%d]\n", sleep_state));
|
|
|
|
|
|
- /* Clear SLP_EN and SLP_TYP fields */
|
|
|
+ /* Clear the SLP_EN and SLP_TYP fields */
|
|
|
|
|
|
- PM1Acontrol &= ~(sleep_type_reg_info->access_bit_mask |
|
|
|
- sleep_enable_reg_info->access_bit_mask);
|
|
|
- PM1Bcontrol = PM1Acontrol;
|
|
|
+ pm1a_control &= ~(sleep_type_reg_info->access_bit_mask |
|
|
|
+ sleep_enable_reg_info->access_bit_mask);
|
|
|
+ pm1b_control = pm1a_control;
|
|
|
|
|
|
- /* Insert SLP_TYP bits */
|
|
|
+ /* Insert the SLP_TYP bits */
|
|
|
|
|
|
- PM1Acontrol |=
|
|
|
+ pm1a_control |=
|
|
|
(acpi_gbl_sleep_type_a << sleep_type_reg_info->bit_position);
|
|
|
- PM1Bcontrol |=
|
|
|
+ pm1b_control |=
|
|
|
(acpi_gbl_sleep_type_b << sleep_type_reg_info->bit_position);
|
|
|
|
|
|
/*
|
|
@@ -314,37 +314,25 @@ acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state)
|
|
|
* poorly implemented hardware.
|
|
|
*/
|
|
|
|
|
|
- /* Write #1: fill in SLP_TYP data */
|
|
|
-
|
|
|
- status = acpi_hw_register_write(ACPI_REGISTER_PM1A_CONTROL,
|
|
|
- PM1Acontrol);
|
|
|
- if (ACPI_FAILURE(status)) {
|
|
|
- return_ACPI_STATUS(status);
|
|
|
- }
|
|
|
+ /* Write #1: write the SLP_TYP data to the PM1 Control registers */
|
|
|
|
|
|
- status = acpi_hw_register_write(ACPI_REGISTER_PM1B_CONTROL,
|
|
|
- PM1Bcontrol);
|
|
|
+ status = acpi_hw_write_pm1_control(pm1a_control, pm1b_control);
|
|
|
if (ACPI_FAILURE(status)) {
|
|
|
return_ACPI_STATUS(status);
|
|
|
}
|
|
|
|
|
|
- /* Insert SLP_ENABLE bit */
|
|
|
+ /* Insert the sleep enable (SLP_EN) bit */
|
|
|
|
|
|
- PM1Acontrol |= sleep_enable_reg_info->access_bit_mask;
|
|
|
- PM1Bcontrol |= sleep_enable_reg_info->access_bit_mask;
|
|
|
+ pm1a_control |= sleep_enable_reg_info->access_bit_mask;
|
|
|
+ pm1b_control |= sleep_enable_reg_info->access_bit_mask;
|
|
|
|
|
|
- /* Write #2: SLP_TYP + SLP_EN */
|
|
|
+ /* Flush caches, as per ACPI specification */
|
|
|
|
|
|
ACPI_FLUSH_CPU_CACHE();
|
|
|
|
|
|
- status = acpi_hw_register_write(ACPI_REGISTER_PM1A_CONTROL,
|
|
|
- PM1Acontrol);
|
|
|
- if (ACPI_FAILURE(status)) {
|
|
|
- return_ACPI_STATUS(status);
|
|
|
- }
|
|
|
+ /* Write #2: Write both SLP_TYP + SLP_EN */
|
|
|
|
|
|
- status = acpi_hw_register_write(ACPI_REGISTER_PM1B_CONTROL,
|
|
|
- PM1Bcontrol);
|
|
|
+ status = acpi_hw_write_pm1_control(pm1a_control, pm1b_control);
|
|
|
if (ACPI_FAILURE(status)) {
|
|
|
return_ACPI_STATUS(status);
|
|
|
}
|
|
@@ -471,8 +459,8 @@ acpi_status acpi_leave_sleep_state_prep(u8 sleep_state)
|
|
|
acpi_status status;
|
|
|
struct acpi_bit_register_info *sleep_type_reg_info;
|
|
|
struct acpi_bit_register_info *sleep_enable_reg_info;
|
|
|
- u32 PM1Acontrol;
|
|
|
- u32 PM1Bcontrol;
|
|
|
+ u32 pm1a_control;
|
|
|
+ u32 pm1b_control;
|
|
|
|
|
|
ACPI_FUNCTION_TRACE(acpi_leave_sleep_state_prep);
|
|
|
|
|
@@ -493,31 +481,29 @@ acpi_status acpi_leave_sleep_state_prep(u8 sleep_state)
|
|
|
/* Get current value of PM1A control */
|
|
|
|
|
|
status = acpi_hw_register_read(ACPI_REGISTER_PM1_CONTROL,
|
|
|
- &PM1Acontrol);
|
|
|
+ &pm1a_control);
|
|
|
if (ACPI_SUCCESS(status)) {
|
|
|
|
|
|
- /* Clear SLP_EN and SLP_TYP fields */
|
|
|
+ /* Clear the SLP_EN and SLP_TYP fields */
|
|
|
|
|
|
- PM1Acontrol &= ~(sleep_type_reg_info->access_bit_mask |
|
|
|
- sleep_enable_reg_info->
|
|
|
- access_bit_mask);
|
|
|
- PM1Bcontrol = PM1Acontrol;
|
|
|
+ pm1a_control &= ~(sleep_type_reg_info->access_bit_mask |
|
|
|
+ sleep_enable_reg_info->
|
|
|
+ access_bit_mask);
|
|
|
+ pm1b_control = pm1a_control;
|
|
|
|
|
|
- /* Insert SLP_TYP bits */
|
|
|
+ /* Insert the SLP_TYP bits */
|
|
|
|
|
|
- PM1Acontrol |=
|
|
|
+ pm1a_control |=
|
|
|
(acpi_gbl_sleep_type_a << sleep_type_reg_info->
|
|
|
bit_position);
|
|
|
- PM1Bcontrol |=
|
|
|
+ pm1b_control |=
|
|
|
(acpi_gbl_sleep_type_b << sleep_type_reg_info->
|
|
|
bit_position);
|
|
|
|
|
|
- /* Just ignore any errors */
|
|
|
+ /* Write the control registers and ignore any errors */
|
|
|
|
|
|
- (void)acpi_hw_register_write(ACPI_REGISTER_PM1A_CONTROL,
|
|
|
- PM1Acontrol);
|
|
|
- (void)acpi_hw_register_write(ACPI_REGISTER_PM1B_CONTROL,
|
|
|
- PM1Bcontrol);
|
|
|
+ (void)acpi_hw_write_pm1_control(pm1a_control,
|
|
|
+ pm1b_control);
|
|
|
}
|
|
|
}
|
|
|
|