# [SOLVED] Touchscreen is too sensitive

## nc-pv

Hello!

I have a 19" 3M Microtouch touchscreen connected via serial controller EXII-7720SC Rev 3.0 to my computer which runs Gentoo. I am using drivers from manufacturer. Generally touchscreen works as expected except one small thing. It is too sensitive. When I touch it mouse pointer goes to correct position and clicks, then when I release mouse pointer makes tiny (few pixels) movement. And I can not have it because it is critical for software I am using. I think it is happening because when I am releasing finger touch area gets smaller and smaller, so touchscreen registers another movement while I am releasing finger. I do not have this issue when using Windows computer.

Screenshot of touch test on Linux (some of these touches presented as two dots indicating small movement)

Screenshot of touch test on Windows (all these are just single points)

I tried different settings in driver, but I was unable to resolve it. Control program does not have sensitivity settings.

By the way, I tried to use inputattach instead of driver from manufacturer - same result.

Anyone knows how I can decrease sensitivity or decrease resolution of touch sensor or another workaround to avoid registering tiny few pixels movements?

Best,

Nikolay

----------

## nc-pv

It was solved by modifying one of the functions of the driver in /usr/src/linux/drivers/input/touchscreen/mtouch.c

It was made to ignore any movements less than 65 pixels:

Original function:

```

static void mtouch_process_format_tablet(struct mtouch *mtouch)

{

   struct input_dev *dev = mtouch->dev;

   if (MTOUCH_FORMAT_TABLET_LENGTH == ++mtouch->idx) {

      input_report_abs(dev, ABS_X, MTOUCH_GET_XC(mtouch->data));

      input_report_abs(dev, ABS_Y, MTOUCH_MAX_YC - MTOUCH_GET_YC(mtouch->data));

      input_report_key(dev, BTN_TOUCH, MTOUCH_GET_TOUCHED(mtouch->data));

      input_sync(dev);

      mtouch->idx = 0;

   }

}

```

Modified function:

```

static void mtouch_process_format_tablet(struct mtouch *mtouch)

{

        struct input_dev *dev = mtouch->dev;

        static int prev_x=0, prev_y=0;

        int x, y;

        if (MTOUCH_FORMAT_TABLET_LENGTH == ++mtouch->idx) {

         x=MTOUCH_GET_XC(mtouch->data);

        y=MTOUCH_MAX_YC - MTOUCH_GET_YC(mtouch->data);

        if( abs(x-prev_x)>65 ) {

                input_report_abs(dev, ABS_X, x);

                prev_x=x;

        }

        if( abs(y-prev_y)>65 ) {

                input_report_abs(dev, ABS_Y, y);

                prev_y=y;

        }

        input_report_key(dev, BTN_TOUCH, MTOUCH_GET_TOUCHED(mtouch->data));

        input_sync(dev);

        mtouch->idx = 0;

        }

}

```

----------

