--- /dev/null
+From: Alexey Starikovskiy <astarikovskiy@suse.de>
+Subject: ACPI: EC: Don't degrade to poll mode at storm automatically.
+References: bnc#446142
+Patch-Mainline: no
+
+Signed-off-by: Thomas Renninger <trenn@suse.de>
+
+Not all users of semi-broken EC devices want to degrade to poll mode, so
+give them right to choose.
+
+Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
+---
+
+ Documentation/kernel-parameters.txt | 5 +++++
+ drivers/acpi/ec.c | 15 +++++++++++++++
+ 2 files changed, 20 insertions(+)
+
+
+--- a/Documentation/kernel-parameters.txt
++++ b/Documentation/kernel-parameters.txt
+@@ -699,6 +699,11 @@ and is between 256 and 4096 characters.
+
+ eata= [HW,SCSI]
+
++ ec_intr= [HW,ACPI] ACPI Embedded Controller interrupt mode
++ Format: <int>
++ 0: polling mode
++ non-0: interrupt mode (default)
++
+ edd= [EDD]
+ Format: {"off" | "on" | "skip[mbr]"}
+
+--- a/drivers/acpi/ec.c
++++ b/drivers/acpi/ec.c
+@@ -121,6 +121,8 @@ static struct acpi_ec {
+ spinlock_t curr_lock;
+ } *boot_ec, *first_ec;
+
++int acpi_ec_intr = 1; /* Default is interrupt mode */
++
+ /*
+ * Some Asus system have exchanged ECDT data/command IO addresses.
+ */
+@@ -902,6 +904,8 @@ static int ec_install_handlers(struct ac
+ &acpi_ec_gpe_handler, ec);
+ if (ACPI_FAILURE(status))
+ return -ENODEV;
++ if (!acpi_ec_intr)
++ set_bit(EC_FLAGS_NO_GPE, &ec->flags);
+ acpi_set_gpe_type(NULL, ec->gpe, ACPI_GPE_TYPE_RUNTIME);
+ acpi_enable_gpe(NULL, ec->gpe, ACPI_NOT_ISR);
+ status = acpi_install_address_space_handler(ec->handle,
+@@ -1094,3 +1098,14 @@ static void __exit acpi_ec_exit(void)
+ return;
+ }
+ #endif /* 0 */
++
++static int __init acpi_ec_set_intr_mode(char *str)
++{
++ if (!get_option(&str, &acpi_ec_intr)) {
++ acpi_ec_intr = 0;
++ return 0;
++ }
++ return 1;
++}
++
++__setup("ec_intr=", acpi_ec_set_intr_mode);