[PATCH 19/50] staging: media: imx: imx7-media-csi: Embed imx_media_dev in imx7_csi

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



There's no need anymore to allocate the imx_media_dev structure
separately from imx7_csi. Embed it.

Signed-off-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
---
 drivers/staging/media/imx/imx7-media-csi.c | 47 +++++++++-------------
 1 file changed, 20 insertions(+), 27 deletions(-)

diff --git a/drivers/staging/media/imx/imx7-media-csi.c b/drivers/staging/media/imx/imx7-media-csi.c
index 8b19792adfc6..891e939d7ea5 100644
--- a/drivers/staging/media/imx/imx7-media-csi.c
+++ b/drivers/staging/media/imx/imx7-media-csi.c
@@ -183,7 +183,7 @@ struct imx7_csi {
 	spinlock_t irqlock; /* Protects last_eof */
 
 	/* Media and V4L2 device */
-	struct imx_media_dev *imxmd;
+	struct imx_media_dev imxmd;
 	struct v4l2_async_notifier notifier;
 
 	struct v4l2_subdev *src_sd;
@@ -1081,7 +1081,7 @@ static int imx7_csi_video_start_streaming(struct vb2_queue *vq,
 		goto return_bufs;
 	}
 
-	ret = imx_media_pipeline_set_stream(csi->imxmd, &csi->sd.entity, true);
+	ret = imx_media_pipeline_set_stream(&csi->imxmd, &csi->sd.entity, true);
 	if (ret) {
 		dev_err(csi->dev, "pipeline start failed with %d\n", ret);
 		goto return_bufs;
@@ -1107,7 +1107,7 @@ static void imx7_csi_video_stop_streaming(struct vb2_queue *vq)
 	unsigned long flags;
 	int ret;
 
-	ret = imx_media_pipeline_set_stream(csi->imxmd, &csi->sd.entity, false);
+	ret = imx_media_pipeline_set_stream(&csi->imxmd, &csi->sd.entity, false);
 	if (ret)
 		dev_warn(csi->dev, "pipeline stop failed with %d\n", ret);
 
@@ -1268,7 +1268,7 @@ static int imx7_csi_video_register(struct imx7_csi *csi)
 	}
 
 	/* Add vdev to the video devices list. */
-	imx_media_add_video_device(csi->imxmd, &csi->vdev);
+	imx_media_add_video_device(&csi->imxmd, &csi->vdev);
 
 	return 0;
 }
@@ -1685,11 +1685,11 @@ static int imx7_csi_registered(struct v4l2_subdev *sd)
 	if (ret)
 		return ret;
 
-	ret = v4l2_device_register_subdev_nodes(&csi->imxmd->v4l2_dev);
+	ret = v4l2_device_register_subdev_nodes(&csi->imxmd.v4l2_dev);
 	if (ret)
 		goto err_unreg;
 
-	ret = media_device_register(&csi->imxmd->md);
+	ret = media_device_register(&csi->imxmd.md);
 	if (ret)
 		goto err_unreg;
 
@@ -1759,7 +1759,7 @@ static int imx7_csi_notify_complete(struct v4l2_async_notifier *notifier)
 {
 	struct imx7_csi *csi = imx7_csi_notifier_to_dev(notifier);
 
-	return v4l2_device_register_subdev_nodes(&csi->imxmd->v4l2_dev);
+	return v4l2_device_register_subdev_nodes(&csi->imxmd.v4l2_dev);
 }
 
 static const struct v4l2_async_notifier_operations imx7_csi_notify_ops = {
@@ -1793,7 +1793,7 @@ static int imx7_csi_async_register(struct imx7_csi *csi)
 
 	csi->notifier.ops = &imx7_csi_notify_ops;
 
-	ret = v4l2_async_nf_register(&csi->imxmd->v4l2_dev, &csi->notifier);
+	ret = v4l2_async_nf_register(&csi->imxmd.v4l2_dev, &csi->notifier);
 	if (ret)
 		return ret;
 
@@ -1802,7 +1802,7 @@ static int imx7_csi_async_register(struct imx7_csi *csi)
 
 static void imx7_csi_media_cleanup(struct imx7_csi *csi)
 {
-	struct imx_media_dev *imxmd = csi->imxmd;
+	struct imx_media_dev *imxmd = &csi->imxmd;
 
 	v4l2_device_unregister(&imxmd->v4l2_dev);
 	media_device_unregister(&imxmd->md);
@@ -1813,20 +1813,16 @@ 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)
+static int imx7_csi_media_dev_init(struct imx7_csi *csi)
 {
-	struct imx_media_dev *imxmd;
+	struct imx_media_dev *imxmd = &csi->imxmd;
 	int ret;
 
-	imxmd = devm_kzalloc(dev, sizeof(*imxmd), GFP_KERNEL);
-	if (!imxmd)
-		return ERR_PTR(-ENOMEM);
-
-	dev_set_drvdata(dev, imxmd);
+	dev_set_drvdata(csi->dev, imxmd);
 
 	strscpy(imxmd->md.model, "imx-media", sizeof(imxmd->md.model));
 	imxmd->md.ops = &imx7_csi_media_ops;
-	imxmd->md.dev = dev;
+	imxmd->md.dev = csi->dev;
 
 	mutex_init(&imxmd->mutex);
 
@@ -1838,7 +1834,7 @@ static struct imx_media_dev *imx7_csi_media_dev_init(struct device *dev)
 
 	media_device_init(&imxmd->md);
 
-	ret = v4l2_device_register(dev, &imxmd->v4l2_dev);
+	ret = v4l2_device_register(csi->dev, &imxmd->v4l2_dev);
 	if (ret < 0) {
 		v4l2_err(&imxmd->v4l2_dev,
 			 "Failed to register v4l2_device: %d\n", ret);
@@ -1849,25 +1845,22 @@ static struct imx_media_dev *imx7_csi_media_dev_init(struct device *dev)
 
 	v4l2_async_nf_init(&imxmd->notifier);
 
-	return imxmd;
+	return 0;
 
 cleanup:
 	media_device_cleanup(&imxmd->md);
 
-	return ERR_PTR(ret);
+	return ret;
 }
 
 static int imx7_csi_media_init(struct imx7_csi *csi)
 {
-	struct imx_media_dev *imxmd;
 	int i, ret;
 
 	/* add media device */
-	imxmd = imx7_csi_media_dev_init(csi->dev);
-	if (IS_ERR(imxmd))
-		return PTR_ERR(imxmd);
-
-	csi->imxmd = imxmd;
+	ret = imx7_csi_media_dev_init(csi);
+	if (ret)
+		return ret;
 
 	v4l2_subdev_init(&csi->sd, &imx7_csi_subdev_ops);
 	v4l2_set_subdevdata(&csi->sd, csi);
@@ -1888,7 +1881,7 @@ static int imx7_csi_media_init(struct imx7_csi *csi)
 	if (ret < 0)
 		return ret;
 
-	return v4l2_device_register_subdev(&csi->imxmd->v4l2_dev, &csi->sd);
+	return v4l2_device_register_subdev(&csi->imxmd.v4l2_dev, &csi->sd);
 }
 
 static int imx7_csi_probe(struct platform_device *pdev)
-- 
Regards,

Laurent Pinchart




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux