Lines Matching refs:cxdev
46 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_v_queue_setup() local
47 unsigned int size = cxdev->width * cxdev->height * 2; in cxusb_medion_v_queue_setup()
66 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_v_buf_init() local
70 if (vb2_plane_size(vb, 0) < cxdev->width * cxdev->height * 2) in cxusb_medion_v_buf_init()
445 static bool cxusb_medion_v_process_auxbuf(struct cxusb_medion_dev *cxdev, in cxusb_medion_v_process_auxbuf() argument
448 struct dvb_usb_device *dvbdev = cxdev->dvbdev; in cxusb_medion_v_process_auxbuf()
449 struct cxusb_bt656_params *bt656 = &cxdev->bt656; in cxusb_medion_v_process_auxbuf()
456 if (!list_empty(&cxdev->buflist)) { in cxusb_medion_v_process_auxbuf()
457 cxdev->vbuf = in cxusb_medion_v_process_auxbuf()
458 list_first_entry(&cxdev->buflist, in cxusb_medion_v_process_auxbuf()
461 list_del(&cxdev->vbuf->list); in cxusb_medion_v_process_auxbuf()
474 if (cxdev->vbuf) { in cxusb_medion_v_process_auxbuf()
475 cxdev->vbuf->vb2.vb2_buf.timestamp = ktime_get_ns(); in cxusb_medion_v_process_auxbuf()
476 bt656->buf = vb2_plane_vaddr(&cxdev->vbuf->vb2.vb2_buf, in cxusb_medion_v_process_auxbuf()
482 if (!cxusb_medion_copy_field(dvbdev, &cxdev->auxbuf, bt656, in cxusb_medion_v_process_auxbuf()
483 true, cxdev->height / 2, in cxusb_medion_v_process_auxbuf()
484 cxdev->width * 2)) in cxusb_medion_v_process_auxbuf()
499 if (!cxusb_medion_copy_field(dvbdev, &cxdev->auxbuf, bt656, in cxusb_medion_v_process_auxbuf()
500 false, cxdev->height / 2, in cxusb_medion_v_process_auxbuf()
501 cxdev->width * 2)) in cxusb_medion_v_process_auxbuf()
504 cxusb_auxbuf_head_trim(dvbdev, &cxdev->auxbuf, bt656->pos); in cxusb_medion_v_process_auxbuf()
508 if (cxdev->vbuf) { in cxusb_medion_v_process_auxbuf()
509 vb2_set_plane_payload(&cxdev->vbuf->vb2.vb2_buf, 0, in cxusb_medion_v_process_auxbuf()
510 cxdev->width * cxdev->height * 2); in cxusb_medion_v_process_auxbuf()
512 cxdev->vbuf->vb2.field = cxdev->field_order; in cxusb_medion_v_process_auxbuf()
513 cxdev->vbuf->vb2.sequence = cxdev->vbuf_sequence++; in cxusb_medion_v_process_auxbuf()
515 vb2_buffer_done(&cxdev->vbuf->vb2.vb2_buf, in cxusb_medion_v_process_auxbuf()
518 cxdev->vbuf = NULL; in cxusb_medion_v_process_auxbuf()
519 cxdev->bt656.buf = NULL; in cxusb_medion_v_process_auxbuf()
524 cxdev->vbuf_sequence++; in cxusb_medion_v_process_auxbuf()
531 static bool cxusb_medion_v_complete_handle_urb(struct cxusb_medion_dev *cxdev, in cxusb_medion_v_complete_handle_urb() argument
534 struct dvb_usb_device *dvbdev = cxdev->dvbdev; in cxusb_medion_v_complete_handle_urb()
541 urbn = cxdev->nexturb; in cxusb_medion_v_complete_handle_urb()
542 if (!test_bit(urbn, &cxdev->urbcomplete)) in cxusb_medion_v_complete_handle_urb()
545 clear_bit(urbn, &cxdev->urbcomplete); in cxusb_medion_v_complete_handle_urb()
548 cxdev->nexturb++; in cxusb_medion_v_complete_handle_urb()
549 cxdev->nexturb %= CXUSB_VIDEO_URBS; in cxusb_medion_v_complete_handle_urb()
550 urb = cxdev->streamurbs[cxdev->nexturb]; in cxusb_medion_v_complete_handle_urb()
553 urb = cxdev->streamurbs[urbn]; in cxusb_medion_v_complete_handle_urb()
581 &cxdev->auxbuf, in cxusb_medion_v_complete_handle_urb()
595 return test_bit(cxdev->nexturb, &cxdev->urbcomplete); in cxusb_medion_v_complete_handle_urb()
600 struct cxusb_medion_dev *cxdev = container_of(work, in cxusb_medion_v_complete_work() local
603 struct dvb_usb_device *dvbdev = cxdev->dvbdev; in cxusb_medion_v_complete_work()
607 mutex_lock(cxdev->videodev->lock); in cxusb_medion_v_complete_work()
610 (int)cxdev->stop_streaming); in cxusb_medion_v_complete_work()
612 if (cxdev->stop_streaming) in cxusb_medion_v_complete_work()
615 reschedule = cxusb_medion_v_complete_handle_urb(cxdev, &auxbuf_reset); in cxusb_medion_v_complete_work()
617 if (cxusb_medion_v_process_auxbuf(cxdev, auxbuf_reset)) in cxusb_medion_v_complete_work()
623 schedule_work(&cxdev->urbwork); in cxusb_medion_v_complete_work()
627 mutex_unlock(cxdev->videodev->lock); in cxusb_medion_v_complete_work()
633 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_v_complete() local
637 if (cxdev->streamurbs[i] == u) in cxusb_medion_v_complete()
648 set_bit(i, &cxdev->urbcomplete); in cxusb_medion_v_complete()
649 schedule_work(&cxdev->urbwork); in cxusb_medion_v_complete()
652 static void cxusb_medion_urbs_free(struct cxusb_medion_dev *cxdev) in cxusb_medion_urbs_free() argument
657 if (cxdev->streamurbs[i]) { in cxusb_medion_urbs_free()
658 kfree(cxdev->streamurbs[i]->transfer_buffer); in cxusb_medion_urbs_free()
659 usb_free_urb(cxdev->streamurbs[i]); in cxusb_medion_urbs_free()
660 cxdev->streamurbs[i] = NULL; in cxusb_medion_urbs_free()
664 static void cxusb_medion_return_buffers(struct cxusb_medion_dev *cxdev, in cxusb_medion_return_buffers() argument
669 list_for_each_entry_safe(vbuf, vbuf_tmp, &cxdev->buflist, in cxusb_medion_return_buffers()
677 if (cxdev->vbuf) { in cxusb_medion_return_buffers()
678 vb2_buffer_done(&cxdev->vbuf->vb2.vb2_buf, in cxusb_medion_return_buffers()
682 cxdev->vbuf = NULL; in cxusb_medion_return_buffers()
683 cxdev->bt656.buf = NULL; in cxusb_medion_return_buffers()
687 static int cxusb_medion_v_ss_auxbuf_alloc(struct cxusb_medion_dev *cxdev, in cxusb_medion_v_ss_auxbuf_alloc() argument
690 struct dvb_usb_device *dvbdev = cxdev->dvbdev; in cxusb_medion_v_ss_auxbuf_alloc()
694 framelen = (cxdev->width * 2 + 4 + 4) * in cxusb_medion_v_ss_auxbuf_alloc()
695 (cxdev->height + 50 /* VBI lines */); in cxusb_medion_v_ss_auxbuf_alloc()
710 *npackets, urblen, (unsigned int)cxdev->width, in cxusb_medion_v_ss_auxbuf_alloc()
711 (unsigned int)cxdev->height, framelen); in cxusb_medion_v_ss_auxbuf_alloc()
719 cxusb_auxbuf_init(dvbdev, &cxdev->auxbuf, buf, auxbuflen); in cxusb_medion_v_ss_auxbuf_alloc()
741 static u32 cxusb_medion_field_order(struct cxusb_medion_dev *cxdev) in cxusb_medion_field_order() argument
743 struct dvb_usb_device *dvbdev = cxdev->dvbdev; in cxusb_medion_field_order()
749 if (cxdev->input == 0) in cxusb_medion_field_order()
752 field = cxusb_medion_norm2field_order(cxdev->norm); in cxusb_medion_field_order()
756 ret = v4l2_subdev_call(cxdev->cx25840, video, g_std, &norm); in cxusb_medion_field_order()
760 (unsigned int)cxdev->input); in cxusb_medion_field_order()
776 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_v_start_streaming() local
783 if (cxdev->stop_streaming) { in cxusb_medion_v_start_streaming()
789 cxdev->field_order = cxusb_medion_field_order(cxdev); in cxusb_medion_v_start_streaming()
791 ret = v4l2_subdev_call(cxdev->cx25840, video, s_stream, 1); in cxusb_medion_v_start_streaming()
806 ret = cxusb_medion_v_ss_auxbuf_alloc(cxdev, &npackets); in cxusb_medion_v_start_streaming()
837 cxdev->streamurbs[i] = surb; in cxusb_medion_v_start_streaming()
860 cxdev->urbcomplete = 0; in cxusb_medion_v_start_streaming()
861 cxdev->nexturb = 0; in cxusb_medion_v_start_streaming()
862 cxdev->vbuf_sequence = 0; in cxusb_medion_v_start_streaming()
864 cxdev->vbuf = NULL; in cxusb_medion_v_start_streaming()
865 cxdev->bt656.mode = NEW_FRAME; in cxusb_medion_v_start_streaming()
866 cxdev->bt656.buf = NULL; in cxusb_medion_v_start_streaming()
869 if (cxdev->streamurbs[i]) { in cxusb_medion_v_start_streaming()
870 ret = usb_submit_urb(cxdev->streamurbs[i], in cxusb_medion_v_start_streaming()
881 cxusb_medion_urbs_free(cxdev); in cxusb_medion_v_start_streaming()
884 vfree(cxdev->auxbuf.buf); in cxusb_medion_v_start_streaming()
890 v4l2_subdev_call(cxdev->cx25840, video, s_stream, 0); in cxusb_medion_v_start_streaming()
893 cxusb_medion_return_buffers(cxdev, true); in cxusb_medion_v_start_streaming()
901 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_v_stop_streaming() local
907 if (WARN_ON(cxdev->stop_streaming)) in cxusb_medion_v_stop_streaming()
910 cxdev->stop_streaming = true; in cxusb_medion_v_stop_streaming()
914 ret = v4l2_subdev_call(cxdev->cx25840, video, s_stream, 0); in cxusb_medion_v_stop_streaming()
920 mutex_unlock(cxdev->videodev->lock); in cxusb_medion_v_stop_streaming()
923 if (cxdev->streamurbs[i]) in cxusb_medion_v_stop_streaming()
924 usb_kill_urb(cxdev->streamurbs[i]); in cxusb_medion_v_stop_streaming()
926 flush_work(&cxdev->urbwork); in cxusb_medion_v_stop_streaming()
928 mutex_lock(cxdev->videodev->lock); in cxusb_medion_v_stop_streaming()
931 vfree(cxdev->auxbuf.buf); in cxusb_medion_v_stop_streaming()
933 cxusb_medion_urbs_free(cxdev); in cxusb_medion_v_stop_streaming()
935 cxusb_medion_return_buffers(cxdev, false); in cxusb_medion_v_stop_streaming()
937 cxdev->stop_streaming = false; in cxusb_medion_v_stop_streaming()
946 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusub_medion_v_buf_queue() local
950 list_add_tail(&vbuf->list, &cxdev->buflist); in cxusub_medion_v_buf_queue()
995 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_g_fmt_vid_cap() local
997 f->fmt.pix.width = cxdev->width; in cxusb_medion_g_fmt_vid_cap()
998 f->fmt.pix.height = cxdev->height; in cxusb_medion_g_fmt_vid_cap()
1000 f->fmt.pix.field = vb2_start_streaming_called(&cxdev->videoqueue) ? in cxusb_medion_g_fmt_vid_cap()
1001 cxdev->field_order : cxusb_medion_field_order(cxdev); in cxusb_medion_g_fmt_vid_cap()
1002 f->fmt.pix.bytesperline = cxdev->width * 2; in cxusb_medion_g_fmt_vid_cap()
1014 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_try_s_fmt_vid_cap() local
1022 if (isset && vb2_is_busy(&cxdev->videoqueue)) in cxusb_medion_try_s_fmt_vid_cap()
1025 field = vb2_start_streaming_called(&cxdev->videoqueue) ? in cxusb_medion_try_s_fmt_vid_cap()
1026 cxdev->field_order : cxusb_medion_field_order(cxdev); in cxusb_medion_try_s_fmt_vid_cap()
1034 ret = v4l2_subdev_call(cxdev->cx25840, pad, set_fmt, NULL, &subfmt); in cxusb_medion_try_s_fmt_vid_cap()
1047 cxdev->width = f->fmt.pix.width; in cxusb_medion_try_s_fmt_vid_cap()
1048 cxdev->height = f->fmt.pix.height; in cxusb_medion_try_s_fmt_vid_cap()
1089 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_enum_input() local
1099 if (index == cxdev->input) { in cxusb_medion_enum_input()
1103 ret = v4l2_subdev_call(cxdev->cx25840, video, g_input_status, in cxusb_medion_enum_input()
1120 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_g_input() local
1122 *i = cxdev->input; in cxusb_medion_g_input()
1127 static int cxusb_medion_set_norm(struct cxusb_medion_dev *cxdev, in cxusb_medion_set_norm() argument
1130 struct dvb_usb_device *dvbdev = cxdev->dvbdev; in cxusb_medion_set_norm()
1135 (unsigned int)cxdev->input, in cxusb_medion_set_norm()
1143 if (cxdev->input != 0) { in cxusb_medion_set_norm()
1144 ret = v4l2_subdev_call(cxdev->cx25840, video, s_std, norm); in cxusb_medion_set_norm()
1155 ret = v4l2_subdev_call(cxdev->tda9887, video, s_std, norm); in cxusb_medion_set_norm()
1163 ret = v4l2_subdev_call(cxdev->tuner, video, s_std, norm); in cxusb_medion_set_norm()
1171 ret = v4l2_subdev_call(cxdev->cx25840, video, s_std, norm); in cxusb_medion_set_norm()
1180 cxdev->norm = norm; in cxusb_medion_set_norm()
1189 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_s_input() local
1196 ret = v4l2_subdev_call(cxdev->cx25840, video, s_routing, in cxusb_medion_s_input()
1201 cxdev->input = i; in cxusb_medion_s_input()
1202 cxdev->videodev->tvnorms = cxusb_medion_inputs[i].input.std; in cxusb_medion_s_input()
1204 norm = cxdev->norm & cxusb_medion_inputs[i].input.std; in cxusb_medion_s_input()
1208 cxusb_medion_set_norm(cxdev, norm); in cxusb_medion_s_input()
1217 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_g_tuner() local
1237 ret = v4l2_subdev_call(cxdev->tda9887, tuner, g_tuner, tuner); in cxusb_medion_g_tuner()
1247 ret = v4l2_subdev_call(cxdev->tuner, tuner, g_tuner, tuner); in cxusb_medion_g_tuner()
1256 ret = v4l2_subdev_call(cxdev->cx25840, tuner, g_tuner, tuner); in cxusb_medion_g_tuner()
1274 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_s_tuner() local
1281 ret = v4l2_subdev_call(cxdev->tda9887, tuner, s_tuner, tuner); in cxusb_medion_s_tuner()
1285 ret = v4l2_subdev_call(cxdev->tuner, tuner, s_tuner, tuner); in cxusb_medion_s_tuner()
1294 v4l2_subdev_call(cxdev->cx25840, video, s_std, cxdev->norm); in cxusb_medion_s_tuner()
1296 v4l2_subdev_call(cxdev->cx25840, tuner, s_radio); in cxusb_medion_s_tuner()
1298 return v4l2_subdev_call(cxdev->cx25840, tuner, s_tuner, tuner); in cxusb_medion_s_tuner()
1305 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_g_frequency() local
1310 return v4l2_subdev_call(cxdev->tuner, tuner, g_frequency, freq); in cxusb_medion_g_frequency()
1317 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_s_frequency() local
1324 ret = v4l2_subdev_call(cxdev->tda9887, tuner, s_frequency, freq); in cxusb_medion_s_frequency()
1328 ret = v4l2_subdev_call(cxdev->tuner, tuner, s_frequency, freq); in cxusb_medion_s_frequency()
1337 v4l2_subdev_call(cxdev->cx25840, video, s_std, cxdev->norm); in cxusb_medion_s_frequency()
1339 v4l2_subdev_call(cxdev->cx25840, tuner, s_radio); in cxusb_medion_s_frequency()
1341 return v4l2_subdev_call(cxdev->cx25840, tuner, s_frequency, freq); in cxusb_medion_s_frequency()
1348 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_g_std() local
1350 *norm = cxdev->norm; in cxusb_medion_g_std()
1362 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_s_std() local
1364 return cxusb_medion_set_norm(cxdev, norm); in cxusb_medion_s_std()
1371 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_querystd() local
1379 if (cxdev->input == 0) in cxusb_medion_querystd()
1384 ret = v4l2_subdev_call(cxdev->cx25840, video, querystd, norm); in cxusb_medion_querystd()
1388 (unsigned int)cxdev->input); in cxusb_medion_querystd()
1393 (unsigned int)cxdev->input, (unsigned long)*norm); in cxusb_medion_querystd()
1402 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_log_status() local
1404 v4l2_device_call_all(&cxdev->v4l2dev, 0, core, log_status); in cxusb_medion_log_status()
1459 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_analog_init() local
1480 ret = v4l2_subdev_call(cxdev->cx25840, core, reset, 0); in cxusb_medion_analog_init()
1485 ret = v4l2_subdev_call(cxdev->cx25840, video, s_routing, in cxusb_medion_analog_init()
1492 cxdev->input = 1; in cxusb_medion_analog_init()
1493 cxdev->videodev->tvnorms = V4L2_STD_ALL; in cxusb_medion_analog_init()
1494 cxdev->norm = V4L2_STD_PAL; in cxusb_medion_analog_init()
1498 ret = v4l2_subdev_call(cxdev->cx25840, core, s_io_pin_config, in cxusb_medion_analog_init()
1506 v4l2_subdev_call(cxdev->tda9887, video, s_std, cxdev->norm); in cxusb_medion_analog_init()
1507 v4l2_subdev_call(cxdev->tuner, video, s_std, cxdev->norm); in cxusb_medion_analog_init()
1508 v4l2_subdev_call(cxdev->cx25840, video, s_std, cxdev->norm); in cxusb_medion_analog_init()
1510 subfmt.format.width = cxdev->width; in cxusb_medion_analog_init()
1511 subfmt.format.height = cxdev->height; in cxusb_medion_analog_init()
1516 ret = v4l2_subdev_call(cxdev->cx25840, pad, set_fmt, NULL, &subfmt); in cxusb_medion_analog_init()
1522 cxdev->width = subfmt.format.width; in cxusb_medion_analog_init()
1523 cxdev->height = subfmt.format.height; in cxusb_medion_analog_init()
1594 struct cxusb_medion_dev *cxdev = in cxusb_medion_v4l2_release() local
1596 struct dvb_usb_device *dvbdev = cxdev->dvbdev; in cxusb_medion_v4l2_release()
1600 v4l2_device_unregister(&cxdev->v4l2dev); in cxusb_medion_v4l2_release()
1602 mutex_destroy(&cxdev->dev_lock); in cxusb_medion_v4l2_release()
1604 while (completion_done(&cxdev->v4l2_release)) in cxusb_medion_v4l2_release()
1607 complete(&cxdev->v4l2_release); in cxusb_medion_v4l2_release()
1621 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_register_analog_video() local
1624 cxdev->videoqueue.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; in cxusb_medion_register_analog_video()
1625 cxdev->videoqueue.io_modes = VB2_MMAP | VB2_USERPTR | VB2_READ | in cxusb_medion_register_analog_video()
1627 cxdev->videoqueue.ops = &cxdev_video_qops; in cxusb_medion_register_analog_video()
1628 cxdev->videoqueue.mem_ops = &vb2_vmalloc_memops; in cxusb_medion_register_analog_video()
1629 cxdev->videoqueue.drv_priv = dvbdev; in cxusb_medion_register_analog_video()
1630 cxdev->videoqueue.buf_struct_size = in cxusb_medion_register_analog_video()
1632 cxdev->videoqueue.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; in cxusb_medion_register_analog_video()
1633 cxdev->videoqueue.min_queued_buffers = 6; in cxusb_medion_register_analog_video()
1634 cxdev->videoqueue.lock = &cxdev->dev_lock; in cxusb_medion_register_analog_video()
1636 ret = vb2_queue_init(&cxdev->videoqueue); in cxusb_medion_register_analog_video()
1643 cxdev->videodev = video_device_alloc(); in cxusb_medion_register_analog_video()
1644 if (!cxdev->videodev) { in cxusb_medion_register_analog_video()
1649 cxdev->videodev->device_caps = videocaps; in cxusb_medion_register_analog_video()
1650 cxdev->videodev->fops = &cxusb_video_fops; in cxusb_medion_register_analog_video()
1651 cxdev->videodev->v4l2_dev = &cxdev->v4l2dev; in cxusb_medion_register_analog_video()
1652 cxdev->videodev->queue = &cxdev->videoqueue; in cxusb_medion_register_analog_video()
1653 strscpy(cxdev->videodev->name, "cxusb", sizeof(cxdev->videodev->name)); in cxusb_medion_register_analog_video()
1654 cxdev->videodev->vfl_dir = VFL_DIR_RX; in cxusb_medion_register_analog_video()
1655 cxdev->videodev->ioctl_ops = &cxusb_video_ioctl; in cxusb_medion_register_analog_video()
1656 cxdev->videodev->tvnorms = V4L2_STD_ALL; in cxusb_medion_register_analog_video()
1657 cxdev->videodev->release = cxusb_medion_videodev_release; in cxusb_medion_register_analog_video()
1658 cxdev->videodev->lock = &cxdev->dev_lock; in cxusb_medion_register_analog_video()
1659 video_set_drvdata(cxdev->videodev, dvbdev); in cxusb_medion_register_analog_video()
1661 ret = video_register_device(cxdev->videodev, VFL_TYPE_VIDEO, -1); in cxusb_medion_register_analog_video()
1671 video_device_release(cxdev->videodev); in cxusb_medion_register_analog_video()
1677 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_register_analog_radio() local
1680 cxdev->radiodev = video_device_alloc(); in cxusb_medion_register_analog_radio()
1681 if (!cxdev->radiodev) { in cxusb_medion_register_analog_radio()
1686 cxdev->radiodev->device_caps = radiocaps; in cxusb_medion_register_analog_radio()
1687 cxdev->radiodev->fops = &cxusb_radio_fops; in cxusb_medion_register_analog_radio()
1688 cxdev->radiodev->v4l2_dev = &cxdev->v4l2dev; in cxusb_medion_register_analog_radio()
1689 strscpy(cxdev->radiodev->name, "cxusb", sizeof(cxdev->radiodev->name)); in cxusb_medion_register_analog_radio()
1690 cxdev->radiodev->vfl_dir = VFL_DIR_RX; in cxusb_medion_register_analog_radio()
1691 cxdev->radiodev->ioctl_ops = &cxusb_radio_ioctl; in cxusb_medion_register_analog_radio()
1692 cxdev->radiodev->release = video_device_release; in cxusb_medion_register_analog_radio()
1693 cxdev->radiodev->lock = &cxdev->dev_lock; in cxusb_medion_register_analog_radio()
1694 video_set_drvdata(cxdev->radiodev, dvbdev); in cxusb_medion_register_analog_radio()
1696 ret = video_register_device(cxdev->radiodev, VFL_TYPE_RADIO, -1); in cxusb_medion_register_analog_radio()
1700 video_device_release(cxdev->radiodev); in cxusb_medion_register_analog_radio()
1709 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_register_analog_subdevs() local
1714 cxdev->cx25840 = v4l2_i2c_new_subdev(&cxdev->v4l2dev, in cxusb_medion_register_analog_subdevs()
1717 if (!cxdev->cx25840) { in cxusb_medion_register_analog_subdevs()
1730 ret = v4l2_subdev_call(cxdev->cx25840, core, init, in cxusb_medion_register_analog_subdevs()
1747 cxdev->tuner = v4l2_i2c_new_subdev(&cxdev->v4l2dev, in cxusb_medion_register_analog_subdevs()
1750 if (!cxdev->tuner) { in cxusb_medion_register_analog_subdevs()
1760 v4l2_subdev_call(cxdev->tuner, tuner, s_type_addr, &tun_setup); in cxusb_medion_register_analog_subdevs()
1763 cxdev->tda9887 = v4l2_i2c_new_subdev(&cxdev->v4l2dev, in cxusb_medion_register_analog_subdevs()
1766 if (!cxdev->tda9887) { in cxusb_medion_register_analog_subdevs()
1776 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_register_analog() local
1779 mutex_init(&cxdev->dev_lock); in cxusb_medion_register_analog()
1781 init_completion(&cxdev->v4l2_release); in cxusb_medion_register_analog()
1783 cxdev->v4l2dev.release = cxusb_medion_v4l2_release; in cxusb_medion_register_analog()
1785 ret = v4l2_device_register(&dvbdev->udev->dev, &cxdev->v4l2dev); in cxusb_medion_register_analog()
1789 mutex_destroy(&cxdev->dev_lock); in cxusb_medion_register_analog()
1797 INIT_WORK(&cxdev->urbwork, cxusb_medion_v_complete_work); in cxusb_medion_register_analog()
1798 INIT_LIST_HEAD(&cxdev->buflist); in cxusb_medion_register_analog()
1800 cxdev->width = 320; in cxusb_medion_register_analog()
1801 cxdev->height = 240; in cxusb_medion_register_analog()
1814 vb2_video_unregister_device(cxdev->videodev); in cxusb_medion_register_analog()
1817 v4l2_device_put(&cxdev->v4l2dev); in cxusb_medion_register_analog()
1818 wait_for_completion(&cxdev->v4l2_release); in cxusb_medion_register_analog()
1825 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_unregister_analog() local
1829 video_unregister_device(cxdev->radiodev); in cxusb_medion_unregister_analog()
1830 vb2_video_unregister_device(cxdev->videodev); in cxusb_medion_unregister_analog()
1832 v4l2_device_put(&cxdev->v4l2dev); in cxusb_medion_unregister_analog()
1833 wait_for_completion(&cxdev->v4l2_release); in cxusb_medion_unregister_analog()