unsigned int *size)
 {
        struct soc_camera_device *icd = vq->priv_data;
-       struct soc_camera_host *ici =
-               to_soc_camera_host(icd->dev.parent);
+       struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
        struct pxa_camera_dev *pcdev = ici->priv;
 
        dev_dbg(&icd->dev, "count=%d, size=%d\n", *count, *size);
 static void free_buffer(struct videobuf_queue *vq, struct pxa_buffer *buf)
 {
        struct soc_camera_device *icd = vq->priv_data;
-       struct soc_camera_host *ici =
-               to_soc_camera_host(icd->dev.parent);
+       struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
        struct pxa_camera_dev *pcdev = ici->priv;
        struct videobuf_dmabuf *dma = videobuf_to_dma(&buf->vb);
        int i;
                struct videobuf_buffer *vb, enum v4l2_field field)
 {
        struct soc_camera_device *icd = vq->priv_data;
-       struct soc_camera_host *ici =
-               to_soc_camera_host(icd->dev.parent);
+       struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
        struct pxa_camera_dev *pcdev = ici->priv;
        struct pxa_buffer *buf = container_of(vb, struct pxa_buffer, vb);
        int ret;
                               struct videobuf_buffer *vb)
 {
        struct soc_camera_device *icd = vq->priv_data;
-       struct soc_camera_host *ici =
-               to_soc_camera_host(icd->dev.parent);
+       struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
        struct pxa_camera_dev *pcdev = ici->priv;
        struct pxa_buffer *buf = container_of(vb, struct pxa_buffer, vb);
        struct pxa_buffer *active;
 
 static int pxa_camera_set_bus_param(struct soc_camera_device *icd, __u32 pixfmt)
 {
-       struct soc_camera_host *ici =
-               to_soc_camera_host(icd->dev.parent);
+       struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
        struct pxa_camera_dev *pcdev = ici->priv;
        unsigned long dw, bpp, bus_flags, camera_flags, common_flags;
        u32 cicr0, cicr1, cicr2, cicr3, cicr4 = 0;
 
 static int pxa_camera_suspend(struct soc_camera_device *icd, pm_message_t state)
 {
-       struct soc_camera_host *ici =
-               to_soc_camera_host(icd->dev.parent);
+       struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
        struct pxa_camera_dev *pcdev = ici->priv;
        int i = 0, ret = 0;
 
 
 static int pxa_camera_resume(struct soc_camera_device *icd)
 {
-       struct soc_camera_host *ici =
-               to_soc_camera_host(icd->dev.parent);
+       struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
        struct pxa_camera_dev *pcdev = ici->priv;
        int i = 0, ret = 0;
 
 
 {
        struct soc_camera_file *icf = file->private_data;
        struct soc_camera_device *icd = icf->icd;
-       struct soc_camera_host *ici =
-               to_soc_camera_host(icd->dev.parent);
+       struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
        enum v4l2_field field;
        int ret;
 
        int ret;
        struct soc_camera_file *icf = file->private_data;
        struct soc_camera_device *icd = icf->icd;
-       struct soc_camera_host *ici =
-               to_soc_camera_host(icd->dev.parent);
+       struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
 
        WARN_ON(priv != file->private_data);
 
 {
        struct soc_camera_file *icf = file->private_data;
        struct soc_camera_device *icd = icf->icd;
-       struct soc_camera_host *ici =
-               to_soc_camera_host(icd->dev.parent);
+       struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
 
        if (list_empty(&icf->vb_vidq.stream)) {
                dev_err(&icd->dev, "Trying to poll with no queued buffers!\n");
 {
        struct soc_camera_file *icf = file->private_data;
        struct soc_camera_device *icd = icf->icd;
-       struct soc_camera_host *ici =
-               to_soc_camera_host(icd->dev.parent);
-       __u32 pixfmt = f->fmt.pix.pixelformat;
+       struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
+       struct v4l2_pix_format *pix = &f->fmt.pix;
+       __u32 pixfmt = pix->pixelformat;
        int ret;
        struct v4l2_rect rect;
 
 
        rect.left       = icd->x_current;
        rect.top        = icd->y_current;
-       rect.width      = f->fmt.pix.width;
-       rect.height     = f->fmt.pix.height;
-       ret = ici->ops->set_fmt(icd, f->fmt.pix.pixelformat, &rect);
+       rect.width      = pix->width;
+       rect.height     = pix->height;
+       ret = ici->ops->set_fmt(icd, pix->pixelformat, &rect);
        if (ret < 0) {
                return ret;
        } else if (!icd->current_fmt ||
 
        icd->width              = rect.width;
        icd->height             = rect.height;
-       icf->vb_vidq.field      = f->fmt.pix.field;
+       icf->vb_vidq.field      = pix->field;
        if (f->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
                dev_warn(&icd->dev, "Attention! Wrong buf-type %d\n",
                         f->type);
 {
        struct soc_camera_file *icf = file->private_data;
        struct soc_camera_device *icd = icf->icd;
+       struct v4l2_pix_format *pix = &f->fmt.pix;
 
        WARN_ON(priv != file->private_data);
 
-       f->fmt.pix.width        = icd->width;
-       f->fmt.pix.height       = icd->height;
-       f->fmt.pix.field        = icf->vb_vidq.field;
-       f->fmt.pix.pixelformat  = icd->current_fmt->fourcc;
-       f->fmt.pix.bytesperline = f->fmt.pix.width *
+       pix->width              = icd->width;
+       pix->height             = icd->height;
+       pix->field              = icf->vb_vidq.field;
+       pix->pixelformat        = icd->current_fmt->fourcc;
+       pix->bytesperline       = pix->width *
                DIV_ROUND_UP(icd->current_fmt->depth, 8);
-       f->fmt.pix.sizeimage    = f->fmt.pix.height * f->fmt.pix.bytesperline;
+       pix->sizeimage          = pix->height * pix->bytesperline;
        dev_dbg(&icd->dev, "current_fmt->fourcc: 0x%08x\n",
                icd->current_fmt->fourcc);
        return 0;
 {
        struct soc_camera_file *icf = file->private_data;
        struct soc_camera_device *icd = icf->icd;
-       struct soc_camera_host *ici =
-               to_soc_camera_host(icd->dev.parent);
+       struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
 
        WARN_ON(priv != file->private_data);
 
 {
        struct soc_camera_file *icf = file->private_data;
        struct soc_camera_device *icd = icf->icd;
-       struct soc_camera_host *ici =
-               to_soc_camera_host(icd->dev.parent);
+       struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
        int ret;
 
        if (a->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
 static int soc_camera_probe(struct device *dev)
 {
        struct soc_camera_device *icd = to_soc_camera_dev(dev);
-       struct soc_camera_host *ici =
-               to_soc_camera_host(icd->dev.parent);
+       struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
        int ret;
 
-       if (!icd->ops->probe)
-               return -ENODEV;
-
        /* We only call ->add() here to activate and probe the camera.
         * We shall ->remove() and deactivate it immediately afterwards. */
        ret = ici->ops->add(icd);
        int ret;
        struct soc_camera_host *ix;
 
-       if (!ici->ops->init_videobuf || !ici->ops->add || !ici->ops->remove)
+       if (!ici || !ici->ops ||
+           !ici->ops->try_fmt ||
+           !ici->ops->set_fmt ||
+           !ici->ops->set_bus_param ||
+           !ici->ops->querycap ||
+           !ici->ops->init_videobuf ||
+           !ici->ops->reqbufs ||
+           !ici->ops->add ||
+           !ici->ops->remove ||
+           !ici->ops->poll)
                return -EINVAL;
 
        /* Number might be equal to the platform device ID */
        struct soc_camera_device *ix;
        int num = -1, i;
 
-       if (!icd)
+       if (!icd || !icd->ops ||
+           !icd->ops->probe ||
+           !icd->ops->init ||
+           !icd->ops->release ||
+           !icd->ops->start_capture ||
+           !icd->ops->stop_capture ||
+           !icd->ops->set_fmt ||
+           !icd->ops->try_fmt ||
+           !icd->ops->query_bus_param ||
+           !icd->ops->set_bus_param)
                return -EINVAL;
 
        for (i = 0; i < 256 && num < 0; i++) {
        icd->dev.bus = &soc_camera_bus_type;
        dev_set_name(&icd->dev, "%u-%u", icd->iface, icd->devnum);
 
-       icd->dev.release = dummy_release;
+       icd->dev.release        = dummy_release;
+       icd->use_count          = 0;
+       icd->host_priv          = NULL;
 
        return scan_add_device(icd);
 }