if (hdl->error) {
                err = hdl->error;
                dev_err(&udev->dev, "couldn't register control\n");
-               goto unregister;
+               goto free_hdlr_and_unreg_dev;
        }
        /* save the init method used by this camera */
        cam->method = id->driver_info;
        if (!cam->read_endpoint) {
                err = -ENOMEM;
                dev_err(&intf->dev, "Could not find bulk-in endpoint\n");
-               goto unregister;
+               goto free_hdlr_and_unreg_dev;
        }
 
        /* v4l */
        /* load zr364xx board specific */
        err = zr364xx_board_init(cam);
        if (err)
-               goto unregister;
+               goto free_hdlr_and_unreg_dev;
        err = v4l2_ctrl_handler_setup(hdl);
        if (err)
                goto board_uninit;
        err = video_register_device(&cam->vdev, VFL_TYPE_VIDEO, -1);
        if (err) {
                dev_err(&udev->dev, "video_register_device failed\n");
-               goto free_handler;
+               goto board_uninit;
        }
        cam->v4l2_dev.release = zr364xx_release;
 
                 video_device_node_name(&cam->vdev));
        return 0;
 
-free_handler:
-       v4l2_ctrl_handler_free(hdl);
 board_uninit:
        zr364xx_board_uninit(cam);
-unregister:
+free_hdlr_and_unreg_dev:
+       v4l2_ctrl_handler_free(hdl);
        v4l2_device_unregister(&cam->v4l2_dev);
 free_cam:
        kfree(cam);