diff options
-rw-r--r-- | drivers/acpi/ec.c | 7 | ||||
-rw-r--r-- | drivers/acpi/processor_idle.c | 9 |
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) | |||
99 | static struct dmi_system_id __cpuinitdata processor_power_dmi_table[] = { | 99 | static 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); |