Lines Matching refs:sur40

174 static void sur40_process_video(struct sur40_state *sur40);
239 struct sur40_state *sur40 = polldev->private; in sur40_open() local
241 dev_dbg(sur40->dev, "open\n"); in sur40_open()
242 sur40_init(sur40); in sur40_open()
248 struct sur40_state *sur40 = polldev->private; in sur40_close() local
250 dev_dbg(sur40->dev, "close\n"); in sur40_close()
298 struct sur40_state *sur40 = polldev->private; in sur40_poll() local
303 struct sur40_header *header = &sur40->bulk_in_buffer->header; in sur40_poll()
304 struct sur40_blob *inblob = &sur40->bulk_in_buffer->blobs[0]; in sur40_poll()
306 dev_dbg(sur40->dev, "poll\n"); in sur40_poll()
313 result = usb_bulk_msg(sur40->usbdev, in sur40_poll()
314 usb_rcvbulkpipe(sur40->usbdev, sur40->bulk_in_epaddr), in sur40_poll()
315 sur40->bulk_in_buffer, sur40->bulk_in_size, in sur40_poll()
318 dev_dbg(sur40->dev, "received %d bytes\n", bulk_read); in sur40_poll()
321 dev_err(sur40->dev, "error in usb_bulk_read\n"); in sur40_poll()
328 dev_err(sur40->dev, "transfer size mismatch\n"); in sur40_poll()
335 dev_dbg(sur40->dev, "need %d blobs\n", need_blobs); in sur40_poll()
345 dev_warn(sur40->dev, "packet ID mismatch\n"); in sur40_poll()
348 dev_dbg(sur40->dev, "received %d blobs\n", packet_blobs); in sur40_poll()
356 dev_dbg(sur40->dev, "processing blob\n"); in sur40_poll()
365 sur40_process_video(sur40); in sur40_poll()
369 static void sur40_process_video(struct sur40_state *sur40) in sur40_process_video() argument
372 struct sur40_image_header *img = (void *)(sur40->bulk_in_buffer); in sur40_process_video()
378 if (!vb2_start_streaming_called(&sur40->queue)) in sur40_process_video()
382 spin_lock(&sur40->qlock); in sur40_process_video()
383 if (list_empty(&sur40->buf_list)) { in sur40_process_video()
384 dev_dbg(sur40->dev, "buffer queue empty\n"); in sur40_process_video()
385 spin_unlock(&sur40->qlock); in sur40_process_video()
388 new_buf = list_entry(sur40->buf_list.next, struct sur40_buffer, list); in sur40_process_video()
390 spin_unlock(&sur40->qlock); in sur40_process_video()
393 result = usb_bulk_msg(sur40->usbdev, in sur40_process_video()
394 usb_rcvbulkpipe(sur40->usbdev, VIDEO_ENDPOINT), in sur40_process_video()
395 sur40->bulk_in_buffer, sur40->bulk_in_size, in sur40_process_video()
399 dev_err(sur40->dev, "error in usb_bulk_read\n"); in sur40_process_video()
404 dev_err(sur40->dev, "received %d bytes (%zd expected)\n", in sur40_process_video()
410 dev_err(sur40->dev, "image magic mismatch\n"); in sur40_process_video()
415 dev_err(sur40->dev, "image size mismatch\n"); in sur40_process_video()
421 result = usb_sg_init(&sgr, sur40->usbdev, in sur40_process_video()
422 usb_rcvbulkpipe(sur40->usbdev, VIDEO_ENDPOINT), 0, in sur40_process_video()
425 dev_err(sur40->dev, "error %d in usb_sg_init\n", result); in sur40_process_video()
431 dev_err(sur40->dev, "error %d in usb_sg_wait\n", sgr.status); in sur40_process_video()
437 new_buf->vb.v4l2_buf.sequence = sur40->sequence++; in sur40_process_video()
480 struct sur40_state *sur40; in sur40_probe() local
497 sur40 = kzalloc(sizeof(struct sur40_state), GFP_KERNEL); in sur40_probe()
498 if (!sur40) in sur40_probe()
508 INIT_LIST_HEAD(&sur40->buf_list); in sur40_probe()
509 spin_lock_init(&sur40->qlock); in sur40_probe()
510 mutex_init(&sur40->lock); in sur40_probe()
513 poll_dev->private = sur40; in sur40_probe()
524 usb_make_path(usbdev, sur40->phys, sizeof(sur40->phys)); in sur40_probe()
525 strlcat(sur40->phys, "/input0", sizeof(sur40->phys)); in sur40_probe()
526 poll_dev->input->phys = sur40->phys; in sur40_probe()
529 sur40->usbdev = usbdev; in sur40_probe()
530 sur40->dev = &interface->dev; in sur40_probe()
531 sur40->input = poll_dev; in sur40_probe()
534 sur40->bulk_in_size = usb_endpoint_maxp(endpoint); in sur40_probe()
535 sur40->bulk_in_epaddr = endpoint->bEndpointAddress; in sur40_probe()
536 sur40->bulk_in_buffer = kmalloc(sur40->bulk_in_size, GFP_KERNEL); in sur40_probe()
537 if (!sur40->bulk_in_buffer) { in sur40_probe()
552 snprintf(sur40->v4l2.name, sizeof(sur40->v4l2.name), "%s", DRIVER_LONG); in sur40_probe()
553 error = v4l2_device_register(sur40->dev, &sur40->v4l2); in sur40_probe()
561 sur40->queue = sur40_queue; in sur40_probe()
562 sur40->queue.drv_priv = sur40; in sur40_probe()
563 sur40->queue.lock = &sur40->lock; in sur40_probe()
566 error = vb2_queue_init(&sur40->queue); in sur40_probe()
570 sur40->alloc_ctx = vb2_dma_sg_init_ctx(sur40->dev); in sur40_probe()
571 if (IS_ERR(sur40->alloc_ctx)) { in sur40_probe()
572 dev_err(sur40->dev, "Can't allocate buffer context"); in sur40_probe()
576 sur40->vdev = sur40_video_device; in sur40_probe()
577 sur40->vdev.v4l2_dev = &sur40->v4l2; in sur40_probe()
578 sur40->vdev.lock = &sur40->lock; in sur40_probe()
579 sur40->vdev.queue = &sur40->queue; in sur40_probe()
580 video_set_drvdata(&sur40->vdev, sur40); in sur40_probe()
582 error = video_register_device(&sur40->vdev, VFL_TYPE_GRABBER, -1); in sur40_probe()
590 usb_set_intfdata(interface, sur40); in sur40_probe()
596 video_unregister_device(&sur40->vdev); in sur40_probe()
598 v4l2_device_unregister(&sur40->v4l2); in sur40_probe()
600 kfree(sur40->bulk_in_buffer); in sur40_probe()
602 input_free_polled_device(sur40->input); in sur40_probe()
604 kfree(sur40); in sur40_probe()
612 struct sur40_state *sur40 = usb_get_intfdata(interface); in sur40_disconnect() local
614 video_unregister_device(&sur40->vdev); in sur40_disconnect()
615 v4l2_device_unregister(&sur40->v4l2); in sur40_disconnect()
616 vb2_dma_sg_cleanup_ctx(sur40->alloc_ctx); in sur40_disconnect()
618 input_unregister_polled_device(sur40->input); in sur40_disconnect()
619 input_free_polled_device(sur40->input); in sur40_disconnect()
620 kfree(sur40->bulk_in_buffer); in sur40_disconnect()
621 kfree(sur40); in sur40_disconnect()
638 struct sur40_state *sur40 = vb2_get_drv_priv(q); in sur40_queue_setup() local
648 alloc_ctxs[0] = sur40->alloc_ctx; in sur40_queue_setup()
659 struct sur40_state *sur40 = vb2_get_drv_priv(vb->vb2_queue); in sur40_buffer_prepare() local
663 dev_err(&sur40->usbdev->dev, "buffer too small (%lu < %lu)\n", in sur40_buffer_prepare()
677 struct sur40_state *sur40 = vb2_get_drv_priv(vb->vb2_queue); in sur40_buffer_queue() local
680 spin_lock(&sur40->qlock); in sur40_buffer_queue()
681 list_add_tail(&buf->list, &sur40->buf_list); in sur40_buffer_queue()
682 spin_unlock(&sur40->qlock); in sur40_buffer_queue()
685 static void return_all_buffers(struct sur40_state *sur40, in return_all_buffers() argument
690 spin_lock(&sur40->qlock); in return_all_buffers()
691 list_for_each_entry_safe(buf, node, &sur40->buf_list, list) { in return_all_buffers()
695 spin_unlock(&sur40->qlock); in return_all_buffers()
706 struct sur40_state *sur40 = vb2_get_drv_priv(vq); in sur40_start_streaming() local
708 sur40->sequence = 0; in sur40_start_streaming()
718 struct sur40_state *sur40 = vb2_get_drv_priv(vq); in sur40_stop_streaming() local
721 return_all_buffers(sur40, VB2_BUF_STATE_ERROR); in sur40_stop_streaming()
728 struct sur40_state *sur40 = video_drvdata(file); in sur40_vidioc_querycap() local
732 usb_make_path(sur40->usbdev, cap->bus_info, sizeof(cap->bus_info)); in sur40_vidioc_querycap()