Lines Matching refs:sur40

175 static void sur40_process_video(struct sur40_state *sur40);
240 struct sur40_state *sur40 = polldev->private; in sur40_open() local
242 dev_dbg(sur40->dev, "open\n"); in sur40_open()
243 sur40_init(sur40); in sur40_open()
249 struct sur40_state *sur40 = polldev->private; in sur40_close() local
251 dev_dbg(sur40->dev, "close\n"); in sur40_close()
299 struct sur40_state *sur40 = polldev->private; in sur40_poll() local
304 struct sur40_header *header = &sur40->bulk_in_buffer->header; in sur40_poll()
305 struct sur40_blob *inblob = &sur40->bulk_in_buffer->blobs[0]; in sur40_poll()
307 dev_dbg(sur40->dev, "poll\n"); in sur40_poll()
314 result = usb_bulk_msg(sur40->usbdev, in sur40_poll()
315 usb_rcvbulkpipe(sur40->usbdev, sur40->bulk_in_epaddr), in sur40_poll()
316 sur40->bulk_in_buffer, sur40->bulk_in_size, in sur40_poll()
319 dev_dbg(sur40->dev, "received %d bytes\n", bulk_read); in sur40_poll()
322 dev_err(sur40->dev, "error in usb_bulk_read\n"); in sur40_poll()
329 dev_err(sur40->dev, "transfer size mismatch\n"); in sur40_poll()
336 dev_dbg(sur40->dev, "need %d blobs\n", need_blobs); in sur40_poll()
346 dev_dbg(sur40->dev, "packet ID mismatch\n"); in sur40_poll()
349 dev_dbg(sur40->dev, "received %d blobs\n", packet_blobs); in sur40_poll()
357 dev_dbg(sur40->dev, "processing blob\n"); in sur40_poll()
366 sur40_process_video(sur40); in sur40_poll()
370 static void sur40_process_video(struct sur40_state *sur40) in sur40_process_video() argument
373 struct sur40_image_header *img = (void *)(sur40->bulk_in_buffer); in sur40_process_video()
379 if (!vb2_start_streaming_called(&sur40->queue)) in sur40_process_video()
383 spin_lock(&sur40->qlock); in sur40_process_video()
384 if (list_empty(&sur40->buf_list)) { in sur40_process_video()
385 dev_dbg(sur40->dev, "buffer queue empty\n"); in sur40_process_video()
386 spin_unlock(&sur40->qlock); in sur40_process_video()
389 new_buf = list_entry(sur40->buf_list.next, struct sur40_buffer, list); in sur40_process_video()
391 spin_unlock(&sur40->qlock); in sur40_process_video()
393 dev_dbg(sur40->dev, "buffer acquired\n"); in sur40_process_video()
396 result = usb_bulk_msg(sur40->usbdev, in sur40_process_video()
397 usb_rcvbulkpipe(sur40->usbdev, VIDEO_ENDPOINT), in sur40_process_video()
398 sur40->bulk_in_buffer, sur40->bulk_in_size, in sur40_process_video()
402 dev_err(sur40->dev, "error in usb_bulk_read\n"); in sur40_process_video()
407 dev_err(sur40->dev, "received %d bytes (%zd expected)\n", in sur40_process_video()
413 dev_err(sur40->dev, "image magic mismatch\n"); in sur40_process_video()
418 dev_err(sur40->dev, "image size mismatch\n"); in sur40_process_video()
422 dev_dbg(sur40->dev, "header acquired\n"); in sur40_process_video()
426 result = usb_sg_init(&sgr, sur40->usbdev, in sur40_process_video()
427 usb_rcvbulkpipe(sur40->usbdev, VIDEO_ENDPOINT), 0, in sur40_process_video()
430 dev_err(sur40->dev, "error %d in usb_sg_init\n", result); in sur40_process_video()
436 dev_err(sur40->dev, "error %d in usb_sg_wait\n", sgr.status); in sur40_process_video()
440 dev_dbg(sur40->dev, "image acquired\n"); in sur40_process_video()
443 if (sur40->sequence == -1) in sur40_process_video()
448 new_buf->vb.sequence = sur40->sequence++; in sur40_process_video()
451 dev_dbg(sur40->dev, "buffer marked done\n"); in sur40_process_video()
492 struct sur40_state *sur40; in sur40_probe() local
509 sur40 = kzalloc(sizeof(struct sur40_state), GFP_KERNEL); in sur40_probe()
510 if (!sur40) in sur40_probe()
520 INIT_LIST_HEAD(&sur40->buf_list); in sur40_probe()
521 spin_lock_init(&sur40->qlock); in sur40_probe()
522 mutex_init(&sur40->lock); in sur40_probe()
525 poll_dev->private = sur40; in sur40_probe()
536 usb_make_path(usbdev, sur40->phys, sizeof(sur40->phys)); in sur40_probe()
537 strlcat(sur40->phys, "/input0", sizeof(sur40->phys)); in sur40_probe()
538 poll_dev->input->phys = sur40->phys; in sur40_probe()
541 sur40->usbdev = usbdev; in sur40_probe()
542 sur40->dev = &interface->dev; in sur40_probe()
543 sur40->input = poll_dev; in sur40_probe()
546 sur40->bulk_in_size = usb_endpoint_maxp(endpoint); in sur40_probe()
547 sur40->bulk_in_epaddr = endpoint->bEndpointAddress; in sur40_probe()
548 sur40->bulk_in_buffer = kmalloc(sur40->bulk_in_size, GFP_KERNEL); in sur40_probe()
549 if (!sur40->bulk_in_buffer) { in sur40_probe()
564 snprintf(sur40->v4l2.name, sizeof(sur40->v4l2.name), "%s", DRIVER_LONG); in sur40_probe()
565 error = v4l2_device_register(sur40->dev, &sur40->v4l2); in sur40_probe()
573 sur40->queue = sur40_queue; in sur40_probe()
574 sur40->queue.drv_priv = sur40; in sur40_probe()
575 sur40->queue.lock = &sur40->lock; in sur40_probe()
578 error = vb2_queue_init(&sur40->queue); in sur40_probe()
582 sur40->alloc_ctx = vb2_dma_sg_init_ctx(sur40->dev); in sur40_probe()
583 if (IS_ERR(sur40->alloc_ctx)) { in sur40_probe()
584 dev_err(sur40->dev, "Can't allocate buffer context"); in sur40_probe()
585 error = PTR_ERR(sur40->alloc_ctx); in sur40_probe()
589 sur40->vdev = sur40_video_device; in sur40_probe()
590 sur40->vdev.v4l2_dev = &sur40->v4l2; in sur40_probe()
591 sur40->vdev.lock = &sur40->lock; in sur40_probe()
592 sur40->vdev.queue = &sur40->queue; in sur40_probe()
593 video_set_drvdata(&sur40->vdev, sur40); in sur40_probe()
595 error = video_register_device(&sur40->vdev, VFL_TYPE_GRABBER, -1); in sur40_probe()
603 usb_set_intfdata(interface, sur40); in sur40_probe()
609 video_unregister_device(&sur40->vdev); in sur40_probe()
611 v4l2_device_unregister(&sur40->v4l2); in sur40_probe()
613 kfree(sur40->bulk_in_buffer); in sur40_probe()
615 input_free_polled_device(sur40->input); in sur40_probe()
617 kfree(sur40); in sur40_probe()
625 struct sur40_state *sur40 = usb_get_intfdata(interface); in sur40_disconnect() local
627 video_unregister_device(&sur40->vdev); in sur40_disconnect()
628 v4l2_device_unregister(&sur40->v4l2); in sur40_disconnect()
629 vb2_dma_sg_cleanup_ctx(sur40->alloc_ctx); in sur40_disconnect()
631 input_unregister_polled_device(sur40->input); in sur40_disconnect()
632 input_free_polled_device(sur40->input); in sur40_disconnect()
633 kfree(sur40->bulk_in_buffer); in sur40_disconnect()
634 kfree(sur40); in sur40_disconnect()
652 struct sur40_state *sur40 = vb2_get_drv_priv(q); in sur40_queue_setup() local
662 alloc_ctxs[0] = sur40->alloc_ctx; in sur40_queue_setup()
673 struct sur40_state *sur40 = vb2_get_drv_priv(vb->vb2_queue); in sur40_buffer_prepare() local
677 dev_err(&sur40->usbdev->dev, "buffer too small (%lu < %lu)\n", in sur40_buffer_prepare()
691 struct sur40_state *sur40 = vb2_get_drv_priv(vb->vb2_queue); in sur40_buffer_queue() local
694 spin_lock(&sur40->qlock); in sur40_buffer_queue()
695 list_add_tail(&buf->list, &sur40->buf_list); in sur40_buffer_queue()
696 spin_unlock(&sur40->qlock); in sur40_buffer_queue()
699 static void return_all_buffers(struct sur40_state *sur40, in return_all_buffers() argument
704 spin_lock(&sur40->qlock); in return_all_buffers()
705 list_for_each_entry_safe(buf, node, &sur40->buf_list, list) { in return_all_buffers()
709 spin_unlock(&sur40->qlock); in return_all_buffers()
720 struct sur40_state *sur40 = vb2_get_drv_priv(vq); in sur40_start_streaming() local
722 sur40->sequence = 0; in sur40_start_streaming()
732 struct sur40_state *sur40 = vb2_get_drv_priv(vq); in sur40_stop_streaming() local
733 sur40->sequence = -1; in sur40_stop_streaming()
736 return_all_buffers(sur40, VB2_BUF_STATE_ERROR); in sur40_stop_streaming()
743 struct sur40_state *sur40 = video_drvdata(file); in sur40_vidioc_querycap() local
747 usb_make_path(sur40->usbdev, cap->bus_info, sizeof(cap->bus_info)); in sur40_vidioc_querycap()