Re: [PATCH v3 1/4] Input: Add driver for Cypress Generation 5 touchscreen
From: Alistair Francis <hidden>
Date: 2021-12-06 10:47:21
Also in:
linux-arm-kernel, linux-devicetree, lkml
On Sun, Dec 5, 2021 at 8:32 AM Andreas Kemnade [off-list ref] wrote:
quoted hunk ↗ jump to hunk
Hi, On Thu, 2 Dec 2021 22:20:18 +1000 Alistair Francis [off-list ref] wrote:quoted
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);
Does it work with this still included? I need this for my userspace program. Alistair
quoted hunk ↗ jump to hunk
- 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);