From patchwork Tue May 10 11:51:16 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 15859 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 4F55AC326C for ; Tue, 10 May 2022 11:52:23 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id C365A65680; Tue, 10 May 2022 13:52:22 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1652183543; bh=FKgYb9k2bmI3Tpr/aEtWZrnecOgXRroi+h/FsMN2epw=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=uuRxqWTUUxMoOXa+dIhMZ4VnSaxCrqBC9q3Pmzehub3phhbRIGHuNVatnBKAQnSAD ahFaZtaeBjpQTvWTZ2xmVLDIw5yMF3i9bC2jLEkLlpa8ANbAQaZ4A2UkkMKSRhRoW9 JJ8MDxTSrDwDtmyaudNTYDiAm5h9QNaHMBczXZcUc3cG/f6xtIasWNfrgYk2h1d5We cKgRqoaz+srpTzyU/l//yPVyVoDAZEPCSoI2i/gXxdILLx4DHfi4DhX00o+I1TSYSX 8yQZ1gENU7k8ryhMMfPDSwQsL86B3GouKFo3BahSZbokSlZTnlI58liCsSwCElVe/Q 5r8OpDCWOn96w== Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 6B4DC6567B for ; Tue, 10 May 2022 13:52:13 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="lCKXJM6F"; dkim-atps=neutral Received: from pendragon.lan (62-78-145-57.bb.dnainternet.fi [62.78.145.57]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 8ADC7BA9; Tue, 10 May 2022 13:52:12 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1652183533; bh=FKgYb9k2bmI3Tpr/aEtWZrnecOgXRroi+h/FsMN2epw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lCKXJM6FDBtSzT2IACeI65tlA97JtXZOjUrbl+MiDSMx9kN8l1qsIMDP50EYtTGZU t4/2nBNPJ/XTtkKDZj1Yj3YplMAjWgWqj5TFjydMdUKgT4ZepKVnlqziRBkQsKY3/5 knoAiF//6phvHYSzS96At6XE3K46V0/HoCFaDDW0= To: libcamera-devel@lists.libcamera.org Date: Tue, 10 May 2022 14:51:16 +0300 Message-Id: <20220510115147.19360-20-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220510115147.19360-1-laurent.pinchart@ideasonboard.com> References: <20220510115147.19360-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 19/50] staging: media: imx: imx7-media-csi: Embed imx_media_dev in imx7_csi X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Laurent Pinchart via libcamera-devel From: Laurent Pinchart Reply-To: Laurent Pinchart Cc: Martin Kepplinger , kernel@pengutronix.de, Dorota Czaplejewicz , Alexander Stein , Rui Miguel Silva , Philipp Zabel , Steve Longerbeam Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" There's no need anymore to allocate the imx_media_dev structure separately from imx7_csi. Embed it. Signed-off-by: Laurent Pinchart --- 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)