aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/acpi/ec.c7
-rw-r--r--drivers/acpi/processor_idle.c9
2 files changed, 12 insertions, 4 deletions
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index 874f912962c4..8c5d7df7d343 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -213,7 +213,7 @@ static int acpi_ec_intr_wait(union acpi_ec *ec, unsigned int event)
213 213
214 switch (event) { 214 switch (event) {
215 case ACPI_EC_EVENT_IBE: 215 case ACPI_EC_EVENT_IBE:
216 if (~acpi_ec_read_status(ec) & event) { 216 if (~acpi_ec_read_status(ec) & ACPI_EC_FLAG_IBF) {
217 ec->intr.expect_event = 0; 217 ec->intr.expect_event = 0;
218 return 0; 218 return 0;
219 } 219 }
@@ -782,12 +782,15 @@ static u32 acpi_ec_gpe_intr_handler(void *data)
782 case ACPI_EC_EVENT_OBF: 782 case ACPI_EC_EVENT_OBF:
783 if (!(value & ACPI_EC_FLAG_OBF)) 783 if (!(value & ACPI_EC_FLAG_OBF))
784 break; 784 break;
785 ec->intr.expect_event = 0;
786 wake_up(&ec->intr.wait);
787 break;
785 case ACPI_EC_EVENT_IBE: 788 case ACPI_EC_EVENT_IBE:
786 if ((value & ACPI_EC_FLAG_IBF)) 789 if ((value & ACPI_EC_FLAG_IBF))
787 break; 790 break;
788 ec->intr.expect_event = 0; 791 ec->intr.expect_event = 0;
789 wake_up(&ec->intr.wait); 792 wake_up(&ec->intr.wait);
790 return ACPI_INTERRUPT_HANDLED; 793 break;
791 default: 794 default:
792 break; 795 break;
793 } 796 }
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index f8d2b2f47fd4..e439eb77d283 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -99,6 +99,9 @@ static int set_max_cstate(struct dmi_system_id *id)
99static struct dmi_system_id __cpuinitdata processor_power_dmi_table[] = { 99static struct dmi_system_id __cpuinitdata processor_power_dmi_table[] = {
100 { set_max_cstate, "IBM ThinkPad R40e", { 100 { set_max_cstate, "IBM ThinkPad R40e", {
101 DMI_MATCH(DMI_BIOS_VENDOR,"IBM"), 101 DMI_MATCH(DMI_BIOS_VENDOR,"IBM"),
102 DMI_MATCH(DMI_BIOS_VERSION,"1SET70WW")}, (void *)1},
103 { set_max_cstate, "IBM ThinkPad R40e", {
104 DMI_MATCH(DMI_BIOS_VENDOR,"IBM"),
102 DMI_MATCH(DMI_BIOS_VERSION,"1SET60WW")}, (void *)1}, 105 DMI_MATCH(DMI_BIOS_VERSION,"1SET60WW")}, (void *)1},
103 { set_max_cstate, "IBM ThinkPad R40e", { 106 { set_max_cstate, "IBM ThinkPad R40e", {
104 DMI_MATCH(DMI_BIOS_VENDOR,"IBM"), 107 DMI_MATCH(DMI_BIOS_VENDOR,"IBM"),
@@ -358,7 +361,9 @@ static void acpi_processor_idle(void)
358 t1 = inl(acpi_fadt.xpm_tmr_blk.address); 361 t1 = inl(acpi_fadt.xpm_tmr_blk.address);
359 /* Invoke C2 */ 362 /* Invoke C2 */
360 inb(cx->address); 363 inb(cx->address);
361 /* Dummy op - must do something useless after P_LVL2 read */ 364 /* Dummy wait op - must do something useless after P_LVL2 read
365 because chipsets cannot guarantee that STPCLK# signal
366 gets asserted in time to freeze execution properly. */
362 t2 = inl(acpi_fadt.xpm_tmr_blk.address); 367 t2 = inl(acpi_fadt.xpm_tmr_blk.address);
363 /* Get end time (ticks) */ 368 /* Get end time (ticks) */
364 t2 = inl(acpi_fadt.xpm_tmr_blk.address); 369 t2 = inl(acpi_fadt.xpm_tmr_blk.address);
@@ -396,7 +401,7 @@ static void acpi_processor_idle(void)
396 t1 = inl(acpi_fadt.xpm_tmr_blk.address); 401 t1 = inl(acpi_fadt.xpm_tmr_blk.address);
397 /* Invoke C3 */ 402 /* Invoke C3 */
398 inb(cx->address); 403 inb(cx->address);
399 /* Dummy op - must do something useless after P_LVL3 read */ 404 /* Dummy wait op (see above) */
400 t2 = inl(acpi_fadt.xpm_tmr_blk.address); 405 t2 = inl(acpi_fadt.xpm_tmr_blk.address);
401 /* Get end time (ticks) */ 406 /* Get end time (ticks) */
402 t2 = inl(acpi_fadt.xpm_tmr_blk.address); 407 t2 = inl(acpi_fadt.xpm_tmr_blk.address);