summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ec/acpi/ec.c15
-rw-r--r--src/ec/acpi/ec.h1
2 files changed, 16 insertions, 0 deletions
diff --git a/src/ec/acpi/ec.c b/src/ec/acpi/ec.c
index a739b98df3..61cad656eb 100644
--- a/src/ec/acpi/ec.c
+++ b/src/ec/acpi/ec.c
@@ -111,6 +111,21 @@ u8 recv_ec_data(void)
return data;
}
+void ec_clear_out_queue(void)
+{
+ int timeout = 0x7fff;
+ printk(BIOS_SPEW, "Clearing EC output queue...\n");
+ while (--timeout && (inb(ec_cmd_reg) & EC_OBF)) {
+ u8 data = inb(ec_data_reg);
+ printk(BIOS_SPEW, "Discarding a garbage byte: 0x%02x\n", data);
+ udelay(10);
+ }
+ if (!timeout)
+ printk(BIOS_ERR, "Timeout while clearing EC output queue!\n");
+ else
+ printk(BIOS_SPEW, "EC output queue has been cleared.\n");
+}
+
u8 ec_read(u8 addr)
{
send_ec_command(0x80);
diff --git a/src/ec/acpi/ec.h b/src/ec/acpi/ec.h
index d9487e9015..48982d315e 100644
--- a/src/ec/acpi/ec.h
+++ b/src/ec/acpi/ec.h
@@ -40,6 +40,7 @@ int send_ec_command(u8 command);
int send_ec_data(u8 data);
int send_ec_data_nowait(u8 data);
u8 recv_ec_data(void);
+void ec_clear_out_queue(void);
u8 ec_status(void);
u8 ec_query(void);
u8 ec_read(u8 addr);