summaryrefslogtreecommitdiff
path: root/linux/drivers/media/common/saa7146_video.c
diff options
context:
space:
mode:
Diffstat (limited to 'linux/drivers/media/common/saa7146_video.c')
-rw-r--r--linux/drivers/media/common/saa7146_video.c156
1 files changed, 78 insertions, 78 deletions
diff --git a/linux/drivers/media/common/saa7146_video.c b/linux/drivers/media/common/saa7146_video.c
index 5b37c8f4f..397b01d1c 100644
--- a/linux/drivers/media/common/saa7146_video.c
+++ b/linux/drivers/media/common/saa7146_video.c
@@ -14,64 +14,64 @@ MODULE_PARM_DESC(max_memory, "maximum memory usage for capture buffers (default:
/* format descriptions for capture and preview */
static struct saa7146_format formats[] = {
{
- .name = "RGB-8 (3-3-2)",
+ .name = "RGB-8 (3-3-2)",
.pixelformat = V4L2_PIX_FMT_RGB332,
- .trans = RGB08_COMPOSED,
+ .trans = RGB08_COMPOSED,
.depth = 8,
.flags = 0,
}, {
- .name = "RGB-16 (5/B-6/G-5/R)",
+ .name = "RGB-16 (5/B-6/G-5/R)",
.pixelformat = V4L2_PIX_FMT_RGB565,
- .trans = RGB16_COMPOSED,
+ .trans = RGB16_COMPOSED,
.depth = 16,
.flags = 0,
}, {
- .name = "RGB-24 (B-G-R)",
+ .name = "RGB-24 (B-G-R)",
.pixelformat = V4L2_PIX_FMT_BGR24,
- .trans = RGB24_COMPOSED,
+ .trans = RGB24_COMPOSED,
.depth = 24,
.flags = 0,
}, {
- .name = "RGB-32 (B-G-R)",
+ .name = "RGB-32 (B-G-R)",
.pixelformat = V4L2_PIX_FMT_BGR32,
- .trans = RGB32_COMPOSED,
+ .trans = RGB32_COMPOSED,
.depth = 32,
.flags = 0,
}, {
- .name = "RGB-32 (R-G-B)",
+ .name = "RGB-32 (R-G-B)",
.pixelformat = V4L2_PIX_FMT_RGB32,
- .trans = RGB32_COMPOSED,
+ .trans = RGB32_COMPOSED,
.depth = 32,
.flags = 0,
.swap = 0x2,
}, {
- .name = "Greyscale-8",
+ .name = "Greyscale-8",
.pixelformat = V4L2_PIX_FMT_GREY,
- .trans = Y8,
+ .trans = Y8,
.depth = 8,
.flags = 0,
}, {
- .name = "YUV 4:2:2 planar (Y-Cb-Cr)",
+ .name = "YUV 4:2:2 planar (Y-Cb-Cr)",
.pixelformat = V4L2_PIX_FMT_YUV422P,
- .trans = YUV422_DECOMPOSED,
+ .trans = YUV422_DECOMPOSED,
.depth = 16,
.flags = FORMAT_BYTE_SWAP|FORMAT_IS_PLANAR,
}, {
- .name = "YVU 4:2:0 planar (Y-Cb-Cr)",
+ .name = "YVU 4:2:0 planar (Y-Cb-Cr)",
.pixelformat = V4L2_PIX_FMT_YVU420,
- .trans = YUV420_DECOMPOSED,
+ .trans = YUV420_DECOMPOSED,
.depth = 12,
.flags = FORMAT_BYTE_SWAP|FORMAT_IS_PLANAR,
}, {
- .name = "YUV 4:2:0 planar (Y-Cb-Cr)",
+ .name = "YUV 4:2:0 planar (Y-Cb-Cr)",
.pixelformat = V4L2_PIX_FMT_YUV420,
- .trans = YUV420_DECOMPOSED,
+ .trans = YUV420_DECOMPOSED,
.depth = 12,
.flags = FORMAT_IS_PLANAR,
}, {
- .name = "YUV 4:2:2 (U-Y-V-Y)",
+ .name = "YUV 4:2:2 (U-Y-V-Y)",
.pixelformat = V4L2_PIX_FMT_UYVY,
- .trans = YUV422_COMPOSED,
+ .trans = YUV422_COMPOSED,
.depth = 16,
.flags = 0,
}
@@ -80,19 +80,19 @@ static struct saa7146_format formats[] = {
/* unfortunately, the saa7146 contains a bug which prevents it from doing on-the-fly byte swaps.
due to this, it's impossible to provide additional *packed* formats, which are simply byte swapped
(like V4L2_PIX_FMT_YUYV) ... 8-( */
-
+
static int NUM_FORMATS = sizeof(formats)/sizeof(struct saa7146_format);
struct saa7146_format* format_by_fourcc(struct saa7146_dev *dev, int fourcc)
{
int i, j = NUM_FORMATS;
-
+
for (i = 0; i < j; i++) {
if (formats[i].pixelformat == fourcc) {
return formats+i;
}
}
-
+
DEB_D(("unknown pixelformat:'%4.4s'\n",(char *)&fourcc));
return NULL;
}
@@ -182,7 +182,7 @@ static int try_fmt(struct saa7146_fh *fh, struct v4l2_format *f)
struct saa7146_dev *dev = fh->dev;
struct saa7146_vv *vv = dev->vv_data;
int err;
-
+
switch (f->type) {
case V4L2_BUF_TYPE_VIDEO_CAPTURE:
{
@@ -190,7 +190,7 @@ static int try_fmt(struct saa7146_fh *fh, struct v4l2_format *f)
enum v4l2_field field;
int maxw, maxh;
int calc_bpl;
-
+
DEB_EE(("V4L2_BUF_TYPE_VIDEO_CAPTURE: dev:%p, fh:%p\n",dev,fh));
fmt = format_by_fourcc(dev,f->fmt.pix.pixelformat);
@@ -201,7 +201,7 @@ static int try_fmt(struct saa7146_fh *fh, struct v4l2_format *f)
field = f->fmt.pix.field;
maxw = vv->standard->h_max_out;
maxh = vv->standard->v_max_out;
-
+
if (V4L2_FIELD_ANY == field) {
field = (f->fmt.pix.height > maxh/2)
? V4L2_FIELD_INTERLACED
@@ -237,10 +237,10 @@ static int try_fmt(struct saa7146_fh *fh, struct v4l2_format *f)
if (f->fmt.pix.bytesperline < calc_bpl)
f->fmt.pix.bytesperline = calc_bpl;
-
+
if (f->fmt.pix.bytesperline > (2*PAGE_SIZE * fmt->depth)/8) /* arbitrary constraint */
f->fmt.pix.bytesperline = calc_bpl;
-
+
f->fmt.pix.sizeimage = f->fmt.pix.bytesperline * f->fmt.pix.height;
DEB_D(("w:%d, h:%d, bytesperline:%d, sizeimage:%d\n",f->fmt.pix.width,f->fmt.pix.height,f->fmt.pix.bytesperline,f->fmt.pix.sizeimage));
@@ -280,7 +280,7 @@ int saa7146_start_preview(struct saa7146_fh *fh)
}
/* check if overlay is running */
- if (IS_OVERLAY_ACTIVE(fh) != 0) {
+ if (IS_OVERLAY_ACTIVE(fh) != 0) {
if (vv->video_fh == fh) {
DEB_D(("overlay is already active.\n"));
return 0;
@@ -299,14 +299,14 @@ int saa7146_start_preview(struct saa7146_fh *fh)
saa7146_res_free(vv->video_fh, RESOURCE_DMA1_HPS|RESOURCE_DMA2_CLP);
return -EBUSY;
}
-
+
vv->ov_data = &fh->ov;
DEB_D(("%dx%d+%d+%d %s field=%s\n",
fh->ov.win.w.width,fh->ov.win.w.height,
fh->ov.win.w.left,fh->ov.win.w.top,
vv->ov_fmt->name,v4l2_field_names[fh->ov.win.field]));
-
+
if (0 != (ret = saa7146_enable_overlay(fh))) {
DEB_D(("enabling overlay failed: %d\n",ret));
saa7146_res_free(vv->video_fh, RESOURCE_DMA1_HPS|RESOURCE_DMA2_CLP);
@@ -331,9 +331,9 @@ int saa7146_stop_preview(struct saa7146_fh *fh)
DEB_D(("streaming capture is active.\n"));
return -EBUSY;
}
-
+
/* check if overlay is running at all */
- if ((vv->video_status & STATUS_OVERLAY) == 0) {
+ if ((vv->video_status & STATUS_OVERLAY) == 0) {
DEB_D(("no active overlay.\n"));
return 0;
}
@@ -359,7 +359,7 @@ static int s_fmt(struct saa7146_fh *fh, struct v4l2_format *f)
struct saa7146_vv *vv = dev->vv_data;
int err;
-
+
switch (f->type) {
case V4L2_BUF_TYPE_VIDEO_CAPTURE:
DEB_EE(("V4L2_BUF_TYPE_VIDEO_CAPTURE: dev:%p, fh:%p\n",dev,fh));
@@ -387,7 +387,7 @@ static int s_fmt(struct saa7146_fh *fh, struct v4l2_format *f)
up(&dev->lock);
return -EFAULT;
}
-
+
/* fh->ov.fh is used to indicate that we have valid overlay informations, too */
fh->ov.fh = fh;
@@ -454,7 +454,7 @@ static int NUM_CONTROLS = sizeof(controls)/sizeof(struct v4l2_queryctrl);
static struct v4l2_queryctrl* ctrl_by_id(int id)
{
int i;
-
+
for (i = 0; i < NUM_CONTROLS; i++)
if (controls[i].id == id)
return controls+i;
@@ -515,7 +515,7 @@ static int set_control(struct saa7146_fh *fh, struct v4l2_control *c)
DEB_D(("unknown control %d\n",c->id));
return -EINVAL;
}
-
+
down(&dev->lock);
switch (ctrl->type) {
@@ -578,7 +578,7 @@ static int set_control(struct saa7146_fh *fh, struct v4l2_control *c)
}
}
up(&dev->lock);
-
+
if (IS_OVERLAY_ACTIVE(fh) != 0) {
saa7146_stop_preview(fh);
saa7146_start_preview(fh);
@@ -633,7 +633,7 @@ static int saa7146_pgtable_build(struct saa7146_dev *dev, struct saa7146_buf *bu
return -1;
}
}
-
+
ptr1 = pt1->cpu;
ptr2 = pt2->cpu;
ptr3 = pt3->cpu;
@@ -649,14 +649,14 @@ static int saa7146_pgtable_build(struct saa7146_dev *dev, struct saa7146_buf *bu
for(j=0;j<40;j++) {
printk("ptr1 %d: 0x%08x\n",j,ptr1[j]);
}
-*/
+*/
/* if we have a user buffer, the first page may not be
aligned to a page boundary. */
pt1->offset = buf->vb.dma.sglist->offset;
pt2->offset = pt1->offset+o1;
pt3->offset = pt1->offset+o2;
-
+
/* create video-dma2 page table */
ptr1 = pt1->cpu;
for(i = m1; i <= m2 ; i++, ptr2++) {
@@ -675,7 +675,7 @@ static int saa7146_pgtable_build(struct saa7146_dev *dev, struct saa7146_buf *bu
for(;i<1024;i++,ptr3++) {
*ptr3 = fill;
}
- /* finally: finish up video-dma1 page table */
+ /* finally: finish up video-dma1 page table */
ptr1 = pt1->cpu+m1;
fill = pt1->cpu[m1];
for(i=m1;i<1024;i++,ptr1++) {
@@ -694,7 +694,7 @@ static int saa7146_pgtable_build(struct saa7146_dev *dev, struct saa7146_buf *bu
for(j=0;j<40;j++) {
printk("ptr3 %d: 0x%08x\n",j,ptr3[j]);
}
-*/
+*/
} else {
struct saa7146_pgtable *pt = &buf->pt[0];
return saa7146_pgtable_build_single(pci, pt, list, length);
@@ -725,7 +725,7 @@ static int video_begin(struct saa7146_fh *fh)
DEB_S(("already capturing in another open.\n"));
return -EBUSY;
}
-
+
if ((vv->video_status & STATUS_OVERLAY) != 0) {
DEB_S(("warning: suspending overlay video for streaming capture.\n"));
vv->ov_suspend = vv->video_fh;
@@ -735,7 +735,7 @@ static int video_begin(struct saa7146_fh *fh)
return err;
}
}
-
+
fmt = format_by_fourcc(dev,fh->video_fmt.pixelformat);
/* we need to have a valid format set here */
BUG_ON(NULL == fmt);
@@ -755,7 +755,7 @@ static int video_begin(struct saa7146_fh *fh)
}
return -EBUSY;
}
-
+
/* clear out beginning of streaming bit (rps register 0)*/
saa7146_write(dev, MC2, MASK_27 );
@@ -821,7 +821,7 @@ static int video_end(struct saa7146_fh *fh, struct file *file)
saa7146_start_preview(vv->ov_suspend);
vv->ov_suspend = NULL;
}
-
+
return 0;
}
@@ -847,7 +847,7 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int
if( cmd == dev->ext_vv_data->ioctls[ee].cmd )
break;
}
-
+
if( 0 != (dev->ext_vv_data->ioctls[ee].flags & SAA7146_EXCLUSIVE) ) {
DEB_D(("extension handles ioctl exclusive.\n"));
result = dev->ext_vv_data->ioctl(fh, cmd, arg);
@@ -860,7 +860,7 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int
return result;
}
}
-
+
/* fixme: add handle "after" case (is it still needed?) */
switch (fh->type) {
@@ -880,13 +880,13 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int
}
switch (cmd) {
- case VIDIOC_QUERYCAP:
+ case VIDIOC_QUERYCAP:
{
struct v4l2_capability *cap = arg;
memset(cap,0,sizeof(*cap));
DEB_EE(("VIDIOC_QUERYCAP\n"));
-
+
strcpy(cap->driver, "saa7146 v4l2");
strlcpy(cap->card, dev->ext->name, sizeof(cap->card));
sprintf(cap->bus_info,"PCI:%s",dev->pci->slot_name);
@@ -894,7 +894,7 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int
cap->capabilities =
V4L2_CAP_VIDEO_CAPTURE |
V4L2_CAP_VIDEO_OVERLAY |
- V4L2_CAP_READWRITE |
+ V4L2_CAP_READWRITE |
V4L2_CAP_STREAMING;
cap->capabilities |= dev->ext_vv_data->capabilities;
return 0;
@@ -915,7 +915,7 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int
struct saa7146_format *fmt;
DEB_EE(("VIDIOC_S_FBUF\n"));
-
+
if(!capable(CAP_SYS_ADMIN) &&
!capable(CAP_SYS_RAWIO))
return -EPERM;
@@ -925,14 +925,14 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int
if (NULL == fmt) {
return -EINVAL;
}
-
+
/* planar formats are not allowed for overlay video, clipping and video dma would clash */
if (0 != (fmt->flags & FORMAT_IS_PLANAR)) {
DEB_S(("planar pixelformat '%4.4s' not allowed for overlay\n",(char *)&fmt->pixelformat));
}
/* check if overlay is running */
- if (IS_OVERLAY_ACTIVE(fh) != 0) {
+ if (IS_OVERLAY_ACTIVE(fh) != 0) {
if (vv->video_fh != fh) {
DEB_D(("refusing to change framebuffer informations while overlay is active in another open.\n"));
return -EBUSY;
@@ -971,7 +971,7 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int
break;
}
default:
- return -EINVAL;
+ return -EINVAL;
}
DEB_EE(("VIDIOC_ENUM_FMT: type:%d, index:%d\n",f->type,f->index));
@@ -987,12 +987,12 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int
(c->id < V4L2_CID_PRIVATE_BASE ||
c->id >= V4L2_CID_PRIVATE_LASTP1))
return -EINVAL;
-
+
ctrl = ctrl_by_id(c->id);
if( NULL == ctrl ) {
return -EINVAL;
/*
- c->flags = V4L2_CTRL_FLAG_DISABLED;
+ c->flags = V4L2_CTRL_FLAG_DISABLED;
return 0;
*/
}
@@ -1073,7 +1073,7 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int
v4l2_std_id *id = arg;
int found = 0;
int i, err;
-
+
DEB_EE(("VIDIOC_S_STD\n"));
if ((vv->video_status & STATUS_CAPTURE) == STATUS_CAPTURE) {
@@ -1091,7 +1091,7 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int
}
down(&dev->lock);
-
+
for(i = 0; i < dev->ext_vv_data->num_stds; i++)
if (*id & dev->ext_vv_data->stds[i].id)
break;
@@ -1173,7 +1173,7 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int
case VIDIOC_STREAMON: {
int *type = arg;
DEB_D(("VIDIOC_STREAMON, type:%d\n",*type));
-
+
err = video_begin(fh);
if( 0 != err) {
return err;
@@ -1223,9 +1223,9 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int
int i;
/* fixme: number of capture buffers and sizes for v4l apps */
- int gbuffers = 2;
+ int gbuffers = 2;
int gbufsize = 768*576*4;
-
+
DEB_D(("VIDIOCGMBUF \n"));
q = &fh->video_q;
@@ -1236,7 +1236,7 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int
#else
err = videobuf_mmap_setup(q,gbuffers,gbufsize,
V4L2_MEMORY_MMAP);
-#endif
+#endif
if (err < 0) {
up(&q->lock);
return err;
@@ -1267,7 +1267,7 @@ static int buffer_activate (struct saa7146_dev *dev,
buf->vb.state = STATE_ACTIVE;
saa7146_set_capture(dev,buf,next);
-
+
mod_timer(&vv->video_q.timeout, jiffies+BUFFER_TIMEOUT);
return 0;
}
@@ -1302,7 +1302,7 @@ static int buffer_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb,e
DEB_D(("size mismatch.\n"));
return -EINVAL;
}
-
+
DEB_CAP(("buffer_prepare [size=%dx%d,bytes=%d,fields=%s]\n",
fh->video_fmt.width,fh->video_fmt.height,size,v4l2_field_names[fh->video_fmt.field]));
if (buf->vb.width != fh->video_fmt.width ||
@@ -1317,7 +1317,7 @@ static int buffer_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb,e
if (STATE_NEEDS_INIT == buf->vb.state) {
struct saa7146_format *sfmt;
-
+
buf->vb.bytesperline = fh->video_fmt.bytesperline;
buf->vb.width = fh->video_fmt.width;
buf->vb.height = fh->video_fmt.height;
@@ -1325,9 +1325,9 @@ static int buffer_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb,e
buf->vb.field = field;
buf->fmt = &fh->video_fmt;
buf->vb.field = fh->video_fmt.field;
-
+
sfmt = format_by_fourcc(dev,buf->fmt->pixelformat);
-
+
if( 0 != IS_PLANAR(sfmt->trans)) {
saa7146_pgtable_free(dev->pci, &buf->pt[0]);
saa7146_pgtable_free(dev->pci, &buf->pt[1]);
@@ -1340,7 +1340,7 @@ static int buffer_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb,e
saa7146_pgtable_free(dev->pci, &buf->pt[0]);
saa7146_pgtable_alloc(dev->pci, &buf->pt[0]);
}
-
+
err = videobuf_iolock(dev->pci,&buf->vb, &vv->ov_fb);
if (err)
goto oops;
@@ -1379,7 +1379,7 @@ static int buffer_setup(struct videobuf_queue *q, unsigned int *count, unsigned
if( (*count * *size) > (max_memory*1048576) ) {
*count = (max_memory*1048576) / *size;
}
-
+
DEB_CAP(("%d buffers, %d bytes each.\n",*count,*size));
return 0;
@@ -1397,7 +1397,7 @@ static void buffer_queue(struct videobuf_queue *q, struct videobuf_buffer *vb)
struct saa7146_dev *dev = fh->dev;
struct saa7146_vv *vv = dev->vv_data;
struct saa7146_buf *buf = (struct saa7146_buf *)vb;
-
+
DEB_CAP(("vbuf:%p\n",vb));
saa7146_buffer_queue(fh->dev,&vv->video_q,buf);
}
@@ -1413,7 +1413,7 @@ static void buffer_release(struct videobuf_queue *q, struct videobuf_buffer *vb)
struct saa7146_fh *fh = file->private_data;
struct saa7146_dev *dev = fh->dev;
struct saa7146_buf *buf = (struct saa7146_buf *)vb;
-
+
DEB_CAP(("vbuf:%p\n",vb));
saa7146_dma_free(dev,buf);
}
@@ -1480,13 +1480,13 @@ static void video_close(struct saa7146_dev *dev, struct file *file)
struct saa7146_fh *fh = (struct saa7146_fh *)file->private_data;
struct saa7146_vv *vv = dev->vv_data;
int err;
-
+
if (IS_CAPTURE_ACTIVE(fh) != 0) {
- err = video_end(fh, file);
+ err = video_end(fh, file);
} else if (IS_OVERLAY_ACTIVE(fh) != 0) {
err = saa7146_stop_preview(fh);
}
-
+
/* hmm, why is this function declared void? */
/* return err */
}
@@ -1496,7 +1496,7 @@ static void video_irq_done(struct saa7146_dev *dev, unsigned long st)
{
struct saa7146_vv *vv = dev->vv_data;
struct saa7146_dmaqueue *q = &vv->video_q;
-
+
spin_lock(&dev->slock);
DEB_CAP(("called.\n"));
@@ -1515,7 +1515,7 @@ static ssize_t video_read(struct file *file, char __user *data, size_t count, lo
struct saa7146_dev *dev = fh->dev;
struct saa7146_vv *vv = dev->vv_data;
ssize_t ret = 0;
-
+
DEB_EE(("called.\n"));
if ((vv->video_status & STATUS_CAPTURE) != 0) {