* gmin_subdev struct is already initialized for us.
         */
        gs = find_gmin_subdev(subdev);
+       if (!gs)
+               return -ENODEV;
 
        pdata.subdevs[i].type = type;
        pdata.subdevs[i].port = gs->csi_port;
        for (i = 0; i < MAX_SUBDEVS; i++)
                if (gmin_subdevs[i].subdev == subdev)
                        return &gmin_subdevs[i];
-       return gmin_subdev_add(subdev);
+       return NULL;
 }
 
 static int axp_regulator_set(struct device *dev, struct gmin_subdev *gs,
     enum atomisp_input_format csi_format,
     enum atomisp_bayer_order csi_bayer)
 {
-       struct gmin_subdev *gs = find_gmin_subdev(subdev);
+       struct gmin_subdev *gs = gmin_subdev_add(subdev);
 
        gs->csi_fmt = csi_format;
        gs->csi_bayer = csi_bayer;