Improve the query device fields to be more verbose.

Signed-off-by: Alistair Francis <alist...@alistair23.me>
---
v4:
 - Remove the reset_control_reset() logic

 drivers/input/touchscreen/wacom_i2c.c | 64 ++++++++++++++++++---------
 1 file changed, 44 insertions(+), 20 deletions(-)

diff --git a/drivers/input/touchscreen/wacom_i2c.c 
b/drivers/input/touchscreen/wacom_i2c.c
index 3b4bc514dc3f..84c7ccb737bd 100644
--- a/drivers/input/touchscreen/wacom_i2c.c
+++ b/drivers/input/touchscreen/wacom_i2c.c
@@ -13,15 +13,32 @@
 #include <linux/irq.h>
 #include <linux/input/touchscreen.h>
 #include <linux/interrupt.h>
+#include <linux/reset.h>
 #include <linux/of.h>
 #include <asm/unaligned.h>
 
-#define WACOM_CMD_QUERY0       0x04
-#define WACOM_CMD_QUERY1       0x00
-#define WACOM_CMD_QUERY2       0x33
-#define WACOM_CMD_QUERY3       0x02
-#define WACOM_CMD_THROW0       0x05
-#define WACOM_CMD_THROW1       0x00
+// Registers
+#define WACOM_COMMAND_LSB   0x04
+#define WACOM_COMMAND_MSB   0x00
+
+#define WACOM_DATA_LSB      0x05
+#define WACOM_DATA_MSB      0x00
+
+// Report types
+#define REPORT_FEATURE      0x30
+
+// Requests / operations
+#define OPCODE_GET_REPORT   0x02
+
+// Power settings
+#define POWER_ON            0x00
+#define POWER_SLEEP         0x01
+
+// Input report ids
+#define WACOM_PEN_DATA_REPORT           2
+#define WACOM_SHINONOME_REPORT          26
+
+#define WACOM_QUERY_REPORT     3
 #define WACOM_QUERY_SIZE       22
 
 struct wacom_features {
@@ -48,27 +65,30 @@ static int wacom_query_device(struct i2c_client *client,
                              struct wacom_features *features)
 {
        int ret;
-       u8 cmd1[] = { WACOM_CMD_QUERY0, WACOM_CMD_QUERY1,
-                       WACOM_CMD_QUERY2, WACOM_CMD_QUERY3 };
-       u8 cmd2[] = { WACOM_CMD_THROW0, WACOM_CMD_THROW1 };
        u8 data[WACOM_QUERY_SIZE];
+
+       u8 get_query_data_cmd[] = {
+               WACOM_COMMAND_LSB,
+               WACOM_COMMAND_MSB,
+               REPORT_FEATURE | WACOM_QUERY_REPORT,
+               OPCODE_GET_REPORT,
+               WACOM_DATA_LSB,
+               WACOM_DATA_MSB,
+       };
+
        struct i2c_msg msgs[] = {
+               // Request reading of feature ReportID: 3 (Pen Query Data)
                {
                        .addr = client->addr,
                        .flags = 0,
-                       .len = sizeof(cmd1),
-                       .buf = cmd1,
-               },
-               {
-                       .addr = client->addr,
-                       .flags = 0,
-                       .len = sizeof(cmd2),
-                       .buf = cmd2,
+                       .len = sizeof(get_query_data_cmd),
+                       .buf = get_query_data_cmd,
                },
+               // Read 21 bytes
                {
                        .addr = client->addr,
                        .flags = I2C_M_RD,
-                       .len = sizeof(data),
+                       .len = WACOM_QUERY_SIZE - 1,
                        .buf = data,
                },
        };
@@ -89,9 +109,13 @@ static int wacom_query_device(struct i2c_client *client,
        features->tilt_y_max = get_unaligned_le16(&data[19]);
 
        dev_dbg(&client->dev,
-               "x_max:%d, y_max:%d, pressure:%d, fw:%d\n",
+               "x_max:%d, y_max:%d, pressure:%d, fw:%d, "
+               "distance: %d, phys distance: %d, "
+               "tilt_x_max: %d, tilt_y_max: %d\n",
                features->x_max, features->y_max,
-               features->pressure_max, features->fw_version);
+               features->pressure_max, features->fw_version,
+               features->distance_max, features->distance_physical_max,
+               features->tilt_x_max, features->tilt_y_max);
 
        return 0;
 }
-- 
2.31.0

Reply via email to