From: Alistair Francis <alistair@alistair23.me>
To: dmitry.torokhov@gmail.com, linux-input@vger.kernel.org,
linux-imx@nxp.com, kernel@pengutronix.de
Cc: linux-kernel@vger.kernel.org, alistair23@gmail.com,
Alistair Francis <alistair@alistair23.me>
Subject: [PATCH v5 5/9] Input: wacom_i2c - Add support for distance and tilt x/y
Date: Mon, 19 Apr 2021 07:01:00 +1000 [thread overview]
Message-ID: <20210418210104.2876-5-alistair@alistair23.me> (raw)
In-Reply-To: <20210418210104.2876-1-alistair@alistair23.me>
This is based on the out of tree rM2 driver.
Signed-off-by: Alistair Francis <alistair@alistair23.me>
---
v5:
- Check the firmware version
drivers/input/touchscreen/wacom_i2c.c | 34 +++++++++++++++++++++++++--
1 file changed, 32 insertions(+), 2 deletions(-)
diff --git a/drivers/input/touchscreen/wacom_i2c.c b/drivers/input/touchscreen/wacom_i2c.c
index 28290724b3da..e0a69e63204d 100644
--- a/drivers/input/touchscreen/wacom_i2c.c
+++ b/drivers/input/touchscreen/wacom_i2c.c
@@ -22,12 +22,18 @@
#define WACOM_CMD_QUERY3 0x02
#define WACOM_CMD_THROW0 0x05
#define WACOM_CMD_THROW1 0x00
-#define WACOM_QUERY_SIZE 19
+#define WACOM_QUERY_SIZE 22
+
+#define WACOM_DISTANCE_TILT_VERSION 0x30
struct wacom_features {
int x_max;
int y_max;
int pressure_max;
+ int distance_max;
+ int distance_physical_max;
+ int tilt_x_max;
+ int tilt_y_max;
char fw_version;
};
@@ -79,6 +85,17 @@ static int wacom_query_device(struct i2c_client *client,
features->y_max = get_unaligned_le16(&data[5]);
features->pressure_max = get_unaligned_le16(&data[11]);
features->fw_version = get_unaligned_le16(&data[13]);
+ if (features->fw_version >= WACOM_DISTANCE_TILT_VERSION) {
+ features->distance_max = data[15];
+ features->distance_physical_max = data[16];
+ features->tilt_x_max = get_unaligned_le16(&data[17]);
+ features->tilt_y_max = get_unaligned_le16(&data[19]);
+ } else {
+ features->distance_max = -1;
+ features->distance_physical_max = -1;
+ features->tilt_x_max = -1;
+ features->tilt_y_max = -1;
+ }
dev_dbg(&client->dev,
"x_max:%d, y_max:%d, pressure:%d, fw:%d\n",
@@ -95,6 +112,7 @@ static irqreturn_t wacom_i2c_irq(int irq, void *dev_id)
u8 *data = wac_i2c->data;
unsigned int x, y, pressure;
unsigned char tsw, f1, f2, ers;
+ short tilt_x, tilt_y, distance;
int error;
error = i2c_master_recv(wac_i2c->client,
@@ -109,6 +127,11 @@ static irqreturn_t wacom_i2c_irq(int irq, void *dev_id)
x = le16_to_cpup((__le16 *)&data[4]);
y = le16_to_cpup((__le16 *)&data[6]);
pressure = le16_to_cpup((__le16 *)&data[8]);
+ distance = data[10];
+
+ /* Signed */
+ tilt_x = le16_to_cpup((__le16 *)&data[11]);
+ tilt_y = le16_to_cpup((__le16 *)&data[13]);
if (!wac_i2c->prox)
wac_i2c->tool = (data[3] & 0x0c) ?
@@ -123,6 +146,9 @@ static irqreturn_t wacom_i2c_irq(int irq, void *dev_id)
input_report_key(input, BTN_STYLUS, f1);
input_report_key(input, BTN_STYLUS2, f2);
input_report_abs(input, ABS_PRESSURE, pressure);
+ input_report_abs(input, ABS_DISTANCE, distance);
+ input_report_abs(input, ABS_TILT_X, tilt_x);
+ input_report_abs(input, ABS_TILT_Y, tilt_y);
input_sync(input);
out:
@@ -195,7 +221,11 @@ static int wacom_i2c_probe(struct i2c_client *client,
input_set_abs_params(input, ABS_Y, 0, features.y_max, 0, 0);
input_set_abs_params(input, ABS_PRESSURE,
0, features.pressure_max, 0, 0);
-
+ input_set_abs_params(input, ABS_DISTANCE, 0, features.distance_max, 0, 0);
+ input_set_abs_params(input, ABS_TILT_X, -features.tilt_x_max,
+ features.tilt_x_max, 0, 0);
+ input_set_abs_params(input, ABS_TILT_Y, -features.tilt_y_max,
+ features.tilt_y_max, 0, 0);
input_set_drvdata(input, wac_i2c);
error = request_threaded_irq(client->irq, NULL, wacom_i2c_irq,
--
2.31.1
next prev parent reply other threads:[~2021-04-19 8:39 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-18 21:00 [PATCH v5 1/9] dt-bindings: Add Wacom to vendor bindings Alistair Francis
2021-04-18 21:00 ` [PATCH v5 2/9] dt-bindings: touchscreen: Initial commit of wacom,generic Alistair Francis
2021-04-18 21:00 ` [PATCH v5 3/9] Input: wacom_i2c - Add device tree support to wacom_i2c Alistair Francis
2021-04-18 21:00 ` [PATCH v5 4/9] Input: wacom_i2c - Add touchscren properties Alistair Francis
2021-04-18 21:01 ` Alistair Francis [this message]
2021-04-18 21:01 ` [PATCH v5 6/9] Input: wacom_i2c - Clean up the query device fields Alistair Francis
2021-04-18 21:01 ` [PATCH v5 7/9] Input: wacom_i2c - Add support for vdd regulator Alistair Francis
2021-04-18 21:01 ` [PATCH v5 8/9] ARM: imx_v6_v7_defconfig: Enable Wacom I2C Alistair Francis
2021-04-18 21:01 ` [PATCH v5 9/9] ARM: dts: imx7d: remarkable2: add wacom digitizer device Alistair Francis
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210418210104.2876-5-alistair@alistair23.me \
--to=alistair@alistair23.me \
--cc=alistair23@gmail.com \
--cc=dmitry.torokhov@gmail.com \
--cc=kernel@pengutronix.de \
--cc=linux-imx@nxp.com \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.