diff options
Diffstat (limited to 'drivers/media/video/saa7164/saa7164-encoder.c')
-rw-r--r-- | drivers/media/video/saa7164/saa7164-encoder.c | 48 |
1 files changed, 9 insertions, 39 deletions
diff --git a/drivers/media/video/saa7164/saa7164-encoder.c b/drivers/media/video/saa7164/saa7164-encoder.c index d02682e24c2..cbb53d0ee97 100644 --- a/drivers/media/video/saa7164/saa7164-encoder.c +++ b/drivers/media/video/saa7164/saa7164-encoder.c @@ -1054,57 +1054,26 @@ out: static int fops_open(struct file *file) { - struct saa7164_dev *h, *dev = NULL; - struct saa7164_port *port = NULL; - struct saa7164_port *portc = NULL; - struct saa7164_port *portd = NULL; + struct saa7164_dev *dev; + struct saa7164_port *port; struct saa7164_encoder_fh *fh; - struct list_head *list; - int minor = video_devdata(file)->minor; - dprintk(DBGLVL_ENC, "%s()\n", __func__); - - /* TODO: Really, the BKL? - remove this */ - lock_kernel(); - list_for_each(list, &saa7164_devlist) { - h = list_entry(list, struct saa7164_dev, devlist); - - portc = &h->ports[SAA7164_PORT_ENC1]; - portd = &h->ports[SAA7164_PORT_ENC2]; - - if (portc->v4l_device && - portc->v4l_device->minor == minor) { - dev = h; - port = portc; - break; - } - - if (portd->v4l_device && - portd->v4l_device->minor == minor) { - dev = h; - port = portd; - break; - } + port = (struct saa7164_port *)video_get_drvdata(video_devdata(file)); + if (!port) + return -ENODEV; - } + dev = port->dev; - if (port == NULL) { - unlock_kernel(); - return -ENODEV; - } + dprintk(DBGLVL_ENC, "%s()\n", __func__); /* allocate + initialize per filehandle data */ fh = kzalloc(sizeof(*fh), GFP_KERNEL); - if (NULL == fh) { - unlock_kernel(); + if (NULL == fh) return -ENOMEM; - } file->private_data = fh; fh->port = port; - unlock_kernel(); - return 0; } @@ -1474,6 +1443,7 @@ int saa7164_encoder_register(struct saa7164_port *port) goto failed; } + video_set_drvdata(port->v4l_device, port); result = video_register_device(port->v4l_device, VFL_TYPE_GRABBER, -1); if (result < 0) { |