media: staging: media: imx: imx7-media-csi: Import imx_media_dev_init() helper
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Mon, 9 May 2022 22:32:33 +0000 (23:32 +0100)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Fri, 8 Jul 2022 17:02:41 +0000 (18:02 +0100)
To prepare for code refactoring, copy the imx_media_dev_init() helper
used by this driver from imx-media-dev-common.c. Rename the function to
avoid name clashes, and leave the v4l2_device notify handler out as it
only serves to implement control inheritance, which this driver doesn't
use. No functional change intended.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Rui Miguel Silva <rmfrfs@gmail.com>
Tested-by: Alexander Stein <alexander.stein@ew.tq-group.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/staging/media/imx/imx7-media-csi.c

index 72ca95921847d1937ba38ab14a90d6a72a8b5437..07da9d6769e92488d77d35f3c49b053637f4a81a 100644 (file)
@@ -1809,6 +1809,54 @@ static void imx7_csi_media_cleanup(struct imx7_csi *csi)
        media_device_cleanup(&imxmd->md);
 }
 
+static const struct media_device_ops imx7_csi_media_ops = {
+       .link_notify = v4l2_pipeline_link_notify,
+};
+
+static struct imx_media_dev *imx7_csi_media_dev_init(struct device *dev)
+{
+       struct imx_media_dev *imxmd;
+       int ret;
+
+       imxmd = devm_kzalloc(dev, sizeof(*imxmd), GFP_KERNEL);
+       if (!imxmd)
+               return ERR_PTR(-ENOMEM);
+
+       dev_set_drvdata(dev, imxmd);
+
+       strscpy(imxmd->md.model, "imx-media", sizeof(imxmd->md.model));
+       imxmd->md.ops = &imx7_csi_media_ops;
+       imxmd->md.dev = dev;
+
+       mutex_init(&imxmd->mutex);
+
+       imxmd->v4l2_dev.mdev = &imxmd->md;
+       strscpy(imxmd->v4l2_dev.name, "imx-media",
+               sizeof(imxmd->v4l2_dev.name));
+       snprintf(imxmd->md.bus_info, sizeof(imxmd->md.bus_info),
+                "platform:%s", dev_name(imxmd->md.dev));
+
+       media_device_init(&imxmd->md);
+
+       ret = v4l2_device_register(dev, &imxmd->v4l2_dev);
+       if (ret < 0) {
+               v4l2_err(&imxmd->v4l2_dev,
+                        "Failed to register v4l2_device: %d\n", ret);
+               goto cleanup;
+       }
+
+       INIT_LIST_HEAD(&imxmd->vdev_list);
+
+       v4l2_async_nf_init(&imxmd->notifier);
+
+       return imxmd;
+
+cleanup:
+       media_device_cleanup(&imxmd->md);
+
+       return ERR_PTR(ret);
+}
+
 static int imx7_csi_media_init(struct imx7_csi *csi)
 {
        struct imx_media_dev *imxmd;
@@ -1816,7 +1864,7 @@ static int imx7_csi_media_init(struct imx7_csi *csi)
        int ret;
 
        /* add media device */
-       imxmd = imx_media_dev_init(csi->dev, NULL);
+       imxmd = imx7_csi_media_dev_init(csi->dev);
        if (IS_ERR(imxmd))
                return PTR_ERR(imxmd);