Touchscreen of my new notebook was reporting "touchscreen has no range report" which turned out to be Z-axis related and I thought that always passing z=0 might solve the problem.
And it indeed mostly solved the problem. I can move the mouse and click inside the modular Xorg. The only problem is that the mouse moves two times faster to the right and 4-5 faster to the bottom. Basically, it works like if I had a small touchpad at the top left corner of my screen. If I'm in a text mode and run 'wsmoused -d /dev/wsmouse1', the cursor doesn't move at all but it flashes (in the center of the screen) when I touch the screen. I wonder where should I make the last change to restore 1:1 mappings between movements and screen pixels? Excerpts from dmesg, xorg.conf and my patch to dev/usb/uts.c are below. Alex Section "InputDevice" Identifier "Mouse1" Driver "mouse" Option "Protocol" "wsmouse" Option "Device" "/dev/wsmouse1" Option "ZAxisMapping" "X" EndSection $ dmesg |grep uhid uhidev0 at uhub2 port 3 configuration 1 interface 0 uhidev0: eGalax Inc. eGalaxTouch EXC7910-1031-12.00.03, rev 2.00/31.04, addr 5, iclass 3/1 uhidev0: 7 report ids uhid0 at uhidev0 reportid 3: input=63, output=63, feature=0 uhid1 at uhidev0 reportid 5: input=0, output=0, feature=2 uts0 at uhidev0 reportid 6wsmouse1 at uts0 mux 0 uhid2 at uhidev0 reportid 7: input=0, output=0, feature=256 uhidev0 at uhub2 port 3 configuration 1 interface 0 uhidev0: eGalax Inc. eGalaxTouch EXC7910-1031-12.00.03, rev 2.00/31.04, addr 5, iclass 3/1 uhidev0: 7 report ids uhid0 at uhidev0 reportid 3: input=63, output=63, feature=0 uhid1 at uhidev0 reportid 5: input=0, output=0, feature=2 uts0 at uhidev0 reportid 6wsmouse1 at uts0 mux 0 uhid2 at uhidev0 reportid 7: input=0, output=0, feature=256 uhidev0 at uhub2 port 3 configuration 1 interface 0 uhidev0: eGalax Inc. eGalaxTouch EXC7910-1031-12.00.03, rev 2.00/31.04, addr 4, iclass 3/1 uhidev0: 7 report ids uhid0 at uhidev0 reportid 3: input=63, output=63, feature=0 uhid1 at uhidev0 reportid 5: input=0, output=0, feature=2 uts0 at uhidev0 reportid 6wsmouse1 at uts0 mux 0 uhid2 at uhidev0 reportid 7: input=0, output=0, feature=256 $ cvs diff -u sys/dev/usb/uts.c Index: sys/dev/usb/uts.c =================================================================== RCS file: /cvsroot/src/sys/dev/usb/uts.c,v retrieving revision 1.3 diff -p -u -u -r1.3 uts.c --- sys/dev/usb/uts.c 5 Jan 2013 23:34:21 -0000 1.3 +++ sys/dev/usb/uts.c 4 Jan 2014 23:08:03 -0000 @@ -75,6 +75,7 @@ struct uts_softc { struct hid_location sc_loc_btn; int sc_enabled; + int z_enabled; int flags; /* device configuration */ #define UTS_ABS 0x1 /* absolute position */ @@ -199,13 +200,9 @@ uts_attach(device_t parent, device_t sel return; } - /* requires HID usage Digitizer:In_Range */ - if (!hid_locate(desc, size, HID_USAGE2(HUP_DIGITIZERS, HUD_IN_RANGE), - uha->reportid, hid_input, &sc->sc_loc_z, &flags)) { - aprint_error_dev(sc->sc_hdev.sc_dev, - "touchscreen has no range report\n"); - return; - } + sc->z_enabled = hid_locate(desc, size, + HID_USAGE2(HUP_DIGITIZERS, HUD_IN_RANGE), + uha->reportid, hid_input, &sc->sc_loc_z, &flags); /* multi-touch support would need HUD_CONTACTID and HUD_CONTACTMAX */ @@ -215,8 +212,12 @@ uts_attach(device_t parent, device_t sel sc->sc_loc_x.pos, sc->sc_loc_x.size)); DPRINTF(("uts_attach: Y\t%d/%d\n", sc->sc_loc_y.pos, sc->sc_loc_y.size)); - DPRINTF(("uts_attach: Z\t%d/%d\n", - sc->sc_loc_z.pos, sc->sc_loc_z.size)); + if (sc->z_enabled) { + DPRINTF(("uts_attach: Z\t%d/%d\n", + sc->sc_loc_z.pos, sc->sc_loc_z.size)); + } else { + DPRINTF(("uts_attach: Z disabled\n")); + } #endif a.accessops = &uts_accessops; @@ -368,7 +369,7 @@ uts_intr(struct uhidev *addr, void *ibuf } else dy = -hid_get_data(ibuf, &sc->sc_loc_y); - dz = hid_get_data(ibuf, &sc->sc_loc_z); + dz = sc->z_enabled ? hid_get_data(ibuf, &sc->sc_loc_z) : 0; if (hid_get_data(ibuf, &sc->sc_loc_btn)) buttons |= 1;