2 * Hauppauge HD PVR USB driver - video 4 linux 2 interface
4 * Copyright (C) 2008 Janne Grunau (j@jannau.net)
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation, version 2.
12 #include <linux/kernel.h>
13 #include <linux/errno.h>
14 #include <linux/init.h>
15 #include <linux/slab.h>
16 #include <linux/module.h>
17 #include <linux/uaccess.h>
18 #include <linux/usb.h>
19 #include <linux/mutex.h>
20 #include <linux/version.h>
21 #include <linux/workqueue.h>
23 #include <linux/videodev2.h>
24 #include <media/v4l2-dev.h>
25 #include <media/v4l2-common.h>
26 #include <media/v4l2-ioctl.h>
29 #define BULK_URB_TIMEOUT 90 /* 0.09 seconds */
31 #define print_buffer_status() { \
32 v4l2_dbg(MSG_BUFFER, hdpvr_debug, &dev->v4l2_dev, \
33 "%s:%d buffer stat: %d free, %d proc\n", \
35 list_size(&dev->free_buff_list), \
36 list_size(&dev->rec_buff_list)); }
39 struct hdpvr_device
*dev
;
42 static uint
list_size(struct list_head
*list
)
44 struct list_head
*tmp
;
47 list_for_each(tmp
, list
) {
54 /*=========================================================================*/
56 static void hdpvr_read_bulk_callback(struct urb
*urb
)
58 struct hdpvr_buffer
*buf
= (struct hdpvr_buffer
*)urb
->context
;
59 struct hdpvr_device
*dev
= buf
->dev
;
61 /* marking buffer as received and wake waiting */
62 buf
->status
= BUFSTAT_READY
;
63 wake_up_interruptible(&dev
->wait_data
);
66 /*=========================================================================*/
69 /* function expects dev->io_mutex to be hold by caller */
70 int hdpvr_cancel_queue(struct hdpvr_device
*dev
)
72 struct hdpvr_buffer
*buf
;
74 list_for_each_entry(buf
, &dev
->rec_buff_list
, buff_list
) {
75 usb_kill_urb(buf
->urb
);
76 buf
->status
= BUFSTAT_AVAILABLE
;
79 list_splice_init(&dev
->rec_buff_list
, dev
->free_buff_list
.prev
);
84 static int hdpvr_free_queue(struct list_head
*q
)
86 struct list_head
*tmp
;
88 struct hdpvr_buffer
*buf
;
91 for (p
= q
->next
; p
!= q
;) {
92 buf
= list_entry(p
, struct hdpvr_buffer
, buff_list
);
95 usb_free_coherent(urb
->dev
, urb
->transfer_buffer_length
,
96 urb
->transfer_buffer
, urb
->transfer_dma
);
107 /* function expects dev->io_mutex to be hold by caller */
108 int hdpvr_free_buffers(struct hdpvr_device
*dev
)
110 hdpvr_cancel_queue(dev
);
112 hdpvr_free_queue(&dev
->free_buff_list
);
113 hdpvr_free_queue(&dev
->rec_buff_list
);
118 /* function expects dev->io_mutex to be hold by caller */
119 int hdpvr_alloc_buffers(struct hdpvr_device
*dev
, uint count
)
122 int retval
= -ENOMEM
;
124 struct hdpvr_buffer
*buf
;
127 v4l2_dbg(MSG_INFO
, hdpvr_debug
, &dev
->v4l2_dev
,
128 "allocating %u buffers\n", count
);
130 for (i
= 0; i
< count
; i
++) {
132 buf
= kzalloc(sizeof(struct hdpvr_buffer
), GFP_KERNEL
);
134 v4l2_err(&dev
->v4l2_dev
, "cannot allocate buffer\n");
139 urb
= usb_alloc_urb(0, GFP_KERNEL
);
141 v4l2_err(&dev
->v4l2_dev
, "cannot allocate urb\n");
146 mem
= usb_alloc_coherent(dev
->udev
, dev
->bulk_in_size
, GFP_KERNEL
,
149 v4l2_err(&dev
->v4l2_dev
,
150 "cannot allocate usb transfer buffer\n");
151 goto exit_urb_buffer
;
154 usb_fill_bulk_urb(buf
->urb
, dev
->udev
,
155 usb_rcvbulkpipe(dev
->udev
,
156 dev
->bulk_in_endpointAddr
),
157 mem
, dev
->bulk_in_size
,
158 hdpvr_read_bulk_callback
, buf
);
160 buf
->urb
->transfer_flags
|= URB_NO_TRANSFER_DMA_MAP
;
161 buf
->status
= BUFSTAT_AVAILABLE
;
162 list_add_tail(&buf
->buff_list
, &dev
->free_buff_list
);
170 hdpvr_free_buffers(dev
);
174 static int hdpvr_submit_buffers(struct hdpvr_device
*dev
)
176 struct hdpvr_buffer
*buf
;
178 int ret
= 0, err_count
= 0;
180 mutex_lock(&dev
->io_mutex
);
182 while (dev
->status
== STATUS_STREAMING
&&
183 !list_empty(&dev
->free_buff_list
)) {
185 buf
= list_entry(dev
->free_buff_list
.next
, struct hdpvr_buffer
,
187 if (buf
->status
!= BUFSTAT_AVAILABLE
) {
188 v4l2_err(&dev
->v4l2_dev
,
189 "buffer not marked as available\n");
196 urb
->actual_length
= 0;
197 ret
= usb_submit_urb(urb
, GFP_KERNEL
);
199 v4l2_err(&dev
->v4l2_dev
,
200 "usb_submit_urb in %s returned %d\n",
206 buf
->status
= BUFSTAT_INPROGRESS
;
207 list_move_tail(&buf
->buff_list
, &dev
->rec_buff_list
);
210 print_buffer_status();
211 mutex_unlock(&dev
->io_mutex
);
215 static struct hdpvr_buffer
*hdpvr_get_next_buffer(struct hdpvr_device
*dev
)
217 struct hdpvr_buffer
*buf
;
219 mutex_lock(&dev
->io_mutex
);
221 if (list_empty(&dev
->rec_buff_list
)) {
222 mutex_unlock(&dev
->io_mutex
);
226 buf
= list_entry(dev
->rec_buff_list
.next
, struct hdpvr_buffer
,
228 mutex_unlock(&dev
->io_mutex
);
233 static void hdpvr_transmit_buffers(struct work_struct
*work
)
235 struct hdpvr_device
*dev
= container_of(work
, struct hdpvr_device
,
238 while (dev
->status
== STATUS_STREAMING
) {
240 if (hdpvr_submit_buffers(dev
)) {
241 v4l2_err(&dev
->v4l2_dev
, "couldn't submit buffers\n");
244 if (wait_event_interruptible(dev
->wait_buffer
,
245 !list_empty(&dev
->free_buff_list
) ||
246 dev
->status
!= STATUS_STREAMING
))
250 v4l2_dbg(MSG_INFO
, hdpvr_debug
, &dev
->v4l2_dev
,
251 "transmit worker exited\n");
254 v4l2_dbg(MSG_INFO
, hdpvr_debug
, &dev
->v4l2_dev
,
255 "transmit buffers errored\n");
256 dev
->status
= STATUS_ERROR
;
259 /* function expects dev->io_mutex to be hold by caller */
260 static int hdpvr_start_streaming(struct hdpvr_device
*dev
)
263 struct hdpvr_video_info
*vidinf
;
265 if (dev
->status
== STATUS_STREAMING
)
267 else if (dev
->status
!= STATUS_IDLE
)
270 vidinf
= get_video_info(dev
);
273 v4l2_dbg(MSG_BUFFER
, hdpvr_debug
, &dev
->v4l2_dev
,
274 "video signal: %dx%d@%dhz\n", vidinf
->width
,
275 vidinf
->height
, vidinf
->fps
);
278 /* start streaming 2 request */
279 ret
= usb_control_msg(dev
->udev
,
280 usb_sndctrlpipe(dev
->udev
, 0),
281 0xb8, 0x38, 0x1, 0, NULL
, 0, 8000);
282 v4l2_dbg(MSG_BUFFER
, hdpvr_debug
, &dev
->v4l2_dev
,
283 "encoder start control request returned %d\n", ret
);
285 hdpvr_config_call(dev
, CTRL_START_STREAMING_VALUE
, 0x00);
287 INIT_WORK(&dev
->worker
, hdpvr_transmit_buffers
);
288 queue_work(dev
->workqueue
, &dev
->worker
);
290 v4l2_dbg(MSG_BUFFER
, hdpvr_debug
, &dev
->v4l2_dev
,
291 "streaming started\n");
292 dev
->status
= STATUS_STREAMING
;
297 v4l2_dbg(MSG_INFO
, hdpvr_debug
, &dev
->v4l2_dev
,
298 "no video signal at input %d\n", dev
->options
.video_input
);
303 /* function expects dev->io_mutex to be hold by caller */
304 static int hdpvr_stop_streaming(struct hdpvr_device
*dev
)
310 if (dev
->status
== STATUS_IDLE
)
312 else if (dev
->status
!= STATUS_STREAMING
)
315 buf
= kmalloc(dev
->bulk_in_size
, GFP_KERNEL
);
317 v4l2_err(&dev
->v4l2_dev
, "failed to allocate temporary buffer "
318 "for emptying the internal device buffer. "
319 "Next capture start will be slow\n");
321 dev
->status
= STATUS_SHUTTING_DOWN
;
322 hdpvr_config_call(dev
, CTRL_STOP_STREAMING_VALUE
, 0x00);
323 mutex_unlock(&dev
->io_mutex
);
325 wake_up_interruptible(&dev
->wait_buffer
);
328 flush_workqueue(dev
->workqueue
);
330 mutex_lock(&dev
->io_mutex
);
331 /* kill the still outstanding urbs */
332 hdpvr_cancel_queue(dev
);
334 /* emptying the device buffer beforeshutting it down */
335 while (buf
&& ++c
< 500 &&
336 !usb_bulk_msg(dev
->udev
,
337 usb_rcvbulkpipe(dev
->udev
,
338 dev
->bulk_in_endpointAddr
),
339 buf
, dev
->bulk_in_size
, &actual_length
,
341 v4l2_dbg(MSG_BUFFER
, hdpvr_debug
, &dev
->v4l2_dev
,
342 "%2d: got %d bytes\n", c
, actual_length
);
345 v4l2_dbg(MSG_BUFFER
, hdpvr_debug
, &dev
->v4l2_dev
,
346 "used %d urbs to empty device buffers\n", c
-1);
349 dev
->status
= STATUS_IDLE
;
355 /*=======================================================================*/
357 * video 4 linux 2 file operations
360 static int hdpvr_open(struct file
*file
)
362 struct hdpvr_device
*dev
;
364 int retval
= -ENOMEM
;
366 dev
= (struct hdpvr_device
*)video_get_drvdata(video_devdata(file
));
368 pr_err("open failing with with ENODEV\n");
373 fh
= kzalloc(sizeof(struct hdpvr_fh
), GFP_KERNEL
);
375 v4l2_err(&dev
->v4l2_dev
, "Out of memory\n");
378 /* lock the device to allow correctly handling errors
380 mutex_lock(&dev
->io_mutex
);
382 mutex_unlock(&dev
->io_mutex
);
386 /* save our object in the file's private structure */
387 file
->private_data
= fh
;
394 static int hdpvr_release(struct file
*file
)
396 struct hdpvr_fh
*fh
= file
->private_data
;
397 struct hdpvr_device
*dev
= fh
->dev
;
402 mutex_lock(&dev
->io_mutex
);
403 if (!(--dev
->open_count
) && dev
->status
== STATUS_STREAMING
)
404 hdpvr_stop_streaming(dev
);
406 mutex_unlock(&dev
->io_mutex
);
413 * will allocate buffers when called for the first time
415 static ssize_t
hdpvr_read(struct file
*file
, char __user
*buffer
, size_t count
,
418 struct hdpvr_fh
*fh
= file
->private_data
;
419 struct hdpvr_device
*dev
= fh
->dev
;
420 struct hdpvr_buffer
*buf
= NULL
;
422 unsigned int ret
= 0;
431 mutex_lock(&dev
->io_mutex
);
432 if (dev
->status
== STATUS_IDLE
) {
433 if (hdpvr_start_streaming(dev
)) {
434 v4l2_dbg(MSG_INFO
, hdpvr_debug
, &dev
->v4l2_dev
,
435 "start_streaming failed\n");
438 dev
->status
= STATUS_IDLE
;
439 mutex_unlock(&dev
->io_mutex
);
442 print_buffer_status();
444 mutex_unlock(&dev
->io_mutex
);
446 /* wait for the first buffer */
447 if (!(file
->f_flags
& O_NONBLOCK
)) {
448 if (wait_event_interruptible(dev
->wait_data
,
449 hdpvr_get_next_buffer(dev
)))
453 buf
= hdpvr_get_next_buffer(dev
);
455 while (count
> 0 && buf
) {
457 if (buf
->status
!= BUFSTAT_READY
&&
458 dev
->status
!= STATUS_DISCONNECTED
) {
459 /* return nonblocking */
460 if (file
->f_flags
& O_NONBLOCK
) {
466 if (wait_event_interruptible(dev
->wait_data
,
467 buf
->status
== BUFSTAT_READY
)) {
473 if (buf
->status
!= BUFSTAT_READY
)
476 /* set remaining bytes to copy */
478 rem
= urb
->actual_length
- buf
->pos
;
479 cnt
= rem
> count
? count
: rem
;
481 if (copy_to_user(buffer
, urb
->transfer_buffer
+ buf
->pos
,
483 v4l2_err(&dev
->v4l2_dev
, "read: copy_to_user failed\n");
494 /* finished, take next buffer */
495 if (buf
->pos
== urb
->actual_length
) {
496 mutex_lock(&dev
->io_mutex
);
498 buf
->status
= BUFSTAT_AVAILABLE
;
500 list_move_tail(&buf
->buff_list
, &dev
->free_buff_list
);
502 print_buffer_status();
504 mutex_unlock(&dev
->io_mutex
);
506 wake_up_interruptible(&dev
->wait_buffer
);
508 buf
= hdpvr_get_next_buffer(dev
);
517 static unsigned int hdpvr_poll(struct file
*filp
, poll_table
*wait
)
519 struct hdpvr_buffer
*buf
= NULL
;
520 struct hdpvr_fh
*fh
= filp
->private_data
;
521 struct hdpvr_device
*dev
= fh
->dev
;
522 unsigned int mask
= 0;
524 mutex_lock(&dev
->io_mutex
);
526 if (!video_is_registered(dev
->video_dev
)) {
527 mutex_unlock(&dev
->io_mutex
);
531 if (dev
->status
== STATUS_IDLE
) {
532 if (hdpvr_start_streaming(dev
)) {
533 v4l2_dbg(MSG_BUFFER
, hdpvr_debug
, &dev
->v4l2_dev
,
534 "start_streaming failed\n");
535 dev
->status
= STATUS_IDLE
;
538 print_buffer_status();
540 mutex_unlock(&dev
->io_mutex
);
542 buf
= hdpvr_get_next_buffer(dev
);
543 /* only wait if no data is available */
544 if (!buf
|| buf
->status
!= BUFSTAT_READY
) {
545 poll_wait(filp
, &dev
->wait_data
, wait
);
546 buf
= hdpvr_get_next_buffer(dev
);
548 if (buf
&& buf
->status
== BUFSTAT_READY
)
549 mask
|= POLLIN
| POLLRDNORM
;
555 static const struct v4l2_file_operations hdpvr_fops
= {
556 .owner
= THIS_MODULE
,
558 .release
= hdpvr_release
,
561 .unlocked_ioctl
= video_ioctl2
,
564 /*=======================================================================*/
566 * V4L2 ioctl handling
569 static int vidioc_querycap(struct file
*file
, void *priv
,
570 struct v4l2_capability
*cap
)
572 struct hdpvr_device
*dev
= video_drvdata(file
);
574 strcpy(cap
->driver
, "hdpvr");
575 strcpy(cap
->card
, "Hauppauge HD PVR");
576 usb_make_path(dev
->udev
, cap
->bus_info
, sizeof(cap
->bus_info
));
577 cap
->version
= HDPVR_VERSION
;
578 cap
->capabilities
= V4L2_CAP_VIDEO_CAPTURE
|
584 static int vidioc_s_std(struct file
*file
, void *private_data
,
587 struct hdpvr_fh
*fh
= file
->private_data
;
588 struct hdpvr_device
*dev
= fh
->dev
;
591 if (*std
& (V4L2_STD_NTSC
| V4L2_STD_PAL_60
))
594 return hdpvr_config_call(dev
, CTRL_VIDEO_STD_TYPE
, std_type
);
597 static const char *iname
[] = {
598 [HDPVR_COMPONENT
] = "Component",
599 [HDPVR_SVIDEO
] = "S-Video",
600 [HDPVR_COMPOSITE
] = "Composite",
603 static int vidioc_enum_input(struct file
*file
, void *priv
,
604 struct v4l2_input
*i
)
606 struct hdpvr_fh
*fh
= file
->private_data
;
607 struct hdpvr_device
*dev
= fh
->dev
;
611 if (n
>= HDPVR_VIDEO_INPUTS
)
614 i
->type
= V4L2_INPUT_TYPE_CAMERA
;
616 strncpy(i
->name
, iname
[n
], sizeof(i
->name
) - 1);
617 i
->name
[sizeof(i
->name
) - 1] = '\0';
619 i
->audioset
= 1<<HDPVR_RCA_FRONT
| 1<<HDPVR_RCA_BACK
| 1<<HDPVR_SPDIF
;
621 i
->std
= dev
->video_dev
->tvnorms
;
626 static int vidioc_s_input(struct file
*file
, void *private_data
,
629 struct hdpvr_fh
*fh
= file
->private_data
;
630 struct hdpvr_device
*dev
= fh
->dev
;
633 if (index
>= HDPVR_VIDEO_INPUTS
)
636 if (dev
->status
!= STATUS_IDLE
)
639 retval
= hdpvr_config_call(dev
, CTRL_VIDEO_INPUT_VALUE
, index
+1);
641 dev
->options
.video_input
= index
;
646 static int vidioc_g_input(struct file
*file
, void *private_data
,
649 struct hdpvr_fh
*fh
= file
->private_data
;
650 struct hdpvr_device
*dev
= fh
->dev
;
652 *index
= dev
->options
.video_input
;
657 static const char *audio_iname
[] = {
658 [HDPVR_RCA_FRONT
] = "RCA front",
659 [HDPVR_RCA_BACK
] = "RCA back",
660 [HDPVR_SPDIF
] = "SPDIF",
663 static int vidioc_enumaudio(struct file
*file
, void *priv
,
664 struct v4l2_audio
*audio
)
669 if (n
>= HDPVR_AUDIO_INPUTS
)
672 audio
->capability
= V4L2_AUDCAP_STEREO
;
674 strncpy(audio
->name
, audio_iname
[n
], sizeof(audio
->name
) - 1);
675 audio
->name
[sizeof(audio
->name
) - 1] = '\0';
680 static int vidioc_s_audio(struct file
*file
, void *private_data
,
681 struct v4l2_audio
*audio
)
683 struct hdpvr_fh
*fh
= file
->private_data
;
684 struct hdpvr_device
*dev
= fh
->dev
;
687 if (audio
->index
>= HDPVR_AUDIO_INPUTS
)
690 if (dev
->status
!= STATUS_IDLE
)
693 retval
= hdpvr_set_audio(dev
, audio
->index
+1, dev
->options
.audio_codec
);
695 dev
->options
.audio_input
= audio
->index
;
700 static int vidioc_g_audio(struct file
*file
, void *private_data
,
701 struct v4l2_audio
*audio
)
703 struct hdpvr_fh
*fh
= file
->private_data
;
704 struct hdpvr_device
*dev
= fh
->dev
;
706 audio
->index
= dev
->options
.audio_input
;
707 audio
->capability
= V4L2_AUDCAP_STEREO
;
708 strncpy(audio
->name
, audio_iname
[audio
->index
], sizeof(audio
->name
));
709 audio
->name
[sizeof(audio
->name
) - 1] = '\0';
713 static const s32 supported_v4l2_ctrls
[] = {
719 V4L2_CID_MPEG_AUDIO_ENCODING
,
720 V4L2_CID_MPEG_VIDEO_ENCODING
,
721 V4L2_CID_MPEG_VIDEO_BITRATE_MODE
,
722 V4L2_CID_MPEG_VIDEO_BITRATE
,
723 V4L2_CID_MPEG_VIDEO_BITRATE_PEAK
,
726 static int fill_queryctrl(struct hdpvr_options
*opt
, struct v4l2_queryctrl
*qc
,
732 case V4L2_CID_BRIGHTNESS
:
733 return v4l2_ctrl_query_fill(qc
, 0x0, 0xff, 1, 0x86);
734 case V4L2_CID_CONTRAST
:
735 return v4l2_ctrl_query_fill(qc
, 0x0, 0xff, 1, 0x80);
736 case V4L2_CID_SATURATION
:
737 return v4l2_ctrl_query_fill(qc
, 0x0, 0xff, 1, 0x80);
739 return v4l2_ctrl_query_fill(qc
, 0x0, 0xff, 1, 0x80);
740 case V4L2_CID_SHARPNESS
:
741 return v4l2_ctrl_query_fill(qc
, 0x0, 0xff, 1, 0x80);
742 case V4L2_CID_MPEG_AUDIO_ENCODING
:
743 return v4l2_ctrl_query_fill(
744 qc
, V4L2_MPEG_AUDIO_ENCODING_AAC
,
745 ac3
? V4L2_MPEG_AUDIO_ENCODING_AC3
746 : V4L2_MPEG_AUDIO_ENCODING_AAC
,
747 1, V4L2_MPEG_AUDIO_ENCODING_AAC
);
748 case V4L2_CID_MPEG_VIDEO_ENCODING
:
749 return v4l2_ctrl_query_fill(
750 qc
, V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC
,
751 V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC
, 1,
752 V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC
);
754 /* case V4L2_CID_MPEG_VIDEO_? maybe keyframe interval: */
755 /* return v4l2_ctrl_query_fill(qc, 0, 128, 128, 0); */
756 case V4L2_CID_MPEG_VIDEO_BITRATE_MODE
:
757 return v4l2_ctrl_query_fill(
758 qc
, V4L2_MPEG_VIDEO_BITRATE_MODE_VBR
,
759 V4L2_MPEG_VIDEO_BITRATE_MODE_CBR
, 1,
760 V4L2_MPEG_VIDEO_BITRATE_MODE_CBR
);
762 case V4L2_CID_MPEG_VIDEO_BITRATE
:
763 return v4l2_ctrl_query_fill(qc
, 1000000, 13500000, 100000,
765 case V4L2_CID_MPEG_VIDEO_BITRATE_PEAK
:
766 err
= v4l2_ctrl_query_fill(qc
, 1100000, 20200000, 100000,
768 if (!err
&& opt
->bitrate_mode
== HDPVR_CONSTANT
)
769 qc
->flags
|= V4L2_CTRL_FLAG_INACTIVE
;
776 static int vidioc_queryctrl(struct file
*file
, void *private_data
,
777 struct v4l2_queryctrl
*qc
)
779 struct hdpvr_fh
*fh
= file
->private_data
;
780 struct hdpvr_device
*dev
= fh
->dev
;
784 memset(qc
, 0, sizeof(*qc
));
786 next
= !!(id
& V4L2_CTRL_FLAG_NEXT_CTRL
);
787 qc
->id
= id
& ~V4L2_CTRL_FLAG_NEXT_CTRL
;
789 for (i
= 0; i
< ARRAY_SIZE(supported_v4l2_ctrls
); i
++) {
791 if (qc
->id
< supported_v4l2_ctrls
[i
])
792 qc
->id
= supported_v4l2_ctrls
[i
];
797 if (qc
->id
== supported_v4l2_ctrls
[i
])
798 return fill_queryctrl(&dev
->options
, qc
,
799 dev
->flags
& HDPVR_FLAG_AC3_CAP
);
801 if (qc
->id
< supported_v4l2_ctrls
[i
])
808 static int vidioc_g_ctrl(struct file
*file
, void *private_data
,
809 struct v4l2_control
*ctrl
)
811 struct hdpvr_fh
*fh
= file
->private_data
;
812 struct hdpvr_device
*dev
= fh
->dev
;
815 case V4L2_CID_BRIGHTNESS
:
816 ctrl
->value
= dev
->options
.brightness
;
818 case V4L2_CID_CONTRAST
:
819 ctrl
->value
= dev
->options
.contrast
;
821 case V4L2_CID_SATURATION
:
822 ctrl
->value
= dev
->options
.saturation
;
825 ctrl
->value
= dev
->options
.hue
;
827 case V4L2_CID_SHARPNESS
:
828 ctrl
->value
= dev
->options
.sharpness
;
836 static int vidioc_s_ctrl(struct file
*file
, void *private_data
,
837 struct v4l2_control
*ctrl
)
839 struct hdpvr_fh
*fh
= file
->private_data
;
840 struct hdpvr_device
*dev
= fh
->dev
;
844 case V4L2_CID_BRIGHTNESS
:
845 retval
= hdpvr_config_call(dev
, CTRL_BRIGHTNESS
, ctrl
->value
);
847 dev
->options
.brightness
= ctrl
->value
;
849 case V4L2_CID_CONTRAST
:
850 retval
= hdpvr_config_call(dev
, CTRL_CONTRAST
, ctrl
->value
);
852 dev
->options
.contrast
= ctrl
->value
;
854 case V4L2_CID_SATURATION
:
855 retval
= hdpvr_config_call(dev
, CTRL_SATURATION
, ctrl
->value
);
857 dev
->options
.saturation
= ctrl
->value
;
860 retval
= hdpvr_config_call(dev
, CTRL_HUE
, ctrl
->value
);
862 dev
->options
.hue
= ctrl
->value
;
864 case V4L2_CID_SHARPNESS
:
865 retval
= hdpvr_config_call(dev
, CTRL_SHARPNESS
, ctrl
->value
);
867 dev
->options
.sharpness
= ctrl
->value
;
877 static int hdpvr_get_ctrl(struct hdpvr_options
*opt
,
878 struct v4l2_ext_control
*ctrl
)
881 case V4L2_CID_MPEG_AUDIO_ENCODING
:
882 ctrl
->value
= opt
->audio_codec
;
884 case V4L2_CID_MPEG_VIDEO_ENCODING
:
885 ctrl
->value
= V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC
;
887 /* case V4L2_CID_MPEG_VIDEO_B_FRAMES: */
888 /* ctrl->value = (opt->gop_mode & 0x2) ? 0 : 128; */
890 case V4L2_CID_MPEG_VIDEO_BITRATE_MODE
:
891 ctrl
->value
= opt
->bitrate_mode
== HDPVR_CONSTANT
892 ? V4L2_MPEG_VIDEO_BITRATE_MODE_CBR
893 : V4L2_MPEG_VIDEO_BITRATE_MODE_VBR
;
895 case V4L2_CID_MPEG_VIDEO_BITRATE
:
896 ctrl
->value
= opt
->bitrate
* 100000;
898 case V4L2_CID_MPEG_VIDEO_BITRATE_PEAK
:
899 ctrl
->value
= opt
->peak_bitrate
* 100000;
901 case V4L2_CID_MPEG_STREAM_TYPE
:
902 ctrl
->value
= V4L2_MPEG_STREAM_TYPE_MPEG2_TS
;
910 static int vidioc_g_ext_ctrls(struct file
*file
, void *priv
,
911 struct v4l2_ext_controls
*ctrls
)
913 struct hdpvr_fh
*fh
= file
->private_data
;
914 struct hdpvr_device
*dev
= fh
->dev
;
917 if (ctrls
->ctrl_class
== V4L2_CTRL_CLASS_MPEG
) {
918 for (i
= 0; i
< ctrls
->count
; i
++) {
919 struct v4l2_ext_control
*ctrl
= ctrls
->controls
+ i
;
921 err
= hdpvr_get_ctrl(&dev
->options
, ctrl
);
923 ctrls
->error_idx
= i
;
935 static int hdpvr_try_ctrl(struct v4l2_ext_control
*ctrl
, int ac3
)
940 case V4L2_CID_MPEG_AUDIO_ENCODING
:
941 if (ctrl
->value
== V4L2_MPEG_AUDIO_ENCODING_AAC
||
942 (ac3
&& ctrl
->value
== V4L2_MPEG_AUDIO_ENCODING_AC3
))
945 case V4L2_CID_MPEG_VIDEO_ENCODING
:
946 if (ctrl
->value
== V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC
)
949 /* case V4L2_CID_MPEG_VIDEO_B_FRAMES: */
950 /* if (ctrl->value == 0 || ctrl->value == 128) */
953 case V4L2_CID_MPEG_VIDEO_BITRATE_MODE
:
954 if (ctrl
->value
== V4L2_MPEG_VIDEO_BITRATE_MODE_CBR
||
955 ctrl
->value
== V4L2_MPEG_VIDEO_BITRATE_MODE_VBR
)
958 case V4L2_CID_MPEG_VIDEO_BITRATE
:
960 uint bitrate
= ctrl
->value
/ 100000;
961 if (bitrate
>= 10 && bitrate
<= 135)
965 case V4L2_CID_MPEG_VIDEO_BITRATE_PEAK
:
967 uint peak_bitrate
= ctrl
->value
/ 100000;
968 if (peak_bitrate
>= 10 && peak_bitrate
<= 202)
972 case V4L2_CID_MPEG_STREAM_TYPE
:
973 if (ctrl
->value
== V4L2_MPEG_STREAM_TYPE_MPEG2_TS
)
982 static int vidioc_try_ext_ctrls(struct file
*file
, void *priv
,
983 struct v4l2_ext_controls
*ctrls
)
985 struct hdpvr_fh
*fh
= file
->private_data
;
986 struct hdpvr_device
*dev
= fh
->dev
;
989 if (ctrls
->ctrl_class
== V4L2_CTRL_CLASS_MPEG
) {
990 for (i
= 0; i
< ctrls
->count
; i
++) {
991 struct v4l2_ext_control
*ctrl
= ctrls
->controls
+ i
;
993 err
= hdpvr_try_ctrl(ctrl
,
994 dev
->flags
& HDPVR_FLAG_AC3_CAP
);
996 ctrls
->error_idx
= i
;
1007 static int hdpvr_set_ctrl(struct hdpvr_device
*dev
,
1008 struct v4l2_ext_control
*ctrl
)
1010 struct hdpvr_options
*opt
= &dev
->options
;
1014 case V4L2_CID_MPEG_AUDIO_ENCODING
:
1015 if (dev
->flags
& HDPVR_FLAG_AC3_CAP
) {
1016 opt
->audio_codec
= ctrl
->value
;
1017 ret
= hdpvr_set_audio(dev
, opt
->audio_input
,
1021 case V4L2_CID_MPEG_VIDEO_ENCODING
:
1023 /* case V4L2_CID_MPEG_VIDEO_B_FRAMES: */
1024 /* if (ctrl->value == 0 && !(opt->gop_mode & 0x2)) { */
1025 /* opt->gop_mode |= 0x2; */
1026 /* hdpvr_config_call(dev, CTRL_GOP_MODE_VALUE, */
1027 /* opt->gop_mode); */
1029 /* if (ctrl->value == 128 && opt->gop_mode & 0x2) { */
1030 /* opt->gop_mode &= ~0x2; */
1031 /* hdpvr_config_call(dev, CTRL_GOP_MODE_VALUE, */
1032 /* opt->gop_mode); */
1035 case V4L2_CID_MPEG_VIDEO_BITRATE_MODE
:
1036 if (ctrl
->value
== V4L2_MPEG_VIDEO_BITRATE_MODE_CBR
&&
1037 opt
->bitrate_mode
!= HDPVR_CONSTANT
) {
1038 opt
->bitrate_mode
= HDPVR_CONSTANT
;
1039 hdpvr_config_call(dev
, CTRL_BITRATE_MODE_VALUE
,
1042 if (ctrl
->value
== V4L2_MPEG_VIDEO_BITRATE_MODE_VBR
&&
1043 opt
->bitrate_mode
== HDPVR_CONSTANT
) {
1044 opt
->bitrate_mode
= HDPVR_VARIABLE_AVERAGE
;
1045 hdpvr_config_call(dev
, CTRL_BITRATE_MODE_VALUE
,
1049 case V4L2_CID_MPEG_VIDEO_BITRATE
: {
1050 uint bitrate
= ctrl
->value
/ 100000;
1052 opt
->bitrate
= bitrate
;
1053 if (bitrate
>= opt
->peak_bitrate
)
1054 opt
->peak_bitrate
= bitrate
+1;
1056 hdpvr_set_bitrate(dev
);
1059 case V4L2_CID_MPEG_VIDEO_BITRATE_PEAK
: {
1060 uint peak_bitrate
= ctrl
->value
/ 100000;
1062 if (opt
->bitrate_mode
== HDPVR_CONSTANT
)
1065 if (opt
->bitrate
< peak_bitrate
) {
1066 opt
->peak_bitrate
= peak_bitrate
;
1067 hdpvr_set_bitrate(dev
);
1072 case V4L2_CID_MPEG_STREAM_TYPE
:
1080 static int vidioc_s_ext_ctrls(struct file
*file
, void *priv
,
1081 struct v4l2_ext_controls
*ctrls
)
1083 struct hdpvr_fh
*fh
= file
->private_data
;
1084 struct hdpvr_device
*dev
= fh
->dev
;
1087 if (ctrls
->ctrl_class
== V4L2_CTRL_CLASS_MPEG
) {
1088 for (i
= 0; i
< ctrls
->count
; i
++) {
1089 struct v4l2_ext_control
*ctrl
= ctrls
->controls
+ i
;
1091 err
= hdpvr_try_ctrl(ctrl
,
1092 dev
->flags
& HDPVR_FLAG_AC3_CAP
);
1094 ctrls
->error_idx
= i
;
1097 err
= hdpvr_set_ctrl(dev
, ctrl
);
1099 ctrls
->error_idx
= i
;
1110 static int vidioc_enum_fmt_vid_cap(struct file
*file
, void *private_data
,
1111 struct v4l2_fmtdesc
*f
)
1114 if (f
->index
!= 0 || f
->type
!= V4L2_BUF_TYPE_VIDEO_CAPTURE
)
1117 f
->flags
= V4L2_FMT_FLAG_COMPRESSED
;
1118 strncpy(f
->description
, "MPEG2-TS with AVC/AAC streams", 32);
1119 f
->pixelformat
= V4L2_PIX_FMT_MPEG
;
1124 static int vidioc_g_fmt_vid_cap(struct file
*file
, void *private_data
,
1125 struct v4l2_format
*f
)
1127 struct hdpvr_fh
*fh
= file
->private_data
;
1128 struct hdpvr_device
*dev
= fh
->dev
;
1129 struct hdpvr_video_info
*vid_info
;
1134 vid_info
= get_video_info(dev
);
1138 f
->type
= V4L2_BUF_TYPE_VIDEO_CAPTURE
;
1139 f
->fmt
.pix
.pixelformat
= V4L2_PIX_FMT_MPEG
;
1140 f
->fmt
.pix
.width
= vid_info
->width
;
1141 f
->fmt
.pix
.height
= vid_info
->height
;
1142 f
->fmt
.pix
.sizeimage
= dev
->bulk_in_size
;
1143 f
->fmt
.pix
.colorspace
= 0;
1144 f
->fmt
.pix
.bytesperline
= 0;
1145 f
->fmt
.pix
.field
= V4L2_FIELD_ANY
;
1151 static int vidioc_encoder_cmd(struct file
*filp
, void *priv
,
1152 struct v4l2_encoder_cmd
*a
)
1154 struct hdpvr_fh
*fh
= filp
->private_data
;
1155 struct hdpvr_device
*dev
= fh
->dev
;
1158 mutex_lock(&dev
->io_mutex
);
1160 memset(&a
->raw
, 0, sizeof(a
->raw
));
1162 case V4L2_ENC_CMD_START
:
1164 res
= hdpvr_start_streaming(dev
);
1166 case V4L2_ENC_CMD_STOP
:
1167 res
= hdpvr_stop_streaming(dev
);
1170 v4l2_dbg(MSG_INFO
, hdpvr_debug
, &dev
->v4l2_dev
,
1171 "Unsupported encoder cmd %d\n", a
->cmd
);
1174 mutex_unlock(&dev
->io_mutex
);
1178 static int vidioc_try_encoder_cmd(struct file
*filp
, void *priv
,
1179 struct v4l2_encoder_cmd
*a
)
1182 case V4L2_ENC_CMD_START
:
1183 case V4L2_ENC_CMD_STOP
:
1190 static const struct v4l2_ioctl_ops hdpvr_ioctl_ops
= {
1191 .vidioc_querycap
= vidioc_querycap
,
1192 .vidioc_s_std
= vidioc_s_std
,
1193 .vidioc_enum_input
= vidioc_enum_input
,
1194 .vidioc_g_input
= vidioc_g_input
,
1195 .vidioc_s_input
= vidioc_s_input
,
1196 .vidioc_enumaudio
= vidioc_enumaudio
,
1197 .vidioc_g_audio
= vidioc_g_audio
,
1198 .vidioc_s_audio
= vidioc_s_audio
,
1199 .vidioc_queryctrl
= vidioc_queryctrl
,
1200 .vidioc_g_ctrl
= vidioc_g_ctrl
,
1201 .vidioc_s_ctrl
= vidioc_s_ctrl
,
1202 .vidioc_g_ext_ctrls
= vidioc_g_ext_ctrls
,
1203 .vidioc_s_ext_ctrls
= vidioc_s_ext_ctrls
,
1204 .vidioc_try_ext_ctrls
= vidioc_try_ext_ctrls
,
1205 .vidioc_enum_fmt_vid_cap
= vidioc_enum_fmt_vid_cap
,
1206 .vidioc_g_fmt_vid_cap
= vidioc_g_fmt_vid_cap
,
1207 .vidioc_encoder_cmd
= vidioc_encoder_cmd
,
1208 .vidioc_try_encoder_cmd
= vidioc_try_encoder_cmd
,
1211 static void hdpvr_device_release(struct video_device
*vdev
)
1213 struct hdpvr_device
*dev
= video_get_drvdata(vdev
);
1216 mutex_lock(&dev
->io_mutex
);
1217 destroy_workqueue(dev
->workqueue
);
1218 mutex_unlock(&dev
->io_mutex
);
1220 v4l2_device_unregister(&dev
->v4l2_dev
);
1222 /* deregister I2C adapter */
1223 #if defined(CONFIG_I2C) || (CONFIG_I2C_MODULE)
1224 mutex_lock(&dev
->i2c_mutex
);
1225 i2c_del_adapter(&dev
->i2c_adapter
);
1226 mutex_unlock(&dev
->i2c_mutex
);
1227 #endif /* CONFIG_I2C */
1229 kfree(dev
->usbc_buf
);
1233 static const struct video_device hdpvr_video_template
= {
1234 /* .type = VFL_TYPE_GRABBER, */
1235 /* .type2 = VID_TYPE_CAPTURE | VID_TYPE_MPEG_ENCODER, */
1236 .fops
= &hdpvr_fops
,
1237 .release
= hdpvr_device_release
,
1238 .ioctl_ops
= &hdpvr_ioctl_ops
,
1240 V4L2_STD_NTSC
| V4L2_STD_SECAM
| V4L2_STD_PAL_B
|
1241 V4L2_STD_PAL_G
| V4L2_STD_PAL_H
| V4L2_STD_PAL_I
|
1242 V4L2_STD_PAL_D
| V4L2_STD_PAL_M
| V4L2_STD_PAL_N
|
1244 .current_norm
= V4L2_STD_NTSC
| V4L2_STD_PAL_M
|
1248 int hdpvr_register_videodev(struct hdpvr_device
*dev
, struct device
*parent
,
1251 /* setup and register video device */
1252 dev
->video_dev
= video_device_alloc();
1253 if (!dev
->video_dev
) {
1254 v4l2_err(&dev
->v4l2_dev
, "video_device_alloc() failed\n");
1258 *(dev
->video_dev
) = hdpvr_video_template
;
1259 strcpy(dev
->video_dev
->name
, "Hauppauge HD PVR");
1260 dev
->video_dev
->parent
= parent
;
1261 video_set_drvdata(dev
->video_dev
, dev
);
1263 if (video_register_device(dev
->video_dev
, VFL_TYPE_GRABBER
, devnum
)) {
1264 v4l2_err(&dev
->v4l2_dev
, "video_device registration failed\n");