V4L/DVB (3568c): zoran: Init cleanups
authorJean Delvare <khali@linux-fr.org>
Wed, 22 Mar 2006 06:48:37 +0000 (03:48 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Thu, 23 Mar 2006 14:24:08 +0000 (11:24 -0300)
Cleanups to the zr36057 initialization:
* Drop intermediate local variables.
* Single error path.
Also drop a needless cast on kfree.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/video/zoran_card.c

index 246e67c..a2e528c 100644 (file)
@@ -995,10 +995,7 @@ test_interrupts (struct zoran *zr)
 static int __devinit
 zr36057_init (struct zoran *zr)
 {
-       u32 *mem;
-       void *vdev;
-       unsigned mem_needed;
-       int j;
+       int j, err;
        int two = 2;
        int zero = 0;
 
@@ -1049,19 +1046,16 @@ zr36057_init (struct zoran *zr)
 
        /* allocate memory *before* doing anything to the hardware
         * in case allocation fails */
-       mem_needed = BUZ_NUM_STAT_COM * 4;
-       mem = kzalloc(mem_needed, GFP_KERNEL);
-       vdev = (void *) kmalloc(sizeof(struct video_device), GFP_KERNEL);
-       if (!mem || !vdev) {
+       zr->stat_com = kzalloc(BUZ_NUM_STAT_COM * 4, GFP_KERNEL);
+       zr->video_dev = kmalloc(sizeof(struct video_device), GFP_KERNEL);
+       if (!zr->stat_com || !zr->video_dev) {
                dprintk(1,
                        KERN_ERR
                        "%s: zr36057_init() - kmalloc (STAT_COM) failed\n",
                        ZR_DEVNAME(zr));
-               kfree(vdev);
-               kfree(mem);
-               return -ENOMEM;
+               err = -ENOMEM;
+               goto exit_free;
        }
-       zr->stat_com = mem;
        for (j = 0; j < BUZ_NUM_STAT_COM; j++) {
                zr->stat_com[j] = 1;    /* mark as unavailable to zr36057 */
        }
@@ -1069,16 +1063,11 @@ zr36057_init (struct zoran *zr)
        /*
         *   Now add the template and register the device unit.
         */
-       zr->video_dev = vdev;
        memcpy(zr->video_dev, &zoran_template, sizeof(zoran_template));
        strcpy(zr->video_dev->name, ZR_DEVNAME(zr));
-       if (video_register_device(zr->video_dev, VFL_TYPE_GRABBER,
-                                 video_nr) < 0) {
-               zoran_unregister_i2c(zr);
-               kfree((void *) zr->stat_com);
-               kfree(vdev);
-               return -1;
-       }
+       err = video_register_device(zr->video_dev, VFL_TYPE_GRABBER, video_nr);
+       if (err < 0)
+               goto exit_unregister;
 
        zoran_init_hardware(zr);
        if (*zr_debug > 2)
@@ -1092,6 +1081,13 @@ zr36057_init (struct zoran *zr)
        zr->zoran_proc = NULL;
        zr->initialized = 1;
        return 0;
+
+exit_unregister:
+       zoran_unregister_i2c(zr);
+exit_free:
+       kfree(zr->stat_com);
+       kfree(zr->video_dev);
+       return err;
 }
 
 static void
@@ -1121,7 +1117,7 @@ zoran_release (struct zoran *zr)
        btwrite(0, ZR36057_SPGPPCR);
        free_irq(zr->pci_dev->irq, zr);
        /* unmap and free memory */
-       kfree((void *) zr->stat_com);
+       kfree(zr->stat_com);
        zoran_proc_cleanup(zr);
        iounmap(zr->zr36057_mem);
        pci_disable_device(zr->pci_dev);