Re: [PATCH v9 05/11] Input: wacom_i2c - Add support for distance and tilt x/y
From: Ahmad Fatoum <a.fatoum@pengutronix.de>
Date: 2021-08-23 07:07:07
Also in:
linux-devicetree, lkml
On 18.08.21 17:49, Alistair Francis wrote:
quoted hunk ↗ jump to hunk
Add support for the distance and tilt x/y. This is based on the out of tree rM2 driver. Signed-off-by: Alistair Francis <redacted> --- drivers/input/touchscreen/wacom_i2c.c | 35 +++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-)diff --git a/drivers/input/touchscreen/wacom_i2c.c b/drivers/input/touchscreen/wacom_i2c.c index 28255c77d426..4d0c19fbada4 100644 --- a/drivers/input/touchscreen/wacom_i2c.c +++ b/drivers/input/touchscreen/wacom_i2c.c
+ /* Signed */ + tilt_x = le16_to_cpup((__le16 *)&data[11]); + tilt_y = le16_to_cpup((__le16 *)&data[13]); + + distance = le16_to_cpup((__le16 *)&data[15]);
Use get_unaligned_u16 for all three. The existing code doesn't need to do this, because with the current struct layout, the array is suitable aligned for 2 byte accesses. You are accessing data at odd indices though, so you need to use an unaligned accessor. Cheers, Ahmad
quoted hunk ↗ jump to hunk
+ if (!wac_i2c->prox) wac_i2c->tool = (data[3] & 0x0c) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN;@@ -127,6 +151,9 @@ static irqreturn_t wacom_i2c_irq(int irq, void *dev_id) input_report_abs(input, ABS_X, x); input_report_abs(input, ABS_Y, y); 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:@@ -202,7 +229,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 = devm_request_threaded_irq(dev, client->irq, NULL, wacom_i2c_irq,
-- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |