On 29/06/12(Fri) 12:04, Martin Pieuchot wrote: > On 18/06/12(Mon) 08:41, [email protected] wrote: > > >Description: > > Touchpad does not work after xf86-input-synaptics update to 1.6.1 > > on Dell E4300. Pointing stick motion is jerky. > > >How-To-Repeat: > > Update xf86-input-synaptics 1.5.2 to xf86-input-synaptics 1.6.1 > > Straightforward update that fixes the issue reported by janis, tested > here with the following touchpad: > > pms0: ALPS Glidepoint, version 0x7321 > > > Ok?
Forget this diff it doesn't fix the issue, I just forgot a chunk for the wscons support. I'm looking for the right fix. > > Martin > > Index: aclocal.m4 > =================================================================== > RCS file: /cvs/xenocara/driver/xf86-input-synaptics/aclocal.m4,v > retrieving revision 1.3 > diff -u -p -r1.3 aclocal.m4 > --- aclocal.m4 1 Apr 2012 12:18:44 -0000 1.3 > +++ aclocal.m4 29 Jun 2012 09:57:39 -0000 > @@ -11205,7 +11205,6 @@ XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS] > XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wcast-qual]) > XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wmissing-noreturn]) > XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wmissing-format-attribute]) > -XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wredundant-decls]) > > # These are currently disabled because they are noisy. They will be enabled > # in the future once the codebase is sufficiently modernized to silence > Index: configure > =================================================================== > RCS file: /cvs/xenocara/driver/xf86-input-synaptics/configure,v > retrieving revision 1.5 > diff -u -p -r1.5 configure > --- configure 12 Jun 2012 18:59:42 -0000 1.5 > +++ configure 29 Jun 2012 09:57:43 -0000 > @@ -1,6 +1,6 @@ > #! /bin/sh > # Guess values for system-dependent variables and create Makefiles. > -# Generated by GNU Autoconf 2.62 for xf86-input-synaptics 1.6.1. > +# Generated by GNU Autoconf 2.62 for xf86-input-synaptics 1.6.2. > # > # Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>. > # > @@ -616,8 +616,8 @@ SHELL=${CONFIG_SHELL-/bin/sh} > # Identity of this package. > PACKAGE_NAME='xf86-input-synaptics' > PACKAGE_TARNAME='xf86-input-synaptics' > -PACKAGE_VERSION='1.6.1' > -PACKAGE_STRING='xf86-input-synaptics 1.6.1' > +PACKAGE_VERSION='1.6.2' > +PACKAGE_STRING='xf86-input-synaptics 1.6.2' > PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg' > > ac_unique_file="Makefile.am" > @@ -1409,7 +1409,7 @@ if test "$ac_init_help" = "long"; then > # Omit some internal or obsolete options to make the list less imposing. > # This message is too long to be a string in the A/UX 3.1 sh. > cat <<_ACEOF > -\`configure' configures xf86-input-synaptics 1.6.1 to adapt to many kinds of > systems. > +\`configure' configures xf86-input-synaptics 1.6.2 to adapt to many kinds of > systems. > > Usage: $0 [OPTION]... [VAR=VALUE]... > > @@ -1480,7 +1480,7 @@ fi > > if test -n "$ac_init_help"; then > case $ac_init_help in > - short | recursive ) echo "Configuration of xf86-input-synaptics > 1.6.1:";; > + short | recursive ) echo "Configuration of xf86-input-synaptics > 1.6.2:";; > esac > cat <<\_ACEOF > > @@ -1612,7 +1612,7 @@ fi > test -n "$ac_init_help" && exit $ac_status > if $ac_init_version; then > cat <<\_ACEOF > -xf86-input-synaptics configure 1.6.1 > +xf86-input-synaptics configure 1.6.2 > generated by GNU Autoconf 2.62 > > Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, > @@ -1626,7 +1626,7 @@ cat >config.log <<_ACEOF > This file contains any messages produced by compilers while > running configure, to aid debugging if configure makes a mistake. > > -It was created by xf86-input-synaptics $as_me 1.6.1, which was > +It was created by xf86-input-synaptics $as_me 1.6.2, which was > generated by GNU Autoconf 2.62. Invocation command line was > > $ $0 $@ > @@ -2280,7 +2280,7 @@ fi > > # Define the identity of the package. > PACKAGE='xf86-input-synaptics' > - VERSION='1.6.1' > + VERSION='1.6.2' > > > cat >>confdefs.h <<_ACEOF > @@ -15773,203 +15773,6 @@ $as_echo "$supported" >&6; } > > > > - > - > - > - > - > - > - > - > - > - > - > - > -xorg_testset_save_CFLAGS="$CFLAGS" > - > -if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then > - CFLAGS="$CFLAGS -Werror=unknown-warning-option" > - { $as_echo "$as_me:$LINENO: checking if $CC supports > -Werror=unknown-warning-option" >&5 > -$as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " > >&6; } > -if test "${xorg_cv_cc_flag_unknown_warning_option+set}" = set; then > - $as_echo_n "(cached) " >&6 > -else > - cat >conftest.$ac_ext <<_ACEOF > -/* confdefs.h. */ > -_ACEOF > -cat confdefs.h >>conftest.$ac_ext > -cat >>conftest.$ac_ext <<_ACEOF > -/* end confdefs.h. */ > -int i; > -_ACEOF > -rm -f conftest.$ac_objext > -if { (ac_try="$ac_compile" > -case "(($ac_try" in > - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; > - *) ac_try_echo=$ac_try;; > -esac > -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" > -$as_echo "$ac_try_echo") >&5 > - (eval "$ac_compile") 2>conftest.er1 > - ac_status=$? > - grep -v '^ *+' conftest.er1 >conftest.err > - rm -f conftest.er1 > - cat conftest.err >&5 > - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 > - (exit $ac_status); } && { > - test -z "$ac_c_werror_flag" || > - test ! -s conftest.err > - } && test -s conftest.$ac_objext; then > - xorg_cv_cc_flag_unknown_warning_option=yes > -else > - $as_echo "$as_me: failed program was:" >&5 > -sed 's/^/| /' conftest.$ac_ext >&5 > - > - xorg_cv_cc_flag_unknown_warning_option=no > -fi > - > -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext > -fi > -{ $as_echo "$as_me:$LINENO: result: $xorg_cv_cc_flag_unknown_warning_option" > >&5 > -$as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } > - > xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option > - CFLAGS="$xorg_testset_save_CFLAGS" > -fi > - > -if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then > - if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then > - CFLAGS="$CFLAGS -Werror=unknown-warning-option" > - fi > - CFLAGS="$CFLAGS -Werror=unused-command-line-argument" > - { $as_echo "$as_me:$LINENO: checking if $CC supports > -Werror=unused-command-line-argument" >&5 > -$as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... > " >&6; } > -if test "${xorg_cv_cc_flag_unused_command_line_argument+set}" = set; then > - $as_echo_n "(cached) " >&6 > -else > - cat >conftest.$ac_ext <<_ACEOF > -/* confdefs.h. */ > -_ACEOF > -cat confdefs.h >>conftest.$ac_ext > -cat >>conftest.$ac_ext <<_ACEOF > -/* end confdefs.h. */ > -int i; > -_ACEOF > -rm -f conftest.$ac_objext > -if { (ac_try="$ac_compile" > -case "(($ac_try" in > - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; > - *) ac_try_echo=$ac_try;; > -esac > -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" > -$as_echo "$ac_try_echo") >&5 > - (eval "$ac_compile") 2>conftest.er1 > - ac_status=$? > - grep -v '^ *+' conftest.er1 >conftest.err > - rm -f conftest.er1 > - cat conftest.err >&5 > - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 > - (exit $ac_status); } && { > - test -z "$ac_c_werror_flag" || > - test ! -s conftest.err > - } && test -s conftest.$ac_objext; then > - xorg_cv_cc_flag_unused_command_line_argument=yes > -else > - $as_echo "$as_me: failed program was:" >&5 > -sed 's/^/| /' conftest.$ac_ext >&5 > - > - xorg_cv_cc_flag_unused_command_line_argument=no > -fi > - > -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext > -fi > -{ $as_echo "$as_me:$LINENO: result: > $xorg_cv_cc_flag_unused_command_line_argument" >&5 > -$as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } > - > xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument > - CFLAGS="$xorg_testset_save_CFLAGS" > -fi > - > -found="no" > - > - if test $found = "no" ; then > - if test "x$xorg_testset_unknown_warning_option" = "xyes" ; then > - CFLAGS="$CFLAGS -Werror=unknown-warning-option" > - fi > - > - if test "x$xorg_testset_unused_command_line_argument" = "xyes" > ; then > - CFLAGS="$CFLAGS -Werror=unused-command-line-argument" > - fi > - > - CFLAGS="$CFLAGS -Wredundant-decls" > - > - { $as_echo "$as_me:$LINENO: checking if $CC > supports-Wredundant-decls" >&5 > -$as_echo_n "checking if $CC supports-Wredundant-decls... " >&6; } > - cacheid=xorg_cv_cc_flag__Wredundant_decls > - if { as_var=$cacheid; eval "test \"\${$as_var+set}\" = set"; }; > then > - $as_echo_n "(cached) " >&6 > -else > - cat >conftest.$ac_ext <<_ACEOF > -/* confdefs.h. */ > -_ACEOF > -cat confdefs.h >>conftest.$ac_ext > -cat >>conftest.$ac_ext <<_ACEOF > -/* end confdefs.h. */ > -int i; > -int > -main () > -{ > - > - ; > - return 0; > -} > -_ACEOF > -rm -f conftest.$ac_objext conftest$ac_exeext > -if { (ac_try="$ac_link" > -case "(($ac_try" in > - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; > - *) ac_try_echo=$ac_try;; > -esac > -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" > -$as_echo "$ac_try_echo") >&5 > - (eval "$ac_link") 2>conftest.er1 > - ac_status=$? > - grep -v '^ *+' conftest.er1 >conftest.err > - rm -f conftest.er1 > - cat conftest.err >&5 > - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 > - (exit $ac_status); } && { > - test -z "$ac_c_werror_flag" || > - test ! -s conftest.err > - } && test -s conftest$ac_exeext && { > - test "$cross_compiling" = yes || > - $as_test_x conftest$ac_exeext > - }; then > - eval $cacheid=yes > -else > - $as_echo "$as_me: failed program was:" >&5 > -sed 's/^/| /' conftest.$ac_ext >&5 > - > - eval $cacheid=no > -fi > - > -rm -rf conftest.dSYM > -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ > - conftest$ac_exeext conftest.$ac_ext > -fi > - > - > - CFLAGS="$xorg_testset_save_CFLAGS" > - > - eval supported=\$$cacheid > - { $as_echo "$as_me:$LINENO: result: $supported" >&5 > -$as_echo "$supported" >&6; } > - if test "$supported" = "yes" ; then > - BASE_CFLAGS="$BASE_CFLAGS -Wredundant-decls" > - found="yes" > - fi > - fi > - > - > - > # These are currently disabled because they are noisy. They will be enabled > # in the future once the codebase is sufficiently modernized to silence > # them. For now, I don't want them to drown out the other warnings. > @@ -23695,7 +23498,7 @@ exec 6>&1 > # report actual input values of CONFIG_FILES etc. instead of their > # values after options handling. > ac_log=" > -This file was extended by xf86-input-synaptics $as_me 1.6.1, which was > +This file was extended by xf86-input-synaptics $as_me 1.6.2, which was > generated by GNU Autoconf 2.62. Invocation command line was > > CONFIG_FILES = $CONFIG_FILES > @@ -23748,7 +23551,7 @@ Report bugs to <[email protected]>." > _ACEOF > cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 > ac_cs_version="\\ > -xf86-input-synaptics config.status 1.6.1 > +xf86-input-synaptics config.status 1.6.2 > configured by $0, generated by GNU Autoconf 2.62, > with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; > s/[\\""\`\$]/\\\\&/g'`\\" > > Index: configure.ac > =================================================================== > RCS file: /cvs/xenocara/driver/xf86-input-synaptics/configure.ac,v > retrieving revision 1.5 > diff -u -p -r1.5 configure.ac > --- configure.ac 12 Jun 2012 18:59:42 -0000 1.5 > +++ configure.ac 29 Jun 2012 09:53:21 -0000 > @@ -23,7 +23,7 @@ > # Initialize Autoconf > AC_PREREQ([2.60]) > AC_INIT([xf86-input-synaptics], > - [1.6.1], > + [1.6.2], > [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], > [xf86-input-synaptics]) > AC_CONFIG_SRCDIR([Makefile.am]) > Index: src/eventcomm.c > =================================================================== > RCS file: /cvs/xenocara/driver/xf86-input-synaptics/src/eventcomm.c,v > retrieving revision 1.5 > diff -u -p -r1.5 eventcomm.c > --- src/eventcomm.c 12 Jun 2012 18:59:42 -0000 1.5 > +++ src/eventcomm.c 29 Jun 2012 09:39:36 -0000 > @@ -564,8 +564,7 @@ EventProcessTouchEvent(InputInfoPtr pInf > if (slot_index < 0) > return; > > - if (hw->slot_state[slot_index] == SLOTSTATE_EMPTY || > - hw->slot_state[slot_index] == SLOTSTATE_OPEN_EMPTY) > + if (hw->slot_state[slot_index] == SLOTSTATE_OPEN_EMPTY) > hw->slot_state[slot_index] = SLOTSTATE_UPDATE; > if (ev->code == ABS_MT_TRACKING_ID) { > if (ev->value >= 0) { > @@ -580,7 +579,7 @@ EventProcessTouchEvent(InputInfoPtr pInf > "Attempted to copy values from out-of-range " > "slot, touch events may be incorrect.\n"); > } > - else { > + else if (hw->slot_state[slot_index] != SLOTSTATE_EMPTY) { > hw->slot_state[slot_index] = SLOTSTATE_CLOSE; > proto_data->num_touches--; > } > Index: src/properties.c > =================================================================== > RCS file: /cvs/xenocara/driver/xf86-input-synaptics/src/properties.c,v > retrieving revision 1.4 > diff -u -p -r1.4 properties.c > --- src/properties.c 12 Jun 2012 18:59:42 -0000 1.4 > +++ src/properties.c 29 Jun 2012 09:39:36 -0000 > @@ -519,6 +519,9 @@ SetProperty(DeviceIntPtr dev, Atom prope > return BadMatch; > > dist = (INT32 *) prop->data; > + if (dist[0] == 0 || dist[1] == 0) > + return BadValue; > + > if (para->scroll_dist_vert != dist[0]) { > para->scroll_dist_vert = dist[0]; > #ifdef HAVE_SMOOTH_SCROLL > @@ -715,6 +718,9 @@ SetProperty(DeviceIntPtr dev, Atom prope > return BadMatch; > > circdist = *(float *) prop->data; > + if (circdist == 0) > + return BadValue; > + > para->scroll_dist_circ = circdist; > } > else if (property == prop_circscroll_trigger) { > Index: src/synaptics.c > =================================================================== > RCS file: /cvs/xenocara/driver/xf86-input-synaptics/src/synaptics.c,v > retrieving revision 1.5 > diff -u -p -r1.5 synaptics.c > --- src/synaptics.c 12 Jun 2012 18:59:42 -0000 1.5 > +++ src/synaptics.c 29 Jun 2012 09:39:36 -0000 > @@ -170,9 +170,6 @@ const static struct { > "psaux", &psaux_proto_operations}, { > "alps", &alps_proto_operations}, > #endif > -#ifdef BUILD_WSCONSCOMM > - { "wscons", &wscons_proto_operations }, > -#endif > { > NULL, NULL} > }; > @@ -1156,6 +1153,9 @@ SynapticsReset(SynapticsPrivate * priv) > priv->lastButtons = 0; > priv->prev_z = 0; > priv->prevFingers = 0; > +#ifdef HAVE_MULTITOUCH > + memset(priv->open_slots, 0, priv->num_slots * sizeof(int)); > +#endif > } > > static Bool > @@ -2743,7 +2743,7 @@ HandleScrolling(SynapticsPrivate * priv, > double dtime = (hw->millis - priv->scroll.last_millis) / 1000.0; > double ddy = para->coasting_friction * dtime; > > - priv->scroll.delta_y += priv->scroll.coast_speed_y * dtime * > para->scroll_dist_vert; > + priv->scroll.delta_y += priv->scroll.coast_speed_y * dtime * > abs(para->scroll_dist_vert); > delay = MIN(delay, POLL_MS); > if (abs(priv->scroll.coast_speed_y) < ddy) { > priv->scroll.coast_speed_y = 0; > @@ -2758,7 +2758,7 @@ HandleScrolling(SynapticsPrivate * priv, > if (priv->scroll.coast_speed_x) { > double dtime = (hw->millis - priv->scroll.last_millis) / 1000.0; > double ddx = para->coasting_friction * dtime; > - priv->scroll.delta_x += priv->scroll.coast_speed_x * dtime * > para->scroll_dist_vert; > + priv->scroll.delta_x += priv->scroll.coast_speed_x * dtime * > abs(para->scroll_dist_horiz); > delay = MIN(delay, POLL_MS); > if (abs(priv->scroll.coast_speed_x) < ddx) { > priv->scroll.coast_speed_x = 0; > @@ -3131,7 +3131,9 @@ UpdateTouchState(InputInfoPtr pInfo, str > priv->open_slots[j] = priv->open_slots[j + 1]; > } > > - priv->num_active_touches--; > + BUG_WARN(priv->num_active_touches == 0); > + if (priv->num_active_touches > 0) > + priv->num_active_touches--; > } > } > > @@ -3274,6 +3276,19 @@ HandleState(InputInfoPtr pInfo, struct S > if (para->touchpad_off == 1) { > UpdateTouchState(pInfo, hw); > return delay; > + } > + > + /* We need both and x/y, the driver can't handle just one of the two > + * yet. But since it's possible to hit a phys button on non-clickpads > + * without ever getting motion data first, we must continue with 0/0 for > + * that case. */ > + if (hw->x == INT_MIN || hw->y == INT_MAX) { > + if (para->clickpad) > + return delay; > + else if (hw->left || hw->right || hw->middle) { > + hw->x = (hw->x == INT_MIN) ? 0 : hw->x; > + hw->y = (hw->y == INT_MIN) ? 0 : hw->y; > + } > } > > /* If a physical button is pressed on a clickpad, use cumulative relative > Index: src/synproto.c > =================================================================== > RCS file: /cvs/xenocara/driver/xf86-input-synaptics/src/synproto.c,v > retrieving revision 1.1 > diff -u -p -r1.1 synproto.c > --- src/synproto.c 12 Jun 2012 18:59:42 -0000 1.1 > +++ src/synproto.c 29 Jun 2012 09:39:36 -0000 > @@ -134,8 +134,8 @@ void > SynapticsResetHwState(struct SynapticsHwState *hw) > { > hw->millis = 0; > - hw->x = 0; > - hw->y = 0; > + hw->x = INT_MIN; > + hw->y = INT_MIN; > hw->z = 0; > hw->cumulative_dx = 0; > hw->cumulative_dy = 0;
