diff options
Diffstat (limited to 'usr/src/dkms_source_tree/wacom_sys.c')
| -rw-r--r-- | usr/src/dkms_source_tree/wacom_sys.c | 57 |
1 files changed, 41 insertions, 16 deletions
diff --git a/usr/src/dkms_source_tree/wacom_sys.c b/usr/src/dkms_source_tree/wacom_sys.c index 42ba369..fc6fd53 100644 --- a/usr/src/dkms_source_tree/wacom_sys.c +++ b/usr/src/dkms_source_tree/wacom_sys.c | |||
| @@ -195,17 +195,30 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi | |||
| 195 | features->pktlen = WACOM_PKGLEN_TPC2FG; | 195 | features->pktlen = WACOM_PKGLEN_TPC2FG; |
| 196 | features->device_type = BTN_TOOL_TRIPLETAP; | 196 | features->device_type = BTN_TOOL_TRIPLETAP; |
| 197 | } | 197 | } |
| 198 | features->x_max = | 198 | if (features->type == BAMBOO_PT) { |
| 199 | get_unaligned_le16(&report[i + 3]); | 199 | /* need to reset back */ |
| 200 | features->x_phy = | 200 | features->pktlen = WACOM_PKGLEN_BBTOUCH; |
| 201 | get_unaligned_le16(&report[i + 6]); | 201 | features->device_type = BTN_TOOL_TRIPLETAP; |
| 202 | features->unit = report[i + 9]; | 202 | features->x_phy = |
| 203 | features->unitExpo = report[i + 11]; | 203 | get_unaligned_le16(&report[i + 5]); |
| 204 | i += 12; | 204 | features->x_max = |
| 205 | get_unaligned_le16(&report[i + 8]); | ||
| 206 | i += 15; | ||
| 207 | } else { | ||
| 208 | features->x_max = | ||
| 209 | get_unaligned_le16(&report[i + 3]); | ||
| 210 | features->x_phy = | ||
| 211 | get_unaligned_le16(&report[i + 6]); | ||
| 212 | features->unit = report[i + 9]; | ||
| 213 | features->unitExpo = report[i + 11]; | ||
| 214 | i += 12; | ||
| 215 | } | ||
| 205 | } else if (pen) { | 216 | } else if (pen) { |
| 206 | /* penabled only accepts exact bytes of data */ | 217 | /* penabled only accepts exact bytes of data */ |
| 207 | if (features->type == TABLETPC2FG) | 218 | if (features->type == TABLETPC2FG) |
| 208 | features->pktlen = WACOM_PKGLEN_GRAPHIRE; | 219 | features->pktlen = WACOM_PKGLEN_GRAPHIRE; |
| 220 | if (features->type == BAMBOO_PT) | ||
| 221 | features->pktlen = WACOM_PKGLEN_BBFUN; | ||
| 209 | features->device_type = BTN_TOOL_PEN; | 222 | features->device_type = BTN_TOOL_PEN; |
| 210 | features->x_max = | 223 | features->x_max = |
| 211 | get_unaligned_le16(&report[i + 3]); | 224 | get_unaligned_le16(&report[i + 3]); |
| @@ -234,6 +247,15 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi | |||
| 234 | features->y_phy = | 247 | features->y_phy = |
| 235 | get_unaligned_le16(&report[i + 6]); | 248 | get_unaligned_le16(&report[i + 6]); |
| 236 | i += 7; | 249 | i += 7; |
| 250 | } else if (features->type == BAMBOO_PT) { | ||
| 251 | /* need to reset back */ | ||
| 252 | features->pktlen = WACOM_PKGLEN_BBTOUCH; | ||
| 253 | features->device_type = BTN_TOOL_TRIPLETAP; | ||
| 254 | features->y_phy = | ||
| 255 | get_unaligned_le16(&report[i + 3]); | ||
| 256 | features->y_max = | ||
| 257 | get_unaligned_le16(&report[i + 6]); | ||
| 258 | i += 12; | ||
| 237 | } else { | 259 | } else { |
| 238 | features->y_max = | 260 | features->y_max = |
| 239 | features->x_max; | 261 | features->x_max; |
| @@ -245,6 +267,8 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi | |||
| 245 | /* penabled only accepts exact bytes of data */ | 267 | /* penabled only accepts exact bytes of data */ |
| 246 | if (features->type == TABLETPC2FG) | 268 | if (features->type == TABLETPC2FG) |
| 247 | features->pktlen = WACOM_PKGLEN_GRAPHIRE; | 269 | features->pktlen = WACOM_PKGLEN_GRAPHIRE; |
| 270 | if (features->type == BAMBOO_PT) | ||
| 271 | features->pktlen = WACOM_PKGLEN_BBFUN; | ||
| 248 | features->device_type = BTN_TOOL_PEN; | 272 | features->device_type = BTN_TOOL_PEN; |
| 249 | features->y_max = | 273 | features->y_max = |
| 250 | get_unaligned_le16(&report[i + 3]); | 274 | get_unaligned_le16(&report[i + 3]); |
| @@ -333,11 +357,16 @@ static int wacom_retrieve_hid_descriptor(struct usb_interface *intf, | |||
| 333 | struct usb_host_interface *interface = intf->cur_altsetting; | 357 | struct usb_host_interface *interface = intf->cur_altsetting; |
| 334 | struct hid_descriptor *hid_desc; | 358 | struct hid_descriptor *hid_desc; |
| 335 | 359 | ||
| 336 | /* default device to penabled */ | 360 | /* default features */ |
| 337 | features->device_type = BTN_TOOL_PEN; | 361 | features->device_type = BTN_TOOL_PEN; |
| 362 | features->x_fuzz = 4; | ||
| 363 | features->y_fuzz = 4; | ||
| 364 | features->pressure_fuzz = 0; | ||
| 365 | features->distance_fuzz = 0; | ||
| 338 | 366 | ||
| 339 | /* only Tablet PCs need to retrieve the info */ | 367 | /* only Tablet PCs need to retrieve the info */ |
| 340 | if ((features->type != TABLETPC) && (features->type != TABLETPC2FG)) | 368 | if ((features->type != TABLETPC) && (features->type != TABLETPC2FG) && |
| 369 | (features->type != BAMBOO_PT)) | ||
| 341 | goto out; | 370 | goto out; |
| 342 | 371 | ||
| 343 | if (usb_get_extra_descriptor(interface, HID_DEVICET_HID, &hid_desc)) { | 372 | if (usb_get_extra_descriptor(interface, HID_DEVICET_HID, &hid_desc)) { |
| @@ -352,12 +381,6 @@ static int wacom_retrieve_hid_descriptor(struct usb_interface *intf, | |||
| 352 | if (error) | 381 | if (error) |
| 353 | goto out; | 382 | goto out; |
| 354 | 383 | ||
| 355 | /* touch device found but size is not defined. use default */ | ||
| 356 | if (features->device_type == BTN_TOOL_DOUBLETAP && !features->x_max) { | ||
| 357 | features->x_max = 1023; | ||
| 358 | features->y_max = 1023; | ||
| 359 | } | ||
| 360 | |||
| 361 | out: | 384 | out: |
| 362 | return error; | 385 | return error; |
| 363 | } | 386 | } |
| @@ -493,9 +516,11 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i | |||
| 493 | if (error) | 516 | if (error) |
| 494 | goto fail2; | 517 | goto fail2; |
| 495 | 518 | ||
| 519 | wacom_setup_device_quirks(features); | ||
| 520 | |||
| 496 | strlcpy(wacom_wac->name, features->name, sizeof(wacom_wac->name)); | 521 | strlcpy(wacom_wac->name, features->name, sizeof(wacom_wac->name)); |
| 497 | 522 | ||
| 498 | if (features->type == TABLETPC || features->type == TABLETPC2FG) { | 523 | if (features->quirks & WACOM_QUIRK_MULTI_INPUT) { |
| 499 | /* Append the device type to the name */ | 524 | /* Append the device type to the name */ |
| 500 | strlcat(wacom_wac->name, | 525 | strlcat(wacom_wac->name, |
| 501 | features->device_type == BTN_TOOL_PEN ? | 526 | features->device_type == BTN_TOOL_PEN ? |
