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