Lines Matching defs:cxdev
46 struct cxusb_medion_dev *cxdev = dvbdev->priv;
47 unsigned int size = cxdev->width * cxdev->height * 2;
66 struct cxusb_medion_dev *cxdev = dvbdev->priv;
70 if (vb2_plane_size(vb, 0) < cxdev->width * cxdev->height * 2)
445 static bool cxusb_medion_v_process_auxbuf(struct cxusb_medion_dev *cxdev,
448 struct dvb_usb_device *dvbdev = cxdev->dvbdev;
449 struct cxusb_bt656_params *bt656 = &cxdev->bt656;
456 if (!list_empty(&cxdev->buflist)) {
457 cxdev->vbuf =
458 list_first_entry(&cxdev->buflist,
461 list_del(&cxdev->vbuf->list);
474 if (cxdev->vbuf) {
475 cxdev->vbuf->vb2.vb2_buf.timestamp = ktime_get_ns();
476 bt656->buf = vb2_plane_vaddr(&cxdev->vbuf->vb2.vb2_buf,
482 if (!cxusb_medion_copy_field(dvbdev, &cxdev->auxbuf, bt656,
483 true, cxdev->height / 2,
484 cxdev->width * 2))
499 if (!cxusb_medion_copy_field(dvbdev, &cxdev->auxbuf, bt656,
500 false, cxdev->height / 2,
501 cxdev->width * 2))
504 cxusb_auxbuf_head_trim(dvbdev, &cxdev->auxbuf, bt656->pos);
508 if (cxdev->vbuf) {
509 vb2_set_plane_payload(&cxdev->vbuf->vb2.vb2_buf, 0,
510 cxdev->width * cxdev->height * 2);
512 cxdev->vbuf->vb2.field = cxdev->field_order;
513 cxdev->vbuf->vb2.sequence = cxdev->vbuf_sequence++;
515 vb2_buffer_done(&cxdev->vbuf->vb2.vb2_buf,
518 cxdev->vbuf = NULL;
519 cxdev->bt656.buf = NULL;
524 cxdev->vbuf_sequence++;
531 static bool cxusb_medion_v_complete_handle_urb(struct cxusb_medion_dev *cxdev,
534 struct dvb_usb_device *dvbdev = cxdev->dvbdev;
541 urbn = cxdev->nexturb;
542 if (!test_bit(urbn, &cxdev->urbcomplete))
545 clear_bit(urbn, &cxdev->urbcomplete);
548 cxdev->nexturb++;
549 cxdev->nexturb %= CXUSB_VIDEO_URBS;
550 urb = cxdev->streamurbs[cxdev->nexturb];
553 urb = cxdev->streamurbs[urbn];
581 &cxdev->auxbuf,
595 return test_bit(cxdev->nexturb, &cxdev->urbcomplete);
600 struct cxusb_medion_dev *cxdev = container_of(work,
603 struct dvb_usb_device *dvbdev = cxdev->dvbdev;
607 mutex_lock(cxdev->videodev->lock);
610 (int)cxdev->stop_streaming);
612 if (cxdev->stop_streaming)
615 reschedule = cxusb_medion_v_complete_handle_urb(cxdev, &auxbuf_reset);
617 if (cxusb_medion_v_process_auxbuf(cxdev, auxbuf_reset))
623 schedule_work(&cxdev->urbwork);
627 mutex_unlock(cxdev->videodev->lock);
633 struct cxusb_medion_dev *cxdev = dvbdev->priv;
637 if (cxdev->streamurbs[i] == u)
648 set_bit(i, &cxdev->urbcomplete);
649 schedule_work(&cxdev->urbwork);
652 static void cxusb_medion_urbs_free(struct cxusb_medion_dev *cxdev)
657 if (cxdev->streamurbs[i]) {
658 kfree(cxdev->streamurbs[i]->transfer_buffer);
659 usb_free_urb(cxdev->streamurbs[i]);
660 cxdev->streamurbs[i] = NULL;
664 static void cxusb_medion_return_buffers(struct cxusb_medion_dev *cxdev,
669 list_for_each_entry_safe(vbuf, vbuf_tmp, &cxdev->buflist,
677 if (cxdev->vbuf) {
678 vb2_buffer_done(&cxdev->vbuf->vb2.vb2_buf,
682 cxdev->vbuf = NULL;
683 cxdev->bt656.buf = NULL;
687 static int cxusb_medion_v_ss_auxbuf_alloc(struct cxusb_medion_dev *cxdev,
690 struct dvb_usb_device *dvbdev = cxdev->dvbdev;
694 framelen = (cxdev->width * 2 + 4 + 4) *
695 (cxdev->height + 50 /* VBI lines */);
710 *npackets, urblen, (unsigned int)cxdev->width,
711 (unsigned int)cxdev->height, framelen);
719 cxusb_auxbuf_init(dvbdev, &cxdev->auxbuf, buf, auxbuflen);
741 static u32 cxusb_medion_field_order(struct cxusb_medion_dev *cxdev)
743 struct dvb_usb_device *dvbdev = cxdev->dvbdev;
749 if (cxdev->input == 0)
752 field = cxusb_medion_norm2field_order(cxdev->norm);
756 ret = v4l2_subdev_call(cxdev->cx25840, video, g_std, &norm);
760 (unsigned int)cxdev->input);
776 struct cxusb_medion_dev *cxdev = dvbdev->priv;
783 if (cxdev->stop_streaming) {
789 cxdev->field_order = cxusb_medion_field_order(cxdev);
791 ret = v4l2_subdev_call(cxdev->cx25840, video, s_stream, 1);
806 ret = cxusb_medion_v_ss_auxbuf_alloc(cxdev, &npackets);
837 cxdev->streamurbs[i] = surb;
860 cxdev->urbcomplete = 0;
861 cxdev->nexturb = 0;
862 cxdev->vbuf_sequence = 0;
864 cxdev->vbuf = NULL;
865 cxdev->bt656.mode = NEW_FRAME;
866 cxdev->bt656.buf = NULL;
869 if (cxdev->streamurbs[i]) {
870 ret = usb_submit_urb(cxdev->streamurbs[i],
881 cxusb_medion_urbs_free(cxdev);
884 vfree(cxdev->auxbuf.buf);
890 v4l2_subdev_call(cxdev->cx25840, video, s_stream, 0);
893 cxusb_medion_return_buffers(cxdev, true);
901 struct cxusb_medion_dev *cxdev = dvbdev->priv;
907 if (WARN_ON(cxdev->stop_streaming))
910 cxdev->stop_streaming = true;
914 ret = v4l2_subdev_call(cxdev->cx25840, video, s_stream, 0);
920 mutex_unlock(cxdev->videodev->lock);
923 if (cxdev->streamurbs[i])
924 usb_kill_urb(cxdev->streamurbs[i]);
926 flush_work(&cxdev->urbwork);
928 mutex_lock(cxdev->videodev->lock);
931 vfree(cxdev->auxbuf.buf);
933 cxusb_medion_urbs_free(cxdev);
935 cxusb_medion_return_buffers(cxdev, false);
937 cxdev->stop_streaming = false;
946 struct cxusb_medion_dev *cxdev = dvbdev->priv;
950 list_add_tail(&vbuf->list, &cxdev->buflist);
997 struct cxusb_medion_dev *cxdev = dvbdev->priv;
999 f->fmt.pix.width = cxdev->width;
1000 f->fmt.pix.height = cxdev->height;
1002 f->fmt.pix.field = vb2_start_streaming_called(&cxdev->videoqueue) ?
1003 cxdev->field_order : cxusb_medion_field_order(cxdev);
1004 f->fmt.pix.bytesperline = cxdev->width * 2;
1016 struct cxusb_medion_dev *cxdev = dvbdev->priv;
1024 if (isset && vb2_is_busy(&cxdev->videoqueue))
1027 field = vb2_start_streaming_called(&cxdev->videoqueue) ?
1028 cxdev->field_order : cxusb_medion_field_order(cxdev);
1036 ret = v4l2_subdev_call(cxdev->cx25840, pad, set_fmt, NULL, &subfmt);
1049 cxdev->width = f->fmt.pix.width;
1050 cxdev->height = f->fmt.pix.height;
1091 struct cxusb_medion_dev *cxdev = dvbdev->priv;
1101 if (index == cxdev->input) {
1105 ret = v4l2_subdev_call(cxdev->cx25840, video, g_input_status,
1122 struct cxusb_medion_dev *cxdev = dvbdev->priv;
1124 *i = cxdev->input;
1129 static int cxusb_medion_set_norm(struct cxusb_medion_dev *cxdev,
1132 struct dvb_usb_device *dvbdev = cxdev->dvbdev;
1137 (unsigned int)cxdev->input,
1145 if (cxdev->input != 0) {
1146 ret = v4l2_subdev_call(cxdev->cx25840, video, s_std, norm);
1157 ret = v4l2_subdev_call(cxdev->tda9887, video, s_std, norm);
1165 ret = v4l2_subdev_call(cxdev->tuner, video, s_std, norm);
1173 ret = v4l2_subdev_call(cxdev->cx25840, video, s_std, norm);
1182 cxdev->norm = norm;
1191 struct cxusb_medion_dev *cxdev = dvbdev->priv;
1198 ret = v4l2_subdev_call(cxdev->cx25840, video, s_routing,
1203 cxdev->input = i;
1204 cxdev->videodev->tvnorms = cxusb_medion_inputs[i].input.std;
1206 norm = cxdev->norm & cxusb_medion_inputs[i].input.std;
1210 cxusb_medion_set_norm(cxdev, norm);
1219 struct cxusb_medion_dev *cxdev = dvbdev->priv;
1239 ret = v4l2_subdev_call(cxdev->tda9887, tuner, g_tuner, tuner);
1249 ret = v4l2_subdev_call(cxdev->tuner, tuner, g_tuner, tuner);
1258 ret = v4l2_subdev_call(cxdev->cx25840, tuner, g_tuner, tuner);
1276 struct cxusb_medion_dev *cxdev = dvbdev->priv;
1283 ret = v4l2_subdev_call(cxdev->tda9887, tuner, s_tuner, tuner);
1287 ret = v4l2_subdev_call(cxdev->tuner, tuner, s_tuner, tuner);
1296 v4l2_subdev_call(cxdev->cx25840, video, s_std, cxdev->norm);
1298 v4l2_subdev_call(cxdev->cx25840, tuner, s_radio);
1300 return v4l2_subdev_call(cxdev->cx25840, tuner, s_tuner, tuner);
1307 struct cxusb_medion_dev *cxdev = dvbdev->priv;
1312 return v4l2_subdev_call(cxdev->tuner, tuner, g_frequency, freq);
1319 struct cxusb_medion_dev *cxdev = dvbdev->priv;
1326 ret = v4l2_subdev_call(cxdev->tda9887, tuner, s_frequency, freq);
1330 ret = v4l2_subdev_call(cxdev->tuner, tuner, s_frequency, freq);
1339 v4l2_subdev_call(cxdev->cx25840, video, s_std, cxdev->norm);
1341 v4l2_subdev_call(cxdev->cx25840, tuner, s_radio);
1343 return v4l2_subdev_call(cxdev->cx25840, tuner, s_frequency, freq);
1350 struct cxusb_medion_dev *cxdev = dvbdev->priv;
1352 *norm = cxdev->norm;
1364 struct cxusb_medion_dev *cxdev = dvbdev->priv;
1366 return cxusb_medion_set_norm(cxdev, norm);
1373 struct cxusb_medion_dev *cxdev = dvbdev->priv;
1381 if (cxdev->input == 0)
1386 ret = v4l2_subdev_call(cxdev->cx25840, video, querystd, norm);
1390 (unsigned int)cxdev->input);
1395 (unsigned int)cxdev->input, (unsigned long)*norm);
1404 struct cxusb_medion_dev *cxdev = dvbdev->priv;
1406 v4l2_device_call_all(&cxdev->v4l2dev, 0, core, log_status);
1461 struct cxusb_medion_dev *cxdev = dvbdev->priv;
1482 ret = v4l2_subdev_call(cxdev->cx25840, core, reset, 0);
1487 ret = v4l2_subdev_call(cxdev->cx25840, video, s_routing,
1494 cxdev->input = 1;
1495 cxdev->videodev->tvnorms = V4L2_STD_ALL;
1496 cxdev->norm = V4L2_STD_PAL;
1500 ret = v4l2_subdev_call(cxdev->cx25840, core, s_io_pin_config,
1508 v4l2_subdev_call(cxdev->tda9887, video, s_std, cxdev->norm);
1509 v4l2_subdev_call(cxdev->tuner, video, s_std, cxdev->norm);
1510 v4l2_subdev_call(cxdev->cx25840, video, s_std, cxdev->norm);
1512 subfmt.format.width = cxdev->width;
1513 subfmt.format.height = cxdev->height;
1518 ret = v4l2_subdev_call(cxdev->cx25840, pad, set_fmt, NULL, &subfmt);
1524 cxdev->width = subfmt.format.width;
1525 cxdev->height = subfmt.format.height;
1596 struct cxusb_medion_dev *cxdev =
1598 struct dvb_usb_device *dvbdev = cxdev->dvbdev;
1602 v4l2_device_unregister(&cxdev->v4l2dev);
1604 mutex_destroy(&cxdev->dev_lock);
1606 while (completion_done(&cxdev->v4l2_release))
1609 complete(&cxdev->v4l2_release);
1623 struct cxusb_medion_dev *cxdev = dvbdev->priv;
1626 cxdev->videoqueue.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1627 cxdev->videoqueue.io_modes = VB2_MMAP | VB2_USERPTR | VB2_READ |
1629 cxdev->videoqueue.ops = &cxdev_video_qops;
1630 cxdev->videoqueue.mem_ops = &vb2_vmalloc_memops;
1631 cxdev->videoqueue.drv_priv = dvbdev;
1632 cxdev->videoqueue.buf_struct_size =
1634 cxdev->videoqueue.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1635 cxdev->videoqueue.min_buffers_needed = 6;
1636 cxdev->videoqueue.lock = &cxdev->dev_lock;
1638 ret = vb2_queue_init(&cxdev->videoqueue);
1645 cxdev->videodev = video_device_alloc();
1646 if (!cxdev->videodev) {
1651 cxdev->videodev->device_caps = videocaps;
1652 cxdev->videodev->fops = &cxusb_video_fops;
1653 cxdev->videodev->v4l2_dev = &cxdev->v4l2dev;
1654 cxdev->videodev->queue = &cxdev->videoqueue;
1655 strscpy(cxdev->videodev->name, "cxusb", sizeof(cxdev->videodev->name));
1656 cxdev->videodev->vfl_dir = VFL_DIR_RX;
1657 cxdev->videodev->ioctl_ops = &cxusb_video_ioctl;
1658 cxdev->videodev->tvnorms = V4L2_STD_ALL;
1659 cxdev->videodev->release = cxusb_medion_videodev_release;
1660 cxdev->videodev->lock = &cxdev->dev_lock;
1661 video_set_drvdata(cxdev->videodev, dvbdev);
1663 ret = video_register_device(cxdev->videodev, VFL_TYPE_VIDEO, -1);
1673 video_device_release(cxdev->videodev);
1679 struct cxusb_medion_dev *cxdev = dvbdev->priv;
1682 cxdev->radiodev = video_device_alloc();
1683 if (!cxdev->radiodev) {
1688 cxdev->radiodev->device_caps = radiocaps;
1689 cxdev->radiodev->fops = &cxusb_radio_fops;
1690 cxdev->radiodev->v4l2_dev = &cxdev->v4l2dev;
1691 strscpy(cxdev->radiodev->name, "cxusb", sizeof(cxdev->radiodev->name));
1692 cxdev->radiodev->vfl_dir = VFL_DIR_RX;
1693 cxdev->radiodev->ioctl_ops = &cxusb_radio_ioctl;
1694 cxdev->radiodev->release = video_device_release;
1695 cxdev->radiodev->lock = &cxdev->dev_lock;
1696 video_set_drvdata(cxdev->radiodev, dvbdev);
1698 ret = video_register_device(cxdev->radiodev, VFL_TYPE_RADIO, -1);
1702 video_device_release(cxdev->radiodev);
1711 struct cxusb_medion_dev *cxdev = dvbdev->priv;
1716 cxdev->cx25840 = v4l2_i2c_new_subdev(&cxdev->v4l2dev,
1719 if (!cxdev->cx25840) {
1732 ret = v4l2_subdev_call(cxdev->cx25840, core, init,
1749 cxdev->tuner = v4l2_i2c_new_subdev(&cxdev->v4l2dev,
1752 if (!cxdev->tuner) {
1762 v4l2_subdev_call(cxdev->tuner, tuner, s_type_addr, &tun_setup);
1765 cxdev->tda9887 = v4l2_i2c_new_subdev(&cxdev->v4l2dev,
1768 if (!cxdev->tda9887) {
1778 struct cxusb_medion_dev *cxdev = dvbdev->priv;
1781 mutex_init(&cxdev->dev_lock);
1783 init_completion(&cxdev->v4l2_release);
1785 cxdev->v4l2dev.release = cxusb_medion_v4l2_release;
1787 ret = v4l2_device_register(&dvbdev->udev->dev, &cxdev->v4l2dev);
1791 mutex_destroy(&cxdev->dev_lock);
1799 INIT_WORK(&cxdev->urbwork, cxusb_medion_v_complete_work);
1800 INIT_LIST_HEAD(&cxdev->buflist);
1802 cxdev->width = 320;
1803 cxdev->height = 240;
1816 vb2_video_unregister_device(cxdev->videodev);
1819 v4l2_device_put(&cxdev->v4l2dev);
1820 wait_for_completion(&cxdev->v4l2_release);
1827 struct cxusb_medion_dev *cxdev = dvbdev->priv;
1831 video_unregister_device(cxdev->radiodev);
1832 vb2_video_unregister_device(cxdev->videodev);
1834 v4l2_device_put(&cxdev->v4l2dev);
1835 wait_for_completion(&cxdev->v4l2_release);