Lines Matching +full:sdtv +full:- +full:standards
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Hauppauge HD PVR USB driver - video 4 linux 2 interface
19 #include <linux/v4l2-dv-timings.h>
20 #include <media/v4l2-dev.h>
21 #include <media/v4l2-common.h>
22 #include <media/v4l2-dv-timings.h>
23 #include <media/v4l2-ioctl.h>
24 #include <media/v4l2-event.h>
30 v4l2_dbg(MSG_BUFFER, hdpvr_debug, &dev->v4l2_dev, \
33 list_size(&dev->free_buff_list), \
34 list_size(&dev->rec_buff_list)); }
71 struct hdpvr_buffer *buf = (struct hdpvr_buffer *)urb->context; in hdpvr_read_bulk_callback()
72 struct hdpvr_device *dev = buf->dev; in hdpvr_read_bulk_callback()
75 buf->status = BUFSTAT_READY; in hdpvr_read_bulk_callback()
76 wake_up_interruptible(&dev->wait_data); in hdpvr_read_bulk_callback()
82 /* function expects dev->io_mutex to be hold by caller */
87 list_for_each_entry(buf, &dev->rec_buff_list, buff_list) { in hdpvr_cancel_queue()
88 usb_kill_urb(buf->urb); in hdpvr_cancel_queue()
89 buf->status = BUFSTAT_AVAILABLE; in hdpvr_cancel_queue()
92 list_splice_init(&dev->rec_buff_list, dev->free_buff_list.prev); in hdpvr_cancel_queue()
104 for (p = q->next; p != q;) { in hdpvr_free_queue()
107 urb = buf->urb; in hdpvr_free_queue()
108 usb_free_coherent(urb->dev, urb->transfer_buffer_length, in hdpvr_free_queue()
109 urb->transfer_buffer, urb->transfer_dma); in hdpvr_free_queue()
111 tmp = p->next; in hdpvr_free_queue()
120 /* function expects dev->io_mutex to be hold by caller */
125 hdpvr_free_queue(&dev->free_buff_list); in hdpvr_free_buffers()
126 hdpvr_free_queue(&dev->rec_buff_list); in hdpvr_free_buffers()
131 /* function expects dev->io_mutex to be hold by caller */
135 int retval = -ENOMEM; in hdpvr_alloc_buffers()
140 v4l2_dbg(MSG_INFO, hdpvr_debug, &dev->v4l2_dev, in hdpvr_alloc_buffers()
147 v4l2_err(&dev->v4l2_dev, "cannot allocate buffer\n"); in hdpvr_alloc_buffers()
150 buf->dev = dev; in hdpvr_alloc_buffers()
155 buf->urb = urb; in hdpvr_alloc_buffers()
157 mem = usb_alloc_coherent(dev->udev, dev->bulk_in_size, GFP_KERNEL, in hdpvr_alloc_buffers()
158 &urb->transfer_dma); in hdpvr_alloc_buffers()
160 v4l2_err(&dev->v4l2_dev, in hdpvr_alloc_buffers()
165 usb_fill_bulk_urb(buf->urb, dev->udev, in hdpvr_alloc_buffers()
166 usb_rcvbulkpipe(dev->udev, in hdpvr_alloc_buffers()
167 dev->bulk_in_endpointAddr), in hdpvr_alloc_buffers()
168 mem, dev->bulk_in_size, in hdpvr_alloc_buffers()
171 buf->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in hdpvr_alloc_buffers()
172 buf->status = BUFSTAT_AVAILABLE; in hdpvr_alloc_buffers()
173 list_add_tail(&buf->buff_list, &dev->free_buff_list); in hdpvr_alloc_buffers()
191 mutex_lock(&dev->io_mutex); in hdpvr_submit_buffers()
193 while (dev->status == STATUS_STREAMING && in hdpvr_submit_buffers()
194 !list_empty(&dev->free_buff_list)) { in hdpvr_submit_buffers()
196 buf = list_entry(dev->free_buff_list.next, struct hdpvr_buffer, in hdpvr_submit_buffers()
198 if (buf->status != BUFSTAT_AVAILABLE) { in hdpvr_submit_buffers()
199 v4l2_err(&dev->v4l2_dev, in hdpvr_submit_buffers()
201 ret = -EFAULT; in hdpvr_submit_buffers()
205 urb = buf->urb; in hdpvr_submit_buffers()
206 urb->status = 0; in hdpvr_submit_buffers()
207 urb->actual_length = 0; in hdpvr_submit_buffers()
210 v4l2_err(&dev->v4l2_dev, in hdpvr_submit_buffers()
217 buf->status = BUFSTAT_INPROGRESS; in hdpvr_submit_buffers()
218 list_move_tail(&buf->buff_list, &dev->rec_buff_list); in hdpvr_submit_buffers()
222 mutex_unlock(&dev->io_mutex); in hdpvr_submit_buffers()
230 mutex_lock(&dev->io_mutex); in hdpvr_get_next_buffer()
232 if (list_empty(&dev->rec_buff_list)) { in hdpvr_get_next_buffer()
233 mutex_unlock(&dev->io_mutex); in hdpvr_get_next_buffer()
237 buf = list_entry(dev->rec_buff_list.next, struct hdpvr_buffer, in hdpvr_get_next_buffer()
239 mutex_unlock(&dev->io_mutex); in hdpvr_get_next_buffer()
249 while (dev->status == STATUS_STREAMING) { in hdpvr_transmit_buffers()
252 v4l2_err(&dev->v4l2_dev, "couldn't submit buffers\n"); in hdpvr_transmit_buffers()
255 if (wait_event_interruptible(dev->wait_buffer, in hdpvr_transmit_buffers()
256 !list_empty(&dev->free_buff_list) || in hdpvr_transmit_buffers()
257 dev->status != STATUS_STREAMING)) in hdpvr_transmit_buffers()
261 v4l2_dbg(MSG_INFO, hdpvr_debug, &dev->v4l2_dev, in hdpvr_transmit_buffers()
265 v4l2_dbg(MSG_INFO, hdpvr_debug, &dev->v4l2_dev, in hdpvr_transmit_buffers()
267 dev->status = STATUS_ERROR; in hdpvr_transmit_buffers()
270 /* function expects dev->io_mutex to be hold by caller */
276 if (dev->status == STATUS_STREAMING) in hdpvr_start_streaming()
278 if (dev->status != STATUS_IDLE) in hdpvr_start_streaming()
279 return -EAGAIN; in hdpvr_start_streaming()
287 v4l2_dbg(MSG_INFO, hdpvr_debug, &dev->v4l2_dev, in hdpvr_start_streaming()
288 "no video signal at input %d\n", dev->options.video_input); in hdpvr_start_streaming()
289 return -EAGAIN; in hdpvr_start_streaming()
292 v4l2_dbg(MSG_BUFFER, hdpvr_debug, &dev->v4l2_dev, in hdpvr_start_streaming()
297 ret = usb_control_msg(dev->udev, in hdpvr_start_streaming()
298 usb_sndctrlpipe(dev->udev, 0), in hdpvr_start_streaming()
300 v4l2_dbg(MSG_BUFFER, hdpvr_debug, &dev->v4l2_dev, in hdpvr_start_streaming()
309 dev->status = STATUS_STREAMING; in hdpvr_start_streaming()
311 INIT_WORK(&dev->worker, hdpvr_transmit_buffers); in hdpvr_start_streaming()
312 schedule_work(&dev->worker); in hdpvr_start_streaming()
314 v4l2_dbg(MSG_BUFFER, hdpvr_debug, &dev->v4l2_dev, in hdpvr_start_streaming()
321 /* function expects dev->io_mutex to be hold by caller */
328 if (dev->status == STATUS_IDLE) in hdpvr_stop_streaming()
330 else if (dev->status != STATUS_STREAMING) in hdpvr_stop_streaming()
331 return -EAGAIN; in hdpvr_stop_streaming()
333 buf = kmalloc(dev->bulk_in_size, GFP_KERNEL); in hdpvr_stop_streaming()
335 …v4l2_err(&dev->v4l2_dev, "failed to allocate temporary buffer for emptying the internal device buf… in hdpvr_stop_streaming()
337 dev->status = STATUS_SHUTTING_DOWN; in hdpvr_stop_streaming()
339 mutex_unlock(&dev->io_mutex); in hdpvr_stop_streaming()
341 wake_up_interruptible(&dev->wait_buffer); in hdpvr_stop_streaming()
344 flush_work(&dev->worker); in hdpvr_stop_streaming()
346 mutex_lock(&dev->io_mutex); in hdpvr_stop_streaming()
352 !usb_bulk_msg(dev->udev, in hdpvr_stop_streaming()
353 usb_rcvbulkpipe(dev->udev, in hdpvr_stop_streaming()
354 dev->bulk_in_endpointAddr), in hdpvr_stop_streaming()
355 buf, dev->bulk_in_size, &actual_length, in hdpvr_stop_streaming()
357 v4l2_dbg(MSG_BUFFER, hdpvr_debug, &dev->v4l2_dev, in hdpvr_stop_streaming()
361 v4l2_dbg(MSG_BUFFER, hdpvr_debug, &dev->v4l2_dev, in hdpvr_stop_streaming()
362 "used %d urbs to empty device buffers\n", c-1); in hdpvr_stop_streaming()
365 dev->status = STATUS_IDLE; in hdpvr_stop_streaming()
381 return -ENOMEM; in hdpvr_open()
382 fh->legacy_mode = true; in hdpvr_open()
383 v4l2_fh_init(&fh->fh, video_devdata(file)); in hdpvr_open()
384 v4l2_fh_add(&fh->fh); in hdpvr_open()
385 file->private_data = fh; in hdpvr_open()
393 mutex_lock(&dev->io_mutex); in hdpvr_release()
394 if (file->private_data == dev->owner) { in hdpvr_release()
396 dev->owner = NULL; in hdpvr_release()
398 mutex_unlock(&dev->io_mutex); in hdpvr_release()
417 return -ESPIPE; in hdpvr_read()
419 mutex_lock(&dev->io_mutex); in hdpvr_read()
420 if (dev->status == STATUS_IDLE) { in hdpvr_read()
422 v4l2_dbg(MSG_INFO, hdpvr_debug, &dev->v4l2_dev, in hdpvr_read()
424 ret = -EIO; in hdpvr_read()
426 dev->status = STATUS_IDLE; in hdpvr_read()
427 mutex_unlock(&dev->io_mutex); in hdpvr_read()
430 dev->owner = file->private_data; in hdpvr_read()
433 mutex_unlock(&dev->io_mutex); in hdpvr_read()
436 if (!(file->f_flags & O_NONBLOCK)) { in hdpvr_read()
437 if (wait_event_interruptible(dev->wait_data, in hdpvr_read()
438 !list_empty_careful(&dev->rec_buff_list))) in hdpvr_read()
439 return -ERESTARTSYS; in hdpvr_read()
446 if (buf->status != BUFSTAT_READY && in hdpvr_read()
447 dev->status != STATUS_DISCONNECTED) { in hdpvr_read()
450 if (file->f_flags & O_NONBLOCK) { in hdpvr_read()
452 ret = -EAGAIN; in hdpvr_read()
456 err = wait_event_interruptible_timeout(dev->wait_data, in hdpvr_read()
457 buf->status == BUFSTAT_READY, in hdpvr_read()
464 v4l2_info(&dev->v4l2_dev, in hdpvr_read()
466 mutex_lock(&dev->io_mutex); in hdpvr_read()
468 mutex_unlock(&dev->io_mutex); in hdpvr_read()
483 if (buf->status != BUFSTAT_READY) in hdpvr_read()
487 urb = buf->urb; in hdpvr_read()
488 rem = urb->actual_length - buf->pos; in hdpvr_read()
491 if (copy_to_user(buffer, urb->transfer_buffer + buf->pos, in hdpvr_read()
493 v4l2_err(&dev->v4l2_dev, "read: copy_to_user failed\n"); in hdpvr_read()
495 ret = -EFAULT; in hdpvr_read()
499 buf->pos += cnt; in hdpvr_read()
500 count -= cnt; in hdpvr_read()
505 if (buf->pos == urb->actual_length) { in hdpvr_read()
506 mutex_lock(&dev->io_mutex); in hdpvr_read()
507 buf->pos = 0; in hdpvr_read()
508 buf->status = BUFSTAT_AVAILABLE; in hdpvr_read()
510 list_move_tail(&buf->buff_list, &dev->free_buff_list); in hdpvr_read()
514 mutex_unlock(&dev->io_mutex); in hdpvr_read()
516 wake_up_interruptible(&dev->wait_buffer); in hdpvr_read()
523 ret = -EAGAIN; in hdpvr_read()
537 mutex_lock(&dev->io_mutex); in hdpvr_poll()
539 if (dev->status == STATUS_IDLE) { in hdpvr_poll()
541 v4l2_dbg(MSG_BUFFER, hdpvr_debug, &dev->v4l2_dev, in hdpvr_poll()
543 dev->status = STATUS_IDLE; in hdpvr_poll()
545 dev->owner = filp->private_data; in hdpvr_poll()
550 mutex_unlock(&dev->io_mutex); in hdpvr_poll()
554 if (!buf || buf->status != BUFSTAT_READY) { in hdpvr_poll()
555 poll_wait(filp, &dev->wait_data, wait); in hdpvr_poll()
558 if (buf && buf->status == BUFSTAT_READY) in hdpvr_poll()
584 strscpy(cap->driver, "hdpvr", sizeof(cap->driver)); in vidioc_querycap()
585 strscpy(cap->card, "Hauppauge HD PVR", sizeof(cap->card)); in vidioc_querycap()
586 usb_make_path(dev->udev, cap->bus_info, sizeof(cap->bus_info)); in vidioc_querycap()
597 if (!fh->legacy_mode && dev->options.video_input == HDPVR_COMPONENT) in vidioc_s_std()
598 return -ENODATA; in vidioc_s_std()
599 if (dev->status != STATUS_IDLE) in vidioc_s_std()
600 return -EBUSY; in vidioc_s_std()
603 dev->cur_std = std; in vidioc_s_std()
604 dev->width = 720; in vidioc_s_std()
605 dev->height = std_type ? 576 : 480; in vidioc_s_std()
616 if (!fh->legacy_mode && dev->options.video_input == HDPVR_COMPONENT) in vidioc_g_std()
617 return -ENODATA; in vidioc_g_std()
618 *std = dev->cur_std; in vidioc_g_std()
630 if (dev->options.video_input == HDPVR_COMPONENT) in vidioc_querystd()
631 return fh->legacy_mode ? 0 : -ENODATA; in vidioc_querystd()
648 fh->legacy_mode = false; in vidioc_s_dv_timings()
649 if (dev->options.video_input) in vidioc_s_dv_timings()
650 return -ENODATA; in vidioc_s_dv_timings()
651 if (dev->status != STATUS_IDLE) in vidioc_s_dv_timings()
652 return -EBUSY; in vidioc_s_dv_timings()
657 return -EINVAL; in vidioc_s_dv_timings()
658 dev->cur_dv_timings = hdpvr_dv_timings[i]; in vidioc_s_dv_timings()
659 dev->width = hdpvr_dv_timings[i].bt.width; in vidioc_s_dv_timings()
660 dev->height = hdpvr_dv_timings[i].bt.height; in vidioc_s_dv_timings()
670 fh->legacy_mode = false; in vidioc_g_dv_timings()
671 if (dev->options.video_input) in vidioc_g_dv_timings()
672 return -ENODATA; in vidioc_g_dv_timings()
673 *timings = dev->cur_dv_timings; in vidioc_g_dv_timings()
687 fh->legacy_mode = false; in vidioc_query_dv_timings()
688 if (dev->options.video_input) in vidioc_query_dv_timings()
689 return -ENODATA; in vidioc_query_dv_timings()
694 return -ENOLCK; in vidioc_query_dv_timings()
704 fps = (unsigned)bt->pixelclock / (hsize * vsize); in vidioc_query_dv_timings()
705 if (bt->width != vid_info.width || in vidioc_query_dv_timings()
706 bt->height != vid_info.height || in vidioc_query_dv_timings()
707 bt->interlaced != interlaced || in vidioc_query_dv_timings()
714 ret = -ERANGE; in vidioc_query_dv_timings()
725 fh->legacy_mode = false; in vidioc_enum_dv_timings()
726 memset(timings->reserved, 0, sizeof(timings->reserved)); in vidioc_enum_dv_timings()
727 if (dev->options.video_input) in vidioc_enum_dv_timings()
728 return -ENODATA; in vidioc_enum_dv_timings()
729 if (timings->index >= ARRAY_SIZE(hdpvr_dv_timings)) in vidioc_enum_dv_timings()
730 return -EINVAL; in vidioc_enum_dv_timings()
731 timings->timings = hdpvr_dv_timings[timings->index]; in vidioc_enum_dv_timings()
741 fh->legacy_mode = false; in vidioc_dv_timings_cap()
742 if (dev->options.video_input) in vidioc_dv_timings_cap()
743 return -ENODATA; in vidioc_dv_timings_cap()
744 cap->type = V4L2_DV_BT_656_1120; in vidioc_dv_timings_cap()
745 cap->bt.min_width = 720; in vidioc_dv_timings_cap()
746 cap->bt.max_width = 1920; in vidioc_dv_timings_cap()
747 cap->bt.min_height = 480; in vidioc_dv_timings_cap()
748 cap->bt.max_height = 1080; in vidioc_dv_timings_cap()
749 cap->bt.min_pixelclock = 27000000; in vidioc_dv_timings_cap()
750 cap->bt.max_pixelclock = 74250000; in vidioc_dv_timings_cap()
751 cap->bt.standards = V4L2_DV_BT_STD_CEA861; in vidioc_dv_timings_cap()
752 cap->bt.capabilities = V4L2_DV_BT_CAP_INTERLACED | V4L2_DV_BT_CAP_PROGRESSIVE; in vidioc_dv_timings_cap()
758 [HDPVR_SVIDEO] = "S-Video",
766 n = i->index; in vidioc_enum_input()
768 return -EINVAL; in vidioc_enum_input()
770 i->type = V4L2_INPUT_TYPE_CAMERA; in vidioc_enum_input()
772 strscpy(i->name, iname[n], sizeof(i->name)); in vidioc_enum_input()
774 i->audioset = 1<<HDPVR_RCA_FRONT | 1<<HDPVR_RCA_BACK | 1<<HDPVR_SPDIF; in vidioc_enum_input()
776 i->capabilities = n ? V4L2_IN_CAP_STD : V4L2_IN_CAP_DV_TIMINGS; in vidioc_enum_input()
777 i->std = n ? V4L2_STD_ALL : 0; in vidioc_enum_input()
789 return -EINVAL; in vidioc_s_input()
791 if (dev->status != STATUS_IDLE) in vidioc_s_input()
792 return -EBUSY; in vidioc_s_input()
796 dev->options.video_input = index; in vidioc_s_input()
808 dev->video_dev.tvnorms = in vidioc_s_input()
821 *index = dev->options.video_input; in vidioc_g_input()
837 n = audio->index; in vidioc_enumaudio()
839 return -EINVAL; in vidioc_enumaudio()
841 audio->capability = V4L2_AUDCAP_STEREO; in vidioc_enumaudio()
843 strscpy(audio->name, audio_iname[n], sizeof(audio->name)); in vidioc_enumaudio()
854 if (audio->index >= HDPVR_AUDIO_INPUTS) in vidioc_s_audio()
855 return -EINVAL; in vidioc_s_audio()
857 if (dev->status != STATUS_IDLE) in vidioc_s_audio()
858 return -EBUSY; in vidioc_s_audio()
860 retval = hdpvr_set_audio(dev, audio->index+1, dev->options.audio_codec); in vidioc_s_audio()
862 dev->options.audio_input = audio->index; in vidioc_s_audio()
872 audio->index = dev->options.audio_input; in vidioc_g_audio()
873 audio->capability = V4L2_AUDCAP_STEREO; in vidioc_g_audio()
874 strscpy(audio->name, audio_iname[audio->index], sizeof(audio->name)); in vidioc_g_audio()
881 container_of(ctrl->handler, struct hdpvr_device, hdl); in hdpvr_try_ctrl()
883 switch (ctrl->id) { in hdpvr_try_ctrl()
885 if (ctrl->val == V4L2_MPEG_VIDEO_BITRATE_MODE_VBR && in hdpvr_try_ctrl()
886 dev->video_bitrate->val >= dev->video_bitrate_peak->val) in hdpvr_try_ctrl()
887 dev->video_bitrate_peak->val = in hdpvr_try_ctrl()
888 dev->video_bitrate->val + 100000; in hdpvr_try_ctrl()
897 container_of(ctrl->handler, struct hdpvr_device, hdl); in hdpvr_s_ctrl()
898 struct hdpvr_options *opt = &dev->options; in hdpvr_s_ctrl()
899 int ret = -EINVAL; in hdpvr_s_ctrl()
901 switch (ctrl->id) { in hdpvr_s_ctrl()
903 ret = hdpvr_config_call(dev, CTRL_BRIGHTNESS, ctrl->val); in hdpvr_s_ctrl()
906 dev->options.brightness = ctrl->val; in hdpvr_s_ctrl()
909 ret = hdpvr_config_call(dev, CTRL_CONTRAST, ctrl->val); in hdpvr_s_ctrl()
912 dev->options.contrast = ctrl->val; in hdpvr_s_ctrl()
915 ret = hdpvr_config_call(dev, CTRL_SATURATION, ctrl->val); in hdpvr_s_ctrl()
918 dev->options.saturation = ctrl->val; in hdpvr_s_ctrl()
921 ret = hdpvr_config_call(dev, CTRL_HUE, ctrl->val); in hdpvr_s_ctrl()
924 dev->options.hue = ctrl->val; in hdpvr_s_ctrl()
927 ret = hdpvr_config_call(dev, CTRL_SHARPNESS, ctrl->val); in hdpvr_s_ctrl()
930 dev->options.sharpness = ctrl->val; in hdpvr_s_ctrl()
933 if (dev->flags & HDPVR_FLAG_AC3_CAP) { in hdpvr_s_ctrl()
934 opt->audio_codec = ctrl->val; in hdpvr_s_ctrl()
935 return hdpvr_set_audio(dev, opt->audio_input + 1, in hdpvr_s_ctrl()
936 opt->audio_codec); in hdpvr_s_ctrl()
942 /* if (ctrl->value == 0 && !(opt->gop_mode & 0x2)) { */ in hdpvr_s_ctrl()
943 /* opt->gop_mode |= 0x2; */ in hdpvr_s_ctrl()
945 /* opt->gop_mode); */ in hdpvr_s_ctrl()
947 /* if (ctrl->value == 128 && opt->gop_mode & 0x2) { */ in hdpvr_s_ctrl()
948 /* opt->gop_mode &= ~0x2; */ in hdpvr_s_ctrl()
950 /* opt->gop_mode); */ in hdpvr_s_ctrl()
954 uint peak_bitrate = dev->video_bitrate_peak->val / 100000; in hdpvr_s_ctrl()
955 uint bitrate = dev->video_bitrate->val / 100000; in hdpvr_s_ctrl()
957 if (ctrl->is_new) { in hdpvr_s_ctrl()
958 if (ctrl->val == V4L2_MPEG_VIDEO_BITRATE_MODE_CBR) in hdpvr_s_ctrl()
959 opt->bitrate_mode = HDPVR_CONSTANT; in hdpvr_s_ctrl()
961 opt->bitrate_mode = HDPVR_VARIABLE_AVERAGE; in hdpvr_s_ctrl()
963 opt->bitrate_mode); in hdpvr_s_ctrl()
964 v4l2_ctrl_activate(dev->video_bitrate_peak, in hdpvr_s_ctrl()
965 ctrl->val != V4L2_MPEG_VIDEO_BITRATE_MODE_CBR); in hdpvr_s_ctrl()
968 if (dev->video_bitrate_peak->is_new || in hdpvr_s_ctrl()
969 dev->video_bitrate->is_new) { in hdpvr_s_ctrl()
970 opt->bitrate = bitrate; in hdpvr_s_ctrl()
971 opt->peak_bitrate = peak_bitrate; in hdpvr_s_ctrl()
987 if (f->index != 0) in vidioc_enum_fmt_vid_cap()
988 return -EINVAL; in vidioc_enum_fmt_vid_cap()
990 f->pixelformat = V4L2_PIX_FMT_MPEG; in vidioc_enum_fmt_vid_cap()
1012 if (fh->legacy_mode) { in vidioc_g_fmt_vid_cap()
1019 return -EFAULT; in vidioc_g_fmt_vid_cap()
1020 f->fmt.pix.width = vid_info.width; in vidioc_g_fmt_vid_cap()
1021 f->fmt.pix.height = vid_info.height; in vidioc_g_fmt_vid_cap()
1023 f->fmt.pix.width = dev->width; in vidioc_g_fmt_vid_cap()
1024 f->fmt.pix.height = dev->height; in vidioc_g_fmt_vid_cap()
1026 f->fmt.pix.pixelformat = V4L2_PIX_FMT_MPEG; in vidioc_g_fmt_vid_cap()
1027 f->fmt.pix.sizeimage = dev->bulk_in_size; in vidioc_g_fmt_vid_cap()
1028 f->fmt.pix.bytesperline = 0; in vidioc_g_fmt_vid_cap()
1029 if (f->fmt.pix.width == 720) { in vidioc_g_fmt_vid_cap()
1030 /* SDTV formats */ in vidioc_g_fmt_vid_cap()
1031 f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M; in vidioc_g_fmt_vid_cap()
1032 f->fmt.pix.field = V4L2_FIELD_INTERLACED; in vidioc_g_fmt_vid_cap()
1035 f->fmt.pix.colorspace = V4L2_COLORSPACE_REC709; in vidioc_g_fmt_vid_cap()
1036 f->fmt.pix.field = V4L2_FIELD_NONE; in vidioc_g_fmt_vid_cap()
1047 mutex_lock(&dev->io_mutex); in vidioc_encoder_cmd()
1048 a->flags = 0; in vidioc_encoder_cmd()
1050 switch (a->cmd) { in vidioc_encoder_cmd()
1052 if (dev->owner && filp->private_data != dev->owner) { in vidioc_encoder_cmd()
1053 res = -EBUSY; in vidioc_encoder_cmd()
1056 if (dev->status == STATUS_STREAMING) in vidioc_encoder_cmd()
1060 dev->owner = filp->private_data; in vidioc_encoder_cmd()
1062 dev->status = STATUS_IDLE; in vidioc_encoder_cmd()
1065 if (dev->owner && filp->private_data != dev->owner) { in vidioc_encoder_cmd()
1066 res = -EBUSY; in vidioc_encoder_cmd()
1069 if (dev->status == STATUS_IDLE) in vidioc_encoder_cmd()
1073 dev->owner = NULL; in vidioc_encoder_cmd()
1076 v4l2_dbg(MSG_INFO, hdpvr_debug, &dev->v4l2_dev, in vidioc_encoder_cmd()
1077 "Unsupported encoder cmd %d\n", a->cmd); in vidioc_encoder_cmd()
1078 res = -EINVAL; in vidioc_encoder_cmd()
1082 mutex_unlock(&dev->io_mutex); in vidioc_encoder_cmd()
1089 a->flags = 0; in vidioc_try_encoder_cmd()
1090 switch (a->cmd) { in vidioc_try_encoder_cmd()
1095 return -EINVAL; in vidioc_try_encoder_cmd()
1131 flush_work(&dev->worker); in hdpvr_device_release()
1133 v4l2_device_unregister(&dev->v4l2_dev); in hdpvr_device_release()
1134 v4l2_ctrl_handler_free(&dev->hdl); in hdpvr_device_release()
1138 mutex_lock(&dev->i2c_mutex); in hdpvr_device_release()
1139 i2c_del_adapter(&dev->i2c_adapter); in hdpvr_device_release()
1140 mutex_unlock(&dev->i2c_mutex); in hdpvr_device_release()
1143 kfree(dev->usbc_buf); in hdpvr_device_release()
1164 struct v4l2_ctrl_handler *hdl = &dev->hdl; in hdpvr_register_videodev()
1165 bool ac3 = dev->flags & HDPVR_FLAG_AC3_CAP; in hdpvr_register_videodev()
1168 dev->cur_std = V4L2_STD_525_60; in hdpvr_register_videodev()
1169 dev->width = 720; in hdpvr_register_videodev()
1170 dev->height = 480; in hdpvr_register_videodev()
1171 dev->cur_dv_timings = hdpvr_dv_timings[HDPVR_DEF_DV_TIMINGS_IDX]; in hdpvr_register_videodev()
1173 if (dev->fw_ver > 0x15) { in hdpvr_register_videodev()
1204 0x7, ac3 ? dev->options.audio_codec : V4L2_MPEG_AUDIO_ENCODING_AAC); in hdpvr_register_videodev()
1210 dev->video_mode = v4l2_ctrl_new_std_menu(hdl, &hdpvr_ctrl_ops, in hdpvr_register_videodev()
1215 dev->video_bitrate = v4l2_ctrl_new_std(hdl, &hdpvr_ctrl_ops, in hdpvr_register_videodev()
1218 dev->video_bitrate_peak = v4l2_ctrl_new_std(hdl, &hdpvr_ctrl_ops, in hdpvr_register_videodev()
1221 dev->v4l2_dev.ctrl_handler = hdl; in hdpvr_register_videodev()
1222 if (hdl->error) { in hdpvr_register_videodev()
1223 res = hdl->error; in hdpvr_register_videodev()
1224 v4l2_err(&dev->v4l2_dev, "Could not register controls\n"); in hdpvr_register_videodev()
1227 v4l2_ctrl_cluster(3, &dev->video_mode); in hdpvr_register_videodev()
1230 v4l2_err(&dev->v4l2_dev, "Could not setup controls\n"); in hdpvr_register_videodev()
1235 dev->video_dev = hdpvr_video_template; in hdpvr_register_videodev()
1236 strscpy(dev->video_dev.name, "Hauppauge HD PVR", in hdpvr_register_videodev()
1237 sizeof(dev->video_dev.name)); in hdpvr_register_videodev()
1238 dev->video_dev.v4l2_dev = &dev->v4l2_dev; in hdpvr_register_videodev()
1239 video_set_drvdata(&dev->video_dev, dev); in hdpvr_register_videodev()
1241 res = video_register_device(&dev->video_dev, VFL_TYPE_VIDEO, devnum); in hdpvr_register_videodev()
1243 v4l2_err(&dev->v4l2_dev, "video_device registration failed\n"); in hdpvr_register_videodev()