Input: ar1021_i2c - enable touch mode during open
authorMartin Kepplinger <martin.kepplinger@ginzinger.com>
Fri, 28 Apr 2017 16:58:12 +0000 (09:58 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Mon, 1 May 2017 16:28:49 +0000 (09:28 -0700)
The device could as well be in command mode, in which this driver cannot
handle the device. When opening the device, let's make sure the device
will be in the mode we expect it to be for this driver.

Signed-off-by: Martin Kepplinger <martin.kepplinger@ginzinger.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/touchscreen/ar1021_i2c.c

index 1a94d8bfec54b2b115924b4bff9f5ddfe47272ed..21c74ee59341ef166da5177066aec73d16390a2b 100644 (file)
 #define AR1021_MAX_X   4095
 #define AR1021_MAX_Y   4095
 
+#define AR1021_CMD     0x55
+
+#define AR1021_CMD_ENABLE_TOUCH                0x12
+
 struct ar1021_i2c {
        struct i2c_client *client;
        struct input_dev *input;
@@ -56,8 +60,19 @@ out:
 
 static int ar1021_i2c_open(struct input_dev *dev)
 {
+       static const u8 cmd_enable_touch[] = {
+               AR1021_CMD,
+               0x01, /* number of bytes after this */
+               AR1021_CMD_ENABLE_TOUCH
+       };
        struct ar1021_i2c *ar1021 = input_get_drvdata(dev);
        struct i2c_client *client = ar1021->client;
+       int error;
+
+       error = i2c_master_send(ar1021->client, cmd_enable_touch,
+                               sizeof(cmd_enable_touch));
+       if (error < 0)
+               return error;
 
        enable_irq(client->irq);