Merge branch 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-microblaze.git] / drivers / staging / media / imx / imx-media-csi.c
index dce4add..367e39f 100644 (file)
@@ -56,7 +56,6 @@ struct csi_skip_desc {
 struct csi_priv {
        struct device *dev;
        struct ipu_soc *ipu;
-       struct imx_media_dev *md;
        struct v4l2_subdev sd;
        struct media_pad pad[CSI_NUM_PADS];
        /* the video device at IDMAC output pad */
@@ -178,8 +177,8 @@ static int csi_get_upstream_endpoint(struct csi_priv *priv,
                 * CSI-2 receiver if it is in the path, otherwise stay
                 * with video mux.
                 */
-               sd = imx_media_find_upstream_subdev(priv->md, src,
-                                                   IMX_MEDIA_GRP_ID_CSI2);
+               sd = imx_media_pipeline_subdev(src, IMX_MEDIA_GRP_ID_CSI2,
+                                              true);
                if (!IS_ERR(sd))
                        src = &sd->entity;
        }
@@ -193,9 +192,9 @@ static int csi_get_upstream_endpoint(struct csi_priv *priv,
                src = &priv->sd.entity;
 
        /* get source pad of entity directly upstream from src */
-       pad = imx_media_find_upstream_pad(priv->md, src, 0);
-       if (IS_ERR(pad))
-               return PTR_ERR(pad);
+       pad = imx_media_pipeline_pad(src, 0, 0, true);
+       if (!pad)
+               return -ENODEV;
 
        sd = media_entity_to_v4l2_subdev(pad->entity);
 
@@ -608,7 +607,7 @@ static int csi_idmac_start(struct csi_priv *priv)
 
        outfmt = &vdev->fmt.fmt.pix;
 
-       ret = imx_media_alloc_dma_buf(priv->md, &priv->underrun_buf,
+       ret = imx_media_alloc_dma_buf(priv->dev, &priv->underrun_buf,
                                      outfmt->sizeimage);
        if (ret)
                goto out_put_ipu;
@@ -662,7 +661,7 @@ out_free_nfb4eof_irq:
 out_unsetup:
        csi_idmac_unsetup(priv, VB2_BUF_STATE_QUEUED);
 out_free_dma_buf:
-       imx_media_free_dma_buf(priv->md, &priv->underrun_buf);
+       imx_media_free_dma_buf(priv->dev, &priv->underrun_buf);
 out_put_ipu:
        csi_idmac_put_ipu_resources(priv);
        return ret;
@@ -694,7 +693,7 @@ static void csi_idmac_stop(struct csi_priv *priv)
 
        csi_idmac_unsetup(priv, VB2_BUF_STATE_ERROR);
 
-       imx_media_free_dma_buf(priv->md, &priv->underrun_buf);
+       imx_media_free_dma_buf(priv->dev, &priv->underrun_buf);
 
        /* cancel the EOF timeout timer */
        del_timer_sync(&priv->eof_timeout_timer);
@@ -1134,8 +1133,7 @@ static int csi_link_validate(struct v4l2_subdev *sd,
                 */
 #if 0
                mutex_unlock(&priv->lock);
-               vc_num = imx_media_find_mipi_csi2_channel(priv->md,
-                                                         &priv->sd.entity);
+               vc_num = imx_media_find_mipi_csi2_channel(&priv->sd.entity);
                if (vc_num < 0)
                        return vc_num;
                mutex_lock(&priv->lock);
@@ -1505,13 +1503,10 @@ static int csi_set_fmt(struct v4l2_subdev *sd,
                       struct v4l2_subdev_format *sdformat)
 {
        struct csi_priv *priv = v4l2_get_subdevdata(sd);
-       struct imx_media_video_dev *vdev = priv->vdev;
        struct v4l2_fwnode_endpoint upstream_ep = { .bus_type = 0 };
        const struct imx_media_pixfmt *cc;
-       struct v4l2_pix_format vdev_fmt;
        struct v4l2_mbus_framefmt *fmt;
        struct v4l2_rect *crop, *compose;
-       struct v4l2_rect vdev_compose;
        int ret;
 
        if (sdformat->pad >= CSI_NUM_PADS)
@@ -1561,19 +1556,9 @@ static int csi_set_fmt(struct v4l2_subdev *sd,
                }
        }
 
-       if (sdformat->which == V4L2_SUBDEV_FORMAT_TRY)
-               goto out;
-
-       priv->cc[sdformat->pad] = cc;
-
-       /* propagate IDMAC output pad format to capture device */
-       imx_media_mbus_fmt_to_pix_fmt(&vdev_fmt, &vdev_compose,
-                                     &priv->format_mbus[CSI_SRC_PAD_IDMAC],
-                                     priv->cc[CSI_SRC_PAD_IDMAC]);
-       mutex_unlock(&priv->lock);
-       imx_media_capture_device_set_format(vdev, &vdev_fmt, &vdev_compose);
+       if (sdformat->which == V4L2_SUBDEV_FORMAT_ACTIVE)
+               priv->cc[sdformat->pad] = cc;
 
-       return 0;
 out:
        mutex_unlock(&priv->lock);
        return ret;
@@ -1765,9 +1750,6 @@ static int csi_registered(struct v4l2_subdev *sd)
        int i, ret;
        u32 code;
 
-       /* get media device */
-       priv->md = dev_get_drvdata(sd->v4l2_dev->dev);
-
        /* get handle to IPU CSI */
        csi = ipu_csi_get(priv->ipu, priv->csi_id);
        if (IS_ERR(csi)) {
@@ -1815,17 +1797,12 @@ static int csi_registered(struct v4l2_subdev *sd)
        if (ret)
                goto free_fim;
 
-       ret = imx_media_capture_device_register(priv->md, priv->vdev);
+       ret = imx_media_capture_device_register(priv->vdev);
        if (ret)
                goto free_fim;
 
-       ret = imx_media_add_video_device(priv->md, priv->vdev);
-       if (ret)
-               goto unreg;
-
        return 0;
-unreg:
-       imx_media_capture_device_unregister(priv->vdev);
+
 free_fim:
        if (priv->fim)
                imx_media_fim_free(priv->fim);
@@ -1986,7 +1963,7 @@ static int imx_csi_probe(struct platform_device *pdev)
        imx_media_grp_id_to_sd_name(priv->sd.name, sizeof(priv->sd.name),
                                    priv->sd.grp_id, ipu_get_num(priv->ipu));
 
-       priv->vdev = imx_media_capture_device_init(&priv->sd,
+       priv->vdev = imx_media_capture_device_init(priv->sd.dev, &priv->sd,
                                                   CSI_SRC_PAD_IDMAC);
        if (IS_ERR(priv->vdev))
                return PTR_ERR(priv->vdev);