[media] cx88: gracefully reject attempts to use unregistered cx88-blackbird driver
[pandora-kernel.git] / drivers / media / video / cx88 / cx88-blackbird.c
index f637d34..fa8e347 100644 (file)
@@ -1060,18 +1060,21 @@ static int mpeg_open(struct file *file)
 
        /* Make sure we can acquire the hardware */
        drv = cx8802_get_driver(dev, CX88_MPEG_BLACKBIRD);
-       if (drv) {
-               err = drv->request_acquire(drv);
-               if(err != 0) {
-                       dprintk(1,"%s: Unable to acquire hardware, %d\n", __func__, err);
-                       mutex_unlock(&dev->core->lock);
-                       return err;
-               }
+       if (!drv) {
+               dprintk(1, "%s: blackbird driver is not loaded\n", __func__);
+               mutex_unlock(&dev->core->lock);
+               return -ENODEV;
+       }
+
+       err = drv->request_acquire(drv);
+       if (err != 0) {
+               dprintk(1,"%s: Unable to acquire hardware, %d\n", __func__, err);
+               mutex_unlock(&dev->core->lock);
+               return err;
        }
 
        if (!atomic_read(&dev->core->mpeg_users) && blackbird_initialize_codec(dev) < 0) {
-               if (drv)
-                       drv->request_release(drv);
+               drv->request_release(drv);
                mutex_unlock(&dev->core->lock);
                return -EINVAL;
        }
@@ -1080,8 +1083,7 @@ static int mpeg_open(struct file *file)
        /* allocate + initialize per filehandle data */
        fh = kzalloc(sizeof(*fh),GFP_KERNEL);
        if (NULL == fh) {
-               if (drv)
-                       drv->request_release(drv);
+               drv->request_release(drv);
                mutex_unlock(&dev->core->lock);
                return -ENOMEM;
        }
@@ -1125,6 +1127,7 @@ static int mpeg_release(struct file *file)
 
        /* Make sure we release the hardware */
        drv = cx8802_get_driver(dev, CX88_MPEG_BLACKBIRD);
+       WARN_ON(!drv);
        if (drv)
                drv->request_release(drv);