Input: wacom - not all multi-interface devices support touch
Some multi-interface devices support expresskeys on a separate interface, such as Bamboo; some multi-interface devices do not support touch at all, such as Pen only Intuos5. Make sure we report the right device names. Tested-by: Jason Gerecke <killertofu@gmail.com> Signed-off-by: Ping Cheng <pingc@wacom.com> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
parent
a4da47527d
commit
57bcfce377
|
@ -1188,34 +1188,47 @@ static void wacom_wireless_work(struct work_struct *work)
|
||||||
wacom_wac1->features =
|
wacom_wac1->features =
|
||||||
*((struct wacom_features *)id->driver_info);
|
*((struct wacom_features *)id->driver_info);
|
||||||
wacom_wac1->features.device_type = BTN_TOOL_PEN;
|
wacom_wac1->features.device_type = BTN_TOOL_PEN;
|
||||||
|
snprintf(wacom_wac1->name, WACOM_NAME_MAX, "%s (WL) Pen",
|
||||||
|
wacom_wac1->features.name);
|
||||||
error = wacom_register_input(wacom1);
|
error = wacom_register_input(wacom1);
|
||||||
if (error)
|
if (error)
|
||||||
goto fail1;
|
goto fail;
|
||||||
|
|
||||||
/* Touch interface */
|
/* Touch interface */
|
||||||
wacom_wac2->features =
|
if (wacom_wac1->features.touch_max) {
|
||||||
*((struct wacom_features *)id->driver_info);
|
wacom_wac2->features =
|
||||||
wacom_wac2->features.pktlen = WACOM_PKGLEN_BBTOUCH3;
|
*((struct wacom_features *)id->driver_info);
|
||||||
wacom_wac2->features.device_type = BTN_TOOL_FINGER;
|
wacom_wac2->features.pktlen = WACOM_PKGLEN_BBTOUCH3;
|
||||||
wacom_wac2->features.x_max = wacom_wac2->features.y_max = 4096;
|
wacom_wac2->features.device_type = BTN_TOOL_FINGER;
|
||||||
error = wacom_register_input(wacom2);
|
wacom_wac2->features.x_max = wacom_wac2->features.y_max = 4096;
|
||||||
if (error)
|
if (wacom_wac2->features.touch_max)
|
||||||
goto fail2;
|
snprintf(wacom_wac2->name, WACOM_NAME_MAX,
|
||||||
|
"%s (WL) Finger",wacom_wac2->features.name);
|
||||||
|
else
|
||||||
|
snprintf(wacom_wac2->name, WACOM_NAME_MAX,
|
||||||
|
"%s (WL) Pad",wacom_wac2->features.name);
|
||||||
|
error = wacom_register_input(wacom2);
|
||||||
|
if (error)
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
error = wacom_initialize_battery(wacom);
|
error = wacom_initialize_battery(wacom);
|
||||||
if (error)
|
if (error)
|
||||||
goto fail3;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
fail3:
|
fail:
|
||||||
input_unregister_device(wacom_wac2->input);
|
if (wacom_wac2->input) {
|
||||||
wacom_wac2->input = NULL;
|
input_unregister_device(wacom_wac2->input);
|
||||||
fail2:
|
wacom_wac2->input = NULL;
|
||||||
input_unregister_device(wacom_wac1->input);
|
}
|
||||||
wacom_wac1->input = NULL;
|
|
||||||
fail1:
|
if (wacom_wac1->input) {
|
||||||
|
input_unregister_device(wacom_wac1->input);
|
||||||
|
wacom_wac1->input = NULL;
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1332,10 +1345,12 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
|
||||||
struct usb_device *other_dev;
|
struct usb_device *other_dev;
|
||||||
|
|
||||||
/* Append the device type to the name */
|
/* Append the device type to the name */
|
||||||
strlcat(wacom_wac->name,
|
if (features->device_type != BTN_TOOL_FINGER)
|
||||||
features->device_type == BTN_TOOL_PEN ?
|
strlcat(wacom_wac->name, " Pen", WACOM_NAME_MAX);
|
||||||
" Pen" : " Finger",
|
else if (features->touch_max)
|
||||||
sizeof(wacom_wac->name));
|
strlcat(wacom_wac->name, " Finger", WACOM_NAME_MAX);
|
||||||
|
else
|
||||||
|
strlcat(wacom_wac->name, " Pad", WACOM_NAME_MAX);
|
||||||
|
|
||||||
other_dev = wacom_get_sibling(dev, features->oVid, features->oPid);
|
other_dev = wacom_get_sibling(dev, features->oVid, features->oPid);
|
||||||
if (other_dev == NULL || wacom_get_usbdev_data(other_dev) == NULL)
|
if (other_dev == NULL || wacom_get_usbdev_data(other_dev) == NULL)
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
/* maximum packet length for USB devices */
|
/* maximum packet length for USB devices */
|
||||||
#define WACOM_PKGLEN_MAX 64
|
#define WACOM_PKGLEN_MAX 64
|
||||||
|
|
||||||
|
#define WACOM_NAME_MAX 64
|
||||||
|
|
||||||
/* packet length for individual models */
|
/* packet length for individual models */
|
||||||
#define WACOM_PKGLEN_PENPRTN 7
|
#define WACOM_PKGLEN_PENPRTN 7
|
||||||
#define WACOM_PKGLEN_GRAPHIRE 8
|
#define WACOM_PKGLEN_GRAPHIRE 8
|
||||||
|
@ -130,7 +132,7 @@ struct wacom_shared {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct wacom_wac {
|
struct wacom_wac {
|
||||||
char name[64];
|
char name[WACOM_NAME_MAX];
|
||||||
unsigned char *data;
|
unsigned char *data;
|
||||||
int tool[2];
|
int tool[2];
|
||||||
int id[2];
|
int id[2];
|
||||||
|
|
Loading…
Reference in New Issue