diff options
| author | Alexey Starikovskiy <astarikovskiy@suse.de> | 2008-01-23 22:28:34 -0500 |
|---|---|---|
| committer | Len Brown <len.brown@intel.com> | 2008-01-23 22:28:34 -0500 |
| commit | 03d1d99c55649ca641b86d2e3489b167ede1671a (patch) | |
| tree | 5ab993fef3351514f07d5ebd498d8d8ea4bf1852 | |
| parent | 667984d9e481e43a930a478c588dced98cb61fea (diff) | |
ACPI: EC: fix dmesg spam regression
Return OBF_1 optimization workaround
http://bugzilla.kernel.org/show_bug.cgi?id=8459
Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: Len Brown <len.brown@intel.com>
| -rw-r--r-- | drivers/acpi/ec.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c index 97dc16155a55..8917d754020e 100644 --- a/drivers/acpi/ec.c +++ b/drivers/acpi/ec.c | |||
| @@ -82,6 +82,7 @@ enum { | |||
| 82 | EC_FLAGS_ADDRESS, /* Address is being written */ | 82 | EC_FLAGS_ADDRESS, /* Address is being written */ |
| 83 | EC_FLAGS_NO_WDATA_GPE, /* Don't expect WDATA GPE event */ | 83 | EC_FLAGS_NO_WDATA_GPE, /* Don't expect WDATA GPE event */ |
| 84 | EC_FLAGS_WDATA, /* Data is being written */ | 84 | EC_FLAGS_WDATA, /* Data is being written */ |
| 85 | EC_FLAGS_NO_OBF1_GPE, /* Don't expect GPE before read */ | ||
| 85 | }; | 86 | }; |
| 86 | 87 | ||
| 87 | static int acpi_ec_remove(struct acpi_device *device, int type); | 88 | static int acpi_ec_remove(struct acpi_device *device, int type); |
| @@ -179,6 +180,10 @@ static inline int acpi_ec_check_status(struct acpi_ec *ec, enum ec_event event) | |||
| 179 | static int acpi_ec_wait(struct acpi_ec *ec, enum ec_event event, int force_poll) | 180 | static int acpi_ec_wait(struct acpi_ec *ec, enum ec_event event, int force_poll) |
| 180 | { | 181 | { |
| 181 | int ret = 0; | 182 | int ret = 0; |
| 183 | |||
| 184 | if (unlikely(event == ACPI_EC_EVENT_OBF_1 && | ||
| 185 | test_bit(EC_FLAGS_NO_OBF1_GPE, &ec->flags))) | ||
| 186 | force_poll = 1; | ||
| 182 | if (unlikely(test_bit(EC_FLAGS_ADDRESS, &ec->flags) && | 187 | if (unlikely(test_bit(EC_FLAGS_ADDRESS, &ec->flags) && |
| 183 | test_bit(EC_FLAGS_NO_ADDRESS_GPE, &ec->flags))) | 188 | test_bit(EC_FLAGS_NO_ADDRESS_GPE, &ec->flags))) |
| 184 | force_poll = 1; | 189 | force_poll = 1; |
| @@ -192,7 +197,12 @@ static int acpi_ec_wait(struct acpi_ec *ec, enum ec_event event, int force_poll) | |||
| 192 | goto end; | 197 | goto end; |
| 193 | clear_bit(EC_FLAGS_WAIT_GPE, &ec->flags); | 198 | clear_bit(EC_FLAGS_WAIT_GPE, &ec->flags); |
| 194 | if (acpi_ec_check_status(ec, event)) { | 199 | if (acpi_ec_check_status(ec, event)) { |
| 195 | if (test_bit(EC_FLAGS_ADDRESS, &ec->flags)) { | 200 | if (event == ACPI_EC_EVENT_OBF_1) { |
| 201 | /* miss OBF_1 GPE, don't expect it */ | ||
| 202 | pr_info(PREFIX "missing OBF confirmation, " | ||
| 203 | "don't expect it any longer.\n"); | ||
| 204 | set_bit(EC_FLAGS_NO_OBF1_GPE, &ec->flags); | ||
| 205 | } else if (test_bit(EC_FLAGS_ADDRESS, &ec->flags)) { | ||
| 196 | /* miss address GPE, don't expect it anymore */ | 206 | /* miss address GPE, don't expect it anymore */ |
| 197 | pr_info(PREFIX "missing address confirmation, " | 207 | pr_info(PREFIX "missing address confirmation, " |
| 198 | "don't expect it any longer.\n"); | 208 | "don't expect it any longer.\n"); |
