diff options
| author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2012-07-25 01:43:04 -0400 |
|---|---|---|
| committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2012-07-25 01:43:04 -0400 |
| commit | 314820c9e892d8f41ba4db300ec96770d9c8294b (patch) | |
| tree | 3d5c59a429239b180c77e57f998a78d3f2b79827 /drivers/input/mouse | |
| parent | e76b8ee25e034ab601b525abb95cea14aa167ed3 (diff) | |
| parent | 07b8481d4aff73d6f451f25e74ea10240ff5131e (diff) | |
Merge branch 'next' into for-linus
Diffstat (limited to 'drivers/input/mouse')
| -rw-r--r-- | drivers/input/mouse/appletouch.c | 59 | ||||
| -rw-r--r-- | drivers/input/mouse/bcm5974.c | 24 | ||||
| -rw-r--r-- | drivers/input/mouse/synaptics.c | 38 | ||||
| -rw-r--r-- | drivers/input/mouse/synaptics.h | 3 | ||||
| -rw-r--r-- | drivers/input/mouse/synaptics_usb.c | 2 |
5 files changed, 87 insertions, 39 deletions
diff --git a/drivers/input/mouse/appletouch.c b/drivers/input/mouse/appletouch.c index 0acbc7d50d05..e42f1fa8cdc0 100644 --- a/drivers/input/mouse/appletouch.c +++ b/drivers/input/mouse/appletouch.c | |||
| @@ -195,6 +195,7 @@ enum atp_status_bits { | |||
| 195 | struct atp { | 195 | struct atp { |
| 196 | char phys[64]; | 196 | char phys[64]; |
| 197 | struct usb_device *udev; /* usb device */ | 197 | struct usb_device *udev; /* usb device */ |
| 198 | struct usb_interface *intf; /* usb interface */ | ||
| 198 | struct urb *urb; /* usb request block */ | 199 | struct urb *urb; /* usb request block */ |
| 199 | u8 *data; /* transferred data */ | 200 | u8 *data; /* transferred data */ |
| 200 | struct input_dev *input; /* input dev */ | 201 | struct input_dev *input; /* input dev */ |
| @@ -253,8 +254,9 @@ MODULE_PARM_DESC(debug, "Activate debugging output"); | |||
| 253 | * packets (Report ID 2). This code changes device mode, so it | 254 | * packets (Report ID 2). This code changes device mode, so it |
| 254 | * sends raw sensor reports (Report ID 5). | 255 | * sends raw sensor reports (Report ID 5). |
| 255 | */ | 256 | */ |
| 256 | static int atp_geyser_init(struct usb_device *udev) | 257 | static int atp_geyser_init(struct atp *dev) |
| 257 | { | 258 | { |
| 259 | struct usb_device *udev = dev->udev; | ||
| 258 | char *data; | 260 | char *data; |
| 259 | int size; | 261 | int size; |
| 260 | int i; | 262 | int i; |
| @@ -262,7 +264,7 @@ static int atp_geyser_init(struct usb_device *udev) | |||
| 262 | 264 | ||
| 263 | data = kmalloc(8, GFP_KERNEL); | 265 | data = kmalloc(8, GFP_KERNEL); |
| 264 | if (!data) { | 266 | if (!data) { |
| 265 | err("Out of memory"); | 267 | dev_err(&dev->intf->dev, "Out of memory\n"); |
| 266 | return -ENOMEM; | 268 | return -ENOMEM; |
| 267 | } | 269 | } |
| 268 | 270 | ||
| @@ -277,7 +279,7 @@ static int atp_geyser_init(struct usb_device *udev) | |||
| 277 | for (i = 0; i < 8; i++) | 279 | for (i = 0; i < 8; i++) |
| 278 | dprintk("appletouch[%d]: %d\n", i, data[i]); | 280 | dprintk("appletouch[%d]: %d\n", i, data[i]); |
| 279 | 281 | ||
| 280 | err("Failed to read mode from device."); | 282 | dev_err(&dev->intf->dev, "Failed to read mode from device.\n"); |
| 281 | ret = -EIO; | 283 | ret = -EIO; |
| 282 | goto out_free; | 284 | goto out_free; |
| 283 | } | 285 | } |
| @@ -296,7 +298,7 @@ static int atp_geyser_init(struct usb_device *udev) | |||
| 296 | for (i = 0; i < 8; i++) | 298 | for (i = 0; i < 8; i++) |
| 297 | dprintk("appletouch[%d]: %d\n", i, data[i]); | 299 | dprintk("appletouch[%d]: %d\n", i, data[i]); |
| 298 | 300 | ||
| 299 | err("Failed to request geyser raw mode"); | 301 | dev_err(&dev->intf->dev, "Failed to request geyser raw mode\n"); |
| 300 | ret = -EIO; | 302 | ret = -EIO; |
| 301 | goto out_free; | 303 | goto out_free; |
| 302 | } | 304 | } |
| @@ -313,16 +315,16 @@ out_free: | |||
| 313 | static void atp_reinit(struct work_struct *work) | 315 | static void atp_reinit(struct work_struct *work) |
| 314 | { | 316 | { |
| 315 | struct atp *dev = container_of(work, struct atp, work); | 317 | struct atp *dev = container_of(work, struct atp, work); |
| 316 | struct usb_device *udev = dev->udev; | ||
| 317 | int retval; | 318 | int retval; |
| 318 | 319 | ||
| 319 | dprintk("appletouch: putting appletouch to sleep (reinit)\n"); | 320 | dprintk("appletouch: putting appletouch to sleep (reinit)\n"); |
| 320 | atp_geyser_init(udev); | 321 | atp_geyser_init(dev); |
| 321 | 322 | ||
| 322 | retval = usb_submit_urb(dev->urb, GFP_ATOMIC); | 323 | retval = usb_submit_urb(dev->urb, GFP_ATOMIC); |
| 323 | if (retval) | 324 | if (retval) |
| 324 | err("atp_reinit: usb_submit_urb failed with error %d", | 325 | dev_err(&dev->intf->dev, |
| 325 | retval); | 326 | "atp_reinit: usb_submit_urb failed with error %d\n", |
| 327 | retval); | ||
| 326 | } | 328 | } |
| 327 | 329 | ||
| 328 | static int atp_calculate_abs(int *xy_sensors, int nb_sensors, int fact, | 330 | static int atp_calculate_abs(int *xy_sensors, int nb_sensors, int fact, |
| @@ -400,6 +402,7 @@ static inline void atp_report_fingers(struct input_dev *input, int fingers) | |||
| 400 | static int atp_status_check(struct urb *urb) | 402 | static int atp_status_check(struct urb *urb) |
| 401 | { | 403 | { |
| 402 | struct atp *dev = urb->context; | 404 | struct atp *dev = urb->context; |
| 405 | struct usb_interface *intf = dev->intf; | ||
| 403 | 406 | ||
| 404 | switch (urb->status) { | 407 | switch (urb->status) { |
| 405 | case 0: | 408 | case 0: |
| @@ -407,8 +410,8 @@ static int atp_status_check(struct urb *urb) | |||
| 407 | break; | 410 | break; |
| 408 | case -EOVERFLOW: | 411 | case -EOVERFLOW: |
| 409 | if (!dev->overflow_warned) { | 412 | if (!dev->overflow_warned) { |
| 410 | printk(KERN_WARNING "appletouch: OVERFLOW with data " | 413 | dev_warn(&intf->dev, |
| 411 | "length %d, actual length is %d\n", | 414 | "appletouch: OVERFLOW with data length %d, actual length is %d\n", |
| 412 | dev->info->datalen, dev->urb->actual_length); | 415 | dev->info->datalen, dev->urb->actual_length); |
| 413 | dev->overflow_warned = true; | 416 | dev->overflow_warned = true; |
| 414 | } | 417 | } |
| @@ -416,13 +419,15 @@ static int atp_status_check(struct urb *urb) | |||
| 416 | case -ENOENT: | 419 | case -ENOENT: |
| 417 | case -ESHUTDOWN: | 420 | case -ESHUTDOWN: |
| 418 | /* This urb is terminated, clean up */ | 421 | /* This urb is terminated, clean up */ |
| 419 | dbg("atp_complete: urb shutting down with status: %d", | 422 | dev_dbg(&intf->dev, |
| 420 | urb->status); | 423 | "atp_complete: urb shutting down with status: %d\n", |
| 424 | urb->status); | ||
| 421 | return ATP_URB_STATUS_ERROR_FATAL; | 425 | return ATP_URB_STATUS_ERROR_FATAL; |
| 422 | 426 | ||
| 423 | default: | 427 | default: |
| 424 | dbg("atp_complete: nonzero urb status received: %d", | 428 | dev_dbg(&intf->dev, |
| 425 | urb->status); | 429 | "atp_complete: nonzero urb status received: %d\n", |
| 430 | urb->status); | ||
| 426 | return ATP_URB_STATUS_ERROR; | 431 | return ATP_URB_STATUS_ERROR; |
| 427 | } | 432 | } |
| 428 | 433 | ||
| @@ -445,7 +450,8 @@ static void atp_detect_size(struct atp *dev) | |||
| 445 | for (i = dev->info->xsensors; i < ATP_XSENSORS; i++) { | 450 | for (i = dev->info->xsensors; i < ATP_XSENSORS; i++) { |
| 446 | if (dev->xy_cur[i]) { | 451 | if (dev->xy_cur[i]) { |
| 447 | 452 | ||
| 448 | printk(KERN_INFO "appletouch: 17\" model detected.\n"); | 453 | dev_info(&dev->intf->dev, |
| 454 | "appletouch: 17\" model detected.\n"); | ||
| 449 | 455 | ||
| 450 | input_set_abs_params(dev->input, ABS_X, 0, | 456 | input_set_abs_params(dev->input, ABS_X, 0, |
| 451 | (dev->info->xsensors_17 - 1) * | 457 | (dev->info->xsensors_17 - 1) * |
| @@ -588,8 +594,9 @@ static void atp_complete_geyser_1_2(struct urb *urb) | |||
| 588 | exit: | 594 | exit: |
| 589 | retval = usb_submit_urb(dev->urb, GFP_ATOMIC); | 595 | retval = usb_submit_urb(dev->urb, GFP_ATOMIC); |
| 590 | if (retval) | 596 | if (retval) |
| 591 | err("atp_complete: usb_submit_urb failed with result %d", | 597 | dev_err(&dev->intf->dev, |
| 592 | retval); | 598 | "atp_complete: usb_submit_urb failed with result %d\n", |
| 599 | retval); | ||
| 593 | } | 600 | } |
| 594 | 601 | ||
| 595 | /* Interrupt function for older touchpads: GEYSER3/GEYSER4 */ | 602 | /* Interrupt function for older touchpads: GEYSER3/GEYSER4 */ |
| @@ -722,8 +729,9 @@ static void atp_complete_geyser_3_4(struct urb *urb) | |||
| 722 | exit: | 729 | exit: |
| 723 | retval = usb_submit_urb(dev->urb, GFP_ATOMIC); | 730 | retval = usb_submit_urb(dev->urb, GFP_ATOMIC); |
| 724 | if (retval) | 731 | if (retval) |
| 725 | err("atp_complete: usb_submit_urb failed with result %d", | 732 | dev_err(&dev->intf->dev, |
| 726 | retval); | 733 | "atp_complete: usb_submit_urb failed with result %d\n", |
| 734 | retval); | ||
| 727 | } | 735 | } |
| 728 | 736 | ||
| 729 | static int atp_open(struct input_dev *input) | 737 | static int atp_open(struct input_dev *input) |
| @@ -748,14 +756,12 @@ static void atp_close(struct input_dev *input) | |||
| 748 | 756 | ||
| 749 | static int atp_handle_geyser(struct atp *dev) | 757 | static int atp_handle_geyser(struct atp *dev) |
| 750 | { | 758 | { |
| 751 | struct usb_device *udev = dev->udev; | ||
| 752 | |||
| 753 | if (dev->info != &fountain_info) { | 759 | if (dev->info != &fountain_info) { |
| 754 | /* switch to raw sensor mode */ | 760 | /* switch to raw sensor mode */ |
| 755 | if (atp_geyser_init(udev)) | 761 | if (atp_geyser_init(dev)) |
| 756 | return -EIO; | 762 | return -EIO; |
| 757 | 763 | ||
| 758 | printk(KERN_INFO "appletouch: Geyser mode initialized.\n"); | 764 | dev_info(&dev->intf->dev, "Geyser mode initialized.\n"); |
| 759 | } | 765 | } |
| 760 | 766 | ||
| 761 | return 0; | 767 | return 0; |
| @@ -785,7 +791,7 @@ static int atp_probe(struct usb_interface *iface, | |||
| 785 | } | 791 | } |
| 786 | } | 792 | } |
| 787 | if (!int_in_endpointAddr) { | 793 | if (!int_in_endpointAddr) { |
| 788 | err("Could not find int-in endpoint"); | 794 | dev_err(&iface->dev, "Could not find int-in endpoint\n"); |
| 789 | return -EIO; | 795 | return -EIO; |
| 790 | } | 796 | } |
| 791 | 797 | ||
| @@ -793,11 +799,12 @@ static int atp_probe(struct usb_interface *iface, | |||
| 793 | dev = kzalloc(sizeof(struct atp), GFP_KERNEL); | 799 | dev = kzalloc(sizeof(struct atp), GFP_KERNEL); |
| 794 | input_dev = input_allocate_device(); | 800 | input_dev = input_allocate_device(); |
| 795 | if (!dev || !input_dev) { | 801 | if (!dev || !input_dev) { |
| 796 | err("Out of memory"); | 802 | dev_err(&iface->dev, "Out of memory\n"); |
| 797 | goto err_free_devs; | 803 | goto err_free_devs; |
| 798 | } | 804 | } |
| 799 | 805 | ||
| 800 | dev->udev = udev; | 806 | dev->udev = udev; |
| 807 | dev->intf = iface; | ||
| 801 | dev->input = input_dev; | 808 | dev->input = input_dev; |
| 802 | dev->info = info; | 809 | dev->info = info; |
| 803 | dev->overflow_warned = false; | 810 | dev->overflow_warned = false; |
| @@ -886,7 +893,7 @@ static void atp_disconnect(struct usb_interface *iface) | |||
| 886 | usb_free_urb(dev->urb); | 893 | usb_free_urb(dev->urb); |
| 887 | kfree(dev); | 894 | kfree(dev); |
| 888 | } | 895 | } |
| 889 | printk(KERN_INFO "input: appletouch disconnected\n"); | 896 | dev_info(&iface->dev, "input: appletouch disconnected\n"); |
| 890 | } | 897 | } |
| 891 | 898 | ||
| 892 | static int atp_recover(struct atp *dev) | 899 | static int atp_recover(struct atp *dev) |
diff --git a/drivers/input/mouse/bcm5974.c b/drivers/input/mouse/bcm5974.c index e410b98c2271..d528c23e194f 100644 --- a/drivers/input/mouse/bcm5974.c +++ b/drivers/input/mouse/bcm5974.c | |||
| @@ -604,7 +604,7 @@ static int bcm5974_wellspring_mode(struct bcm5974 *dev, bool on) | |||
| 604 | int retval = 0, size; | 604 | int retval = 0, size; |
| 605 | 605 | ||
| 606 | if (!data) { | 606 | if (!data) { |
| 607 | err("bcm5974: out of memory"); | 607 | dev_err(&dev->intf->dev, "out of memory\n"); |
| 608 | retval = -ENOMEM; | 608 | retval = -ENOMEM; |
| 609 | goto out; | 609 | goto out; |
| 610 | } | 610 | } |
| @@ -617,7 +617,7 @@ static int bcm5974_wellspring_mode(struct bcm5974 *dev, bool on) | |||
| 617 | BCM5974_WELLSPRING_MODE_REQUEST_INDEX, data, 8, 5000); | 617 | BCM5974_WELLSPRING_MODE_REQUEST_INDEX, data, 8, 5000); |
| 618 | 618 | ||
| 619 | if (size != 8) { | 619 | if (size != 8) { |
| 620 | err("bcm5974: could not read from device"); | 620 | dev_err(&dev->intf->dev, "could not read from device\n"); |
| 621 | retval = -EIO; | 621 | retval = -EIO; |
| 622 | goto out; | 622 | goto out; |
| 623 | } | 623 | } |
| @@ -635,7 +635,7 @@ static int bcm5974_wellspring_mode(struct bcm5974 *dev, bool on) | |||
| 635 | BCM5974_WELLSPRING_MODE_REQUEST_INDEX, data, 8, 5000); | 635 | BCM5974_WELLSPRING_MODE_REQUEST_INDEX, data, 8, 5000); |
| 636 | 636 | ||
| 637 | if (size != 8) { | 637 | if (size != 8) { |
| 638 | err("bcm5974: could not write to device"); | 638 | dev_err(&dev->intf->dev, "could not write to device\n"); |
| 639 | retval = -EIO; | 639 | retval = -EIO; |
| 640 | goto out; | 640 | goto out; |
| 641 | } | 641 | } |
| @@ -651,6 +651,7 @@ static int bcm5974_wellspring_mode(struct bcm5974 *dev, bool on) | |||
| 651 | static void bcm5974_irq_button(struct urb *urb) | 651 | static void bcm5974_irq_button(struct urb *urb) |
| 652 | { | 652 | { |
| 653 | struct bcm5974 *dev = urb->context; | 653 | struct bcm5974 *dev = urb->context; |
| 654 | struct usb_interface *intf = dev->intf; | ||
| 654 | int error; | 655 | int error; |
| 655 | 656 | ||
| 656 | switch (urb->status) { | 657 | switch (urb->status) { |
| @@ -660,10 +661,11 @@ static void bcm5974_irq_button(struct urb *urb) | |||
| 660 | case -ECONNRESET: | 661 | case -ECONNRESET: |
| 661 | case -ENOENT: | 662 | case -ENOENT: |
| 662 | case -ESHUTDOWN: | 663 | case -ESHUTDOWN: |
| 663 | dbg("bcm5974: button urb shutting down: %d", urb->status); | 664 | dev_dbg(&intf->dev, "button urb shutting down: %d\n", |
| 665 | urb->status); | ||
| 664 | return; | 666 | return; |
| 665 | default: | 667 | default: |
| 666 | dbg("bcm5974: button urb status: %d", urb->status); | 668 | dev_dbg(&intf->dev, "button urb status: %d\n", urb->status); |
| 667 | goto exit; | 669 | goto exit; |
| 668 | } | 670 | } |
| 669 | 671 | ||
| @@ -674,12 +676,13 @@ static void bcm5974_irq_button(struct urb *urb) | |||
| 674 | exit: | 676 | exit: |
| 675 | error = usb_submit_urb(dev->bt_urb, GFP_ATOMIC); | 677 | error = usb_submit_urb(dev->bt_urb, GFP_ATOMIC); |
| 676 | if (error) | 678 | if (error) |
| 677 | err("bcm5974: button urb failed: %d", error); | 679 | dev_err(&intf->dev, "button urb failed: %d\n", error); |
| 678 | } | 680 | } |
| 679 | 681 | ||
| 680 | static void bcm5974_irq_trackpad(struct urb *urb) | 682 | static void bcm5974_irq_trackpad(struct urb *urb) |
| 681 | { | 683 | { |
| 682 | struct bcm5974 *dev = urb->context; | 684 | struct bcm5974 *dev = urb->context; |
| 685 | struct usb_interface *intf = dev->intf; | ||
| 683 | int error; | 686 | int error; |
| 684 | 687 | ||
| 685 | switch (urb->status) { | 688 | switch (urb->status) { |
| @@ -689,10 +692,11 @@ static void bcm5974_irq_trackpad(struct urb *urb) | |||
| 689 | case -ECONNRESET: | 692 | case -ECONNRESET: |
| 690 | case -ENOENT: | 693 | case -ENOENT: |
| 691 | case -ESHUTDOWN: | 694 | case -ESHUTDOWN: |
| 692 | dbg("bcm5974: trackpad urb shutting down: %d", urb->status); | 695 | dev_dbg(&intf->dev, "trackpad urb shutting down: %d\n", |
| 696 | urb->status); | ||
| 693 | return; | 697 | return; |
| 694 | default: | 698 | default: |
| 695 | dbg("bcm5974: trackpad urb status: %d", urb->status); | 699 | dev_dbg(&intf->dev, "trackpad urb status: %d\n", urb->status); |
| 696 | goto exit; | 700 | goto exit; |
| 697 | } | 701 | } |
| 698 | 702 | ||
| @@ -707,7 +711,7 @@ static void bcm5974_irq_trackpad(struct urb *urb) | |||
| 707 | exit: | 711 | exit: |
| 708 | error = usb_submit_urb(dev->tp_urb, GFP_ATOMIC); | 712 | error = usb_submit_urb(dev->tp_urb, GFP_ATOMIC); |
| 709 | if (error) | 713 | if (error) |
| 710 | err("bcm5974: trackpad urb failed: %d", error); | 714 | dev_err(&intf->dev, "trackpad urb failed: %d\n", error); |
| 711 | } | 715 | } |
| 712 | 716 | ||
| 713 | /* | 717 | /* |
| @@ -853,7 +857,7 @@ static int bcm5974_probe(struct usb_interface *iface, | |||
| 853 | dev = kzalloc(sizeof(struct bcm5974), GFP_KERNEL); | 857 | dev = kzalloc(sizeof(struct bcm5974), GFP_KERNEL); |
| 854 | input_dev = input_allocate_device(); | 858 | input_dev = input_allocate_device(); |
| 855 | if (!dev || !input_dev) { | 859 | if (!dev || !input_dev) { |
| 856 | err("bcm5974: out of memory"); | 860 | dev_err(&iface->dev, "out of memory\n"); |
| 857 | goto err_free_devs; | 861 | goto err_free_devs; |
| 858 | } | 862 | } |
| 859 | 863 | ||
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c index c703d53be3a0..d5b390f75c9a 100644 --- a/drivers/input/mouse/synaptics.c +++ b/drivers/input/mouse/synaptics.c | |||
| @@ -139,6 +139,35 @@ static int synaptics_model_id(struct psmouse *psmouse) | |||
| 139 | } | 139 | } |
| 140 | 140 | ||
| 141 | /* | 141 | /* |
| 142 | * Read the board id from the touchpad | ||
| 143 | * The board id is encoded in the "QUERY MODES" response | ||
| 144 | */ | ||
| 145 | static int synaptics_board_id(struct psmouse *psmouse) | ||
| 146 | { | ||
| 147 | struct synaptics_data *priv = psmouse->private; | ||
| 148 | unsigned char bid[3]; | ||
| 149 | |||
| 150 | if (synaptics_send_cmd(psmouse, SYN_QUE_MODES, bid)) | ||
| 151 | return -1; | ||
| 152 | priv->board_id = ((bid[0] & 0xfc) << 6) | bid[1]; | ||
| 153 | return 0; | ||
| 154 | } | ||
| 155 | |||
| 156 | /* | ||
| 157 | * Read the firmware id from the touchpad | ||
| 158 | */ | ||
| 159 | static int synaptics_firmware_id(struct psmouse *psmouse) | ||
| 160 | { | ||
| 161 | struct synaptics_data *priv = psmouse->private; | ||
| 162 | unsigned char fwid[3]; | ||
| 163 | |||
| 164 | if (synaptics_send_cmd(psmouse, SYN_QUE_FIRMWARE_ID, fwid)) | ||
| 165 | return -1; | ||
| 166 | priv->firmware_id = (fwid[0] << 16) | (fwid[1] << 8) | fwid[2]; | ||
| 167 | return 0; | ||
| 168 | } | ||
| 169 | |||
| 170 | /* | ||
| 142 | * Read the capability-bits from the touchpad | 171 | * Read the capability-bits from the touchpad |
| 143 | * see also the SYN_CAP_* macros | 172 | * see also the SYN_CAP_* macros |
| 144 | */ | 173 | */ |
| @@ -261,6 +290,10 @@ static int synaptics_query_hardware(struct psmouse *psmouse) | |||
| 261 | return -1; | 290 | return -1; |
| 262 | if (synaptics_model_id(psmouse)) | 291 | if (synaptics_model_id(psmouse)) |
| 263 | return -1; | 292 | return -1; |
| 293 | if (synaptics_firmware_id(psmouse)) | ||
| 294 | return -1; | ||
| 295 | if (synaptics_board_id(psmouse)) | ||
| 296 | return -1; | ||
| 264 | if (synaptics_capability(psmouse)) | 297 | if (synaptics_capability(psmouse)) |
| 265 | return -1; | 298 | return -1; |
| 266 | if (synaptics_resolution(psmouse)) | 299 | if (synaptics_resolution(psmouse)) |
| @@ -1435,11 +1468,12 @@ static int __synaptics_init(struct psmouse *psmouse, bool absolute_mode) | |||
| 1435 | priv->pkt_type = SYN_MODEL_NEWABS(priv->model_id) ? SYN_NEWABS : SYN_OLDABS; | 1468 | priv->pkt_type = SYN_MODEL_NEWABS(priv->model_id) ? SYN_NEWABS : SYN_OLDABS; |
| 1436 | 1469 | ||
| 1437 | psmouse_info(psmouse, | 1470 | psmouse_info(psmouse, |
| 1438 | "Touchpad model: %ld, fw: %ld.%ld, id: %#lx, caps: %#lx/%#lx/%#lx\n", | 1471 | "Touchpad model: %ld, fw: %ld.%ld, id: %#lx, caps: %#lx/%#lx/%#lx, board id: %lu, fw id: %lu\n", |
| 1439 | SYN_ID_MODEL(priv->identity), | 1472 | SYN_ID_MODEL(priv->identity), |
| 1440 | SYN_ID_MAJOR(priv->identity), SYN_ID_MINOR(priv->identity), | 1473 | SYN_ID_MAJOR(priv->identity), SYN_ID_MINOR(priv->identity), |
| 1441 | priv->model_id, | 1474 | priv->model_id, |
| 1442 | priv->capabilities, priv->ext_cap, priv->ext_cap_0c); | 1475 | priv->capabilities, priv->ext_cap, priv->ext_cap_0c, |
| 1476 | priv->board_id, priv->firmware_id); | ||
| 1443 | 1477 | ||
| 1444 | set_input_params(psmouse->dev, priv); | 1478 | set_input_params(psmouse->dev, priv); |
| 1445 | 1479 | ||
diff --git a/drivers/input/mouse/synaptics.h b/drivers/input/mouse/synaptics.h index fd26ccca13d7..e594af0b264b 100644 --- a/drivers/input/mouse/synaptics.h +++ b/drivers/input/mouse/synaptics.h | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #define SYN_QUE_SERIAL_NUMBER_SUFFIX 0x07 | 18 | #define SYN_QUE_SERIAL_NUMBER_SUFFIX 0x07 |
| 19 | #define SYN_QUE_RESOLUTION 0x08 | 19 | #define SYN_QUE_RESOLUTION 0x08 |
| 20 | #define SYN_QUE_EXT_CAPAB 0x09 | 20 | #define SYN_QUE_EXT_CAPAB 0x09 |
| 21 | #define SYN_QUE_FIRMWARE_ID 0x0a | ||
| 21 | #define SYN_QUE_EXT_CAPAB_0C 0x0c | 22 | #define SYN_QUE_EXT_CAPAB_0C 0x0c |
| 22 | #define SYN_QUE_EXT_MAX_COORDS 0x0d | 23 | #define SYN_QUE_EXT_MAX_COORDS 0x0d |
| 23 | #define SYN_QUE_EXT_MIN_COORDS 0x0f | 24 | #define SYN_QUE_EXT_MIN_COORDS 0x0f |
| @@ -148,6 +149,8 @@ struct synaptics_hw_state { | |||
| 148 | struct synaptics_data { | 149 | struct synaptics_data { |
| 149 | /* Data read from the touchpad */ | 150 | /* Data read from the touchpad */ |
| 150 | unsigned long int model_id; /* Model-ID */ | 151 | unsigned long int model_id; /* Model-ID */ |
| 152 | unsigned long int firmware_id; /* Firmware-ID */ | ||
| 153 | unsigned long int board_id; /* Board-ID */ | ||
| 151 | unsigned long int capabilities; /* Capabilities */ | 154 | unsigned long int capabilities; /* Capabilities */ |
| 152 | unsigned long int ext_cap; /* Extended Capabilities */ | 155 | unsigned long int ext_cap; /* Extended Capabilities */ |
| 153 | unsigned long int ext_cap_0c; /* Ext Caps from 0x0c query */ | 156 | unsigned long int ext_cap_0c; /* Ext Caps from 0x0c query */ |
diff --git a/drivers/input/mouse/synaptics_usb.c b/drivers/input/mouse/synaptics_usb.c index 3c5eaaa5d154..64cf34ea7604 100644 --- a/drivers/input/mouse/synaptics_usb.c +++ b/drivers/input/mouse/synaptics_usb.c | |||
| @@ -364,7 +364,7 @@ static int synusb_probe(struct usb_interface *intf, | |||
| 364 | le16_to_cpu(udev->descriptor.idProduct)); | 364 | le16_to_cpu(udev->descriptor.idProduct)); |
| 365 | 365 | ||
| 366 | if (synusb->flags & SYNUSB_STICK) | 366 | if (synusb->flags & SYNUSB_STICK) |
| 367 | strlcat(synusb->name, " (Stick) ", sizeof(synusb->name)); | 367 | strlcat(synusb->name, " (Stick)", sizeof(synusb->name)); |
| 368 | 368 | ||
| 369 | usb_make_path(udev, synusb->phys, sizeof(synusb->phys)); | 369 | usb_make_path(udev, synusb->phys, sizeof(synusb->phys)); |
| 370 | strlcat(synusb->phys, "/input0", sizeof(synusb->phys)); | 370 | strlcat(synusb->phys, "/input0", sizeof(synusb->phys)); |
