[PATCH synaptics 13/17] Don't autoprobe for devices when Option Device is set.

Peter Hutterer peter.hutterer at who-t.net
Sun Apr 3 16:39:41 PDT 2011


On Sat, Apr 02, 2011 at 08:44:10PM -0500, Chris Bagwell wrote:
> On Sun, Mar 20, 2011 at 9:08 PM, Peter Hutterer
> <peter.hutterer at who-t.net> wrote:
> > If only Option Device is set but no protocol, the code calls into
> > AutoDevProbe. eventcomm (the only backend with an AutoDevProbe) then runs
> > through all /dev/input/event devices and takes the first one it can find.
> >
> > If two touchpads are connected on a system, this may cause the same touchpad
> > to be added twice and the other one not at all - even though the device path
> > is specified. (This can only happen when the event device is not grabbed,
> > otherwise the grabcheck prevents the touchpad from being added twice)
> >
> > Pass the device option into AutoDevProbe and check that device first. If it
> > is a touchpad, finish with success. If it isn't, fail AutoDevProbe.
> 
> I think I've stared at this enough to understand most of it.  If
> double adds were happening before I think its important not just that
> its a touchpad but that its a touchpad that hasn't been previously
> grabbed (for 2 touchpad case).  If so, that might be nice to add in
> comment somewhere.
> 
> Reviewed-by: Chris Bagwell <chris at cnpbagwell.com>

added to the comment and amended, thanks.

Cheers,
  Peter
 

> > Introduced in dce6006f6a851be4147e16731caa453dd0d1ec1c.
> >
> > Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> > CC: Alexandr Shadchin <alexandr.shadchin at gmail.com>
> > ---
> >  src/eventcomm.c |   17 ++++++++++++++++-
> >  src/synaptics.c |    2 +-
> >  src/synproto.h  |    2 +-
> >  3 files changed, 18 insertions(+), 3 deletions(-)
> >
> > diff --git a/src/eventcomm.c b/src/eventcomm.c
> > index 41dd669..d59efdc 100644
> > --- a/src/eventcomm.c
> > +++ b/src/eventcomm.c
> > @@ -504,7 +504,7 @@ EventReadDevDimensions(InputInfoPtr pInfo)
> >  }
> >
> >  static Bool
> > -EventAutoDevProbe(InputInfoPtr pInfo)
> > +EventAutoDevProbe(InputInfoPtr pInfo, const char *device)
> >  {
> >     /* We are trying to find the right eventX device or fall back to
> >        the psaux protocol and the given device from XF86Config */
> > @@ -512,6 +512,21 @@ EventAutoDevProbe(InputInfoPtr pInfo)
> >     Bool touchpad_found = FALSE;
> >     struct dirent **namelist;
> >
> > +    if (device) {
> > +       int fd = -1;
> > +       SYSCALL(fd = open(device, O_RDONLY));
> > +       if (fd >= 0)
> > +       {
> > +           touchpad_found = event_query_is_touchpad(fd, TRUE);
> > +
> > +           SYSCALL(close(fd));
> > +           /* if a device is set and not a touchpad, we must return FALSE.
> > +            * Otherwise, we'll add a device that wasn't requested for and
> > +            * repeat f5687a6741a19ef3081e7fd83ac55f6df8bcd5c2. */
> > +           return touchpad_found;
> > +       }
> > +    }
> > +
> >     i = scandir(DEV_INPUT_EVENT, &namelist, EventDevOnly, alphasort);
> >     if (i < 0) {
> >                xf86Msg(X_ERROR, "Couldn't open %s\n", DEV_INPUT_EVENT);
> > diff --git a/src/synaptics.c b/src/synaptics.c
> > index 1233917..102a701 100644
> > --- a/src/synaptics.c
> > +++ b/src/synaptics.c
> > @@ -261,7 +261,7 @@ SetDeviceAndProtocol(InputInfoPtr pInfo)
> >     for (i = 0; protocols[i].name; i++) {
> >         if ((!device || !proto) &&
> >             protocols[i].proto_ops->AutoDevProbe &&
> > -            protocols[i].proto_ops->AutoDevProbe(pInfo))
> > +            protocols[i].proto_ops->AutoDevProbe(pInfo, device))
> >             break;
> >         else if (proto && !strcmp(proto, protocols[i].name))
> >             break;
> > diff --git a/src/synproto.h b/src/synproto.h
> > index 251dc84..75f90e4 100644
> > --- a/src/synproto.h
> > +++ b/src/synproto.h
> > @@ -75,7 +75,7 @@ struct SynapticsProtocolOperations {
> >     Bool (*QueryHardware)(InputInfoPtr pInfo);
> >     Bool (*ReadHwState)(InputInfoPtr pInfo,
> >                        struct CommData *comm, struct SynapticsHwState *hwRet);
> > -    Bool (*AutoDevProbe)(InputInfoPtr pInfo);
> > +    Bool (*AutoDevProbe)(InputInfoPtr pInfo, const char *device);
> >     void (*ReadDevDimensions)(InputInfoPtr pInfo);
> >  };
> >
> > --
> > 1.7.4
> >
> > _______________________________________________
> > xorg-devel at lists.x.org: X.Org development
> > Archives: http://lists.x.org/archives/xorg-devel
> > Info: http://lists.x.org/mailman/listinfo/xorg-devel
> >
> 


More information about the xorg-devel mailing list