HACK: Input: elants_i2c - clear interrupt at resume

If a device is using edge-triggered interrupt, then, when it gets
enabled with enable_irq(), and edge came while interrupt was disabled,
the kernel is supposed to replay the interrupt. Unfortunately it does
not seem to happen on some devices. As a workaround, let's read and
discard the data from the device, so interrupt is cleared before it is
re-enabled.

BUG=b:37617526
TEST=Suspend/resume on different version of Candy, ensure touchscreen
works.

Change-Id: Ic38ab11f842dec2c12de71593113f89c120ad839
Signed-off-by: Dmitry Torokhov <dtor@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/517282
Reviewed-by: Benson Leung <bleung@chromium.org>
(cherry picked from commit f495ada03ddc7b546850cd0d0f9b29baf364c02e)
Reviewed-on: https://chromium-review.googlesource.com/518000
Reviewed-by: Guenter Roeck <groeck@chromium.org>
diff --git a/drivers/input/touchscreen/elants_i2c.c b/drivers/input/touchscreen/elants_i2c.c
index 6880dcd..06d40b3 100644
--- a/drivers/input/touchscreen/elants_i2c.c
+++ b/drivers/input/touchscreen/elants_i2c.c
@@ -1402,6 +1402,15 @@
 	}
 
 	ts->state = ELAN_STATE_NORMAL;
+
+	/*
+	 * FIXME: Clear interrupts by reading data from the chip.
+	 * The kernel is supposed to replay edge-triggered interrupts
+	 * when we enable them, but this does not seem to happen
+	 * on some devices.
+	 */
+	(void) i2c_master_recv(client, ts->buf, sizeof(ts->buf));
+
 	enable_irq(client->irq);
 
 	return 0;