]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
Input: atmel_mxt_ts - add support for generic touchscreen configurations
authorSvyatoslav Ryhel <clamor95@gmail.com>
Tue, 9 Sep 2025 05:49:03 +0000 (08:49 +0300)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Fri, 19 Sep 2025 18:23:15 +0000 (11:23 -0700)
This provides support for generic touchscreen configuration options like
swapped-x-y, min-x, min-y, size-x, size-y, etc.

Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
Link: https://lore.kernel.org/r/20250909054903.11519-3-clamor95@gmail.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/touchscreen/atmel_mxt_ts.c

index 322d5a3d40a0933f1e1c290e906258a874bcf4b2..fc624101147ecbca36b7360c63347be8354c8a9f 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/firmware.h>
 #include <linux/i2c.h>
 #include <linux/input/mt.h>
+#include <linux/input/touchscreen.h>
 #include <linux/interrupt.h>
 #include <linux/irq.h>
 #include <linux/of.h>
@@ -355,6 +356,8 @@ struct mxt_data {
        enum mxt_suspend_mode suspend_mode;
 
        u32 wakeup_method;
+
+       struct touchscreen_properties prop;
 };
 
 struct mxt_vb2_buffer {
@@ -888,8 +891,7 @@ static void mxt_proc_t9_message(struct mxt_data *data, u8 *message)
 
                /* Touch active */
                input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, 1);
-               input_report_abs(input_dev, ABS_MT_POSITION_X, x);
-               input_report_abs(input_dev, ABS_MT_POSITION_Y, y);
+               touchscreen_report_pos(input_dev, &data->prop, x, y, true);
                input_report_abs(input_dev, ABS_MT_PRESSURE, amplitude);
                input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, area);
        } else {
@@ -1010,8 +1012,7 @@ static void mxt_proc_t100_message(struct mxt_data *data, u8 *message)
                        id, type, x, y, major, pressure, orientation);
 
                input_mt_report_slot_state(input_dev, tool, 1);
-               input_report_abs(input_dev, ABS_MT_POSITION_X, x);
-               input_report_abs(input_dev, ABS_MT_POSITION_Y, y);
+               touchscreen_report_pos(input_dev, &data->prop, x, y, true);
                input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, major);
                input_report_abs(input_dev, ABS_MT_PRESSURE, pressure);
                input_report_abs(input_dev, ABS_MT_DISTANCE, distance);
@@ -2212,6 +2213,8 @@ static int mxt_initialize_input_device(struct mxt_data *data)
                                     0, 255, 0, 0);
        }
 
+       touchscreen_parse_properties(input_dev, true, &data->prop);
+
        /* For T15 and T97 Key Array */
        if (data->T15_reportid_min || data->T97_reportid_min) {
                for (i = 0; i < data->t15_num_keys; i++)