2 em28xx-video.c - driver for Empia EM2800/EM2820/2840 USB
5 Copyright (C) 2005 Ludovico Cavedon <cavedon@sssup.it>
6 Markus Rechberger <mrechberger@gmail.com>
7 Mauro Carvalho Chehab <mchehab@infradead.org>
8 Sascha Sommer <saschasommer@freenet.de>
9 Copyright (C) 2012 Frank Schäfer <fschaefer.oss@googlemail.com>
11 Some parts based on SN9C10x PC Camera Controllers GPL driver made
12 by Luca Risolia <luca.risolia@studio.unibo.it>
14 This program is free software; you can redistribute it and/or modify
15 it under the terms of the GNU General Public License as published by
16 the Free Software Foundation; either version 2 of the License, or
17 (at your option) any later version.
19 This program is distributed in the hope that it will be useful,
20 but WITHOUT ANY WARRANTY; without even the implied warranty of
21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 GNU General Public License for more details.
24 You should have received a copy of the GNU General Public License
25 along with this program; if not, write to the Free Software
26 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
29 #include <linux/init.h>
30 #include <linux/list.h>
31 #include <linux/module.h>
32 #include <linux/kernel.h>
33 #include <linux/bitmap.h>
34 #include <linux/usb.h>
35 #include <linux/i2c.h>
37 #include <linux/mutex.h>
38 #include <linux/slab.h>
41 #include <media/v4l2-common.h>
42 #include <media/v4l2-ioctl.h>
43 #include <media/v4l2-event.h>
44 #include <media/msp3400.h>
45 #include <media/tuner.h>
47 #define DRIVER_AUTHOR "Ludovico Cavedon <cavedon@sssup.it>, " \
48 "Markus Rechberger <mrechberger@gmail.com>, " \
49 "Mauro Carvalho Chehab <mchehab@infradead.org>, " \
50 "Sascha Sommer <saschasommer@freenet.de>"
52 #define DRIVER_DESC "Empia em28xx based USB video device driver"
54 #define EM28XX_VERSION "0.2.0"
56 #define em28xx_videodbg(fmt, arg...) do {\
58 printk(KERN_INFO "%s %s :"fmt, \
59 dev->name, __func__ , ##arg); } while (0)
61 static unsigned int isoc_debug
;
62 module_param(isoc_debug
, int, 0644);
63 MODULE_PARM_DESC(isoc_debug
, "enable debug messages [isoc transfers]");
65 #define em28xx_isocdbg(fmt, arg...) \
68 printk(KERN_INFO "%s %s :"fmt, \
69 dev->name, __func__ , ##arg); \
73 MODULE_AUTHOR(DRIVER_AUTHOR
);
74 MODULE_DESCRIPTION(DRIVER_DESC
);
75 MODULE_LICENSE("GPL");
76 MODULE_VERSION(EM28XX_VERSION
);
79 #define EM25XX_FRMDATAHDR_BYTE1 0x02
80 #define EM25XX_FRMDATAHDR_BYTE2_STILL_IMAGE 0x20
81 #define EM25XX_FRMDATAHDR_BYTE2_FRAME_END 0x02
82 #define EM25XX_FRMDATAHDR_BYTE2_FRAME_ID 0x01
83 #define EM25XX_FRMDATAHDR_BYTE2_MASK (EM25XX_FRMDATAHDR_BYTE2_STILL_IMAGE | \
84 EM25XX_FRMDATAHDR_BYTE2_FRAME_END | \
85 EM25XX_FRMDATAHDR_BYTE2_FRAME_ID)
88 static unsigned int video_nr
[] = {[0 ... (EM28XX_MAXBOARDS
- 1)] = -1U };
89 static unsigned int vbi_nr
[] = {[0 ... (EM28XX_MAXBOARDS
- 1)] = -1U };
90 static unsigned int radio_nr
[] = {[0 ... (EM28XX_MAXBOARDS
- 1)] = -1U };
92 module_param_array(video_nr
, int, NULL
, 0444);
93 module_param_array(vbi_nr
, int, NULL
, 0444);
94 module_param_array(radio_nr
, int, NULL
, 0444);
95 MODULE_PARM_DESC(video_nr
, "video device numbers");
96 MODULE_PARM_DESC(vbi_nr
, "vbi device numbers");
97 MODULE_PARM_DESC(radio_nr
, "radio device numbers");
99 static unsigned int video_debug
;
100 module_param(video_debug
, int, 0644);
101 MODULE_PARM_DESC(video_debug
, "enable debug messages [video]");
103 /* supported video standards */
104 static struct em28xx_fmt format
[] = {
106 .name
= "16 bpp YUY2, 4:2:2, packed",
107 .fourcc
= V4L2_PIX_FMT_YUYV
,
109 .reg
= EM28XX_OUTFMT_YUV422_Y0UY1V
,
111 .name
= "16 bpp RGB 565, LE",
112 .fourcc
= V4L2_PIX_FMT_RGB565
,
114 .reg
= EM28XX_OUTFMT_RGB_16_656
,
116 .name
= "8 bpp Bayer BGBG..GRGR",
117 .fourcc
= V4L2_PIX_FMT_SBGGR8
,
119 .reg
= EM28XX_OUTFMT_RGB_8_BGBG
,
121 .name
= "8 bpp Bayer GRGR..BGBG",
122 .fourcc
= V4L2_PIX_FMT_SGRBG8
,
124 .reg
= EM28XX_OUTFMT_RGB_8_GRGR
,
126 .name
= "8 bpp Bayer GBGB..RGRG",
127 .fourcc
= V4L2_PIX_FMT_SGBRG8
,
129 .reg
= EM28XX_OUTFMT_RGB_8_GBGB
,
131 .name
= "12 bpp YUV411",
132 .fourcc
= V4L2_PIX_FMT_YUV411P
,
134 .reg
= EM28XX_OUTFMT_YUV411
,
138 /* ------------------------------------------------------------------
139 DMA and thread functions
140 ------------------------------------------------------------------*/
143 * Finish the current buffer
145 static inline void finish_buffer(struct em28xx
*dev
,
146 struct em28xx_buffer
*buf
)
148 em28xx_isocdbg("[%p/%d] wakeup\n", buf
, buf
->top_field
);
150 buf
->vb
.v4l2_buf
.sequence
= dev
->field_count
++;
151 buf
->vb
.v4l2_buf
.field
= V4L2_FIELD_INTERLACED
;
152 v4l2_get_timestamp(&buf
->vb
.v4l2_buf
.timestamp
);
154 vb2_buffer_done(&buf
->vb
, VB2_BUF_STATE_DONE
);
158 * Copy picture data from USB buffer to videobuf buffer
160 static void em28xx_copy_video(struct em28xx
*dev
,
161 struct em28xx_buffer
*buf
,
162 unsigned char *usb_buf
,
165 void *fieldstart
, *startwrite
, *startread
;
166 int linesdone
, currlinedone
, offset
, lencopy
, remain
;
167 int bytesperline
= dev
->width
<< 1;
169 if (buf
->pos
+ len
> buf
->length
)
170 len
= buf
->length
- buf
->pos
;
175 if (dev
->progressive
|| buf
->top_field
)
176 fieldstart
= buf
->vb_buf
;
177 else /* interlaced mode, even nr. of lines */
178 fieldstart
= buf
->vb_buf
+ bytesperline
;
180 linesdone
= buf
->pos
/ bytesperline
;
181 currlinedone
= buf
->pos
% bytesperline
;
183 if (dev
->progressive
)
184 offset
= linesdone
* bytesperline
+ currlinedone
;
186 offset
= linesdone
* bytesperline
* 2 + currlinedone
;
188 startwrite
= fieldstart
+ offset
;
189 lencopy
= bytesperline
- currlinedone
;
190 lencopy
= lencopy
> remain
? remain
: lencopy
;
192 if ((char *)startwrite
+ lencopy
> (char *)buf
->vb_buf
+ buf
->length
) {
193 em28xx_isocdbg("Overflow of %zi bytes past buffer end (1)\n",
194 ((char *)startwrite
+ lencopy
) -
195 ((char *)buf
->vb_buf
+ buf
->length
));
196 remain
= (char *)buf
->vb_buf
+ buf
->length
-
202 memcpy(startwrite
, startread
, lencopy
);
207 if (dev
->progressive
)
208 startwrite
+= lencopy
;
210 startwrite
+= lencopy
+ bytesperline
;
211 startread
+= lencopy
;
212 if (bytesperline
> remain
)
215 lencopy
= bytesperline
;
217 if ((char *)startwrite
+ lencopy
> (char *)buf
->vb_buf
+
219 em28xx_isocdbg("Overflow of %zi bytes past buffer end"
221 ((char *)startwrite
+ lencopy
) -
222 ((char *)buf
->vb_buf
+ buf
->length
));
223 lencopy
= remain
= (char *)buf
->vb_buf
+ buf
->length
-
229 memcpy(startwrite
, startread
, lencopy
);
238 * Copy VBI data from USB buffer to videobuf buffer
240 static void em28xx_copy_vbi(struct em28xx
*dev
,
241 struct em28xx_buffer
*buf
,
242 unsigned char *usb_buf
,
247 if (buf
->pos
+ len
> buf
->length
)
248 len
= buf
->length
- buf
->pos
;
251 /* Make sure the bottom field populates the second half of the frame */
252 if (buf
->top_field
== 0)
253 offset
+= dev
->vbi_width
* dev
->vbi_height
;
255 memcpy(buf
->vb_buf
+ offset
, usb_buf
, len
);
259 static inline void print_err_status(struct em28xx
*dev
,
260 int packet
, int status
)
262 char *errmsg
= "Unknown";
266 errmsg
= "unlinked synchronuously";
269 errmsg
= "unlinked asynchronuously";
272 errmsg
= "Buffer error (overrun)";
275 errmsg
= "Stalled (device not responding)";
278 errmsg
= "Babble (bad cable?)";
281 errmsg
= "Bit-stuff error (bad cable?)";
284 errmsg
= "CRC/Timeout (could be anything)";
287 errmsg
= "Device does not respond";
291 em28xx_isocdbg("URB status %d [%s].\n", status
, errmsg
);
293 em28xx_isocdbg("URB packet %d, status %d [%s].\n",
294 packet
, status
, errmsg
);
299 * get the next available buffer from dma queue
301 static inline struct em28xx_buffer
*get_next_buf(struct em28xx
*dev
,
302 struct em28xx_dmaqueue
*dma_q
)
304 struct em28xx_buffer
*buf
;
306 if (list_empty(&dma_q
->active
)) {
307 em28xx_isocdbg("No active queue to serve\n");
311 /* Get the next buffer */
312 buf
= list_entry(dma_q
->active
.next
, struct em28xx_buffer
, list
);
313 /* Cleans up buffer - Useful for testing for frame/URB loss */
314 list_del(&buf
->list
);
316 buf
->vb_buf
= buf
->mem
;
322 * Finish the current buffer if completed and prepare for the next field
324 static struct em28xx_buffer
*
325 finish_field_prepare_next(struct em28xx
*dev
,
326 struct em28xx_buffer
*buf
,
327 struct em28xx_dmaqueue
*dma_q
)
329 if (dev
->progressive
|| dev
->top_field
) { /* Brand new frame */
331 finish_buffer(dev
, buf
);
332 buf
= get_next_buf(dev
, dma_q
);
335 buf
->top_field
= dev
->top_field
;
343 * Process data packet according to the em2710/em2750/em28xx frame data format
345 static inline void process_frame_data_em28xx(struct em28xx
*dev
,
346 unsigned char *data_pkt
,
347 unsigned int data_len
)
349 struct em28xx_buffer
*buf
= dev
->usb_ctl
.vid_buf
;
350 struct em28xx_buffer
*vbi_buf
= dev
->usb_ctl
.vbi_buf
;
351 struct em28xx_dmaqueue
*dma_q
= &dev
->vidq
;
352 struct em28xx_dmaqueue
*vbi_dma_q
= &dev
->vbiq
;
354 /* capture type 0 = vbi start
355 capture type 1 = vbi in progress
356 capture type 2 = video start
357 capture type 3 = video in progress */
359 /* NOTE: Headers are always 4 bytes and
360 * never split across packets */
361 if (data_pkt
[0] == 0x88 && data_pkt
[1] == 0x88 &&
362 data_pkt
[2] == 0x88 && data_pkt
[3] == 0x88) {
366 } else if (data_pkt
[0] == 0x33 && data_pkt
[1] == 0x95) {
367 /* Field start (VBI mode) */
368 dev
->capture_type
= 0;
370 em28xx_isocdbg("VBI START HEADER !!!\n");
371 dev
->top_field
= !(data_pkt
[2] & 1);
374 } else if (data_pkt
[0] == 0x22 && data_pkt
[1] == 0x5a) {
375 /* Field start (VBI disabled) */
376 dev
->capture_type
= 2;
377 em28xx_isocdbg("VIDEO START HEADER !!!\n");
378 dev
->top_field
= !(data_pkt
[2] & 1);
383 /* NOTE: With bulk transfers, intermediate data packets
384 * have no continuation header */
386 if (dev
->capture_type
== 0) {
387 vbi_buf
= finish_field_prepare_next(dev
, vbi_buf
, vbi_dma_q
);
388 dev
->usb_ctl
.vbi_buf
= vbi_buf
;
389 dev
->capture_type
= 1;
392 if (dev
->capture_type
== 1) {
393 int vbi_size
= dev
->vbi_width
* dev
->vbi_height
;
394 int vbi_data_len
= ((dev
->vbi_read
+ data_len
) > vbi_size
) ?
395 (vbi_size
- dev
->vbi_read
) : data_len
;
399 em28xx_copy_vbi(dev
, vbi_buf
, data_pkt
, vbi_data_len
);
400 dev
->vbi_read
+= vbi_data_len
;
402 if (vbi_data_len
< data_len
) {
403 /* Continue with copying video data */
404 dev
->capture_type
= 2;
405 data_pkt
+= vbi_data_len
;
406 data_len
-= vbi_data_len
;
410 if (dev
->capture_type
== 2) {
411 buf
= finish_field_prepare_next(dev
, buf
, dma_q
);
412 dev
->usb_ctl
.vid_buf
= buf
;
413 dev
->capture_type
= 3;
416 if (dev
->capture_type
== 3 && buf
!= NULL
&& data_len
> 0)
417 em28xx_copy_video(dev
, buf
, data_pkt
, data_len
);
421 * Process data packet according to the em25xx/em276x/7x/8x frame data format
423 static inline void process_frame_data_em25xx(struct em28xx
*dev
,
424 unsigned char *data_pkt
,
425 unsigned int data_len
)
427 struct em28xx_buffer
*buf
= dev
->usb_ctl
.vid_buf
;
428 struct em28xx_dmaqueue
*dmaq
= &dev
->vidq
;
431 /* Check for header */
432 /* NOTE: at least with bulk transfers, only the first packet
433 * has a header and has always set the FRAME_END bit */
434 if (data_len
>= 2) { /* em25xx header is only 2 bytes long */
435 if ((data_pkt
[0] == EM25XX_FRMDATAHDR_BYTE1
) &&
436 ((data_pkt
[1] & ~EM25XX_FRMDATAHDR_BYTE2_MASK
) == 0x00)) {
437 dev
->top_field
= !(data_pkt
[1] &
438 EM25XX_FRMDATAHDR_BYTE2_FRAME_ID
);
439 frame_end
= data_pkt
[1] &
440 EM25XX_FRMDATAHDR_BYTE2_FRAME_END
;
445 /* Finish field and prepare next (BULK only) */
446 if (dev
->analog_xfer_bulk
&& frame_end
) {
447 buf
= finish_field_prepare_next(dev
, buf
, dmaq
);
448 dev
->usb_ctl
.vid_buf
= buf
;
450 /* NOTE: in ISOC mode when a new frame starts and buf==NULL,
451 * we COULD already prepare a buffer here to avoid skipping the
457 if (buf
!= NULL
&& data_len
> 0)
458 em28xx_copy_video(dev
, buf
, data_pkt
, data_len
);
460 /* Finish frame (ISOC only) => avoids lag of 1 frame */
461 if (!dev
->analog_xfer_bulk
&& frame_end
) {
462 buf
= finish_field_prepare_next(dev
, buf
, dmaq
);
463 dev
->usb_ctl
.vid_buf
= buf
;
466 /* NOTE: Tested with USB bulk transfers only !
467 * The wording in the datasheet suggests that isoc might work different.
468 * The current code assumes that with isoc transfers each packet has a
469 * header like with the other em28xx devices.
471 /* NOTE: Support for interlaced mode is pure theory. It has not been
472 * tested and it is unknown if these devices actually support it. */
473 /* NOTE: No VBI support yet (these chips likely do not support VBI). */
476 /* Processes and copies the URB data content (video and VBI data) */
477 static inline int em28xx_urb_data_copy(struct em28xx
*dev
, struct urb
*urb
)
479 int xfer_bulk
, num_packets
, i
;
480 unsigned char *usb_data_pkt
;
481 unsigned int usb_data_len
;
486 if (dev
->disconnected
)
490 print_err_status(dev
, -1, urb
->status
);
492 xfer_bulk
= usb_pipebulk(urb
->pipe
);
494 if (xfer_bulk
) /* bulk */
497 num_packets
= urb
->number_of_packets
;
499 for (i
= 0; i
< num_packets
; i
++) {
500 if (xfer_bulk
) { /* bulk */
501 usb_data_len
= urb
->actual_length
;
503 usb_data_pkt
= urb
->transfer_buffer
;
505 if (urb
->iso_frame_desc
[i
].status
< 0) {
506 print_err_status(dev
, i
,
507 urb
->iso_frame_desc
[i
].status
);
508 if (urb
->iso_frame_desc
[i
].status
!= -EPROTO
)
512 usb_data_len
= urb
->iso_frame_desc
[i
].actual_length
;
513 if (usb_data_len
> dev
->max_pkt_size
) {
514 em28xx_isocdbg("packet bigger than packet size");
518 usb_data_pkt
= urb
->transfer_buffer
+
519 urb
->iso_frame_desc
[i
].offset
;
522 if (usb_data_len
== 0) {
523 /* NOTE: happens very often with isoc transfers */
524 /* em28xx_usbdbg("packet %d is empty",i); - spammy */
529 process_frame_data_em25xx(dev
,
530 usb_data_pkt
, usb_data_len
);
532 process_frame_data_em28xx(dev
,
533 usb_data_pkt
, usb_data_len
);
540 static int get_ressource(enum v4l2_buf_type f_type
)
543 case V4L2_BUF_TYPE_VIDEO_CAPTURE
:
544 return EM28XX_RESOURCE_VIDEO
;
545 case V4L2_BUF_TYPE_VBI_CAPTURE
:
546 return EM28XX_RESOURCE_VBI
;
553 /* Usage lock check functions */
554 static int res_get(struct em28xx
*dev
, enum v4l2_buf_type f_type
)
556 int res_type
= get_ressource(f_type
);
559 if (dev
->resources
& res_type
) {
560 /* no, someone else uses it */
564 /* it's free, grab it */
565 dev
->resources
|= res_type
;
566 em28xx_videodbg("res: get %d\n", res_type
);
570 static void res_free(struct em28xx
*dev
, enum v4l2_buf_type f_type
)
572 int res_type
= get_ressource(f_type
);
574 dev
->resources
&= ~res_type
;
575 em28xx_videodbg("res: put %d\n", res_type
);
578 /* ------------------------------------------------------------------
580 ------------------------------------------------------------------*/
582 static int queue_setup(struct vb2_queue
*vq
, const struct v4l2_format
*fmt
,
583 unsigned int *nbuffers
, unsigned int *nplanes
,
584 unsigned int sizes
[], void *alloc_ctxs
[])
586 struct em28xx
*dev
= vb2_get_drv_priv(vq
);
590 size
= fmt
->fmt
.pix
.sizeimage
;
592 size
= (dev
->width
* dev
->height
* dev
->format
->depth
+ 7) >> 3;
607 buffer_prepare(struct vb2_buffer
*vb
)
609 struct em28xx
*dev
= vb2_get_drv_priv(vb
->vb2_queue
);
610 struct em28xx_buffer
*buf
= container_of(vb
, struct em28xx_buffer
, vb
);
613 em28xx_videodbg("%s, field=%d\n", __func__
, vb
->v4l2_buf
.field
);
615 size
= (dev
->width
* dev
->height
* dev
->format
->depth
+ 7) >> 3;
617 if (vb2_plane_size(vb
, 0) < size
) {
618 em28xx_videodbg("%s data will not fit into plane (%lu < %lu)\n",
619 __func__
, vb2_plane_size(vb
, 0), size
);
622 vb2_set_plane_payload(&buf
->vb
, 0, size
);
627 int em28xx_start_analog_streaming(struct vb2_queue
*vq
, unsigned int count
)
629 struct em28xx
*dev
= vb2_get_drv_priv(vq
);
630 struct v4l2_frequency f
;
633 em28xx_videodbg("%s\n", __func__
);
635 /* Make sure streaming is not already in progress for this type
636 of filehandle (e.g. video, vbi) */
637 rc
= res_get(dev
, vq
->type
);
641 if (dev
->streaming_users
++ == 0) {
642 /* First active streaming user, so allocate all the URBs */
644 /* Allocate the USB bandwidth */
645 em28xx_set_alternate(dev
);
647 /* Needed, since GPIO might have disabled power of
650 em28xx_wake_i2c(dev
);
652 dev
->capture_type
= -1;
653 rc
= em28xx_init_usb_xfer(dev
, EM28XX_ANALOG_MODE
,
654 dev
->analog_xfer_bulk
,
657 dev
->packet_multiplier
,
658 em28xx_urb_data_copy
);
663 * djh: it's not clear whether this code is still needed. I'm
664 * leaving it in here for now entirely out of concern for
665 * backward compatibility (the old code did it)
668 /* Ask tuner to go to analog or radio mode */
669 memset(&f
, 0, sizeof(f
));
670 f
.frequency
= dev
->ctl_freq
;
671 if (vq
->owner
&& vq
->owner
->vdev
->vfl_type
== VFL_TYPE_RADIO
)
672 f
.type
= V4L2_TUNER_RADIO
;
674 f
.type
= V4L2_TUNER_ANALOG_TV
;
675 v4l2_device_call_all(&dev
->v4l2_dev
, 0, tuner
, s_frequency
, &f
);
682 static int em28xx_stop_streaming(struct vb2_queue
*vq
)
684 struct em28xx
*dev
= vb2_get_drv_priv(vq
);
685 struct em28xx_dmaqueue
*vidq
= &dev
->vidq
;
686 unsigned long flags
= 0;
688 em28xx_videodbg("%s\n", __func__
);
690 res_free(dev
, vq
->type
);
692 if (dev
->streaming_users
-- == 1) {
693 /* Last active user, so shutdown all the URBS */
694 em28xx_uninit_usb_xfer(dev
, EM28XX_ANALOG_MODE
);
697 spin_lock_irqsave(&dev
->slock
, flags
);
698 while (!list_empty(&vidq
->active
)) {
699 struct em28xx_buffer
*buf
;
700 buf
= list_entry(vidq
->active
.next
, struct em28xx_buffer
, list
);
701 list_del(&buf
->list
);
702 vb2_buffer_done(&buf
->vb
, VB2_BUF_STATE_ERROR
);
704 dev
->usb_ctl
.vid_buf
= NULL
;
705 spin_unlock_irqrestore(&dev
->slock
, flags
);
710 int em28xx_stop_vbi_streaming(struct vb2_queue
*vq
)
712 struct em28xx
*dev
= vb2_get_drv_priv(vq
);
713 struct em28xx_dmaqueue
*vbiq
= &dev
->vbiq
;
714 unsigned long flags
= 0;
716 em28xx_videodbg("%s\n", __func__
);
718 res_free(dev
, vq
->type
);
720 if (dev
->streaming_users
-- == 1) {
721 /* Last active user, so shutdown all the URBS */
722 em28xx_uninit_usb_xfer(dev
, EM28XX_ANALOG_MODE
);
725 spin_lock_irqsave(&dev
->slock
, flags
);
726 while (!list_empty(&vbiq
->active
)) {
727 struct em28xx_buffer
*buf
;
728 buf
= list_entry(vbiq
->active
.next
, struct em28xx_buffer
, list
);
729 list_del(&buf
->list
);
730 vb2_buffer_done(&buf
->vb
, VB2_BUF_STATE_ERROR
);
732 dev
->usb_ctl
.vbi_buf
= NULL
;
733 spin_unlock_irqrestore(&dev
->slock
, flags
);
739 buffer_queue(struct vb2_buffer
*vb
)
741 struct em28xx
*dev
= vb2_get_drv_priv(vb
->vb2_queue
);
742 struct em28xx_buffer
*buf
= container_of(vb
, struct em28xx_buffer
, vb
);
743 struct em28xx_dmaqueue
*vidq
= &dev
->vidq
;
744 unsigned long flags
= 0;
746 em28xx_videodbg("%s\n", __func__
);
747 buf
->mem
= vb2_plane_vaddr(vb
, 0);
748 buf
->length
= vb2_plane_size(vb
, 0);
750 spin_lock_irqsave(&dev
->slock
, flags
);
751 list_add_tail(&buf
->list
, &vidq
->active
);
752 spin_unlock_irqrestore(&dev
->slock
, flags
);
755 static struct vb2_ops em28xx_video_qops
= {
756 .queue_setup
= queue_setup
,
757 .buf_prepare
= buffer_prepare
,
758 .buf_queue
= buffer_queue
,
759 .start_streaming
= em28xx_start_analog_streaming
,
760 .stop_streaming
= em28xx_stop_streaming
,
761 .wait_prepare
= vb2_ops_wait_prepare
,
762 .wait_finish
= vb2_ops_wait_finish
,
765 int em28xx_vb2_setup(struct em28xx
*dev
)
770 /* Setup Videobuf2 for Video capture */
772 q
->type
= V4L2_BUF_TYPE_VIDEO_CAPTURE
;
773 q
->io_modes
= VB2_READ
| VB2_MMAP
| VB2_USERPTR
| VB2_DMABUF
;
774 q
->timestamp_type
= V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC
;
776 q
->buf_struct_size
= sizeof(struct em28xx_buffer
);
777 q
->ops
= &em28xx_video_qops
;
778 q
->mem_ops
= &vb2_vmalloc_memops
;
780 rc
= vb2_queue_init(q
);
784 /* Setup Videobuf2 for VBI capture */
786 q
->type
= V4L2_BUF_TYPE_VBI_CAPTURE
;
787 q
->io_modes
= VB2_READ
| VB2_MMAP
| VB2_USERPTR
;
788 q
->timestamp_type
= V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC
;
790 q
->buf_struct_size
= sizeof(struct em28xx_buffer
);
791 q
->ops
= &em28xx_vbi_qops
;
792 q
->mem_ops
= &vb2_vmalloc_memops
;
794 rc
= vb2_queue_init(q
);
801 /********************* v4l2 interface **************************************/
803 static void video_mux(struct em28xx
*dev
, int index
)
805 dev
->ctl_input
= index
;
806 dev
->ctl_ainput
= INPUT(index
)->amux
;
807 dev
->ctl_aoutput
= INPUT(index
)->aout
;
809 if (!dev
->ctl_aoutput
)
810 dev
->ctl_aoutput
= EM28XX_AOUT_MASTER
;
812 v4l2_device_call_all(&dev
->v4l2_dev
, 0, video
, s_routing
,
813 INPUT(index
)->vmux
, 0, 0);
815 if (dev
->board
.has_msp34xx
) {
816 if (dev
->i2s_speed
) {
817 v4l2_device_call_all(&dev
->v4l2_dev
, 0, audio
,
818 s_i2s_clock_freq
, dev
->i2s_speed
);
820 /* Note: this is msp3400 specific */
821 v4l2_device_call_all(&dev
->v4l2_dev
, 0, audio
, s_routing
,
822 dev
->ctl_ainput
, MSP_OUTPUT(MSP_SC_IN_DSP_SCART1
), 0);
825 if (dev
->board
.adecoder
!= EM28XX_NOADECODER
) {
826 v4l2_device_call_all(&dev
->v4l2_dev
, 0, audio
, s_routing
,
827 dev
->ctl_ainput
, dev
->ctl_aoutput
, 0);
830 em28xx_audio_analog_set(dev
);
833 void em28xx_ctrl_notify(struct v4l2_ctrl
*ctrl
, void *priv
)
835 struct em28xx
*dev
= priv
;
838 * In the case of non-AC97 volume controls, we still need
839 * to do some setups at em28xx, in order to mute/unmute
840 * and to adjust audio volume. However, the value ranges
841 * should be checked by the corresponding V4L subdriver.
844 case V4L2_CID_AUDIO_MUTE
:
845 dev
->mute
= ctrl
->val
;
846 em28xx_audio_analog_set(dev
);
848 case V4L2_CID_AUDIO_VOLUME
:
849 dev
->volume
= ctrl
->val
;
850 em28xx_audio_analog_set(dev
);
855 static int em28xx_s_ctrl(struct v4l2_ctrl
*ctrl
)
857 struct em28xx
*dev
= container_of(ctrl
->handler
, struct em28xx
, ctrl_handler
);
861 case V4L2_CID_AUDIO_MUTE
:
862 dev
->mute
= ctrl
->val
;
863 ret
= em28xx_audio_analog_set(dev
);
865 case V4L2_CID_AUDIO_VOLUME
:
866 dev
->volume
= ctrl
->val
;
867 ret
= em28xx_audio_analog_set(dev
);
869 case V4L2_CID_CONTRAST
:
870 ret
= em28xx_write_reg(dev
, EM28XX_R20_YGAIN
, ctrl
->val
);
872 case V4L2_CID_BRIGHTNESS
:
873 ret
= em28xx_write_reg(dev
, EM28XX_R21_YOFFSET
, ctrl
->val
);
875 case V4L2_CID_SATURATION
:
876 ret
= em28xx_write_reg(dev
, EM28XX_R22_UVGAIN
, ctrl
->val
);
878 case V4L2_CID_BLUE_BALANCE
:
879 ret
= em28xx_write_reg(dev
, EM28XX_R23_UOFFSET
, ctrl
->val
);
881 case V4L2_CID_RED_BALANCE
:
882 ret
= em28xx_write_reg(dev
, EM28XX_R24_VOFFSET
, ctrl
->val
);
884 case V4L2_CID_SHARPNESS
:
885 ret
= em28xx_write_reg(dev
, EM28XX_R25_SHARPNESS
, ctrl
->val
);
889 return (ret
< 0) ? ret
: 0;
892 const struct v4l2_ctrl_ops em28xx_ctrl_ops
= {
893 .s_ctrl
= em28xx_s_ctrl
,
896 static void size_to_scale(struct em28xx
*dev
,
897 unsigned int width
, unsigned int height
,
898 unsigned int *hscale
, unsigned int *vscale
)
900 unsigned int maxw
= norm_maxw(dev
);
901 unsigned int maxh
= norm_maxh(dev
);
903 *hscale
= (((unsigned long)maxw
) << 12) / width
- 4096L;
904 if (*hscale
> EM28XX_HVSCALE_MAX
)
905 *hscale
= EM28XX_HVSCALE_MAX
;
907 *vscale
= (((unsigned long)maxh
) << 12) / height
- 4096L;
908 if (*vscale
> EM28XX_HVSCALE_MAX
)
909 *vscale
= EM28XX_HVSCALE_MAX
;
912 static void scale_to_size(struct em28xx
*dev
,
913 unsigned int hscale
, unsigned int vscale
,
914 unsigned int *width
, unsigned int *height
)
916 unsigned int maxw
= norm_maxw(dev
);
917 unsigned int maxh
= norm_maxh(dev
);
919 *width
= (((unsigned long)maxw
) << 12) / (hscale
+ 4096L);
920 *height
= (((unsigned long)maxh
) << 12) / (vscale
+ 4096L);
923 /* ------------------------------------------------------------------
924 IOCTL vidioc handling
925 ------------------------------------------------------------------*/
927 static int vidioc_g_fmt_vid_cap(struct file
*file
, void *priv
,
928 struct v4l2_format
*f
)
930 struct em28xx_fh
*fh
= priv
;
931 struct em28xx
*dev
= fh
->dev
;
933 f
->fmt
.pix
.width
= dev
->width
;
934 f
->fmt
.pix
.height
= dev
->height
;
935 f
->fmt
.pix
.pixelformat
= dev
->format
->fourcc
;
936 f
->fmt
.pix
.bytesperline
= (dev
->width
* dev
->format
->depth
+ 7) >> 3;
937 f
->fmt
.pix
.sizeimage
= f
->fmt
.pix
.bytesperline
* dev
->height
;
938 f
->fmt
.pix
.colorspace
= V4L2_COLORSPACE_SMPTE170M
;
940 /* FIXME: TOP? NONE? BOTTOM? ALTENATE? */
941 if (dev
->progressive
)
942 f
->fmt
.pix
.field
= V4L2_FIELD_NONE
;
944 f
->fmt
.pix
.field
= dev
->interlaced
?
945 V4L2_FIELD_INTERLACED
: V4L2_FIELD_TOP
;
949 static struct em28xx_fmt
*format_by_fourcc(unsigned int fourcc
)
953 for (i
= 0; i
< ARRAY_SIZE(format
); i
++)
954 if (format
[i
].fourcc
== fourcc
)
960 static int vidioc_try_fmt_vid_cap(struct file
*file
, void *priv
,
961 struct v4l2_format
*f
)
963 struct em28xx_fh
*fh
= priv
;
964 struct em28xx
*dev
= fh
->dev
;
965 unsigned int width
= f
->fmt
.pix
.width
;
966 unsigned int height
= f
->fmt
.pix
.height
;
967 unsigned int maxw
= norm_maxw(dev
);
968 unsigned int maxh
= norm_maxh(dev
);
969 unsigned int hscale
, vscale
;
970 struct em28xx_fmt
*fmt
;
972 fmt
= format_by_fourcc(f
->fmt
.pix
.pixelformat
);
974 em28xx_videodbg("Fourcc format (%08x) invalid.\n",
975 f
->fmt
.pix
.pixelformat
);
979 if (dev
->board
.is_em2800
) {
980 /* the em2800 can only scale down to 50% */
981 height
= height
> (3 * maxh
/ 4) ? maxh
: maxh
/ 2;
982 width
= width
> (3 * maxw
/ 4) ? maxw
: maxw
/ 2;
984 * MaxPacketSize for em2800 is too small to capture at full
985 * resolution use half of maxw as the scaler can only scale
988 if (width
== maxw
&& height
== maxh
)
991 /* width must even because of the YUYV format
992 height must be even because of interlacing */
993 v4l_bound_align_image(&width
, 48, maxw
, 1, &height
, 32, maxh
,
997 size_to_scale(dev
, width
, height
, &hscale
, &vscale
);
998 scale_to_size(dev
, hscale
, vscale
, &width
, &height
);
1000 f
->fmt
.pix
.width
= width
;
1001 f
->fmt
.pix
.height
= height
;
1002 f
->fmt
.pix
.pixelformat
= fmt
->fourcc
;
1003 f
->fmt
.pix
.bytesperline
= (width
* fmt
->depth
+ 7) >> 3;
1004 f
->fmt
.pix
.sizeimage
= f
->fmt
.pix
.bytesperline
* height
;
1005 f
->fmt
.pix
.colorspace
= V4L2_COLORSPACE_SMPTE170M
;
1006 if (dev
->progressive
)
1007 f
->fmt
.pix
.field
= V4L2_FIELD_NONE
;
1009 f
->fmt
.pix
.field
= dev
->interlaced
?
1010 V4L2_FIELD_INTERLACED
: V4L2_FIELD_TOP
;
1015 static int em28xx_set_video_format(struct em28xx
*dev
, unsigned int fourcc
,
1016 unsigned width
, unsigned height
)
1018 struct em28xx_fmt
*fmt
;
1020 fmt
= format_by_fourcc(fourcc
);
1026 dev
->height
= height
;
1028 /* set new image size */
1029 size_to_scale(dev
, dev
->width
, dev
->height
, &dev
->hscale
, &dev
->vscale
);
1031 em28xx_resolution_set(dev
);
1036 static int vidioc_s_fmt_vid_cap(struct file
*file
, void *priv
,
1037 struct v4l2_format
*f
)
1039 struct em28xx
*dev
= video_drvdata(file
);
1041 if (dev
->streaming_users
> 0)
1044 vidioc_try_fmt_vid_cap(file
, priv
, f
);
1046 return em28xx_set_video_format(dev
, f
->fmt
.pix
.pixelformat
,
1047 f
->fmt
.pix
.width
, f
->fmt
.pix
.height
);
1050 static int vidioc_g_std(struct file
*file
, void *priv
, v4l2_std_id
*norm
)
1052 struct em28xx_fh
*fh
= priv
;
1053 struct em28xx
*dev
= fh
->dev
;
1060 static int vidioc_querystd(struct file
*file
, void *priv
, v4l2_std_id
*norm
)
1062 struct em28xx_fh
*fh
= priv
;
1063 struct em28xx
*dev
= fh
->dev
;
1065 v4l2_device_call_all(&dev
->v4l2_dev
, 0, video
, querystd
, norm
);
1070 static int vidioc_s_std(struct file
*file
, void *priv
, v4l2_std_id norm
)
1072 struct em28xx_fh
*fh
= priv
;
1073 struct em28xx
*dev
= fh
->dev
;
1074 struct v4l2_format f
;
1076 if (norm
== dev
->norm
)
1079 if (dev
->streaming_users
> 0)
1084 /* Adjusts width/height, if needed */
1085 f
.fmt
.pix
.width
= 720;
1086 f
.fmt
.pix
.height
= (norm
& V4L2_STD_525_60
) ? 480 : 576;
1087 vidioc_try_fmt_vid_cap(file
, priv
, &f
);
1089 /* set new image size */
1090 dev
->width
= f
.fmt
.pix
.width
;
1091 dev
->height
= f
.fmt
.pix
.height
;
1092 size_to_scale(dev
, dev
->width
, dev
->height
, &dev
->hscale
, &dev
->vscale
);
1094 em28xx_resolution_set(dev
);
1095 v4l2_device_call_all(&dev
->v4l2_dev
, 0, core
, s_std
, dev
->norm
);
1100 static int vidioc_g_parm(struct file
*file
, void *priv
,
1101 struct v4l2_streamparm
*p
)
1103 struct em28xx_fh
*fh
= priv
;
1104 struct em28xx
*dev
= fh
->dev
;
1107 p
->parm
.capture
.readbuffers
= EM28XX_MIN_BUF
;
1108 if (dev
->board
.is_webcam
)
1109 rc
= v4l2_device_call_until_err(&dev
->v4l2_dev
, 0,
1112 v4l2_video_std_frame_period(dev
->norm
,
1113 &p
->parm
.capture
.timeperframe
);
1118 static int vidioc_s_parm(struct file
*file
, void *priv
,
1119 struct v4l2_streamparm
*p
)
1121 struct em28xx_fh
*fh
= priv
;
1122 struct em28xx
*dev
= fh
->dev
;
1124 p
->parm
.capture
.readbuffers
= EM28XX_MIN_BUF
;
1125 return v4l2_device_call_until_err(&dev
->v4l2_dev
, 0, video
, s_parm
, p
);
1128 static const char *iname
[] = {
1129 [EM28XX_VMUX_COMPOSITE1
] = "Composite1",
1130 [EM28XX_VMUX_COMPOSITE2
] = "Composite2",
1131 [EM28XX_VMUX_COMPOSITE3
] = "Composite3",
1132 [EM28XX_VMUX_COMPOSITE4
] = "Composite4",
1133 [EM28XX_VMUX_SVIDEO
] = "S-Video",
1134 [EM28XX_VMUX_TELEVISION
] = "Television",
1135 [EM28XX_VMUX_CABLE
] = "Cable TV",
1136 [EM28XX_VMUX_DVB
] = "DVB",
1137 [EM28XX_VMUX_DEBUG
] = "for debug only",
1140 static int vidioc_enum_input(struct file
*file
, void *priv
,
1141 struct v4l2_input
*i
)
1143 struct em28xx_fh
*fh
= priv
;
1144 struct em28xx
*dev
= fh
->dev
;
1148 if (n
>= MAX_EM28XX_INPUT
)
1150 if (0 == INPUT(n
)->type
)
1154 i
->type
= V4L2_INPUT_TYPE_CAMERA
;
1156 strcpy(i
->name
, iname
[INPUT(n
)->type
]);
1158 if ((EM28XX_VMUX_TELEVISION
== INPUT(n
)->type
) ||
1159 (EM28XX_VMUX_CABLE
== INPUT(n
)->type
))
1160 i
->type
= V4L2_INPUT_TYPE_TUNER
;
1162 i
->std
= dev
->vdev
->tvnorms
;
1163 /* webcams do not have the STD API */
1164 if (dev
->board
.is_webcam
)
1165 i
->capabilities
= 0;
1170 static int vidioc_g_input(struct file
*file
, void *priv
, unsigned int *i
)
1172 struct em28xx_fh
*fh
= priv
;
1173 struct em28xx
*dev
= fh
->dev
;
1175 *i
= dev
->ctl_input
;
1180 static int vidioc_s_input(struct file
*file
, void *priv
, unsigned int i
)
1182 struct em28xx_fh
*fh
= priv
;
1183 struct em28xx
*dev
= fh
->dev
;
1185 if (i
>= MAX_EM28XX_INPUT
)
1187 if (0 == INPUT(i
)->type
)
1194 static int vidioc_g_audio(struct file
*file
, void *priv
, struct v4l2_audio
*a
)
1196 struct em28xx_fh
*fh
= priv
;
1197 struct em28xx
*dev
= fh
->dev
;
1200 case EM28XX_AMUX_VIDEO
:
1201 strcpy(a
->name
, "Television");
1203 case EM28XX_AMUX_LINE_IN
:
1204 strcpy(a
->name
, "Line In");
1206 case EM28XX_AMUX_VIDEO2
:
1207 strcpy(a
->name
, "Television alt");
1209 case EM28XX_AMUX_PHONE
:
1210 strcpy(a
->name
, "Phone");
1212 case EM28XX_AMUX_MIC
:
1213 strcpy(a
->name
, "Mic");
1215 case EM28XX_AMUX_CD
:
1216 strcpy(a
->name
, "CD");
1218 case EM28XX_AMUX_AUX
:
1219 strcpy(a
->name
, "Aux");
1221 case EM28XX_AMUX_PCM_OUT
:
1222 strcpy(a
->name
, "PCM");
1228 a
->index
= dev
->ctl_ainput
;
1229 a
->capability
= V4L2_AUDCAP_STEREO
;
1234 static int vidioc_s_audio(struct file
*file
, void *priv
, const struct v4l2_audio
*a
)
1236 struct em28xx_fh
*fh
= priv
;
1237 struct em28xx
*dev
= fh
->dev
;
1239 if (a
->index
>= MAX_EM28XX_INPUT
)
1241 if (0 == INPUT(a
->index
)->type
)
1244 dev
->ctl_ainput
= INPUT(a
->index
)->amux
;
1245 dev
->ctl_aoutput
= INPUT(a
->index
)->aout
;
1247 if (!dev
->ctl_aoutput
)
1248 dev
->ctl_aoutput
= EM28XX_AOUT_MASTER
;
1253 static int vidioc_g_tuner(struct file
*file
, void *priv
,
1254 struct v4l2_tuner
*t
)
1256 struct em28xx_fh
*fh
= priv
;
1257 struct em28xx
*dev
= fh
->dev
;
1262 strcpy(t
->name
, "Tuner");
1264 v4l2_device_call_all(&dev
->v4l2_dev
, 0, tuner
, g_tuner
, t
);
1268 static int vidioc_s_tuner(struct file
*file
, void *priv
,
1269 const struct v4l2_tuner
*t
)
1271 struct em28xx_fh
*fh
= priv
;
1272 struct em28xx
*dev
= fh
->dev
;
1277 v4l2_device_call_all(&dev
->v4l2_dev
, 0, tuner
, s_tuner
, t
);
1281 static int vidioc_g_frequency(struct file
*file
, void *priv
,
1282 struct v4l2_frequency
*f
)
1284 struct em28xx_fh
*fh
= priv
;
1285 struct em28xx
*dev
= fh
->dev
;
1290 f
->frequency
= dev
->ctl_freq
;
1294 static int vidioc_s_frequency(struct file
*file
, void *priv
,
1295 const struct v4l2_frequency
*f
)
1297 struct v4l2_frequency new_freq
= *f
;
1298 struct em28xx_fh
*fh
= priv
;
1299 struct em28xx
*dev
= fh
->dev
;
1304 v4l2_device_call_all(&dev
->v4l2_dev
, 0, tuner
, s_frequency
, f
);
1305 v4l2_device_call_all(&dev
->v4l2_dev
, 0, tuner
, g_frequency
, &new_freq
);
1306 dev
->ctl_freq
= new_freq
.frequency
;
1311 #ifdef CONFIG_VIDEO_ADV_DEBUG
1312 static int vidioc_g_chip_info(struct file
*file
, void *priv
,
1313 struct v4l2_dbg_chip_info
*chip
)
1315 struct em28xx_fh
*fh
= priv
;
1316 struct em28xx
*dev
= fh
->dev
;
1318 if (chip
->match
.addr
> 1)
1320 if (chip
->match
.addr
== 1)
1321 strlcpy(chip
->name
, "ac97", sizeof(chip
->name
));
1323 strlcpy(chip
->name
, dev
->v4l2_dev
.name
, sizeof(chip
->name
));
1327 static int em28xx_reg_len(int reg
)
1330 case EM28XX_R40_AC97LSB
:
1331 case EM28XX_R30_HSCALELOW
:
1332 case EM28XX_R32_VSCALELOW
:
1339 static int vidioc_g_register(struct file
*file
, void *priv
,
1340 struct v4l2_dbg_register
*reg
)
1342 struct em28xx_fh
*fh
= priv
;
1343 struct em28xx
*dev
= fh
->dev
;
1346 if (reg
->match
.addr
> 1)
1348 if (reg
->match
.addr
) {
1349 ret
= em28xx_read_ac97(dev
, reg
->reg
);
1359 reg
->size
= em28xx_reg_len(reg
->reg
);
1360 if (reg
->size
== 1) {
1361 ret
= em28xx_read_reg(dev
, reg
->reg
);
1369 ret
= em28xx_read_reg_req_len(dev
, USB_REQ_GET_STATUS
,
1370 reg
->reg
, (char *)&val
, 2);
1374 reg
->val
= le16_to_cpu(val
);
1380 static int vidioc_s_register(struct file
*file
, void *priv
,
1381 const struct v4l2_dbg_register
*reg
)
1383 struct em28xx_fh
*fh
= priv
;
1384 struct em28xx
*dev
= fh
->dev
;
1387 if (reg
->match
.addr
> 1)
1389 if (reg
->match
.addr
)
1390 return em28xx_write_ac97(dev
, reg
->reg
, reg
->val
);
1393 buf
= cpu_to_le16(reg
->val
);
1395 return em28xx_write_regs(dev
, reg
->reg
, (char *)&buf
,
1396 em28xx_reg_len(reg
->reg
));
1401 static int vidioc_querycap(struct file
*file
, void *priv
,
1402 struct v4l2_capability
*cap
)
1404 struct video_device
*vdev
= video_devdata(file
);
1405 struct em28xx_fh
*fh
= priv
;
1406 struct em28xx
*dev
= fh
->dev
;
1408 strlcpy(cap
->driver
, "em28xx", sizeof(cap
->driver
));
1409 strlcpy(cap
->card
, em28xx_boards
[dev
->model
].name
, sizeof(cap
->card
));
1410 usb_make_path(dev
->udev
, cap
->bus_info
, sizeof(cap
->bus_info
));
1412 if (vdev
->vfl_type
== VFL_TYPE_GRABBER
)
1413 cap
->device_caps
= V4L2_CAP_READWRITE
|
1414 V4L2_CAP_VIDEO_CAPTURE
| V4L2_CAP_STREAMING
;
1415 else if (vdev
->vfl_type
== VFL_TYPE_RADIO
)
1416 cap
->device_caps
= V4L2_CAP_RADIO
;
1418 cap
->device_caps
= V4L2_CAP_READWRITE
| V4L2_CAP_VBI_CAPTURE
;
1420 if (dev
->audio_mode
.has_audio
)
1421 cap
->device_caps
|= V4L2_CAP_AUDIO
;
1423 if (dev
->tuner_type
!= TUNER_ABSENT
)
1424 cap
->device_caps
|= V4L2_CAP_TUNER
;
1426 cap
->capabilities
= cap
->device_caps
| V4L2_CAP_DEVICE_CAPS
|
1427 V4L2_CAP_READWRITE
| V4L2_CAP_VIDEO_CAPTURE
| V4L2_CAP_STREAMING
;
1429 cap
->capabilities
|= V4L2_CAP_VBI_CAPTURE
;
1431 cap
->capabilities
|= V4L2_CAP_RADIO
;
1435 static int vidioc_enum_fmt_vid_cap(struct file
*file
, void *priv
,
1436 struct v4l2_fmtdesc
*f
)
1438 if (unlikely(f
->index
>= ARRAY_SIZE(format
)))
1441 strlcpy(f
->description
, format
[f
->index
].name
, sizeof(f
->description
));
1442 f
->pixelformat
= format
[f
->index
].fourcc
;
1447 static int vidioc_enum_framesizes(struct file
*file
, void *priv
,
1448 struct v4l2_frmsizeenum
*fsize
)
1450 struct em28xx_fh
*fh
= priv
;
1451 struct em28xx
*dev
= fh
->dev
;
1452 struct em28xx_fmt
*fmt
;
1453 unsigned int maxw
= norm_maxw(dev
);
1454 unsigned int maxh
= norm_maxh(dev
);
1456 fmt
= format_by_fourcc(fsize
->pixel_format
);
1458 em28xx_videodbg("Fourcc format (%08x) invalid.\n",
1459 fsize
->pixel_format
);
1463 if (dev
->board
.is_em2800
) {
1464 if (fsize
->index
> 1)
1466 fsize
->type
= V4L2_FRMSIZE_TYPE_DISCRETE
;
1467 fsize
->discrete
.width
= maxw
/ (1 + fsize
->index
);
1468 fsize
->discrete
.height
= maxh
/ (1 + fsize
->index
);
1472 if (fsize
->index
!= 0)
1475 /* Report a continuous range */
1476 fsize
->type
= V4L2_FRMSIZE_TYPE_STEPWISE
;
1477 scale_to_size(dev
, EM28XX_HVSCALE_MAX
, EM28XX_HVSCALE_MAX
,
1478 &fsize
->stepwise
.min_width
, &fsize
->stepwise
.min_height
);
1479 if (fsize
->stepwise
.min_width
< 48)
1480 fsize
->stepwise
.min_width
= 48;
1481 if (fsize
->stepwise
.min_height
< 38)
1482 fsize
->stepwise
.min_height
= 38;
1483 fsize
->stepwise
.max_width
= maxw
;
1484 fsize
->stepwise
.max_height
= maxh
;
1485 fsize
->stepwise
.step_width
= 1;
1486 fsize
->stepwise
.step_height
= 1;
1490 /* RAW VBI ioctls */
1492 static int vidioc_g_fmt_vbi_cap(struct file
*file
, void *priv
,
1493 struct v4l2_format
*format
)
1495 struct em28xx_fh
*fh
= priv
;
1496 struct em28xx
*dev
= fh
->dev
;
1498 format
->fmt
.vbi
.samples_per_line
= dev
->vbi_width
;
1499 format
->fmt
.vbi
.sample_format
= V4L2_PIX_FMT_GREY
;
1500 format
->fmt
.vbi
.offset
= 0;
1501 format
->fmt
.vbi
.flags
= 0;
1502 format
->fmt
.vbi
.sampling_rate
= 6750000 * 4 / 2;
1503 format
->fmt
.vbi
.count
[0] = dev
->vbi_height
;
1504 format
->fmt
.vbi
.count
[1] = dev
->vbi_height
;
1505 memset(format
->fmt
.vbi
.reserved
, 0, sizeof(format
->fmt
.vbi
.reserved
));
1507 /* Varies by video standard (NTSC, PAL, etc.) */
1508 if (dev
->norm
& V4L2_STD_525_60
) {
1510 format
->fmt
.vbi
.start
[0] = 10;
1511 format
->fmt
.vbi
.start
[1] = 273;
1512 } else if (dev
->norm
& V4L2_STD_625_50
) {
1514 format
->fmt
.vbi
.start
[0] = 6;
1515 format
->fmt
.vbi
.start
[1] = 318;
1521 /* ----------------------------------------------------------- */
1522 /* RADIO ESPECIFIC IOCTLS */
1523 /* ----------------------------------------------------------- */
1525 static int radio_g_tuner(struct file
*file
, void *priv
,
1526 struct v4l2_tuner
*t
)
1528 struct em28xx
*dev
= ((struct em28xx_fh
*)priv
)->dev
;
1530 if (unlikely(t
->index
> 0))
1533 strcpy(t
->name
, "Radio");
1535 v4l2_device_call_all(&dev
->v4l2_dev
, 0, tuner
, g_tuner
, t
);
1540 static int radio_s_tuner(struct file
*file
, void *priv
,
1541 const struct v4l2_tuner
*t
)
1543 struct em28xx
*dev
= ((struct em28xx_fh
*)priv
)->dev
;
1548 v4l2_device_call_all(&dev
->v4l2_dev
, 0, tuner
, s_tuner
, t
);
1554 * em28xx_v4l2_open()
1555 * inits the device and starts isoc transfer
1557 static int em28xx_v4l2_open(struct file
*filp
)
1559 struct video_device
*vdev
= video_devdata(filp
);
1560 struct em28xx
*dev
= video_drvdata(filp
);
1561 enum v4l2_buf_type fh_type
= 0;
1562 struct em28xx_fh
*fh
;
1564 switch (vdev
->vfl_type
) {
1565 case VFL_TYPE_GRABBER
:
1566 fh_type
= V4L2_BUF_TYPE_VIDEO_CAPTURE
;
1569 fh_type
= V4L2_BUF_TYPE_VBI_CAPTURE
;
1573 em28xx_videodbg("open dev=%s type=%s users=%d\n",
1574 video_device_node_name(vdev
), v4l2_type_names
[fh_type
],
1578 if (mutex_lock_interruptible(&dev
->lock
))
1579 return -ERESTARTSYS
;
1580 fh
= kzalloc(sizeof(struct em28xx_fh
), GFP_KERNEL
);
1582 em28xx_errdev("em28xx-video.c: Out of memory?!\n");
1583 mutex_unlock(&dev
->lock
);
1586 v4l2_fh_init(&fh
->fh
, vdev
);
1589 filp
->private_data
= fh
;
1591 if (fh
->type
== V4L2_BUF_TYPE_VIDEO_CAPTURE
&& dev
->users
== 0) {
1592 em28xx_set_mode(dev
, EM28XX_ANALOG_MODE
);
1593 em28xx_resolution_set(dev
);
1595 /* Needed, since GPIO might have disabled power of
1598 em28xx_wake_i2c(dev
);
1602 if (vdev
->vfl_type
== VFL_TYPE_RADIO
) {
1603 em28xx_videodbg("video_open: setting radio device\n");
1604 v4l2_device_call_all(&dev
->v4l2_dev
, 0, tuner
, s_radio
);
1609 mutex_unlock(&dev
->lock
);
1610 v4l2_fh_add(&fh
->fh
);
1616 * em28xx_realease_resources()
1617 * unregisters the v4l2,i2c and usb devices
1618 * called when the device gets disconected or at module unload
1620 void em28xx_release_analog_resources(struct em28xx
*dev
)
1623 /*FIXME: I2C IR should be disconnected */
1625 if (dev
->radio_dev
) {
1626 if (video_is_registered(dev
->radio_dev
))
1627 video_unregister_device(dev
->radio_dev
);
1629 video_device_release(dev
->radio_dev
);
1630 dev
->radio_dev
= NULL
;
1633 em28xx_info("V4L2 device %s deregistered\n",
1634 video_device_node_name(dev
->vbi_dev
));
1635 if (video_is_registered(dev
->vbi_dev
))
1636 video_unregister_device(dev
->vbi_dev
);
1638 video_device_release(dev
->vbi_dev
);
1639 dev
->vbi_dev
= NULL
;
1642 em28xx_info("V4L2 device %s deregistered\n",
1643 video_device_node_name(dev
->vdev
));
1644 if (video_is_registered(dev
->vdev
))
1645 video_unregister_device(dev
->vdev
);
1647 video_device_release(dev
->vdev
);
1653 * em28xx_v4l2_close()
1654 * stops streaming and deallocates all resources allocated by the v4l2
1657 static int em28xx_v4l2_close(struct file
*filp
)
1659 struct em28xx_fh
*fh
= filp
->private_data
;
1660 struct em28xx
*dev
= fh
->dev
;
1663 em28xx_videodbg("users=%d\n", dev
->users
);
1665 mutex_lock(&dev
->lock
);
1666 vb2_fop_release(filp
);
1668 if (dev
->users
== 1) {
1669 /* the device is already disconnect,
1670 free the remaining resources */
1671 if (dev
->disconnected
) {
1672 em28xx_release_resources(dev
);
1673 kfree(dev
->alt_max_pkt_size_isoc
);
1674 mutex_unlock(&dev
->lock
);
1679 /* Save some power by putting tuner to sleep */
1680 v4l2_device_call_all(&dev
->v4l2_dev
, 0, core
, s_power
, 0);
1682 /* do this before setting alternate! */
1683 em28xx_set_mode(dev
, EM28XX_SUSPEND
);
1685 /* set alternate 0 */
1687 em28xx_videodbg("setting alternate 0\n");
1688 errCode
= usb_set_interface(dev
->udev
, 0, 0);
1690 em28xx_errdev("cannot change alternate number to "
1691 "0 (error=%i)\n", errCode
);
1696 mutex_unlock(&dev
->lock
);
1700 static const struct v4l2_file_operations em28xx_v4l_fops
= {
1701 .owner
= THIS_MODULE
,
1702 .open
= em28xx_v4l2_open
,
1703 .release
= em28xx_v4l2_close
,
1704 .read
= vb2_fop_read
,
1705 .poll
= vb2_fop_poll
,
1706 .mmap
= vb2_fop_mmap
,
1707 .unlocked_ioctl
= video_ioctl2
,
1710 static const struct v4l2_ioctl_ops video_ioctl_ops
= {
1711 .vidioc_querycap
= vidioc_querycap
,
1712 .vidioc_enum_fmt_vid_cap
= vidioc_enum_fmt_vid_cap
,
1713 .vidioc_g_fmt_vid_cap
= vidioc_g_fmt_vid_cap
,
1714 .vidioc_try_fmt_vid_cap
= vidioc_try_fmt_vid_cap
,
1715 .vidioc_s_fmt_vid_cap
= vidioc_s_fmt_vid_cap
,
1716 .vidioc_g_fmt_vbi_cap
= vidioc_g_fmt_vbi_cap
,
1717 .vidioc_try_fmt_vbi_cap
= vidioc_g_fmt_vbi_cap
,
1718 .vidioc_s_fmt_vbi_cap
= vidioc_g_fmt_vbi_cap
,
1719 .vidioc_enum_framesizes
= vidioc_enum_framesizes
,
1720 .vidioc_g_audio
= vidioc_g_audio
,
1721 .vidioc_s_audio
= vidioc_s_audio
,
1723 .vidioc_reqbufs
= vb2_ioctl_reqbufs
,
1724 .vidioc_create_bufs
= vb2_ioctl_create_bufs
,
1725 .vidioc_prepare_buf
= vb2_ioctl_prepare_buf
,
1726 .vidioc_querybuf
= vb2_ioctl_querybuf
,
1727 .vidioc_qbuf
= vb2_ioctl_qbuf
,
1728 .vidioc_dqbuf
= vb2_ioctl_dqbuf
,
1730 .vidioc_g_std
= vidioc_g_std
,
1731 .vidioc_querystd
= vidioc_querystd
,
1732 .vidioc_s_std
= vidioc_s_std
,
1733 .vidioc_g_parm
= vidioc_g_parm
,
1734 .vidioc_s_parm
= vidioc_s_parm
,
1735 .vidioc_enum_input
= vidioc_enum_input
,
1736 .vidioc_g_input
= vidioc_g_input
,
1737 .vidioc_s_input
= vidioc_s_input
,
1738 .vidioc_streamon
= vb2_ioctl_streamon
,
1739 .vidioc_streamoff
= vb2_ioctl_streamoff
,
1740 .vidioc_g_tuner
= vidioc_g_tuner
,
1741 .vidioc_s_tuner
= vidioc_s_tuner
,
1742 .vidioc_g_frequency
= vidioc_g_frequency
,
1743 .vidioc_s_frequency
= vidioc_s_frequency
,
1744 .vidioc_subscribe_event
= v4l2_ctrl_subscribe_event
,
1745 .vidioc_unsubscribe_event
= v4l2_event_unsubscribe
,
1746 #ifdef CONFIG_VIDEO_ADV_DEBUG
1747 .vidioc_g_chip_info
= vidioc_g_chip_info
,
1748 .vidioc_g_register
= vidioc_g_register
,
1749 .vidioc_s_register
= vidioc_s_register
,
1753 static const struct video_device em28xx_video_template
= {
1754 .fops
= &em28xx_v4l_fops
,
1755 .release
= video_device_release_empty
,
1756 .ioctl_ops
= &video_ioctl_ops
,
1758 .tvnorms
= V4L2_STD_ALL
,
1761 static const struct v4l2_file_operations radio_fops
= {
1762 .owner
= THIS_MODULE
,
1763 .open
= em28xx_v4l2_open
,
1764 .release
= em28xx_v4l2_close
,
1765 .unlocked_ioctl
= video_ioctl2
,
1768 static const struct v4l2_ioctl_ops radio_ioctl_ops
= {
1769 .vidioc_querycap
= vidioc_querycap
,
1770 .vidioc_g_tuner
= radio_g_tuner
,
1771 .vidioc_s_tuner
= radio_s_tuner
,
1772 .vidioc_g_frequency
= vidioc_g_frequency
,
1773 .vidioc_s_frequency
= vidioc_s_frequency
,
1774 .vidioc_subscribe_event
= v4l2_ctrl_subscribe_event
,
1775 .vidioc_unsubscribe_event
= v4l2_event_unsubscribe
,
1776 #ifdef CONFIG_VIDEO_ADV_DEBUG
1777 .vidioc_g_chip_info
= vidioc_g_chip_info
,
1778 .vidioc_g_register
= vidioc_g_register
,
1779 .vidioc_s_register
= vidioc_s_register
,
1783 static struct video_device em28xx_radio_template
= {
1784 .name
= "em28xx-radio",
1785 .fops
= &radio_fops
,
1786 .ioctl_ops
= &radio_ioctl_ops
,
1789 /******************************** usb interface ******************************/
1793 static struct video_device
*em28xx_vdev_init(struct em28xx
*dev
,
1794 const struct video_device
*template,
1795 const char *type_name
)
1797 struct video_device
*vfd
;
1799 vfd
= video_device_alloc();
1804 vfd
->v4l2_dev
= &dev
->v4l2_dev
;
1805 vfd
->debug
= video_debug
;
1806 vfd
->lock
= &dev
->lock
;
1807 set_bit(V4L2_FL_USE_FH_PRIO
, &vfd
->flags
);
1808 if (dev
->board
.is_webcam
)
1811 snprintf(vfd
->name
, sizeof(vfd
->name
), "%s %s",
1812 dev
->name
, type_name
);
1814 video_set_drvdata(vfd
, dev
);
1818 int em28xx_register_analog_devices(struct em28xx
*dev
)
1824 printk(KERN_INFO
"%s: v4l2 driver version %s\n",
1825 dev
->name
, EM28XX_VERSION
);
1827 /* set default norm */
1828 dev
->norm
= V4L2_STD_PAL
;
1829 v4l2_device_call_all(&dev
->v4l2_dev
, 0, core
, s_std
, dev
->norm
);
1830 dev
->interlaced
= EM28XX_INTERLACED_DEFAULT
;
1832 /* Analog specific initialization */
1833 dev
->format
= &format
[0];
1835 maxw
= norm_maxw(dev
);
1836 /* MaxPacketSize for em2800 is too small to capture at full resolution
1837 * use half of maxw as the scaler can only scale to 50% */
1838 if (dev
->board
.is_em2800
)
1841 em28xx_set_video_format(dev
, format
[0].fourcc
,
1842 maxw
, norm_maxh(dev
));
1846 /* Audio defaults */
1850 /* em28xx_write_reg(dev, EM28XX_R0E_AUDIOSRC, 0xc0); audio register */
1851 val
= (u8
)em28xx_read_reg(dev
, EM28XX_R0F_XCLK
);
1852 em28xx_write_reg(dev
, EM28XX_R0F_XCLK
,
1853 (EM28XX_XCLK_AUDIO_UNMUTE
| val
));
1855 em28xx_set_outfmt(dev
);
1856 em28xx_compression_disable(dev
);
1858 /* Add image controls */
1859 /* NOTE: at this point, the subdevices are already registered, so bridge
1860 * controls are only added/enabled when no subdevice provides them */
1861 if (NULL
== v4l2_ctrl_find(&dev
->ctrl_handler
, V4L2_CID_CONTRAST
))
1862 v4l2_ctrl_new_std(&dev
->ctrl_handler
, &em28xx_ctrl_ops
,
1864 0, 0x1f, 1, CONTRAST_DEFAULT
);
1865 if (NULL
== v4l2_ctrl_find(&dev
->ctrl_handler
, V4L2_CID_BRIGHTNESS
))
1866 v4l2_ctrl_new_std(&dev
->ctrl_handler
, &em28xx_ctrl_ops
,
1867 V4L2_CID_BRIGHTNESS
,
1868 -0x80, 0x7f, 1, BRIGHTNESS_DEFAULT
);
1869 if (NULL
== v4l2_ctrl_find(&dev
->ctrl_handler
, V4L2_CID_SATURATION
))
1870 v4l2_ctrl_new_std(&dev
->ctrl_handler
, &em28xx_ctrl_ops
,
1871 V4L2_CID_SATURATION
,
1872 0, 0x1f, 1, SATURATION_DEFAULT
);
1873 if (NULL
== v4l2_ctrl_find(&dev
->ctrl_handler
, V4L2_CID_BLUE_BALANCE
))
1874 v4l2_ctrl_new_std(&dev
->ctrl_handler
, &em28xx_ctrl_ops
,
1875 V4L2_CID_BLUE_BALANCE
,
1876 -0x30, 0x30, 1, BLUE_BALANCE_DEFAULT
);
1877 if (NULL
== v4l2_ctrl_find(&dev
->ctrl_handler
, V4L2_CID_RED_BALANCE
))
1878 v4l2_ctrl_new_std(&dev
->ctrl_handler
, &em28xx_ctrl_ops
,
1879 V4L2_CID_RED_BALANCE
,
1880 -0x30, 0x30, 1, RED_BALANCE_DEFAULT
);
1881 if (NULL
== v4l2_ctrl_find(&dev
->ctrl_handler
, V4L2_CID_SHARPNESS
))
1882 v4l2_ctrl_new_std(&dev
->ctrl_handler
, &em28xx_ctrl_ops
,
1884 0, 0x0f, 1, SHARPNESS_DEFAULT
);
1886 /* Reset image controls */
1887 em28xx_colorlevels_set_default(dev
);
1888 v4l2_ctrl_handler_setup(&dev
->ctrl_handler
);
1889 if (dev
->ctrl_handler
.error
)
1890 return dev
->ctrl_handler
.error
;
1892 /* allocate and fill video video_device struct */
1893 dev
->vdev
= em28xx_vdev_init(dev
, &em28xx_video_template
, "video");
1895 em28xx_errdev("cannot allocate video_device.\n");
1898 dev
->vdev
->queue
= &dev
->vb_vidq
;
1899 dev
->vdev
->queue
->lock
= &dev
->vb_queue_lock
;
1901 /* disable inapplicable ioctls */
1902 if (dev
->board
.is_webcam
) {
1903 v4l2_disable_ioctl(dev
->vdev
, VIDIOC_QUERYSTD
);
1904 v4l2_disable_ioctl(dev
->vdev
, VIDIOC_G_STD
);
1905 v4l2_disable_ioctl(dev
->vdev
, VIDIOC_S_STD
);
1907 v4l2_disable_ioctl(dev
->vdev
, VIDIOC_S_PARM
);
1909 if (dev
->tuner_type
== TUNER_ABSENT
) {
1910 v4l2_disable_ioctl(dev
->vdev
, VIDIOC_G_TUNER
);
1911 v4l2_disable_ioctl(dev
->vdev
, VIDIOC_S_TUNER
);
1912 v4l2_disable_ioctl(dev
->vdev
, VIDIOC_G_FREQUENCY
);
1913 v4l2_disable_ioctl(dev
->vdev
, VIDIOC_S_FREQUENCY
);
1915 if (!dev
->audio_mode
.has_audio
) {
1916 v4l2_disable_ioctl(dev
->vdev
, VIDIOC_G_AUDIO
);
1917 v4l2_disable_ioctl(dev
->vdev
, VIDIOC_S_AUDIO
);
1920 /* register v4l2 video video_device */
1921 ret
= video_register_device(dev
->vdev
, VFL_TYPE_GRABBER
,
1922 video_nr
[dev
->devno
]);
1924 em28xx_errdev("unable to register video device (error=%i).\n",
1929 /* Allocate and fill vbi video_device struct */
1930 if (em28xx_vbi_supported(dev
) == 1) {
1931 dev
->vbi_dev
= em28xx_vdev_init(dev
, &em28xx_video_template
,
1934 dev
->vbi_dev
->queue
= &dev
->vb_vbiq
;
1935 dev
->vbi_dev
->queue
->lock
= &dev
->vb_vbi_queue_lock
;
1937 /* disable inapplicable ioctls */
1938 v4l2_disable_ioctl(dev
->vdev
, VIDIOC_S_PARM
);
1939 if (dev
->tuner_type
== TUNER_ABSENT
) {
1940 v4l2_disable_ioctl(dev
->vbi_dev
, VIDIOC_G_TUNER
);
1941 v4l2_disable_ioctl(dev
->vbi_dev
, VIDIOC_S_TUNER
);
1942 v4l2_disable_ioctl(dev
->vbi_dev
, VIDIOC_G_FREQUENCY
);
1943 v4l2_disable_ioctl(dev
->vbi_dev
, VIDIOC_S_FREQUENCY
);
1945 if (!dev
->audio_mode
.has_audio
) {
1946 v4l2_disable_ioctl(dev
->vbi_dev
, VIDIOC_G_AUDIO
);
1947 v4l2_disable_ioctl(dev
->vbi_dev
, VIDIOC_S_AUDIO
);
1950 /* register v4l2 vbi video_device */
1951 ret
= video_register_device(dev
->vbi_dev
, VFL_TYPE_VBI
,
1952 vbi_nr
[dev
->devno
]);
1954 em28xx_errdev("unable to register vbi device\n");
1959 if (em28xx_boards
[dev
->model
].radio
.type
== EM28XX_RADIO
) {
1960 dev
->radio_dev
= em28xx_vdev_init(dev
, &em28xx_radio_template
,
1962 if (!dev
->radio_dev
) {
1963 em28xx_errdev("cannot allocate video_device.\n");
1966 ret
= video_register_device(dev
->radio_dev
, VFL_TYPE_RADIO
,
1967 radio_nr
[dev
->devno
]);
1969 em28xx_errdev("can't register radio device\n");
1972 em28xx_info("Registered radio device as %s\n",
1973 video_device_node_name(dev
->radio_dev
));
1976 em28xx_info("V4L2 video device registered as %s\n",
1977 video_device_node_name(dev
->vdev
));
1980 em28xx_info("V4L2 VBI device registered as %s\n",
1981 video_device_node_name(dev
->vbi_dev
));