git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vserver 1.9.5.x5
[linux-2.6.git]
/
drivers
/
media
/
video
/
saa7134
/
saa7134-video.c
diff --git
a/drivers/media/video/saa7134/saa7134-video.c
b/drivers/media/video/saa7134/saa7134-video.c
index
0cd3943
..
b00696a
100644
(file)
--- a/
drivers/media/video/saa7134/saa7134-video.c
+++ b/
drivers/media/video/saa7134/saa7134-video.c
@@
-1,4
+1,6
@@
/*
/*
+ * $Id: saa7134-video.c,v 1.19 2004/11/07 14:44:59 kraxel Exp $
+ *
* device driver for philips saa7134 based TV cards
* video4linux video interface
*
* device driver for philips saa7134 based TV cards
* video4linux video interface
*
@@
-37,11
+39,11
@@
static unsigned int gbuffers = 8;
static unsigned int noninterlaced = 0;
static unsigned int gbufsize = 720*576*4;
static unsigned int gbufsize_max = 720*576*4;
static unsigned int noninterlaced = 0;
static unsigned int gbufsize = 720*576*4;
static unsigned int gbufsize_max = 720*576*4;
-
MODULE_PARM(video_debug,"i"
);
+
module_param(video_debug, int, 0644
);
MODULE_PARM_DESC(video_debug,"enable debug messages [video]");
MODULE_PARM_DESC(video_debug,"enable debug messages [video]");
-
MODULE_PARM(gbuffers,"i"
);
+
module_param(gbuffers, int, 0444
);
MODULE_PARM_DESC(gbuffers,"number of capture buffers, range 2-32");
MODULE_PARM_DESC(gbuffers,"number of capture buffers, range 2-32");
-
MODULE_PARM(noninterlaced,"i"
);
+
module_param(noninterlaced, int, 0644
);
MODULE_PARM_DESC(noninterlaced,"video input is noninterlaced");
#define dprintk(fmt, arg...) if (video_debug) \
MODULE_PARM_DESC(noninterlaced,"video input is noninterlaced");
#define dprintk(fmt, arg...) if (video_debug) \
@@
-53,7
+55,7
@@
MODULE_PARM_DESC(noninterlaced,"video input is noninterlaced");
static int video_out[][9] = {
[CCIR656] = { 0x00, 0xb1, 0x00, 0xa1, 0x00, 0x04, 0x06, 0x00, 0x00 },
};
static int video_out[][9] = {
[CCIR656] = { 0x00, 0xb1, 0x00, 0xa1, 0x00, 0x04, 0x06, 0x00, 0x00 },
};
-
+
static struct saa7134_format formats[] = {
{
.name = "8 bpp gray",
static struct saa7134_format formats[] = {
{
.name = "8 bpp gray",
@@
-371,7
+373,7
@@
static const unsigned int CTRLS = ARRAY_SIZE(video_ctrls);
static const struct v4l2_queryctrl* ctrl_by_id(unsigned int id)
{
unsigned int i;
static const struct v4l2_queryctrl* ctrl_by_id(unsigned int id)
{
unsigned int i;
-
+
for (i = 0; i < CTRLS; i++)
if (video_ctrls[i].id == id)
return video_ctrls+i;
for (i = 0; i < CTRLS; i++)
if (video_ctrls[i].id == id)
return video_ctrls+i;
@@
-480,12
+482,12
@@
static void set_tvnorm(struct saa7134_dev *dev, struct saa7134_tvnorm *norm)
saa_writeb(SAA7134_HSYNC_START, 0xeb);
saa_writeb(SAA7134_HSYNC_STOP, 0xe0);
saa_writeb(SAA7134_SOURCE_TIMING1, norm->src_timing);
saa_writeb(SAA7134_HSYNC_START, 0xeb);
saa_writeb(SAA7134_HSYNC_STOP, 0xe0);
saa_writeb(SAA7134_SOURCE_TIMING1, norm->src_timing);
-
+
saa_writeb(SAA7134_SYNC_CTRL, sync_control);
saa_writeb(SAA7134_LUMA_CTRL, luma_control);
saa_writeb(SAA7134_DEC_LUMA_BRIGHT, dev->ctl_bright);
saa_writeb(SAA7134_DEC_LUMA_CONTRAST, dev->ctl_contrast);
saa_writeb(SAA7134_SYNC_CTRL, sync_control);
saa_writeb(SAA7134_LUMA_CTRL, luma_control);
saa_writeb(SAA7134_DEC_LUMA_BRIGHT, dev->ctl_bright);
saa_writeb(SAA7134_DEC_LUMA_CONTRAST, dev->ctl_contrast);
-
+
saa_writeb(SAA7134_DEC_CHROMA_SATURATION, dev->ctl_saturation);
saa_writeb(SAA7134_DEC_CHROMA_HUE, dev->ctl_hue);
saa_writeb(SAA7134_CHROMA_CTRL1, norm->chroma_ctrl1);
saa_writeb(SAA7134_DEC_CHROMA_SATURATION, dev->ctl_saturation);
saa_writeb(SAA7134_DEC_CHROMA_HUE, dev->ctl_hue);
saa_writeb(SAA7134_CHROMA_CTRL1, norm->chroma_ctrl1);
@@
-568,7
+570,7
@@
static void set_h_prescale(struct saa7134_dev *dev, int task, int prescale)
static void set_v_scale(struct saa7134_dev *dev, int task, int yscale)
{
int val,mirror;
static void set_v_scale(struct saa7134_dev *dev, int task, int yscale)
{
int val,mirror;
-
+
saa_writeb(SAA7134_V_SCALE_RATIO1(task), yscale & 0xff);
saa_writeb(SAA7134_V_SCALE_RATIO2(task), yscale >> 8);
saa_writeb(SAA7134_V_SCALE_RATIO1(task), yscale & 0xff);
saa_writeb(SAA7134_V_SCALE_RATIO2(task), yscale >> 8);
@@
-622,7
+624,7
@@
static void set_size(struct saa7134_dev *dev, int task,
saa_writeb(SAA7134_H_SCALE_INC1(task), xscale & 0xff);
saa_writeb(SAA7134_H_SCALE_INC2(task), xscale >> 8);
set_v_scale(dev,task,yscale);
saa_writeb(SAA7134_H_SCALE_INC1(task), xscale & 0xff);
saa_writeb(SAA7134_H_SCALE_INC2(task), xscale >> 8);
set_v_scale(dev,task,yscale);
-
+
saa_writeb(SAA7134_VIDEO_PIXELS1(task), width & 0xff);
saa_writeb(SAA7134_VIDEO_PIXELS2(task), width >> 8);
saa_writeb(SAA7134_VIDEO_LINES1(task), height/div & 0xff);
saa_writeb(SAA7134_VIDEO_PIXELS1(task), width & 0xff);
saa_writeb(SAA7134_VIDEO_PIXELS2(task), width >> 8);
saa_writeb(SAA7134_VIDEO_LINES1(task), height/div & 0xff);
@@
-649,7
+651,7
@@
static void sort_cliplist(struct cliplist *cl, int entries)
{
struct cliplist swap;
int i,j,n;
{
struct cliplist swap;
int i,j,n;
-
+
for (i = entries-2; i >= 0; i--) {
for (n = 0, j = 0; j <= i; j++) {
if (cl[j].position > cl[j+1].position) {
for (i = entries-2; i >= 0; i--) {
for (n = 0, j = 0; j <= i; j++) {
if (cl[j].position > cl[j+1].position) {
@@
-844,7
+846,7
@@
static int buffer_activate(struct saa7134_dev *dev,
dprintk("buffer_activate buf=%p\n",buf);
buf->vb.state = STATE_ACTIVE;
buf->top_seen = 0;
dprintk("buffer_activate buf=%p\n",buf);
buf->vb.state = STATE_ACTIVE;
buf->top_seen = 0;
-
+
set_size(dev,TASK_A,buf->vb.width,buf->vb.height,
V4L2_FIELD_HAS_BOTH(buf->vb.field));
if (buf->fmt->yuv)
set_size(dev,TASK_A,buf->vb.width,buf->vb.height,
V4L2_FIELD_HAS_BOTH(buf->vb.field));
if (buf->fmt->yuv)
@@
-916,15
+918,16
@@
static int buffer_activate(struct saa7134_dev *dev,
return 0;
}
return 0;
}
-static int buffer_prepare(struct file *file, struct videobuf_buffer *vb,
+static int buffer_prepare(struct videobuf_queue *q,
+ struct videobuf_buffer *vb,
enum v4l2_field field)
{
enum v4l2_field field)
{
- struct saa7134_fh *fh =
file->private
_data;
+ struct saa7134_fh *fh =
q->priv
_data;
struct saa7134_dev *dev = fh->dev;
struct saa7134_dev *dev = fh->dev;
- struct saa7134_buf *buf =
(struct saa7134_buf *)vb
;
+ struct saa7134_buf *buf =
container_of(vb,struct saa7134_buf,vb)
;
unsigned int size;
int err;
unsigned int size;
int err;
-
+
/* sanity checks */
if (NULL == fh->fmt)
return -EINVAL;
/* sanity checks */
if (NULL == fh->fmt)
return -EINVAL;
@@
-978,9
+981,9
@@
static int buffer_prepare(struct file *file, struct videobuf_buffer *vb,
}
static int
}
static int
-buffer_setup(struct
file *file
, unsigned int *count, unsigned int *size)
+buffer_setup(struct
videobuf_queue *q
, unsigned int *count, unsigned int *size)
{
{
- struct saa7134_fh *fh =
file->private
_data;
+ struct saa7134_fh *fh =
q->priv
_data;
*size = fh->fmt->depth * fh->width * fh->height >> 3;
if (0 == *count)
*size = fh->fmt->depth * fh->width * fh->height >> 3;
if (0 == *count)
@@
-989,19
+992,19
@@
buffer_setup(struct file *file, unsigned int *count, unsigned int *size)
return 0;
}
return 0;
}
-static void buffer_queue(struct
file *file
, struct videobuf_buffer *vb)
+static void buffer_queue(struct
videobuf_queue *q
, struct videobuf_buffer *vb)
{
{
- struct saa7134_fh *fh =
file->private
_data;
- struct saa7134_buf *buf =
(struct saa7134_buf *)vb
;
-
+ struct saa7134_fh *fh =
q->priv
_data;
+ struct saa7134_buf *buf =
container_of(vb,struct saa7134_buf,vb)
;
+
saa7134_buffer_queue(fh->dev,&fh->dev->video_q,buf);
}
saa7134_buffer_queue(fh->dev,&fh->dev->video_q,buf);
}
-static void buffer_release(struct
file *file
, struct videobuf_buffer *vb)
+static void buffer_release(struct
videobuf_queue *q
, struct videobuf_buffer *vb)
{
{
- struct saa7134_fh *fh =
file->private
_data;
- struct saa7134_buf *buf =
(struct saa7134_buf *)vb
;
-
+ struct saa7134_fh *fh =
q->priv
_data;
+ struct saa7134_buf *buf =
container_of(vb,struct saa7134_buf,vb)
;
+
saa7134_dma_free(fh->dev,buf);
}
saa7134_dma_free(fh->dev,buf);
}
@@
-1158,7
+1161,7
@@
static int set_control(struct saa7134_dev *dev, struct saa7134_fh *fh,
static struct videobuf_queue* saa7134_queue(struct saa7134_fh *fh)
{
struct videobuf_queue* q = NULL;
static struct videobuf_queue* saa7134_queue(struct saa7134_fh *fh)
{
struct videobuf_queue* q = NULL;
-
+
switch (fh->type) {
case V4L2_BUF_TYPE_VIDEO_CAPTURE:
q = &fh->cap;
switch (fh->type) {
case V4L2_BUF_TYPE_VIDEO_CAPTURE:
q = &fh->cap;
@@
-1175,7
+1178,7
@@
static struct videobuf_queue* saa7134_queue(struct saa7134_fh *fh)
static int saa7134_resource(struct saa7134_fh *fh)
{
int res = 0;
static int saa7134_resource(struct saa7134_fh *fh)
{
int res = 0;
-
+
switch (fh->type) {
case V4L2_BUF_TYPE_VIDEO_CAPTURE:
res = RESOURCE_VIDEO;
switch (fh->type) {
case V4L2_BUF_TYPE_VIDEO_CAPTURE:
res = RESOURCE_VIDEO;
@@
-1197,7
+1200,7
@@
static int video_open(struct inode *inode, struct file *file)
struct list_head *list;
enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
int radio = 0;
struct list_head *list;
enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
int radio = 0;
-
+
list_for_each(list,&saa7134_devlist) {
h = list_entry(list, struct saa7134_dev, devlist);
if (h->video_dev && (h->video_dev->minor == minor))
list_for_each(list,&saa7134_devlist) {
h = list_entry(list, struct saa7134_dev, devlist);
if (h->video_dev && (h->video_dev->minor == minor))
@@
-1229,24
+1232,21
@@
static int video_open(struct inode *inode, struct file *file)
fh->fmt = format_by_fourcc(V4L2_PIX_FMT_BGR24);
fh->width = 720;
fh->height = 576;
fh->fmt = format_by_fourcc(V4L2_PIX_FMT_BGR24);
fh->width = 720;
fh->height = 576;
-#ifdef VIDIOC_G_PRIORITY
v4l2_prio_open(&dev->prio,&fh->prio);
v4l2_prio_open(&dev->prio,&fh->prio);
-#endif
videobuf_queue_init(&fh->cap, &video_qops,
dev->pci, &dev->slock,
V4L2_BUF_TYPE_VIDEO_CAPTURE,
V4L2_FIELD_INTERLACED,
videobuf_queue_init(&fh->cap, &video_qops,
dev->pci, &dev->slock,
V4L2_BUF_TYPE_VIDEO_CAPTURE,
V4L2_FIELD_INTERLACED,
- sizeof(struct saa7134_buf));
- init_MUTEX(&fh->cap.lock);
- saa7134_pgtable_alloc(dev->pci,&fh->pt_cap);
-
+ sizeof(struct saa7134_buf),
+ fh);
videobuf_queue_init(&fh->vbi, &saa7134_vbi_qops,
dev->pci, &dev->slock,
V4L2_BUF_TYPE_VBI_CAPTURE,
V4L2_FIELD_SEQ_TB,
videobuf_queue_init(&fh->vbi, &saa7134_vbi_qops,
dev->pci, &dev->slock,
V4L2_BUF_TYPE_VBI_CAPTURE,
V4L2_FIELD_SEQ_TB,
- sizeof(struct saa7134_buf));
- init_MUTEX(&fh->vbi.lock);
+ sizeof(struct saa7134_buf),
+ fh);
+ saa7134_pgtable_alloc(dev->pci,&fh->pt_cap);
saa7134_pgtable_alloc(dev->pci,&fh->pt_vbi);
if (fh->radio) {
saa7134_pgtable_alloc(dev->pci,&fh->pt_vbi);
if (fh->radio) {
@@
-1269,13
+1269,15
@@
video_read(struct file *file, char __user *data, size_t count, loff_t *ppos)
case V4L2_BUF_TYPE_VIDEO_CAPTURE:
if (res_locked(fh->dev,RESOURCE_VIDEO))
return -EBUSY;
case V4L2_BUF_TYPE_VIDEO_CAPTURE:
if (res_locked(fh->dev,RESOURCE_VIDEO))
return -EBUSY;
- return videobuf_read_one(file, saa7134_queue(fh),
- data, count, ppos);
+ return videobuf_read_one(saa7134_queue(fh),
+ data, count, ppos,
+ file->f_flags & O_NONBLOCK);
case V4L2_BUF_TYPE_VBI_CAPTURE:
if (!res_get(fh->dev,fh,RESOURCE_VBI))
return -EBUSY;
case V4L2_BUF_TYPE_VBI_CAPTURE:
if (!res_get(fh->dev,fh,RESOURCE_VBI))
return -EBUSY;
- return videobuf_read_stream(file, saa7134_queue(fh),
- data, count, ppos, 1);
+ return videobuf_read_stream(saa7134_queue(fh),
+ data, count, ppos, 1,
+ file->f_flags & O_NONBLOCK);
break;
default:
BUG();
break;
default:
BUG();
@@
-1303,11
+1305,11
@@
video_poll(struct file *file, struct poll_table_struct *wait)
up(&fh->cap.lock);
return POLLERR;
}
up(&fh->cap.lock);
return POLLERR;
}
- if (0 != fh->cap.ops->buf_prepare(
file
,fh->cap.read_buf,fh->cap.field)) {
+ if (0 != fh->cap.ops->buf_prepare(
&fh->cap
,fh->cap.read_buf,fh->cap.field)) {
up(&fh->cap.lock);
return POLLERR;
}
up(&fh->cap.lock);
return POLLERR;
}
- fh->cap.ops->buf_queue(
file
,fh->cap.read_buf);
+ fh->cap.ops->buf_queue(
&fh->cap
,fh->cap.read_buf);
fh->cap.read_off = 0;
}
up(&fh->cap.lock);
fh->cap.read_off = 0;
}
up(&fh->cap.lock);
@@
-1340,29
+1342,27
@@
static int video_release(struct inode *inode, struct file *file)
/* stop video capture */
if (res_check(fh, RESOURCE_VIDEO)) {
/* stop video capture */
if (res_check(fh, RESOURCE_VIDEO)) {
- videobuf_streamoff(
file,
&fh->cap);
+ videobuf_streamoff(&fh->cap);
res_free(dev,fh,RESOURCE_VIDEO);
}
if (fh->cap.read_buf) {
res_free(dev,fh,RESOURCE_VIDEO);
}
if (fh->cap.read_buf) {
- buffer_release(
file
,fh->cap.read_buf);
+ buffer_release(
&fh->cap
,fh->cap.read_buf);
kfree(fh->cap.read_buf);
}
/* stop vbi capture */
if (res_check(fh, RESOURCE_VBI)) {
if (fh->vbi.streaming)
kfree(fh->cap.read_buf);
}
/* stop vbi capture */
if (res_check(fh, RESOURCE_VBI)) {
if (fh->vbi.streaming)
- videobuf_streamoff(
file,
&fh->vbi);
+ videobuf_streamoff(&fh->vbi);
if (fh->vbi.reading)
if (fh->vbi.reading)
- videobuf_read_stop(
file,
&fh->vbi);
+ videobuf_read_stop(&fh->vbi);
res_free(dev,fh,RESOURCE_VBI);
}
saa7134_pgtable_free(dev->pci,&fh->pt_cap);
saa7134_pgtable_free(dev->pci,&fh->pt_vbi);
res_free(dev,fh,RESOURCE_VBI);
}
saa7134_pgtable_free(dev->pci,&fh->pt_cap);
saa7134_pgtable_free(dev->pci,&fh->pt_vbi);
-#ifdef VIDIOC_G_PRIORITY
v4l2_prio_close(&dev->prio,&fh->prio);
v4l2_prio_close(&dev->prio,&fh->prio);
-#endif
file->private_data = NULL;
kfree(fh);
return 0;
file->private_data = NULL;
kfree(fh);
return 0;
@@
-1372,13
+1372,13
@@
static int
video_mmap(struct file *file, struct vm_area_struct * vma)
{
struct saa7134_fh *fh = file->private_data;
video_mmap(struct file *file, struct vm_area_struct * vma)
{
struct saa7134_fh *fh = file->private_data;
-
- return videobuf_mmap_mapper(
vma,saa7134_queue(fh)
);
+
+ return videobuf_mmap_mapper(
saa7134_queue(fh), vma
);
}
/* ------------------------------------------------------------------ */
}
/* ------------------------------------------------------------------ */
-void saa7134_vbi_fmt(struct saa7134_dev *dev, struct v4l2_format *f)
+
static
void saa7134_vbi_fmt(struct saa7134_dev *dev, struct v4l2_format *f)
{
struct saa7134_tvnorm *norm = dev->tvnorm;
{
struct saa7134_tvnorm *norm = dev->tvnorm;
@@
-1401,8
+1401,8
@@
void saa7134_vbi_fmt(struct saa7134_dev *dev, struct v4l2_format *f)
#endif
}
#endif
}
-int saa7134_g_fmt(struct saa7134_dev *dev, struct saa7134_fh *fh,
- struct v4l2_format *f)
+
static
int saa7134_g_fmt(struct saa7134_dev *dev, struct saa7134_fh *fh,
+
struct v4l2_format *f)
{
switch (f->type) {
case V4L2_BUF_TYPE_VIDEO_CAPTURE:
{
switch (f->type) {
case V4L2_BUF_TYPE_VIDEO_CAPTURE:
@@
-1427,11
+1427,11
@@
int saa7134_g_fmt(struct saa7134_dev *dev, struct saa7134_fh *fh,
}
}
}
}
-int saa7134_try_fmt(struct saa7134_dev *dev, struct saa7134_fh *fh,
- struct v4l2_format *f)
+
static
int saa7134_try_fmt(struct saa7134_dev *dev, struct saa7134_fh *fh,
+
struct v4l2_format *f)
{
int err;
{
int err;
-
+
switch (f->type) {
case V4L2_BUF_TYPE_VIDEO_CAPTURE:
{
switch (f->type) {
case V4L2_BUF_TYPE_VIDEO_CAPTURE:
{
@@
-1446,7
+1446,7
@@
int saa7134_try_fmt(struct saa7134_dev *dev, struct saa7134_fh *fh,
field = f->fmt.pix.field;
maxw = min(dev->crop_current.width*4, dev->crop_bounds.width);
maxh = min(dev->crop_current.height*4, dev->crop_bounds.height);
field = f->fmt.pix.field;
maxw = min(dev->crop_current.width*4, dev->crop_bounds.width);
maxh = min(dev->crop_current.height*4, dev->crop_bounds.height);
-
+
if (V4L2_FIELD_ANY == field) {
field = (f->fmt.pix.height > maxh/2)
? V4L2_FIELD_INTERLACED
if (V4L2_FIELD_ANY == field) {
field = (f->fmt.pix.height > maxh/2)
? V4L2_FIELD_INTERLACED
@@
-1476,7
+1476,7
@@
int saa7134_try_fmt(struct saa7134_dev *dev, struct saa7134_fh *fh,
(f->fmt.pix.width * fmt->depth) >> 3;
f->fmt.pix.sizeimage =
f->fmt.pix.height * f->fmt.pix.bytesperline;
(f->fmt.pix.width * fmt->depth) >> 3;
f->fmt.pix.sizeimage =
f->fmt.pix.height * f->fmt.pix.bytesperline;
-
+
return 0;
}
case V4L2_BUF_TYPE_VIDEO_OVERLAY:
return 0;
}
case V4L2_BUF_TYPE_VIDEO_OVERLAY:
@@
-1492,18
+1492,18
@@
int saa7134_try_fmt(struct saa7134_dev *dev, struct saa7134_fh *fh,
}
}
}
}
-int saa7134_s_fmt(struct saa7134_dev *dev, struct saa7134_fh *fh,
- struct v4l2_format *f)
+
static
int saa7134_s_fmt(struct saa7134_dev *dev, struct saa7134_fh *fh,
+
struct v4l2_format *f)
{
unsigned long flags;
int err;
{
unsigned long flags;
int err;
-
+
switch (f->type) {
case V4L2_BUF_TYPE_VIDEO_CAPTURE:
err = saa7134_try_fmt(dev,fh,f);
if (0 != err)
return err;
switch (f->type) {
case V4L2_BUF_TYPE_VIDEO_CAPTURE:
err = saa7134_try_fmt(dev,fh,f);
if (0 != err)
return err;
-
+
fh->fmt = format_by_fourcc(f->fmt.pix.pixelformat);
fh->width = f->fmt.pix.width;
fh->height = f->fmt.pix.height;
fh->fmt = format_by_fourcc(f->fmt.pix.pixelformat);
fh->width = f->fmt.pix.width;
fh->height = f->fmt.pix.height;
@@
-1545,7
+1545,7
@@
int saa7134_common_ioctl(struct saa7134_dev *dev,
unsigned int cmd, void *arg)
{
int err;
unsigned int cmd, void *arg)
{
int err;
-
+
switch (cmd) {
case VIDIOC_QUERYCTRL:
{
switch (cmd) {
case VIDIOC_QUERYCTRL:
{
@@
-1612,7
+1612,7
@@
int saa7134_common_ioctl(struct saa7134_dev *dev,
case VIDIOC_S_INPUT:
{
int *i = arg;
case VIDIOC_S_INPUT:
{
int *i = arg;
-
+
if (*i < 0 || *i >= SAA7134_INPUT_MAX)
return -EINVAL;
if (NULL == card_in(dev,*i).name)
if (*i < 0 || *i >= SAA7134_INPUT_MAX)
return -EINVAL;
if (NULL == card_in(dev,*i).name)
@@
-1626,6
+1626,7
@@
int saa7134_common_ioctl(struct saa7134_dev *dev,
}
return 0;
}
}
return 0;
}
+EXPORT_SYMBOL(saa7134_common_ioctl);
/*
* This function is _not_ called directly, but from
/*
* This function is _not_ called directly, but from
@@
-1643,7
+1644,6
@@
static int video_do_ioctl(struct inode *inode, struct file *file,
if (video_debug > 1)
saa7134_print_ioctl(dev->name,cmd);
if (video_debug > 1)
saa7134_print_ioctl(dev->name,cmd);
-#ifdef VIDIOC_G_PRIORITY
switch (cmd) {
case VIDIOC_S_CTRL:
case VIDIOC_S_STD:
switch (cmd) {
case VIDIOC_S_CTRL:
case VIDIOC_S_STD:
@@
-1654,13
+1654,12
@@
static int video_do_ioctl(struct inode *inode, struct file *file,
if (0 != err)
return err;
}
if (0 != err)
return err;
}
-#endif
switch (cmd) {
case VIDIOC_QUERYCAP:
{
struct v4l2_capability *cap = arg;
switch (cmd) {
case VIDIOC_QUERYCAP:
{
struct v4l2_capability *cap = arg;
-
+
memset(cap,0,sizeof(*cap));
strcpy(cap->driver, "saa7134");
strlcpy(cap->card, saa7134_boards[dev->board].name,
memset(cap,0,sizeof(*cap));
strcpy(cap->driver, "saa7134");
strlcpy(cap->card, saa7134_boards[dev->board].name,
@@
-1672,7
+1671,7
@@
static int video_do_ioctl(struct inode *inode, struct file *file,
V4L2_CAP_VIDEO_OVERLAY |
V4L2_CAP_VBI_CAPTURE |
V4L2_CAP_TUNER |
V4L2_CAP_VIDEO_OVERLAY |
V4L2_CAP_VBI_CAPTURE |
V4L2_CAP_TUNER |
- V4L2_CAP_READWRITE |
+ V4L2_CAP_READWRITE |
V4L2_CAP_STREAMING;
return 0;
}
V4L2_CAP_STREAMING;
return 0;
}
@@
-1722,7
+1721,7
@@
static int video_do_ioctl(struct inode *inode, struct file *file,
set_tvnorm(dev,&tvnorms[i]);
start_preview(dev,fh);
spin_unlock_irqrestore(&dev->slock,flags);
set_tvnorm(dev,&tvnorms[i]);
start_preview(dev,fh);
spin_unlock_irqrestore(&dev->slock,flags);
- } else
+ } else
set_tvnorm(dev,&tvnorms[i]);
saa7134_tvaudio_do_scan(dev);
up(&dev->lock);
set_tvnorm(dev,&tvnorms[i]);
saa7134_tvaudio_do_scan(dev);
up(&dev->lock);
@@
-1868,7
+1867,7
@@
static int video_do_ioctl(struct inode *inode, struct file *file,
up(&dev->lock);
return 0;
}
up(&dev->lock);
return 0;
}
-
+
/* --- control ioctls ---------------------------------------- */
case VIDIOC_ENUMINPUT:
case VIDIOC_G_INPUT:
/* --- control ioctls ---------------------------------------- */
case VIDIOC_ENUMINPUT:
case VIDIOC_G_INPUT:
@@
-1895,7
+1894,6
@@
static int video_do_ioctl(struct inode *inode, struct file *file,
return 0;
}
return 0;
}
-#ifdef VIDIOC_G_PRIORITY
case VIDIOC_G_PRIORITY:
{
enum v4l2_priority *p = arg;
case VIDIOC_G_PRIORITY:
{
enum v4l2_priority *p = arg;
@@
-1909,7
+1907,6
@@
static int video_do_ioctl(struct inode *inode, struct file *file,
return v4l2_prio_change(&dev->prio, &fh->prio, *prio);
}
return v4l2_prio_change(&dev->prio, &fh->prio, *prio);
}
-#endif
/* --- preview ioctls ---------------------------------------- */
case VIDIOC_ENUM_FMT:
/* --- preview ioctls ---------------------------------------- */
case VIDIOC_ENUM_FMT:
@@
-1944,7
+1941,7
@@
static int video_do_ioctl(struct inode *inode, struct file *file,
strcpy(f->description,"vbi data");
break;
default:
strcpy(f->description,"vbi data");
break;
default:
- return -EINVAL;
+ return -EINVAL;
}
return 0;
}
}
return 0;
}
@@
-1960,7
+1957,7
@@
static int video_do_ioctl(struct inode *inode, struct file *file,
{
struct v4l2_framebuffer *fb = arg;
struct saa7134_format *fmt;
{
struct v4l2_framebuffer *fb = arg;
struct saa7134_format *fmt;
-
+
if(!capable(CAP_SYS_ADMIN) &&
!capable(CAP_SYS_RAWIO))
return -EPERM;
if(!capable(CAP_SYS_ADMIN) &&
!capable(CAP_SYS_RAWIO))
return -EPERM;
@@
-2016,7
+2013,7
@@
static int video_do_ioctl(struct inode *inode, struct file *file,
struct v4l2_format *f = arg;
return saa7134_try_fmt(dev,fh,f);
}
struct v4l2_format *f = arg;
return saa7134_try_fmt(dev,fh,f);
}
-
+
case VIDIOCGMBUF:
{
struct video_mbuf *mbuf = arg;
case VIDIOCGMBUF:
{
struct video_mbuf *mbuf = arg;
@@
-2029,7
+2026,7
@@
static int video_do_ioctl(struct inode *inode, struct file *file,
req.type = q->type;
req.count = gbuffers;
req.memory = V4L2_MEMORY_MMAP;
req.type = q->type;
req.count = gbuffers;
req.memory = V4L2_MEMORY_MMAP;
- err = videobuf_reqbufs(
file,
q,&req);
+ err = videobuf_reqbufs(q,&req);
if (err < 0)
return err;
memset(mbuf,0,sizeof(*mbuf));
if (err < 0)
return err;
memset(mbuf,0,sizeof(*mbuf));
@@
-2042,16
+2039,17
@@
static int video_do_ioctl(struct inode *inode, struct file *file,
return 0;
}
case VIDIOC_REQBUFS:
return 0;
}
case VIDIOC_REQBUFS:
- return videobuf_reqbufs(
file,
saa7134_queue(fh),arg);
+ return videobuf_reqbufs(saa7134_queue(fh),arg);
case VIDIOC_QUERYBUF:
return videobuf_querybuf(saa7134_queue(fh),arg);
case VIDIOC_QBUF:
case VIDIOC_QUERYBUF:
return videobuf_querybuf(saa7134_queue(fh),arg);
case VIDIOC_QBUF:
- return videobuf_qbuf(
file,
saa7134_queue(fh),arg);
+ return videobuf_qbuf(saa7134_queue(fh),arg);
case VIDIOC_DQBUF:
case VIDIOC_DQBUF:
- return videobuf_dqbuf(file,saa7134_queue(fh),arg);
+ return videobuf_dqbuf(saa7134_queue(fh),arg,
+ file->f_flags & O_NONBLOCK);
case VIDIOC_STREAMON:
{
case VIDIOC_STREAMON:
{
@@
-2059,13
+2057,13
@@
static int video_do_ioctl(struct inode *inode, struct file *file,
if (!res_get(dev,fh,res))
return -EBUSY;
if (!res_get(dev,fh,res))
return -EBUSY;
- return videobuf_streamon(
file,
saa7134_queue(fh));
+ return videobuf_streamon(saa7134_queue(fh));
}
case VIDIOC_STREAMOFF:
{
int res = saa7134_resource(fh);
}
case VIDIOC_STREAMOFF:
{
int res = saa7134_resource(fh);
- err = videobuf_streamoff(
file,
saa7134_queue(fh));
+ err = videobuf_streamoff(saa7134_queue(fh));
if (err < 0)
return err;
res_free(dev,fh,res);
if (err < 0)
return err;
res_free(dev,fh,res);
@@
-2090,7
+2088,7
@@
static int radio_do_ioctl(struct inode *inode, struct file *file,
{
struct saa7134_fh *fh = file->private_data;
struct saa7134_dev *dev = fh->dev;
{
struct saa7134_fh *fh = file->private_data;
struct saa7134_dev *dev = fh->dev;
-
+
if (video_debug > 1)
saa7134_print_ioctl(dev->name,cmd);
switch (cmd) {
if (video_debug > 1)
saa7134_print_ioctl(dev->name,cmd);
switch (cmd) {
@@
-2134,7
+2132,7
@@
static int radio_do_ioctl(struct inode *inode, struct file *file,
case VIDIOC_ENUMINPUT:
{
struct v4l2_input *i = arg;
case VIDIOC_ENUMINPUT:
{
struct v4l2_input *i = arg;
-
+
if (i->index != 0)
return -EINVAL;
strcpy(i->name,"Radio");
if (i->index != 0)
return -EINVAL;
strcpy(i->name,"Radio");
@@
-2188,7
+2186,7
@@
static int radio_do_ioctl(struct inode *inode, struct file *file,
case VIDIOC_G_FREQUENCY:
case VIDIOC_S_FREQUENCY:
return video_do_ioctl(inode,file,cmd,arg);
case VIDIOC_G_FREQUENCY:
case VIDIOC_S_FREQUENCY:
return video_do_ioctl(inode,file,cmd,arg);
-
+
default:
return v4l_compat_translate_ioctl(inode,file,cmd,arg,
radio_do_ioctl);
default:
return v4l_compat_translate_ioctl(inode,file,cmd,arg,
radio_do_ioctl);
@@
-2296,7
+2294,7
@@
int saa7134_video_init1(struct saa7134_dev *dev)
saa_writeb(SAA7134_VIDEO_PORT_CTRL7, video_out[vo][7]);
saa_writeb(SAA7134_VIDEO_PORT_CTRL8, video_out[vo][8]);
}
saa_writeb(SAA7134_VIDEO_PORT_CTRL7, video_out[vo][7]);
saa_writeb(SAA7134_VIDEO_PORT_CTRL8, video_out[vo][8]);
}
-
+
return 0;
}
return 0;
}
@@
-2324,7
+2322,7
@@
void saa7134_irq_video_intl(struct saa7134_dev *dev)
norm = saa_readb(SAA7134_STATUS_VIDEO1) & 0x03;
dprintk("DCSDT: %s\n",st[norm]);
norm = saa_readb(SAA7134_STATUS_VIDEO1) & 0x03;
dprintk("DCSDT: %s\n",st[norm]);
-
+
if (0 != norm) {
/* wake up tvaudio audio carrier scan thread */
saa7134_tvaudio_do_scan(dev);
if (0 != norm) {
/* wake up tvaudio audio carrier scan thread */
saa7134_tvaudio_do_scan(dev);
@@
-2342,7
+2340,7
@@
void saa7134_irq_video_intl(struct saa7134_dev *dev)
void saa7134_irq_video_done(struct saa7134_dev *dev, unsigned long status)
{
enum v4l2_field field;
void saa7134_irq_video_done(struct saa7134_dev *dev, unsigned long status)
{
enum v4l2_field field;
-
+
spin_lock(&dev->slock);
if (dev->video_q.curr) {
dev->video_fieldcount++;
spin_lock(&dev->slock);
if (dev->video_q.curr) {
dev->video_fieldcount++;