This patch adds the wsmouse_configure call to iatp.  I haven't
seen it running, so it would be nice if someone could confirm that
the change doesn't introduce regressions, and check whether it
works with both synaptics(4) and ws(4).

Index: iatp.c
===================================================================
RCS file: /cvs/src/sys/dev/i2c/iatp.c,v
retrieving revision 1.3
diff -u -p -r1.3 iatp.c
--- iatp.c      24 Sep 2016 18:32:18 -0000      1.3
+++ iatp.c      8 Oct 2017 19:27:13 -0000
@@ -319,6 +319,30 @@ iatp_activate(struct device *self, int a
 }

 int
+iatp_configure(struct iatp_softc *sc)
+{
+       struct wsmousehw *hw;
+
+       hw = wsmouse_get_hw(sc->sc_wsmousedev);
+       if (sc->sc_touchpad) {
+               hw->type = WSMOUSE_TYPE_SYNAPTICS;
+               hw->hw_type = WSMOUSEHW_CLICKPAD;
+       } else {
+               hw->type = WSMOUSE_TYPE_TPANEL;
+               hw->hw_type = WSMOUSEHW_TPANEL;
+       }
+       hw->x_min = sc->sc_tsscale.minx;
+       hw->x_max = sc->sc_tsscale.maxx;
+       hw->y_min = sc->sc_tsscale.miny;
+       hw->y_max = sc->sc_tsscale.maxy;
+       hw->h_res = sc->sc_tsscale.resx;
+       hw->v_res = sc->sc_tsscale.resy;
+       hw->mt_slots = sc->num_touchids;
+
+       return (wsmouse_configure(sc->sc_wsmousedev, NULL, 0));
+}
+
+int
 iatp_enable(void *v)
 {
        struct iatp_softc *sc = v;
@@ -333,13 +357,10 @@ iatp_enable(void *v)

        DPRINTF(("%s: enabling\n", sc->sc_dev.dv_xname));

-       if (wsmouse_mt_init(sc->sc_wsmousedev, sc->num_touchids, 0)) {
-               printf("%s: failed wsmouse_mt_init\n", sc->sc_dev.dv_xname);
+       if (iatp_configure(sc)) {
+               printf("%s: failed wsmouse_configure\n", sc->sc_dev.dv_xname);
                return 1;
        }
-
-       if (sc->sc_touchpad)
-               wsmouse_set_mode(sc->sc_wsmousedev, WSMOUSE_COMPAT);

        /* force a read of any pending messages so we start getting new
         * interrupts */

Reply via email to