Lines Matching refs:sur40
238 static void sur40_process_video(struct sur40_state *sur40);
390 struct sur40_state *sur40 = polldev->private; in sur40_open() local
392 dev_dbg(sur40->dev, "open\n"); in sur40_open()
393 sur40_init(sur40); in sur40_open()
399 struct sur40_state *sur40 = polldev->private; in sur40_close() local
401 dev_dbg(sur40->dev, "close\n"); in sur40_close()
453 struct sur40_state *sur40 = polldev->private; in sur40_poll() local
458 struct sur40_header *header = &sur40->bulk_in_buffer->header; in sur40_poll()
459 struct sur40_blob *inblob = &sur40->bulk_in_buffer->blobs[0]; in sur40_poll()
461 dev_dbg(sur40->dev, "poll\n"); in sur40_poll()
468 result = usb_bulk_msg(sur40->usbdev, in sur40_poll()
469 usb_rcvbulkpipe(sur40->usbdev, sur40->bulk_in_epaddr), in sur40_poll()
470 sur40->bulk_in_buffer, sur40->bulk_in_size, in sur40_poll()
473 dev_dbg(sur40->dev, "received %d bytes\n", bulk_read); in sur40_poll()
476 dev_err(sur40->dev, "error in usb_bulk_read\n"); in sur40_poll()
483 dev_err(sur40->dev, "transfer size mismatch\n"); in sur40_poll()
490 dev_dbg(sur40->dev, "need %d blobs\n", need_blobs); in sur40_poll()
506 dev_dbg(sur40->dev, "received %d blobs\n", packet_blobs); in sur40_poll()
514 dev_dbg(sur40->dev, "processing blob\n"); in sur40_poll()
523 sur40_process_video(sur40); in sur40_poll()
527 static void sur40_process_video(struct sur40_state *sur40) in sur40_process_video() argument
530 struct sur40_image_header *img = (void *)(sur40->bulk_in_buffer); in sur40_process_video()
536 if (!vb2_start_streaming_called(&sur40->queue)) in sur40_process_video()
540 spin_lock(&sur40->qlock); in sur40_process_video()
541 if (list_empty(&sur40->buf_list)) { in sur40_process_video()
542 dev_dbg(sur40->dev, "buffer queue empty\n"); in sur40_process_video()
543 spin_unlock(&sur40->qlock); in sur40_process_video()
546 new_buf = list_entry(sur40->buf_list.next, struct sur40_buffer, list); in sur40_process_video()
548 spin_unlock(&sur40->qlock); in sur40_process_video()
550 dev_dbg(sur40->dev, "buffer acquired\n"); in sur40_process_video()
553 result = usb_bulk_msg(sur40->usbdev, in sur40_process_video()
554 usb_rcvbulkpipe(sur40->usbdev, VIDEO_ENDPOINT), in sur40_process_video()
555 sur40->bulk_in_buffer, sur40->bulk_in_size, in sur40_process_video()
559 dev_err(sur40->dev, "error in usb_bulk_read\n"); in sur40_process_video()
564 dev_err(sur40->dev, "received %d bytes (%zd expected)\n", in sur40_process_video()
570 dev_err(sur40->dev, "image magic mismatch\n"); in sur40_process_video()
574 if (le32_to_cpu(img->size) != sur40->pix_fmt.sizeimage) { in sur40_process_video()
575 dev_err(sur40->dev, "image size mismatch\n"); in sur40_process_video()
579 dev_dbg(sur40->dev, "header acquired\n"); in sur40_process_video()
583 result = usb_sg_init(&sgr, sur40->usbdev, in sur40_process_video()
584 usb_rcvbulkpipe(sur40->usbdev, VIDEO_ENDPOINT), 0, in sur40_process_video()
585 sgt->sgl, sgt->nents, sur40->pix_fmt.sizeimage, 0); in sur40_process_video()
587 dev_err(sur40->dev, "error %d in usb_sg_init\n", result); in sur40_process_video()
593 dev_err(sur40->dev, "error %d in usb_sg_wait\n", sgr.status); in sur40_process_video()
597 dev_dbg(sur40->dev, "image acquired\n"); in sur40_process_video()
600 if (sur40->sequence == -1) in sur40_process_video()
605 new_buf->vb.sequence = sur40->sequence++; in sur40_process_video()
608 dev_dbg(sur40->dev, "buffer marked done\n"); in sur40_process_video()
649 struct sur40_state *sur40; in sur40_probe() local
669 sur40 = kzalloc(sizeof(struct sur40_state), GFP_KERNEL); in sur40_probe()
670 if (!sur40) in sur40_probe()
680 INIT_LIST_HEAD(&sur40->buf_list); in sur40_probe()
681 spin_lock_init(&sur40->qlock); in sur40_probe()
682 mutex_init(&sur40->lock); in sur40_probe()
685 poll_dev->private = sur40; in sur40_probe()
696 usb_make_path(usbdev, sur40->phys, sizeof(sur40->phys)); in sur40_probe()
697 strlcat(sur40->phys, "/input0", sizeof(sur40->phys)); in sur40_probe()
698 poll_dev->input->phys = sur40->phys; in sur40_probe()
701 sur40->usbdev = usbdev; in sur40_probe()
702 sur40->dev = &interface->dev; in sur40_probe()
703 sur40->input = poll_dev; in sur40_probe()
706 sur40->bulk_in_size = usb_endpoint_maxp(endpoint); in sur40_probe()
707 sur40->bulk_in_epaddr = endpoint->bEndpointAddress; in sur40_probe()
708 sur40->bulk_in_buffer = kmalloc(sur40->bulk_in_size, GFP_KERNEL); in sur40_probe()
709 if (!sur40->bulk_in_buffer) { in sur40_probe()
724 snprintf(sur40->v4l2.name, sizeof(sur40->v4l2.name), "%s", DRIVER_LONG); in sur40_probe()
725 error = v4l2_device_register(sur40->dev, &sur40->v4l2); in sur40_probe()
733 sur40->queue = sur40_queue; in sur40_probe()
734 sur40->queue.drv_priv = sur40; in sur40_probe()
735 sur40->queue.lock = &sur40->lock; in sur40_probe()
736 sur40->queue.dev = sur40->dev; in sur40_probe()
739 error = vb2_queue_init(&sur40->queue); in sur40_probe()
743 sur40->pix_fmt = sur40_pix_format[0]; in sur40_probe()
744 sur40->vdev = sur40_video_device; in sur40_probe()
745 sur40->vdev.v4l2_dev = &sur40->v4l2; in sur40_probe()
746 sur40->vdev.lock = &sur40->lock; in sur40_probe()
747 sur40->vdev.queue = &sur40->queue; in sur40_probe()
748 video_set_drvdata(&sur40->vdev, sur40); in sur40_probe()
751 v4l2_ctrl_handler_init(&sur40->hdl, 4); in sur40_probe()
752 sur40->v4l2.ctrl_handler = &sur40->hdl; in sur40_probe()
753 sur40->vsvideo = (SUR40_CONTRAST_DEF << 4) | SUR40_GAIN_DEF; in sur40_probe()
755 v4l2_ctrl_new_std(&sur40->hdl, &sur40_ctrl_ops, V4L2_CID_BRIGHTNESS, in sur40_probe()
759 v4l2_ctrl_new_std(&sur40->hdl, &sur40_ctrl_ops, V4L2_CID_CONTRAST, in sur40_probe()
763 v4l2_ctrl_new_std(&sur40->hdl, &sur40_ctrl_ops, V4L2_CID_GAIN, in sur40_probe()
767 v4l2_ctrl_new_std(&sur40->hdl, &sur40_ctrl_ops, in sur40_probe()
771 v4l2_ctrl_handler_setup(&sur40->hdl); in sur40_probe()
773 if (sur40->hdl.error) { in sur40_probe()
776 v4l2_ctrl_handler_free(&sur40->hdl); in sur40_probe()
780 error = video_register_device(&sur40->vdev, VFL_TYPE_TOUCH, -1); in sur40_probe()
788 usb_set_intfdata(interface, sur40); in sur40_probe()
794 video_unregister_device(&sur40->vdev); in sur40_probe()
796 v4l2_device_unregister(&sur40->v4l2); in sur40_probe()
798 kfree(sur40->bulk_in_buffer); in sur40_probe()
800 input_free_polled_device(sur40->input); in sur40_probe()
802 kfree(sur40); in sur40_probe()
810 struct sur40_state *sur40 = usb_get_intfdata(interface); in sur40_disconnect() local
812 v4l2_ctrl_handler_free(&sur40->hdl); in sur40_disconnect()
813 video_unregister_device(&sur40->vdev); in sur40_disconnect()
814 v4l2_device_unregister(&sur40->v4l2); in sur40_disconnect()
816 input_unregister_polled_device(sur40->input); in sur40_disconnect()
817 input_free_polled_device(sur40->input); in sur40_disconnect()
818 kfree(sur40->bulk_in_buffer); in sur40_disconnect()
819 kfree(sur40); in sur40_disconnect()
836 struct sur40_state *sur40 = vb2_get_drv_priv(q); in sur40_queue_setup() local
842 return sizes[0] < sur40->pix_fmt.sizeimage ? -EINVAL : 0; in sur40_queue_setup()
845 sizes[0] = sur40->pix_fmt.sizeimage; in sur40_queue_setup()
856 struct sur40_state *sur40 = vb2_get_drv_priv(vb->vb2_queue); in sur40_buffer_prepare() local
857 unsigned long size = sur40->pix_fmt.sizeimage; in sur40_buffer_prepare()
860 dev_err(&sur40->usbdev->dev, "buffer too small (%lu < %lu)\n", in sur40_buffer_prepare()
874 struct sur40_state *sur40 = vb2_get_drv_priv(vb->vb2_queue); in sur40_buffer_queue() local
877 spin_lock(&sur40->qlock); in sur40_buffer_queue()
878 list_add_tail(&buf->list, &sur40->buf_list); in sur40_buffer_queue()
879 spin_unlock(&sur40->qlock); in sur40_buffer_queue()
882 static void return_all_buffers(struct sur40_state *sur40, in return_all_buffers() argument
887 spin_lock(&sur40->qlock); in return_all_buffers()
888 list_for_each_entry_safe(buf, node, &sur40->buf_list, list) { in return_all_buffers()
892 spin_unlock(&sur40->qlock); in return_all_buffers()
903 struct sur40_state *sur40 = vb2_get_drv_priv(vq); in sur40_start_streaming() local
905 sur40->sequence = 0; in sur40_start_streaming()
915 struct sur40_state *sur40 = vb2_get_drv_priv(vq); in sur40_stop_streaming() local
917 sur40->sequence = -1; in sur40_stop_streaming()
920 return_all_buffers(sur40, VB2_BUF_STATE_ERROR); in sur40_stop_streaming()
927 struct sur40_state *sur40 = video_drvdata(file); in sur40_vidioc_querycap() local
931 usb_make_path(sur40->usbdev, cap->bus_info, sizeof(cap->bus_info)); in sur40_vidioc_querycap()
977 struct sur40_state *sur40 = video_drvdata(file); in sur40_vidioc_s_fmt() local
981 sur40->pix_fmt = sur40_pix_format[1]; in sur40_vidioc_s_fmt()
985 sur40->pix_fmt = sur40_pix_format[0]; in sur40_vidioc_s_fmt()
989 f->fmt.pix = sur40->pix_fmt; in sur40_vidioc_s_fmt()
996 struct sur40_state *sur40 = video_drvdata(file); in sur40_vidioc_g_fmt() local
998 f->fmt.pix = sur40->pix_fmt; in sur40_vidioc_g_fmt()
1004 struct sur40_state *sur40 = container_of(ctrl->handler, in sur40_s_ctrl() local
1006 u8 value = sur40->vsvideo; in sur40_s_ctrl()
1010 sur40_set_irlevel(sur40, ctrl->val); in sur40_s_ctrl()
1014 sur40_set_vsvideo(sur40, value); in sur40_s_ctrl()
1018 sur40_set_vsvideo(sur40, value); in sur40_s_ctrl()
1021 sur40_set_preprocessor(sur40, ctrl->val); in sur40_s_ctrl()
1054 struct sur40_state *sur40 = video_drvdata(file); in sur40_vidioc_enum_framesizes() local
1061 f->discrete.width = sur40->pix_fmt.width; in sur40_vidioc_enum_framesizes()
1062 f->discrete.height = sur40->pix_fmt.height; in sur40_vidioc_enum_framesizes()
1069 struct sur40_state *sur40 = video_drvdata(file); in sur40_vidioc_enum_frameintervals() local
1073 || (f->width != sur40->pix_fmt.width) in sur40_vidioc_enum_frameintervals()
1074 || (f->height != sur40->pix_fmt.height)) in sur40_vidioc_enum_frameintervals()