Thread (14 messages) flat view 14 messages, 7 authors, 2021-12-23

Re: [PATCH v3 1/4] Input: Add driver for Cypress Generation 5 touchscreen

From: Andreas Kemnade <andreas@kemnade.info>
Date: 2021-12-04 22:32:44
Also in: linux-devicetree, linux-input, lkml
Subsystem: cyttsp touchscreen driver, input (keyboard, mouse, joystick, touchscreen) drivers, the rest · Maintainers: Linus Walleij, Dmitry Torokhov, Linus Torvalds

Hi,


On Thu,  2 Dec 2021 22:20:18 +1000
Alistair Francis [off-list ref] wrote:
From: Mylène Josserand <redacted>

This is the basic driver for the Cypress TrueTouch Gen5 touchscreen
controllers. This driver supports only the I2C bus but it uses regmap
so SPI support could be added later.
The touchscreen can retrieve some defined zone that are handled as
buttons (according to the hardware). That is why it handles
button and multitouch events.

Reviewed-by: Maxime Ripard <redacted>
Signed-off-by: Mylène Josserand <redacted>
Message-Id: [off-list ref]
Signed-off-by: Alistair Francis <redacted>
I finally got it working. The order of initialisation is important.
Params are copied on input_mt_init_slots() from ABS_MT* to ABS_*, so you
have to set params first.

Here is the patch i need on top of this one to make it actually work
with X (evdev and libinput is tested):
diff --git a/drivers/input/touchscreen/cyttsp5.c b/drivers/input/touchscreen/cyttsp5.c
index b5d96eb71e46..3894ec85a732 100644
--- a/drivers/input/touchscreen/cyttsp5.c
+++ b/drivers/input/touchscreen/cyttsp5.c
@@ -415,19 +415,12 @@ static int cyttsp5_setup_input_device(struct device *dev)
 	int max_x_tmp, max_y_tmp;
 	int error;
 
-	__set_bit(EV_REL, ts->input->evbit);
-
 	max_x_tmp = si->sensing_conf_data.res_x;
 	max_y_tmp = si->sensing_conf_data.res_y;
 	max_x = max_x_tmp - 1;
 	max_y = max_y_tmp - 1;
 	max_p = si->sensing_conf_data.max_z;
 
-	error = input_mt_init_slots(ts->input, si->tch_abs[CY_TCH_T].max,
-		INPUT_MT_DROP_UNUSED | INPUT_MT_POINTER);
-	if (error < 0)
-		return error;
-
 	input_set_abs_params(ts->input, ABS_MT_POSITION_X, 0, max_x, 0, 0);
 	input_set_abs_params(ts->input, ABS_MT_POSITION_Y, 0, max_y, 0, 0);
 	input_set_abs_params(ts->input, ABS_MT_PRESSURE, 0, max_p, 0, 0);
@@ -435,6 +428,11 @@ static int cyttsp5_setup_input_device(struct device *dev)
 	input_set_abs_params(ts->input, ABS_MT_TOUCH_MAJOR, 0, MAX_AREA, 0, 0);
 	input_set_abs_params(ts->input, ABS_MT_TOUCH_MINOR, 0, MAX_AREA, 0, 0);
 
+	error = input_mt_init_slots(ts->input, si->tch_abs[CY_TCH_T].max,
+		INPUT_MT_DROP_UNUSED | INPUT_MT_DIRECT);
+	if (error < 0)
+		return error;
+
 	error = input_register_device(ts->input);
 	if (error < 0)
 		dev_err(dev, "Error, failed register input device r=%d\n", error);
 
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help