Lines Matching refs:dev

292 static const struct tp_finger *get_tp_finger(const struct bcm5974 *dev, int i)  in get_tp_finger()  argument
294 const struct bcm5974_config *c = &dev->cfg; in get_tp_finger()
295 u8 *f_base = dev->tp_data + c->tp_header + c->tp_delta; in get_tp_finger()
548 static int report_bt_state(struct bcm5974 *dev, int size) in report_bt_state() argument
555 dev->bt_data->unknown1, dev->bt_data->button, in report_bt_state()
556 dev->bt_data->rel_x, dev->bt_data->rel_y); in report_bt_state()
558 input_report_key(dev->input, BTN_LEFT, dev->bt_data->button); in report_bt_state()
559 input_sync(dev->input); in report_bt_state()
605 static int report_tp_state(struct bcm5974 *dev, int size) in report_tp_state() argument
607 const struct bcm5974_config *c = &dev->cfg; in report_tp_state()
609 struct input_dev *input = dev->input; in report_tp_state()
618 f = get_tp_finger(dev, i); in report_tp_state()
621 dev->pos[n].x = raw2int(f->abs_x); in report_tp_state()
622 dev->pos[n].y = c->y.min + c->y.max - raw2int(f->abs_y); in report_tp_state()
623 dev->index[n++] = f; in report_tp_state()
626 input_mt_assign_slots(input, dev->slots, dev->pos, n, 0); in report_tp_state()
629 report_finger_data(input, dev->slots[i], in report_tp_state()
630 &dev->pos[i], dev->index[i]); in report_tp_state()
634 report_synaptics_data(input, c, get_tp_finger(dev, 0), raw_n); in report_tp_state()
638 int ibt = raw2int(dev->tp_data[c->tp_button]); in report_tp_state()
647 static int bcm5974_wellspring_mode(struct bcm5974 *dev, bool on) in bcm5974_wellspring_mode() argument
649 const struct bcm5974_config *c = &dev->cfg; in bcm5974_wellspring_mode()
659 dev_err(&dev->intf->dev, "out of memory\n"); in bcm5974_wellspring_mode()
665 size = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), in bcm5974_wellspring_mode()
671 dev_err(&dev->intf->dev, "could not read from device\n"); in bcm5974_wellspring_mode()
680 size = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), in bcm5974_wellspring_mode()
686 dev_err(&dev->intf->dev, "could not write to device\n"); in bcm5974_wellspring_mode()
701 struct bcm5974 *dev = urb->context; in bcm5974_irq_button() local
702 struct usb_interface *intf = dev->intf; in bcm5974_irq_button()
712 dev_dbg(&intf->dev, "button urb shutting down: %d\n", in bcm5974_irq_button()
716 dev_dbg(&intf->dev, "button urb status: %d\n", urb->status); in bcm5974_irq_button()
720 if (report_bt_state(dev, dev->bt_urb->actual_length)) in bcm5974_irq_button()
722 dev->bt_urb->actual_length); in bcm5974_irq_button()
725 error = usb_submit_urb(dev->bt_urb, GFP_ATOMIC); in bcm5974_irq_button()
727 dev_err(&intf->dev, "button urb failed: %d\n", error); in bcm5974_irq_button()
732 struct bcm5974 *dev = urb->context; in bcm5974_irq_trackpad() local
733 struct usb_interface *intf = dev->intf; in bcm5974_irq_trackpad()
743 dev_dbg(&intf->dev, "trackpad urb shutting down: %d\n", in bcm5974_irq_trackpad()
747 dev_dbg(&intf->dev, "trackpad urb status: %d\n", urb->status); in bcm5974_irq_trackpad()
752 if (dev->tp_urb->actual_length == 2) in bcm5974_irq_trackpad()
755 if (report_tp_state(dev, dev->tp_urb->actual_length)) in bcm5974_irq_trackpad()
757 dev->tp_urb->actual_length); in bcm5974_irq_trackpad()
760 error = usb_submit_urb(dev->tp_urb, GFP_ATOMIC); in bcm5974_irq_trackpad()
762 dev_err(&intf->dev, "trackpad urb failed: %d\n", error); in bcm5974_irq_trackpad()
783 static int bcm5974_start_traffic(struct bcm5974 *dev) in bcm5974_start_traffic() argument
787 error = bcm5974_wellspring_mode(dev, true); in bcm5974_start_traffic()
793 if (dev->bt_urb) { in bcm5974_start_traffic()
794 error = usb_submit_urb(dev->bt_urb, GFP_KERNEL); in bcm5974_start_traffic()
799 error = usb_submit_urb(dev->tp_urb, GFP_KERNEL); in bcm5974_start_traffic()
806 usb_kill_urb(dev->bt_urb); in bcm5974_start_traffic()
808 bcm5974_wellspring_mode(dev, false); in bcm5974_start_traffic()
813 static void bcm5974_pause_traffic(struct bcm5974 *dev) in bcm5974_pause_traffic() argument
815 usb_kill_urb(dev->tp_urb); in bcm5974_pause_traffic()
816 usb_kill_urb(dev->bt_urb); in bcm5974_pause_traffic()
817 bcm5974_wellspring_mode(dev, false); in bcm5974_pause_traffic()
830 struct bcm5974 *dev = input_get_drvdata(input); in bcm5974_open() local
833 error = usb_autopm_get_interface(dev->intf); in bcm5974_open()
837 mutex_lock(&dev->pm_mutex); in bcm5974_open()
839 error = bcm5974_start_traffic(dev); in bcm5974_open()
841 dev->opened = 1; in bcm5974_open()
843 mutex_unlock(&dev->pm_mutex); in bcm5974_open()
846 usb_autopm_put_interface(dev->intf); in bcm5974_open()
853 struct bcm5974 *dev = input_get_drvdata(input); in bcm5974_close() local
855 mutex_lock(&dev->pm_mutex); in bcm5974_close()
857 bcm5974_pause_traffic(dev); in bcm5974_close()
858 dev->opened = 0; in bcm5974_close()
860 mutex_unlock(&dev->pm_mutex); in bcm5974_close()
862 usb_autopm_put_interface(dev->intf); in bcm5974_close()
867 struct bcm5974 *dev = usb_get_intfdata(iface); in bcm5974_suspend() local
869 mutex_lock(&dev->pm_mutex); in bcm5974_suspend()
871 if (dev->opened) in bcm5974_suspend()
872 bcm5974_pause_traffic(dev); in bcm5974_suspend()
874 mutex_unlock(&dev->pm_mutex); in bcm5974_suspend()
881 struct bcm5974 *dev = usb_get_intfdata(iface); in bcm5974_resume() local
884 mutex_lock(&dev->pm_mutex); in bcm5974_resume()
886 if (dev->opened) in bcm5974_resume()
887 error = bcm5974_start_traffic(dev); in bcm5974_resume()
889 mutex_unlock(&dev->pm_mutex); in bcm5974_resume()
899 struct bcm5974 *dev; in bcm5974_probe() local
907 dev = kzalloc(sizeof(struct bcm5974), GFP_KERNEL); in bcm5974_probe()
909 if (!dev || !input_dev) { in bcm5974_probe()
910 dev_err(&iface->dev, "out of memory\n"); in bcm5974_probe()
914 dev->udev = udev; in bcm5974_probe()
915 dev->intf = iface; in bcm5974_probe()
916 dev->input = input_dev; in bcm5974_probe()
917 dev->cfg = *cfg; in bcm5974_probe()
918 mutex_init(&dev->pm_mutex); in bcm5974_probe()
922 dev->bt_urb = usb_alloc_urb(0, GFP_KERNEL); in bcm5974_probe()
923 if (!dev->bt_urb) in bcm5974_probe()
927 dev->tp_urb = usb_alloc_urb(0, GFP_KERNEL); in bcm5974_probe()
928 if (!dev->tp_urb) in bcm5974_probe()
931 if (dev->bt_urb) { in bcm5974_probe()
932 dev->bt_data = usb_alloc_coherent(dev->udev, in bcm5974_probe()
933 dev->cfg.bt_datalen, GFP_KERNEL, in bcm5974_probe()
934 &dev->bt_urb->transfer_dma); in bcm5974_probe()
935 if (!dev->bt_data) in bcm5974_probe()
939 dev->tp_data = usb_alloc_coherent(dev->udev, in bcm5974_probe()
940 dev->cfg.tp_datalen, GFP_KERNEL, in bcm5974_probe()
941 &dev->tp_urb->transfer_dma); in bcm5974_probe()
942 if (!dev->tp_data) in bcm5974_probe()
945 if (dev->bt_urb) { in bcm5974_probe()
946 usb_fill_int_urb(dev->bt_urb, udev, in bcm5974_probe()
948 dev->bt_data, dev->cfg.bt_datalen, in bcm5974_probe()
949 bcm5974_irq_button, dev, 1); in bcm5974_probe()
951 dev->bt_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in bcm5974_probe()
954 usb_fill_int_urb(dev->tp_urb, udev, in bcm5974_probe()
956 dev->tp_data, dev->cfg.tp_datalen, in bcm5974_probe()
957 bcm5974_irq_trackpad, dev, 1); in bcm5974_probe()
959 dev->tp_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in bcm5974_probe()
962 usb_make_path(udev, dev->phys, sizeof(dev->phys)); in bcm5974_probe()
963 strlcat(dev->phys, "/input0", sizeof(dev->phys)); in bcm5974_probe()
966 input_dev->phys = dev->phys; in bcm5974_probe()
967 usb_to_input_id(dev->udev, &input_dev->id); in bcm5974_probe()
970 input_dev->dev.parent = &iface->dev; in bcm5974_probe()
972 input_set_drvdata(input_dev, dev); in bcm5974_probe()
979 error = input_register_device(dev->input); in bcm5974_probe()
984 usb_set_intfdata(iface, dev); in bcm5974_probe()
989 usb_free_coherent(dev->udev, dev->cfg.tp_datalen, in bcm5974_probe()
990 dev->tp_data, dev->tp_urb->transfer_dma); in bcm5974_probe()
992 if (dev->bt_urb) in bcm5974_probe()
993 usb_free_coherent(dev->udev, dev->cfg.bt_datalen, in bcm5974_probe()
994 dev->bt_data, dev->bt_urb->transfer_dma); in bcm5974_probe()
996 usb_free_urb(dev->tp_urb); in bcm5974_probe()
998 usb_free_urb(dev->bt_urb); in bcm5974_probe()
1002 kfree(dev); in bcm5974_probe()
1008 struct bcm5974 *dev = usb_get_intfdata(iface); in bcm5974_disconnect() local
1012 input_unregister_device(dev->input); in bcm5974_disconnect()
1013 usb_free_coherent(dev->udev, dev->cfg.tp_datalen, in bcm5974_disconnect()
1014 dev->tp_data, dev->tp_urb->transfer_dma); in bcm5974_disconnect()
1015 if (dev->bt_urb) in bcm5974_disconnect()
1016 usb_free_coherent(dev->udev, dev->cfg.bt_datalen, in bcm5974_disconnect()
1017 dev->bt_data, dev->bt_urb->transfer_dma); in bcm5974_disconnect()
1018 usb_free_urb(dev->tp_urb); in bcm5974_disconnect()
1019 usb_free_urb(dev->bt_urb); in bcm5974_disconnect()
1020 kfree(dev); in bcm5974_disconnect()