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()
997 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_g_fmt_vid_cap() local
999 f->fmt.pix.width = cxdev->width; in cxusb_medion_g_fmt_vid_cap()
1000 f->fmt.pix.height = cxdev->height; in cxusb_medion_g_fmt_vid_cap()
1002 f->fmt.pix.field = vb2_start_streaming_called(&cxdev->videoqueue) ? in cxusb_medion_g_fmt_vid_cap()
1003 cxdev->field_order : cxusb_medion_field_order(cxdev); in cxusb_medion_g_fmt_vid_cap()
1004 f->fmt.pix.bytesperline = cxdev->width * 2; in cxusb_medion_g_fmt_vid_cap()
1016 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_try_s_fmt_vid_cap() local
1021 if (isset && vb2_is_busy(&cxdev->videoqueue)) in cxusb_medion_try_s_fmt_vid_cap()
1024 field = vb2_start_streaming_called(&cxdev->videoqueue) ? in cxusb_medion_try_s_fmt_vid_cap()
1025 cxdev->field_order : cxusb_medion_field_order(cxdev); in cxusb_medion_try_s_fmt_vid_cap()
1036 ret = v4l2_subdev_call(cxdev->cx25840, pad, set_fmt, NULL, &subfmt); in cxusb_medion_try_s_fmt_vid_cap()
1049 cxdev->width = f->fmt.pix.width; in cxusb_medion_try_s_fmt_vid_cap()
1050 cxdev->height = f->fmt.pix.height; in cxusb_medion_try_s_fmt_vid_cap()
1091 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_enum_input() local
1101 if (index == cxdev->input) { in cxusb_medion_enum_input()
1105 ret = v4l2_subdev_call(cxdev->cx25840, video, g_input_status, in cxusb_medion_enum_input()
1122 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_g_input() local
1124 *i = cxdev->input; in cxusb_medion_g_input()
1129 static int cxusb_medion_set_norm(struct cxusb_medion_dev *cxdev, in cxusb_medion_set_norm() argument
1132 struct dvb_usb_device *dvbdev = cxdev->dvbdev; in cxusb_medion_set_norm()
1137 (unsigned int)cxdev->input, in cxusb_medion_set_norm()
1145 if (cxdev->input != 0) { in cxusb_medion_set_norm()
1146 ret = v4l2_subdev_call(cxdev->cx25840, video, s_std, norm); in cxusb_medion_set_norm()
1157 ret = v4l2_subdev_call(cxdev->tda9887, video, s_std, norm); in cxusb_medion_set_norm()
1165 ret = v4l2_subdev_call(cxdev->tuner, video, s_std, norm); in cxusb_medion_set_norm()
1173 ret = v4l2_subdev_call(cxdev->cx25840, video, s_std, norm); in cxusb_medion_set_norm()
1182 cxdev->norm = norm; in cxusb_medion_set_norm()
1191 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_s_input() local
1198 ret = v4l2_subdev_call(cxdev->cx25840, video, s_routing, in cxusb_medion_s_input()
1203 cxdev->input = i; in cxusb_medion_s_input()
1204 cxdev->videodev->tvnorms = cxusb_medion_inputs[i].input.std; in cxusb_medion_s_input()
1206 norm = cxdev->norm & cxusb_medion_inputs[i].input.std; in cxusb_medion_s_input()
1210 cxusb_medion_set_norm(cxdev, norm); in cxusb_medion_s_input()
1219 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_g_tuner() local
1239 ret = v4l2_subdev_call(cxdev->tda9887, tuner, g_tuner, tuner); in cxusb_medion_g_tuner()
1249 ret = v4l2_subdev_call(cxdev->tuner, tuner, g_tuner, tuner); in cxusb_medion_g_tuner()
1258 ret = v4l2_subdev_call(cxdev->cx25840, tuner, g_tuner, tuner); in cxusb_medion_g_tuner()
1276 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_s_tuner() local
1283 ret = v4l2_subdev_call(cxdev->tda9887, tuner, s_tuner, tuner); in cxusb_medion_s_tuner()
1287 ret = v4l2_subdev_call(cxdev->tuner, tuner, s_tuner, tuner); in cxusb_medion_s_tuner()
1296 v4l2_subdev_call(cxdev->cx25840, video, s_std, cxdev->norm); in cxusb_medion_s_tuner()
1298 v4l2_subdev_call(cxdev->cx25840, tuner, s_radio); in cxusb_medion_s_tuner()
1300 return v4l2_subdev_call(cxdev->cx25840, tuner, s_tuner, tuner); in cxusb_medion_s_tuner()
1307 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_g_frequency() local
1312 return v4l2_subdev_call(cxdev->tuner, tuner, g_frequency, freq); in cxusb_medion_g_frequency()
1319 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_s_frequency() local
1326 ret = v4l2_subdev_call(cxdev->tda9887, tuner, s_frequency, freq); in cxusb_medion_s_frequency()
1330 ret = v4l2_subdev_call(cxdev->tuner, tuner, s_frequency, freq); in cxusb_medion_s_frequency()
1339 v4l2_subdev_call(cxdev->cx25840, video, s_std, cxdev->norm); in cxusb_medion_s_frequency()
1341 v4l2_subdev_call(cxdev->cx25840, tuner, s_radio); in cxusb_medion_s_frequency()
1343 return v4l2_subdev_call(cxdev->cx25840, tuner, s_frequency, freq); in cxusb_medion_s_frequency()
1350 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_g_std() local
1352 *norm = cxdev->norm; in cxusb_medion_g_std()
1364 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_s_std() local
1366 return cxusb_medion_set_norm(cxdev, norm); in cxusb_medion_s_std()
1373 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_querystd() local
1381 if (cxdev->input == 0) in cxusb_medion_querystd()
1386 ret = v4l2_subdev_call(cxdev->cx25840, video, querystd, norm); in cxusb_medion_querystd()
1390 (unsigned int)cxdev->input); in cxusb_medion_querystd()
1395 (unsigned int)cxdev->input, (unsigned long)*norm); in cxusb_medion_querystd()
1404 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_log_status() local
1406 v4l2_device_call_all(&cxdev->v4l2dev, 0, core, log_status); in cxusb_medion_log_status()
1461 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()
1512 subfmt.format.width = cxdev->width; in cxusb_medion_analog_init()
1513 subfmt.format.height = cxdev->height; in cxusb_medion_analog_init()
1518 ret = v4l2_subdev_call(cxdev->cx25840, pad, set_fmt, NULL, &subfmt); in cxusb_medion_analog_init()
1524 cxdev->width = subfmt.format.width; in cxusb_medion_analog_init()
1525 cxdev->height = subfmt.format.height; in cxusb_medion_analog_init()
1596 struct cxusb_medion_dev *cxdev = in cxusb_medion_v4l2_release() local
1598 struct dvb_usb_device *dvbdev = cxdev->dvbdev; in cxusb_medion_v4l2_release()
1602 v4l2_device_unregister(&cxdev->v4l2dev); in cxusb_medion_v4l2_release()
1604 mutex_destroy(&cxdev->dev_lock); in cxusb_medion_v4l2_release()
1606 while (completion_done(&cxdev->v4l2_release)) in cxusb_medion_v4l2_release()
1609 complete(&cxdev->v4l2_release); in cxusb_medion_v4l2_release()
1623 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_register_analog_video() local
1626 cxdev->videoqueue.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; in cxusb_medion_register_analog_video()
1627 cxdev->videoqueue.io_modes = VB2_MMAP | VB2_USERPTR | VB2_READ | in cxusb_medion_register_analog_video()
1629 cxdev->videoqueue.ops = &cxdev_video_qops; in cxusb_medion_register_analog_video()
1630 cxdev->videoqueue.mem_ops = &vb2_vmalloc_memops; in cxusb_medion_register_analog_video()
1631 cxdev->videoqueue.drv_priv = dvbdev; in cxusb_medion_register_analog_video()
1632 cxdev->videoqueue.buf_struct_size = in cxusb_medion_register_analog_video()
1634 cxdev->videoqueue.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; in cxusb_medion_register_analog_video()
1635 cxdev->videoqueue.min_buffers_needed = 6; in cxusb_medion_register_analog_video()
1636 cxdev->videoqueue.lock = &cxdev->dev_lock; in cxusb_medion_register_analog_video()
1638 ret = vb2_queue_init(&cxdev->videoqueue); in cxusb_medion_register_analog_video()
1645 cxdev->videodev = video_device_alloc(); in cxusb_medion_register_analog_video()
1646 if (!cxdev->videodev) { in cxusb_medion_register_analog_video()
1651 cxdev->videodev->device_caps = videocaps; in cxusb_medion_register_analog_video()
1652 cxdev->videodev->fops = &cxusb_video_fops; in cxusb_medion_register_analog_video()
1653 cxdev->videodev->v4l2_dev = &cxdev->v4l2dev; in cxusb_medion_register_analog_video()
1654 cxdev->videodev->queue = &cxdev->videoqueue; in cxusb_medion_register_analog_video()
1655 strscpy(cxdev->videodev->name, "cxusb", sizeof(cxdev->videodev->name)); in cxusb_medion_register_analog_video()
1656 cxdev->videodev->vfl_dir = VFL_DIR_RX; in cxusb_medion_register_analog_video()
1657 cxdev->videodev->ioctl_ops = &cxusb_video_ioctl; in cxusb_medion_register_analog_video()
1658 cxdev->videodev->tvnorms = V4L2_STD_ALL; in cxusb_medion_register_analog_video()
1659 cxdev->videodev->release = cxusb_medion_videodev_release; in cxusb_medion_register_analog_video()
1660 cxdev->videodev->lock = &cxdev->dev_lock; in cxusb_medion_register_analog_video()
1661 video_set_drvdata(cxdev->videodev, dvbdev); in cxusb_medion_register_analog_video()
1663 ret = video_register_device(cxdev->videodev, VFL_TYPE_VIDEO, -1); in cxusb_medion_register_analog_video()
1673 video_device_release(cxdev->videodev); in cxusb_medion_register_analog_video()
1679 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_register_analog_radio() local
1682 cxdev->radiodev = video_device_alloc(); in cxusb_medion_register_analog_radio()
1683 if (!cxdev->radiodev) { in cxusb_medion_register_analog_radio()
1688 cxdev->radiodev->device_caps = radiocaps; in cxusb_medion_register_analog_radio()
1689 cxdev->radiodev->fops = &cxusb_radio_fops; in cxusb_medion_register_analog_radio()
1690 cxdev->radiodev->v4l2_dev = &cxdev->v4l2dev; in cxusb_medion_register_analog_radio()
1691 strscpy(cxdev->radiodev->name, "cxusb", sizeof(cxdev->radiodev->name)); in cxusb_medion_register_analog_radio()
1692 cxdev->radiodev->vfl_dir = VFL_DIR_RX; in cxusb_medion_register_analog_radio()
1693 cxdev->radiodev->ioctl_ops = &cxusb_radio_ioctl; in cxusb_medion_register_analog_radio()
1694 cxdev->radiodev->release = video_device_release; in cxusb_medion_register_analog_radio()
1695 cxdev->radiodev->lock = &cxdev->dev_lock; in cxusb_medion_register_analog_radio()
1696 video_set_drvdata(cxdev->radiodev, dvbdev); in cxusb_medion_register_analog_radio()
1698 ret = video_register_device(cxdev->radiodev, VFL_TYPE_RADIO, -1); in cxusb_medion_register_analog_radio()
1702 video_device_release(cxdev->radiodev); in cxusb_medion_register_analog_radio()
1711 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_register_analog_subdevs() local
1716 cxdev->cx25840 = v4l2_i2c_new_subdev(&cxdev->v4l2dev, in cxusb_medion_register_analog_subdevs()
1719 if (!cxdev->cx25840) { in cxusb_medion_register_analog_subdevs()
1732 ret = v4l2_subdev_call(cxdev->cx25840, core, init, in cxusb_medion_register_analog_subdevs()
1749 cxdev->tuner = v4l2_i2c_new_subdev(&cxdev->v4l2dev, in cxusb_medion_register_analog_subdevs()
1752 if (!cxdev->tuner) { in cxusb_medion_register_analog_subdevs()
1762 v4l2_subdev_call(cxdev->tuner, tuner, s_type_addr, &tun_setup); in cxusb_medion_register_analog_subdevs()
1765 cxdev->tda9887 = v4l2_i2c_new_subdev(&cxdev->v4l2dev, in cxusb_medion_register_analog_subdevs()
1768 if (!cxdev->tda9887) { in cxusb_medion_register_analog_subdevs()
1778 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_register_analog() local
1781 mutex_init(&cxdev->dev_lock); in cxusb_medion_register_analog()
1783 init_completion(&cxdev->v4l2_release); in cxusb_medion_register_analog()
1785 cxdev->v4l2dev.release = cxusb_medion_v4l2_release; in cxusb_medion_register_analog()
1787 ret = v4l2_device_register(&dvbdev->udev->dev, &cxdev->v4l2dev); in cxusb_medion_register_analog()
1791 mutex_destroy(&cxdev->dev_lock); in cxusb_medion_register_analog()
1799 INIT_WORK(&cxdev->urbwork, cxusb_medion_v_complete_work); in cxusb_medion_register_analog()
1800 INIT_LIST_HEAD(&cxdev->buflist); in cxusb_medion_register_analog()
1802 cxdev->width = 320; in cxusb_medion_register_analog()
1803 cxdev->height = 240; in cxusb_medion_register_analog()
1816 vb2_video_unregister_device(cxdev->videodev); in cxusb_medion_register_analog()
1819 v4l2_device_put(&cxdev->v4l2dev); in cxusb_medion_register_analog()
1820 wait_for_completion(&cxdev->v4l2_release); in cxusb_medion_register_analog()
1827 struct cxusb_medion_dev *cxdev = dvbdev->priv; in cxusb_medion_unregister_analog() local
1831 video_unregister_device(cxdev->radiodev); in cxusb_medion_unregister_analog()
1832 vb2_video_unregister_device(cxdev->videodev); in cxusb_medion_unregister_analog()
1834 v4l2_device_put(&cxdev->v4l2dev); in cxusb_medion_unregister_analog()
1835 wait_for_completion(&cxdev->v4l2_release); in cxusb_medion_unregister_analog()