On Mon, Feb 15, 2010 at 03:41:35PM -0800, Ping Cheng wrote:
> Except two typos (commented inline), reviewed-by: Ping Cheng
> <pingli...@gmail.com> for the patchset.
> 
> On Sun, Feb 14, 2010 at 5:35 PM,  <ch...@cnpbagwell.com> wrote:
> > From: Chris Bagwell <ch...@cnpbagwell.com>
> >
> > common->tablet_id is used in wcmInit() to decide things
> > like defaulting to relative mode for bamboo P&T's but
> > it is not set until after return from first call to
> > wcmInit().
> >
> > Now qeury and store the tablet_id at same time that we are
> 
>          query
> 
> > discoverying its other features.
> 
> discovering

typos fixed and merged. Thanks for the patch and the review.

Cheers,
  Peter
 
> >
> > Call to get USB product ID is no longer needed in usbWcmInit()
> > since tablet_id contains correct value.
> >
> > Signed-off-by: Chris Bagwell <ch...@cnpbagwell.com>
> > ---
> >  src/wcmConfig.c         |    9 +++++++--
> >  src/wcmUSB.c            |   34 +++++++++++++---------------------
> >  src/wcmValidateDevice.c |   33 +++++++++++++++++++++++++++++++--
> >  3 files changed, 51 insertions(+), 25 deletions(-)
> >
> > diff --git a/src/wcmConfig.c b/src/wcmConfig.c
> > index 30dafe1..b5d07f2 100644
> > --- a/src/wcmConfig.c
> > +++ b/src/wcmConfig.c
> > @@ -34,7 +34,8 @@ extern int wcmNeedAutoHotplug(LocalDevicePtr local,
> >  extern int wcmAutoProbeDevice(LocalDevicePtr local);
> >  extern int wcmParseOptions(LocalDevicePtr local, unsigned long* keys);
> >  extern void wcmHotplugOthers(LocalDevicePtr local, unsigned long* keys);
> > -extern int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned long* keys);
> > +extern int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned long* keys,
> > +                            int* tablet_id);
> >
> >  static int wcmAllocate(LocalDevicePtr local, char* name, int flag);
> >
> > @@ -323,6 +324,7 @@ static LocalDevicePtr wcmInit(InputDriverPtr drv, 
> > IDevPtr dev, int flags)
> >        static int      numberWacom = 0;
> >        int             need_hotplug = 0;
> >        unsigned long   keys[NBITS(KEY_MAX)];
> > +       int             tablet_id = 0;
> >
> >        gWacomModule.wcmDrv = drv;
> >
> > @@ -338,7 +340,7 @@ static LocalDevicePtr wcmInit(InputDriverPtr drv, 
> > IDevPtr dev, int flags)
> >        xf86CollectInputOptions(local, default_options, NULL);
> >
> >        /* initialize supported keys */
> > -       wcmDeviceTypeKeys(local, keys);
> > +       wcmDeviceTypeKeys(local, keys, &tablet_id);
> >
> >        device = xf86SetStrOption(local->options, "Device", NULL);
> >        type = xf86FindOptionValue(local->options, "Type");
> > @@ -365,6 +367,9 @@ static LocalDevicePtr wcmInit(InputDriverPtr drv, 
> > IDevPtr dev, int flags)
> >
> >        common->wcmDevice = device;
> >
> > +       /* Hardware specific initialization relies on tablet_id */
> > +       common->tablet_id = tablet_id;
> > +
> >        /* Auto-probe the device if required, otherwise just noop. */
> >        if (numberWacom)
> >                if (!wcmAutoProbeDevice(local))
> > diff --git a/src/wcmUSB.c b/src/wcmUSB.c
> > index 954af06..3d0ec45 100644
> > --- a/src/wcmUSB.c
> > +++ b/src/wcmUSB.c
> > @@ -503,7 +503,6 @@ static struct
> >  Bool usbWcmInit(LocalDevicePtr local, char* id, float *version)
> >  {
> >        int i;
> > -       struct input_id sID;
> >        unsigned long keys[NBITS(KEY_MAX)] = {0};
> >        WacomDevicePtr priv = (WacomDevicePtr)local->private;
> >        WacomCommonPtr common = priv->common;
> > @@ -511,8 +510,7 @@ Bool usbWcmInit(LocalDevicePtr local, char* id, float 
> > *version)
> >        DBG(1, priv, "initializing USB tablet\n");
> >        *version = 0.0;
> >
> > -       /* fetch vendor, product, and model name */
> > -       ioctl(local->fd, EVIOCGID, &sID);
> > +       /* fetch model name */
> >        ioctl(local->fd, EVIOCGNAME(sizeof(id)), id);
> >
> >        /* retrieve tool type, device type and buttons from the kernel */
> > @@ -522,26 +520,20 @@ Bool usbWcmInit(LocalDevicePtr local, char* id, float 
> > *version)
> >                return FALSE;
> >        }
> >
> > -       /* vendor is wacom */
> > -       if (sID.vendor == WACOM_VENDOR_ID)
> > -       {
> > -               common->tablet_id = sID.product;
> > -
> > -               for (i = 0; i < sizeof (WacomModelDesc) / sizeof 
> > (WacomModelDesc [0]); i++)
> > -                       if (common->tablet_id == WacomModelDesc 
> > [i].model_id)
> > -                       {
> > -                               common->wcmModel = WacomModelDesc [i].model;
> > -                               common->wcmResolX = WacomModelDesc [i].xRes;
> > -                               common->wcmResolY = WacomModelDesc [i].yRes;
> > -                       }
> > -
> > -               if (common->wcmModel &&
> > -                       strstr(common->wcmModel->name, "TabletPC"))
> > +       for (i = 0; i < sizeof (WacomModelDesc) / sizeof (WacomModelDesc 
> > [0]); i++)
> > +               if (common->tablet_id == WacomModelDesc [i].model_id)
> >                {
> > -                       /* For penabled Tablet PCs, Tablet PC Button
> > -                        * are on by default */
> > -                       common->wcmTPCButtonDefault = 1;
> > +                       common->wcmModel = WacomModelDesc [i].model;
> > +                       common->wcmResolX = WacomModelDesc [i].xRes;
> > +                       common->wcmResolY = WacomModelDesc [i].yRes;
> >                }
> > +
> > +       if (common->wcmModel &&
> > +           strstr(common->wcmModel->name, "TabletPC"))
> > +       {
> > +               /* For penabled Tablet PCs, Tablet PC Button
> > +                * are on by default */
> > +               common->wcmTPCButtonDefault = 1;
> >        }
> >
> >        if (!common->wcmModel)
> > diff --git a/src/wcmValidateDevice.c b/src/wcmValidateDevice.c
> > index 07632de..271f918 100644
> > --- a/src/wcmValidateDevice.c
> > +++ b/src/wcmValidateDevice.c
> > @@ -36,7 +36,8 @@ void wcmHotplugOthers(LocalDevicePtr local, unsigned 
> > long* keys);
> >  int wcmAutoProbeDevice(LocalDevicePtr local);
> >  int wcmParseOptions(LocalDevicePtr local, unsigned long* keys);
> >  int wcmIsDuplicate(char* device, LocalDevicePtr local);
> > -int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned long* keys);
> > +int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned long* keys,
> > +                     int* tablet_id);
> >
> >  /* wcmCheckSource - Check if there is another source defined this device
> >  * before or not: don't add the tool by hal/udev if user has defined at 
> > least
> > @@ -184,7 +185,8 @@ Bool wcmIsAValidType(const char* type, unsigned long* 
> > keys)
> >    device ID. This matching only works for wacom devices (serial ID of
> >    WACf), all others are simply assumed to be pen + erasor.
> >  */
> > -int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned long* keys)
> > +int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned long* keys,
> > +                     int* tablet_id)
> >  {
> >        int ret = 1;
> >        int fd = -1;
> > @@ -201,6 +203,8 @@ int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned 
> > long* keys)
> >                return 0;
> >        }
> >
> > +       *tablet_id = 0;
> > +
> >        /* serial ISDV4 devices */
> >        if (ioctl(fd, TIOCGSERIAL, &tmp) == 0)
> >        {
> > @@ -248,9 +252,25 @@ int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned 
> > long* keys)
> >                        keys[LONG(BTN_TOOL_PEN)] &= ~BIT(BTN_TOOL_PEN);
> >                        keys[LONG(BTN_TOOL_RUBBER)] &= ~BIT(BTN_TOOL_RUBBER);
> >                }
> > +
> > +               /* 0x9a and 0x9f are only detected by communicating
> > +                * with device.  This means tablet_id will be 
> > updated/refined
> > +                * at later stage and true knowledge of capacitive
> > +                * support will be delayed until that point.
> > +                */
> > +               if (id >= 0x0 && id <= 0x7)
> > +                       *tablet_id = 0x90;
> > +               else if (id >= 0x8 && id <= 0xa)
> > +                       *tablet_id = 0x93;
> > +               else if (id >= 0xb && id <= 0xe)
> > +                       *tablet_id = 0xe3;
> > +               else if (id == 0x10)
> > +                       *tablet_id = 0xe2;
> >        }
> >        else /* USB devices */
> >        {
> > +               struct input_id wacom_id;
> > +
> >                if (ioctl(fd, EVIOCGBIT(EV_KEY, (sizeof(unsigned long)
> >                         * NBITS(KEY_MAX))), keys) < 0)
> >                {
> > @@ -258,6 +278,15 @@ int wcmDeviceTypeKeys(LocalDevicePtr local, unsigned 
> > long* keys)
> >                                "ioctl USB key bits.\n", local->name);
> >                        ret = 0;
> >                }
> > +
> > +               if (ioctl(fd, EVIOCGID, &wacom_id) < 0)
> > +               {
> > +                       xf86Msg(X_ERROR, "%s: wcmDeviceTypeKeys unable to "
> > +                               "ioctl Device ID.\n", local->name);
> > +                       ret = 0;
> > +               }
> > +               else
> > +                       *tablet_id = wacom_id.product;
> >        }
> >        close(fd);
> >        return ret;
> > --
> > 1.6.6

------------------------------------------------------------------------------
SOLARIS 10 is the OS for Data Centers - provides features such as DTrace,
Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW
http://p.sf.net/sfu/solaris-dev2dev
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to