summaryrefslogtreecommitdiff
path: root/usr/src/dkms_source_tree/bcm5974.c
diff options
context:
space:
mode:
authorHenrik Rydberg <rydberg@euromail.se>2010-08-30 12:52:27 +0200
committerHenrik Rydberg <rydberg@euromail.se>2010-08-30 12:52:27 +0200
commit2595d194cb1241fc668f3d69ab226aedab32aaf5 (patch)
treee56673f09c8c3f7c0e6dc082bfafdaae61147d8f /usr/src/dkms_source_tree/bcm5974.c
parent8cf31d6799f23120b7c1cb26b433eae9b267de1e (diff)
Update to 2.6.36+
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
Diffstat (limited to 'usr/src/dkms_source_tree/bcm5974.c')
-rw-r--r--usr/src/dkms_source_tree/bcm5974.c59
1 files changed, 36 insertions, 23 deletions
diff --git a/usr/src/dkms_source_tree/bcm5974.c b/usr/src/dkms_source_tree/bcm5974.c
index b89879b..b952317 100644
--- a/usr/src/dkms_source_tree/bcm5974.c
+++ b/usr/src/dkms_source_tree/bcm5974.c
@@ -312,6 +312,8 @@ static void setup_events_to_report(struct input_dev *input_dev,
312 __set_bit(BTN_TOOL_TRIPLETAP, input_dev->keybit); 312 __set_bit(BTN_TOOL_TRIPLETAP, input_dev->keybit);
313 __set_bit(BTN_TOOL_QUADTAP, input_dev->keybit); 313 __set_bit(BTN_TOOL_QUADTAP, input_dev->keybit);
314 __set_bit(BTN_LEFT, input_dev->keybit); 314 __set_bit(BTN_LEFT, input_dev->keybit);
315
316 input_set_events_per_packet(input_dev, 60);
315} 317}
316 318
317/* report button data as logical button state */ 319/* report button data as logical button state */
@@ -335,10 +337,14 @@ static void report_finger_data(struct input_dev *input,
335 const struct bcm5974_config *cfg, 337 const struct bcm5974_config *cfg,
336 const struct tp_finger *f) 338 const struct tp_finger *f)
337{ 339{
338 input_report_abs(input, ABS_MT_TOUCH_MAJOR, raw2int(f->force_major)); 340 input_report_abs(input, ABS_MT_TOUCH_MAJOR,
339 input_report_abs(input, ABS_MT_TOUCH_MINOR, raw2int(f->force_minor)); 341 raw2int(f->force_major) << 1);
340 input_report_abs(input, ABS_MT_WIDTH_MAJOR, raw2int(f->size_major)); 342 input_report_abs(input, ABS_MT_TOUCH_MINOR,
341 input_report_abs(input, ABS_MT_WIDTH_MINOR, raw2int(f->size_minor)); 343 raw2int(f->force_minor) << 1);
344 input_report_abs(input, ABS_MT_WIDTH_MAJOR,
345 raw2int(f->size_major) << 1);
346 input_report_abs(input, ABS_MT_WIDTH_MINOR,
347 raw2int(f->size_minor) << 1);
342 input_report_abs(input, ABS_MT_ORIENTATION, 348 input_report_abs(input, ABS_MT_ORIENTATION,
343 MAX_FINGER_ORIENTATION - raw2int(f->orientation)); 349 MAX_FINGER_ORIENTATION - raw2int(f->orientation));
344 input_report_abs(input, ABS_MT_POSITION_X, raw2int(f->abs_x)); 350 input_report_abs(input, ABS_MT_POSITION_X, raw2int(f->abs_x));
@@ -580,23 +586,30 @@ exit:
580 */ 586 */
581static int bcm5974_start_traffic(struct bcm5974 *dev) 587static int bcm5974_start_traffic(struct bcm5974 *dev)
582{ 588{
583 if (bcm5974_wellspring_mode(dev, true)) { 589 int error;
590
591 error = bcm5974_wellspring_mode(dev, true);
592 if (error) {
584 dprintk(1, "bcm5974: mode switch failed\n"); 593 dprintk(1, "bcm5974: mode switch failed\n");
585 goto error; 594 goto err_out;
586 } 595 }
587 596
588 if (usb_submit_urb(dev->bt_urb, GFP_KERNEL)) 597 error = usb_submit_urb(dev->bt_urb, GFP_KERNEL);
589 goto error; 598 if (error)
599 goto err_reset_mode;
590 600
591 if (usb_submit_urb(dev->tp_urb, GFP_KERNEL)) 601 error = usb_submit_urb(dev->tp_urb, GFP_KERNEL);
602 if (error)
592 goto err_kill_bt; 603 goto err_kill_bt;
593 604
594 return 0; 605 return 0;
595 606
596err_kill_bt: 607err_kill_bt:
597 usb_kill_urb(dev->bt_urb); 608 usb_kill_urb(dev->bt_urb);
598error: 609err_reset_mode:
599 return -EIO; 610 bcm5974_wellspring_mode(dev, false);
611err_out:
612 return error;
600} 613}
601 614
602static void bcm5974_pause_traffic(struct bcm5974 *dev) 615static void bcm5974_pause_traffic(struct bcm5974 *dev)
@@ -715,15 +728,15 @@ static int bcm5974_probe(struct usb_interface *iface,
715 if (!dev->tp_urb) 728 if (!dev->tp_urb)
716 goto err_free_bt_urb; 729 goto err_free_bt_urb;
717 730
718 dev->bt_data = usb_buffer_alloc(dev->udev, 731 dev->bt_data = usb_alloc_coherent(dev->udev,
719 dev->cfg.bt_datalen, GFP_KERNEL, 732 dev->cfg.bt_datalen, GFP_KERNEL,
720 &dev->bt_urb->transfer_dma); 733 &dev->bt_urb->transfer_dma);
721 if (!dev->bt_data) 734 if (!dev->bt_data)
722 goto err_free_urb; 735 goto err_free_urb;
723 736
724 dev->tp_data = usb_buffer_alloc(dev->udev, 737 dev->tp_data = usb_alloc_coherent(dev->udev,
725 dev->cfg.tp_datalen, GFP_KERNEL, 738 dev->cfg.tp_datalen, GFP_KERNEL,
726 &dev->tp_urb->transfer_dma); 739 &dev->tp_urb->transfer_dma);
727 if (!dev->tp_data) 740 if (!dev->tp_data)
728 goto err_free_bt_buffer; 741 goto err_free_bt_buffer;
729 742
@@ -765,10 +778,10 @@ static int bcm5974_probe(struct usb_interface *iface,
765 return 0; 778 return 0;
766 779
767err_free_buffer: 780err_free_buffer:
768 usb_buffer_free(dev->udev, dev->cfg.tp_datalen, 781 usb_free_coherent(dev->udev, dev->cfg.tp_datalen,
769 dev->tp_data, dev->tp_urb->transfer_dma); 782 dev->tp_data, dev->tp_urb->transfer_dma);
770err_free_bt_buffer: 783err_free_bt_buffer:
771 usb_buffer_free(dev->udev, dev->cfg.bt_datalen, 784 usb_free_coherent(dev->udev, dev->cfg.bt_datalen,
772 dev->bt_data, dev->bt_urb->transfer_dma); 785 dev->bt_data, dev->bt_urb->transfer_dma);
773err_free_urb: 786err_free_urb:
774 usb_free_urb(dev->tp_urb); 787 usb_free_urb(dev->tp_urb);
@@ -788,10 +801,10 @@ static void bcm5974_disconnect(struct usb_interface *iface)
788 usb_set_intfdata(iface, NULL); 801 usb_set_intfdata(iface, NULL);
789 802
790 input_unregister_device(dev->input); 803 input_unregister_device(dev->input);
791 usb_buffer_free(dev->udev, dev->cfg.tp_datalen, 804 usb_free_coherent(dev->udev, dev->cfg.tp_datalen,
792 dev->tp_data, dev->tp_urb->transfer_dma); 805 dev->tp_data, dev->tp_urb->transfer_dma);
793 usb_buffer_free(dev->udev, dev->cfg.bt_datalen, 806 usb_free_coherent(dev->udev, dev->cfg.bt_datalen,
794 dev->bt_data, dev->bt_urb->transfer_dma); 807 dev->bt_data, dev->bt_urb->transfer_dma);
795 usb_free_urb(dev->tp_urb); 808 usb_free_urb(dev->tp_urb);
796 usb_free_urb(dev->bt_urb); 809 usb_free_urb(dev->bt_urb);
797 kfree(dev); 810 kfree(dev);