diff options
| author | Ingo Molnar <mingo@elte.hu> | 2009-09-06 00:11:38 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-09-06 00:11:42 -0400 |
| commit | ed011b22ce567eabefa9ea571d3721c10ecd0553 (patch) | |
| tree | c7aee6684613075c772388a99a9137014549434e /drivers/input | |
| parent | 85bac32c4a52c592b857f2c360cc5ec93a097d70 (diff) | |
| parent | e07cccf4046978df10f2e13fe2b99b2f9b3a65db (diff) | |
Merge commit 'v2.6.31-rc9' into tracing/core
Merge reason: move from -rc5 to -rc9.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'drivers/input')
| -rw-r--r-- | drivers/input/joydev.c | 68 | ||||
| -rw-r--r-- | drivers/input/joystick/iforce/iforce-main.c | 1 | ||||
| -rw-r--r-- | drivers/input/joystick/iforce/iforce-usb.c | 1 | ||||
| -rw-r--r-- | drivers/input/keyboard/atkbd.c | 35 | ||||
| -rw-r--r-- | drivers/input/serio/i8042-x86ia64io.h | 8 | ||||
| -rw-r--r-- | drivers/input/tablet/wacom_sys.c | 43 | ||||
| -rw-r--r-- | drivers/input/touchscreen/ucb1400_ts.c | 17 |
7 files changed, 128 insertions, 45 deletions
diff --git a/drivers/input/joydev.c b/drivers/input/joydev.c index 4cfd084fa897..9a1d55b74d7a 100644 --- a/drivers/input/joydev.c +++ b/drivers/input/joydev.c | |||
| @@ -456,8 +456,11 @@ static int joydev_ioctl_common(struct joydev *joydev, | |||
| 456 | unsigned int cmd, void __user *argp) | 456 | unsigned int cmd, void __user *argp) |
| 457 | { | 457 | { |
| 458 | struct input_dev *dev = joydev->handle.dev; | 458 | struct input_dev *dev = joydev->handle.dev; |
| 459 | size_t len; | ||
| 459 | int i, j; | 460 | int i, j; |
| 461 | const char *name; | ||
| 460 | 462 | ||
| 463 | /* Process fixed-sized commands. */ | ||
| 461 | switch (cmd) { | 464 | switch (cmd) { |
| 462 | 465 | ||
| 463 | case JS_SET_CAL: | 466 | case JS_SET_CAL: |
| @@ -499,9 +502,22 @@ static int joydev_ioctl_common(struct joydev *joydev, | |||
| 499 | return copy_to_user(argp, joydev->corr, | 502 | return copy_to_user(argp, joydev->corr, |
| 500 | sizeof(joydev->corr[0]) * joydev->nabs) ? -EFAULT : 0; | 503 | sizeof(joydev->corr[0]) * joydev->nabs) ? -EFAULT : 0; |
| 501 | 504 | ||
| 502 | case JSIOCSAXMAP: | 505 | } |
| 503 | if (copy_from_user(joydev->abspam, argp, | 506 | |
| 504 | sizeof(__u8) * (ABS_MAX + 1))) | 507 | /* |
| 508 | * Process variable-sized commands (the axis and button map commands | ||
| 509 | * are considered variable-sized to decouple them from the values of | ||
| 510 | * ABS_MAX and KEY_MAX). | ||
| 511 | */ | ||
| 512 | switch (cmd & ~IOCSIZE_MASK) { | ||
| 513 | |||
| 514 | case (JSIOCSAXMAP & ~IOCSIZE_MASK): | ||
| 515 | len = min_t(size_t, _IOC_SIZE(cmd), sizeof(joydev->abspam)); | ||
| 516 | /* | ||
| 517 | * FIXME: we should not copy into our axis map before | ||
| 518 | * validating the data. | ||
| 519 | */ | ||
| 520 | if (copy_from_user(joydev->abspam, argp, len)) | ||
| 505 | return -EFAULT; | 521 | return -EFAULT; |
| 506 | 522 | ||
| 507 | for (i = 0; i < joydev->nabs; i++) { | 523 | for (i = 0; i < joydev->nabs; i++) { |
| @@ -511,13 +527,17 @@ static int joydev_ioctl_common(struct joydev *joydev, | |||
| 511 | } | 527 | } |
| 512 | return 0; | 528 | return 0; |
| 513 | 529 | ||
| 514 | case JSIOCGAXMAP: | 530 | case (JSIOCGAXMAP & ~IOCSIZE_MASK): |
| 515 | return copy_to_user(argp, joydev->abspam, | 531 | len = min_t(size_t, _IOC_SIZE(cmd), sizeof(joydev->abspam)); |
| 516 | sizeof(__u8) * (ABS_MAX + 1)) ? -EFAULT : 0; | 532 | return copy_to_user(argp, joydev->abspam, len) ? -EFAULT : 0; |
| 517 | 533 | ||
| 518 | case JSIOCSBTNMAP: | 534 | case (JSIOCSBTNMAP & ~IOCSIZE_MASK): |
| 519 | if (copy_from_user(joydev->keypam, argp, | 535 | len = min_t(size_t, _IOC_SIZE(cmd), sizeof(joydev->keypam)); |
| 520 | sizeof(__u16) * (KEY_MAX - BTN_MISC + 1))) | 536 | /* |
| 537 | * FIXME: we should not copy into our keymap before | ||
| 538 | * validating the data. | ||
| 539 | */ | ||
| 540 | if (copy_from_user(joydev->keypam, argp, len)) | ||
| 521 | return -EFAULT; | 541 | return -EFAULT; |
| 522 | 542 | ||
| 523 | for (i = 0; i < joydev->nkey; i++) { | 543 | for (i = 0; i < joydev->nkey; i++) { |
| @@ -529,25 +549,19 @@ static int joydev_ioctl_common(struct joydev *joydev, | |||
| 529 | 549 | ||
| 530 | return 0; | 550 | return 0; |
| 531 | 551 | ||
| 532 | case JSIOCGBTNMAP: | 552 | case (JSIOCGBTNMAP & ~IOCSIZE_MASK): |
| 533 | return copy_to_user(argp, joydev->keypam, | 553 | len = min_t(size_t, _IOC_SIZE(cmd), sizeof(joydev->keypam)); |
| 534 | sizeof(__u16) * (KEY_MAX - BTN_MISC + 1)) ? -EFAULT : 0; | 554 | return copy_to_user(argp, joydev->keypam, len) ? -EFAULT : 0; |
| 535 | 555 | ||
| 536 | default: | 556 | case JSIOCGNAME(0): |
| 537 | if ((cmd & ~IOCSIZE_MASK) == JSIOCGNAME(0)) { | 557 | name = dev->name; |
| 538 | int len; | 558 | if (!name) |
| 539 | const char *name = dev->name; | 559 | return 0; |
| 540 | 560 | ||
| 541 | if (!name) | 561 | len = min_t(size_t, _IOC_SIZE(cmd), strlen(name) + 1); |
| 542 | return 0; | 562 | return copy_to_user(argp, name, len) ? -EFAULT : len; |
| 543 | len = strlen(name) + 1; | ||
| 544 | if (len > _IOC_SIZE(cmd)) | ||
| 545 | len = _IOC_SIZE(cmd); | ||
| 546 | if (copy_to_user(argp, name, len)) | ||
| 547 | return -EFAULT; | ||
| 548 | return len; | ||
| 549 | } | ||
| 550 | } | 563 | } |
| 564 | |||
| 551 | return -EINVAL; | 565 | return -EINVAL; |
| 552 | } | 566 | } |
| 553 | 567 | ||
diff --git a/drivers/input/joystick/iforce/iforce-main.c b/drivers/input/joystick/iforce/iforce-main.c index baabf8302645..f6c688cae334 100644 --- a/drivers/input/joystick/iforce/iforce-main.c +++ b/drivers/input/joystick/iforce/iforce-main.c | |||
| @@ -74,6 +74,7 @@ static struct iforce_device iforce_device[] = { | |||
| 74 | { 0x05ef, 0x8884, "AVB Mag Turbo Force", btn_avb_wheel, abs_wheel, ff_iforce }, | 74 | { 0x05ef, 0x8884, "AVB Mag Turbo Force", btn_avb_wheel, abs_wheel, ff_iforce }, |
| 75 | { 0x05ef, 0x8888, "AVB Top Shot Force Feedback Racing Wheel", btn_avb_tw, abs_wheel, ff_iforce }, //? | 75 | { 0x05ef, 0x8888, "AVB Top Shot Force Feedback Racing Wheel", btn_avb_tw, abs_wheel, ff_iforce }, //? |
| 76 | { 0x061c, 0xc0a4, "ACT LABS Force RS", btn_wheel, abs_wheel, ff_iforce }, //? | 76 | { 0x061c, 0xc0a4, "ACT LABS Force RS", btn_wheel, abs_wheel, ff_iforce }, //? |
| 77 | { 0x061c, 0xc084, "ACT LABS Force RS", btn_wheel, abs_wheel, ff_iforce }, | ||
| 77 | { 0x06f8, 0x0001, "Guillemot Race Leader Force Feedback", btn_wheel, abs_wheel, ff_iforce }, //? | 78 | { 0x06f8, 0x0001, "Guillemot Race Leader Force Feedback", btn_wheel, abs_wheel, ff_iforce }, //? |
| 78 | { 0x06f8, 0x0004, "Guillemot Force Feedback Racing Wheel", btn_wheel, abs_wheel, ff_iforce }, //? | 79 | { 0x06f8, 0x0004, "Guillemot Force Feedback Racing Wheel", btn_wheel, abs_wheel, ff_iforce }, //? |
| 79 | { 0x06f8, 0x0004, "Gullemot Jet Leader 3D", btn_joystick, abs_joystick, ff_iforce }, //? | 80 | { 0x06f8, 0x0004, "Gullemot Jet Leader 3D", btn_joystick, abs_joystick, ff_iforce }, //? |
diff --git a/drivers/input/joystick/iforce/iforce-usb.c b/drivers/input/joystick/iforce/iforce-usb.c index f83185aeb511..9f289d8f52c6 100644 --- a/drivers/input/joystick/iforce/iforce-usb.c +++ b/drivers/input/joystick/iforce/iforce-usb.c | |||
| @@ -223,6 +223,7 @@ static struct usb_device_id iforce_usb_ids [] = { | |||
| 223 | { USB_DEVICE(0x05ef, 0x8884) }, /* AVB Mag Turbo Force */ | 223 | { USB_DEVICE(0x05ef, 0x8884) }, /* AVB Mag Turbo Force */ |
| 224 | { USB_DEVICE(0x05ef, 0x8888) }, /* AVB Top Shot FFB Racing Wheel */ | 224 | { USB_DEVICE(0x05ef, 0x8888) }, /* AVB Top Shot FFB Racing Wheel */ |
| 225 | { USB_DEVICE(0x061c, 0xc0a4) }, /* ACT LABS Force RS */ | 225 | { USB_DEVICE(0x061c, 0xc0a4) }, /* ACT LABS Force RS */ |
| 226 | { USB_DEVICE(0x061c, 0xc084) }, /* ACT LABS Force RS */ | ||
| 226 | { USB_DEVICE(0x06f8, 0x0001) }, /* Guillemot Race Leader Force Feedback */ | 227 | { USB_DEVICE(0x06f8, 0x0001) }, /* Guillemot Race Leader Force Feedback */ |
| 227 | { USB_DEVICE(0x06f8, 0x0004) }, /* Guillemot Force Feedback Racing Wheel */ | 228 | { USB_DEVICE(0x06f8, 0x0004) }, /* Guillemot Force Feedback Racing Wheel */ |
| 228 | { USB_DEVICE(0x06f8, 0xa302) }, /* Guillemot Jet Leader 3D */ | 229 | { USB_DEVICE(0x06f8, 0xa302) }, /* Guillemot Jet Leader 3D */ |
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c index 95fe0452dae4..6c6a09b1c0fe 100644 --- a/drivers/input/keyboard/atkbd.c +++ b/drivers/input/keyboard/atkbd.c | |||
| @@ -880,6 +880,14 @@ static unsigned int atkbd_hp_zv6100_forced_release_keys[] = { | |||
| 880 | }; | 880 | }; |
| 881 | 881 | ||
| 882 | /* | 882 | /* |
| 883 | * Perform fixup for HP (Compaq) Presario R4000 R4100 R4200 that don't generate | ||
| 884 | * release for their volume buttons | ||
| 885 | */ | ||
| 886 | static unsigned int atkbd_hp_r4000_forced_release_keys[] = { | ||
| 887 | 0xae, 0xb0, -1U | ||
| 888 | }; | ||
| 889 | |||
| 890 | /* | ||
| 883 | * Samsung NC10,NC20 with Fn+F? key release not working | 891 | * Samsung NC10,NC20 with Fn+F? key release not working |
| 884 | */ | 892 | */ |
| 885 | static unsigned int atkbd_samsung_forced_release_keys[] = { | 893 | static unsigned int atkbd_samsung_forced_release_keys[] = { |
| @@ -1537,6 +1545,33 @@ static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = { | |||
| 1537 | .driver_data = atkbd_hp_zv6100_forced_release_keys, | 1545 | .driver_data = atkbd_hp_zv6100_forced_release_keys, |
| 1538 | }, | 1546 | }, |
| 1539 | { | 1547 | { |
| 1548 | .ident = "HP Presario R4000", | ||
| 1549 | .matches = { | ||
| 1550 | DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), | ||
| 1551 | DMI_MATCH(DMI_PRODUCT_NAME, "Presario R4000"), | ||
| 1552 | }, | ||
| 1553 | .callback = atkbd_setup_forced_release, | ||
| 1554 | .driver_data = atkbd_hp_r4000_forced_release_keys, | ||
| 1555 | }, | ||
| 1556 | { | ||
| 1557 | .ident = "HP Presario R4100", | ||
| 1558 | .matches = { | ||
| 1559 | DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), | ||
| 1560 | DMI_MATCH(DMI_PRODUCT_NAME, "Presario R4100"), | ||
| 1561 | }, | ||
| 1562 | .callback = atkbd_setup_forced_release, | ||
| 1563 | .driver_data = atkbd_hp_r4000_forced_release_keys, | ||
| 1564 | }, | ||
| 1565 | { | ||
| 1566 | .ident = "HP Presario R4200", | ||
| 1567 | .matches = { | ||
| 1568 | DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), | ||
| 1569 | DMI_MATCH(DMI_PRODUCT_NAME, "Presario R4200"), | ||
| 1570 | }, | ||
| 1571 | .callback = atkbd_setup_forced_release, | ||
| 1572 | .driver_data = atkbd_hp_r4000_forced_release_keys, | ||
| 1573 | }, | ||
| 1574 | { | ||
| 1540 | .ident = "Inventec Symphony", | 1575 | .ident = "Inventec Symphony", |
| 1541 | .matches = { | 1576 | .matches = { |
| 1542 | DMI_MATCH(DMI_SYS_VENDOR, "INVENTEC"), | 1577 | DMI_MATCH(DMI_SYS_VENDOR, "INVENTEC"), |
diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h index ae04d8a494e5..ccbf23ece8e3 100644 --- a/drivers/input/serio/i8042-x86ia64io.h +++ b/drivers/input/serio/i8042-x86ia64io.h | |||
| @@ -382,6 +382,14 @@ static struct dmi_system_id __initdata i8042_dmi_nomux_table[] = { | |||
| 382 | DMI_MATCH(DMI_PRODUCT_NAME, "Vostro1510"), | 382 | DMI_MATCH(DMI_PRODUCT_NAME, "Vostro1510"), |
| 383 | }, | 383 | }, |
| 384 | }, | 384 | }, |
| 385 | { | ||
| 386 | .ident = "Acer Aspire 5536", | ||
| 387 | .matches = { | ||
| 388 | DMI_MATCH(DMI_SYS_VENDOR, "Acer"), | ||
| 389 | DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5536"), | ||
| 390 | DMI_MATCH(DMI_PRODUCT_VERSION, "0100"), | ||
| 391 | }, | ||
| 392 | }, | ||
| 385 | { } | 393 | { } |
| 386 | }; | 394 | }; |
| 387 | 395 | ||
diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c index a9d5031b855e..ea30c983a33e 100644 --- a/drivers/input/tablet/wacom_sys.c +++ b/drivers/input/tablet/wacom_sys.c | |||
| @@ -388,6 +388,32 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi | |||
| 388 | return result; | 388 | return result; |
| 389 | } | 389 | } |
| 390 | 390 | ||
| 391 | static int wacom_query_tablet_data(struct usb_interface *intf) | ||
| 392 | { | ||
| 393 | unsigned char *rep_data; | ||
| 394 | int limit = 0; | ||
| 395 | int error; | ||
| 396 | |||
| 397 | rep_data = kmalloc(2, GFP_KERNEL); | ||
| 398 | if (!rep_data) | ||
| 399 | return -ENOMEM; | ||
| 400 | |||
| 401 | do { | ||
| 402 | rep_data[0] = 2; | ||
| 403 | rep_data[1] = 2; | ||
| 404 | error = usb_set_report(intf, WAC_HID_FEATURE_REPORT, | ||
| 405 | 2, rep_data, 2); | ||
| 406 | if (error >= 0) | ||
| 407 | error = usb_get_report(intf, | ||
| 408 | WAC_HID_FEATURE_REPORT, 2, | ||
| 409 | rep_data, 2); | ||
| 410 | } while ((error < 0 || rep_data[1] != 2) && limit++ < 5); | ||
| 411 | |||
| 412 | kfree(rep_data); | ||
| 413 | |||
| 414 | return error < 0 ? error : 0; | ||
| 415 | } | ||
| 416 | |||
| 391 | static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *id) | 417 | static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *id) |
| 392 | { | 418 | { |
| 393 | struct usb_device *dev = interface_to_usbdev(intf); | 419 | struct usb_device *dev = interface_to_usbdev(intf); |
| @@ -398,7 +424,6 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i | |||
| 398 | struct wacom_features *features; | 424 | struct wacom_features *features; |
| 399 | struct input_dev *input_dev; | 425 | struct input_dev *input_dev; |
| 400 | int error = -ENOMEM; | 426 | int error = -ENOMEM; |
| 401 | char rep_data[2], limit = 0; | ||
| 402 | struct hid_descriptor *hid_desc; | 427 | struct hid_descriptor *hid_desc; |
| 403 | 428 | ||
| 404 | wacom = kzalloc(sizeof(struct wacom), GFP_KERNEL); | 429 | wacom = kzalloc(sizeof(struct wacom), GFP_KERNEL); |
| @@ -489,20 +514,10 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i | |||
| 489 | 514 | ||
| 490 | /* | 515 | /* |
| 491 | * Ask the tablet to report tablet data if it is not a Tablet PC. | 516 | * Ask the tablet to report tablet data if it is not a Tablet PC. |
| 492 | * Repeat until it succeeds | 517 | * Note that if query fails it is not a hard failure. |
| 493 | */ | 518 | */ |
| 494 | if (wacom_wac->features->type != TABLETPC) { | 519 | if (wacom_wac->features->type != TABLETPC) |
| 495 | do { | 520 | wacom_query_tablet_data(intf); |
| 496 | rep_data[0] = 2; | ||
| 497 | rep_data[1] = 2; | ||
| 498 | error = usb_set_report(intf, WAC_HID_FEATURE_REPORT, | ||
| 499 | 2, rep_data, 2); | ||
| 500 | if (error >= 0) | ||
| 501 | error = usb_get_report(intf, | ||
| 502 | WAC_HID_FEATURE_REPORT, 2, | ||
| 503 | rep_data, 2); | ||
| 504 | } while ((error < 0 || rep_data[1] != 2) && limit++ < 5); | ||
| 505 | } | ||
| 506 | 521 | ||
| 507 | usb_set_intfdata(intf, wacom); | 522 | usb_set_intfdata(intf, wacom); |
| 508 | return 0; | 523 | return 0; |
diff --git a/drivers/input/touchscreen/ucb1400_ts.c b/drivers/input/touchscreen/ucb1400_ts.c index 6954f5500108..3a7a58222f83 100644 --- a/drivers/input/touchscreen/ucb1400_ts.c +++ b/drivers/input/touchscreen/ucb1400_ts.c | |||
| @@ -170,11 +170,11 @@ static void ucb1400_handle_pending_irq(struct ucb1400_ts *ucb) | |||
| 170 | ucb1400_reg_write(ucb->ac97, UCB_IE_CLEAR, isr); | 170 | ucb1400_reg_write(ucb->ac97, UCB_IE_CLEAR, isr); |
| 171 | ucb1400_reg_write(ucb->ac97, UCB_IE_CLEAR, 0); | 171 | ucb1400_reg_write(ucb->ac97, UCB_IE_CLEAR, 0); |
| 172 | 172 | ||
| 173 | if (isr & UCB_IE_TSPX) { | 173 | if (isr & UCB_IE_TSPX) |
| 174 | ucb1400_ts_irq_disable(ucb->ac97); | 174 | ucb1400_ts_irq_disable(ucb->ac97); |
| 175 | enable_irq(ucb->irq); | 175 | else |
| 176 | } else | 176 | dev_dbg(&ucb->ts_idev->dev, "ucb1400: unexpected IE_STATUS = %#x\n", isr); |
| 177 | printk(KERN_ERR "ucb1400: unexpected IE_STATUS = %#x\n", isr); | 177 | enable_irq(ucb->irq); |
| 178 | } | 178 | } |
| 179 | 179 | ||
| 180 | static int ucb1400_ts_thread(void *_ucb) | 180 | static int ucb1400_ts_thread(void *_ucb) |
| @@ -345,6 +345,7 @@ static int ucb1400_ts_detect_irq(struct ucb1400_ts *ucb) | |||
| 345 | static int ucb1400_ts_probe(struct platform_device *dev) | 345 | static int ucb1400_ts_probe(struct platform_device *dev) |
| 346 | { | 346 | { |
| 347 | int error, x_res, y_res; | 347 | int error, x_res, y_res; |
| 348 | u16 fcsr; | ||
| 348 | struct ucb1400_ts *ucb = dev->dev.platform_data; | 349 | struct ucb1400_ts *ucb = dev->dev.platform_data; |
| 349 | 350 | ||
| 350 | ucb->ts_idev = input_allocate_device(); | 351 | ucb->ts_idev = input_allocate_device(); |
| @@ -382,6 +383,14 @@ static int ucb1400_ts_probe(struct platform_device *dev) | |||
| 382 | ucb->ts_idev->evbit[0] = BIT_MASK(EV_ABS) | BIT_MASK(EV_KEY); | 383 | ucb->ts_idev->evbit[0] = BIT_MASK(EV_ABS) | BIT_MASK(EV_KEY); |
| 383 | ucb->ts_idev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); | 384 | ucb->ts_idev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); |
| 384 | 385 | ||
| 386 | /* | ||
| 387 | * Enable ADC filter to prevent horrible jitter on Colibri. | ||
| 388 | * This also further reduces jitter on boards where ADCSYNC | ||
| 389 | * pin is connected. | ||
| 390 | */ | ||
| 391 | fcsr = ucb1400_reg_read(ucb->ac97, UCB_FCSR); | ||
| 392 | ucb1400_reg_write(ucb->ac97, UCB_FCSR, fcsr | UCB_FCSR_AVE); | ||
| 393 | |||
| 385 | ucb1400_adc_enable(ucb->ac97); | 394 | ucb1400_adc_enable(ucb->ac97); |
| 386 | x_res = ucb1400_ts_read_xres(ucb); | 395 | x_res = ucb1400_ts_read_xres(ucb); |
| 387 | y_res = ucb1400_ts_read_yres(ucb); | 396 | y_res = ucb1400_ts_read_yres(ucb); |
