All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rui Miguel Silva <rui.silva@linaro.org>
To: mchehab@kernel.org, sakari.ailus@linux.intel.com,
	Steve Longerbeam <slongerbeam@gmail.com>,
	Philipp Zabel <p.zabel@pengutronix.de>,
	Rob Herring <robh+dt@kernel.org>
Cc: devel@driverdev.osuosl.org, devicetree@vger.kernel.org,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Ryan Harkin <ryan.harkin@linaro.org>,
	Rui Miguel Silva <rui.silva@linaro.org>,
	Fabio Estevam <fabio.estevam@nxp.com>,
	Shawn Guo <shawnguo@kernel.org>,
	linux-media@vger.kernel.org
Subject: [PATCH v3 01/14] media: staging/imx: add support to media dev for no IPU systems
Date: Mon,  7 May 2018 17:21:39 +0100	[thread overview]
Message-ID: <20180507162152.2545-2-rui.silva@linaro.org> (raw)
In-Reply-To: <20180507162152.2545-1-rui.silva@linaro.org>

Some i.MX SoC do not have IPU, like the i.MX7, add to the the media device
infrastructure support to be used in this type of systems that do not have
internal subdevices besides the CSI.

Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
---
 drivers/staging/media/imx/imx-media-dev.c     | 38 ++++++++++++++++---
 .../staging/media/imx/imx-media-internal-sd.c |  3 ++
 drivers/staging/media/imx/imx-media.h         |  3 ++
 3 files changed, 39 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/media/imx/imx-media-dev.c b/drivers/staging/media/imx/imx-media-dev.c
index f67ec8e27093..b019dcefccd6 100644
--- a/drivers/staging/media/imx/imx-media-dev.c
+++ b/drivers/staging/media/imx/imx-media-dev.c
@@ -27,6 +27,12 @@
 #include <media/imx.h>
 #include "imx-media.h"
 
+static const struct of_device_id imx_media_dt_ids[];
+
+struct imx_media_driver_data {
+	bool ipu_present;
+};
+
 static inline struct imx_media_dev *notifier2dev(struct v4l2_async_notifier *n)
 {
 	return container_of(n, struct imx_media_dev, notifier);
@@ -92,6 +98,9 @@ static int imx_media_get_ipu(struct imx_media_dev *imxmd,
 	struct ipu_soc *ipu;
 	int ipu_id;
 
+	if (!imxmd->ipu_present)
+		return 0;
+
 	ipu = dev_get_drvdata(csi_sd->dev->parent);
 	if (!ipu) {
 		v4l2_err(&imxmd->v4l2_dev,
@@ -440,6 +449,8 @@ static const struct media_device_ops imx_media_md_ops = {
 
 static int imx_media_probe(struct platform_device *pdev)
 {
+	const struct imx_media_driver_data *drvdata;
+	const struct of_device_id *of_id;
 	struct device *dev = &pdev->dev;
 	struct device_node *node = dev->of_node;
 	struct imx_media_dev *imxmd;
@@ -481,16 +492,29 @@ static int imx_media_probe(struct platform_device *pdev)
 		goto notifier_cleanup;
 	}
 
-	ret = imx_media_add_internal_subdevs(imxmd);
-	if (ret) {
-		v4l2_err(&imxmd->v4l2_dev,
-			 "add_internal_subdevs failed with %d\n", ret);
+	of_id = of_match_device(imx_media_dt_ids, &pdev->dev);
+	if (!of_id) {
+		v4l2_err(&imxmd->v4l2_dev, "failed to find driver data\n");
 		goto notifier_cleanup;
 	}
 
+	drvdata = of_id->data;
+
+	imxmd->ipu_present = drvdata->ipu_present;
+
+	if (imxmd->ipu_present) {
+		ret = imx_media_add_internal_subdevs(imxmd);
+		if (ret) {
+			v4l2_err(&imxmd->v4l2_dev,
+				 "add_internal_subdevs failed with %d\n", ret);
+			goto notifier_cleanup;
+		}
+	}
+
 	/* no subdevs? just bail */
 	if (imxmd->notifier.num_subdevs == 0) {
 		ret = -ENODEV;
+		v4l2_err(&imxmd->v4l2_dev, "no subdevs\n");
 		goto notifier_cleanup;
 	}
 
@@ -533,8 +557,12 @@ static int imx_media_remove(struct platform_device *pdev)
 	return 0;
 }
 
+static const struct imx_media_driver_data imx6_drvdata = {
+	.ipu_present = true,
+};
+
 static const struct of_device_id imx_media_dt_ids[] = {
-	{ .compatible = "fsl,imx-capture-subsystem" },
+	{ .compatible = "fsl,imx-capture-subsystem", .data = &imx6_drvdata },
 	{ /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, imx_media_dt_ids);
diff --git a/drivers/staging/media/imx/imx-media-internal-sd.c b/drivers/staging/media/imx/imx-media-internal-sd.c
index 0fdc45dbfb76..2bcdc232369a 100644
--- a/drivers/staging/media/imx/imx-media-internal-sd.c
+++ b/drivers/staging/media/imx/imx-media-internal-sd.c
@@ -238,6 +238,9 @@ int imx_media_create_internal_links(struct imx_media_dev *imxmd,
 	struct media_pad *pad;
 	int i, j, ret;
 
+	if (!imxmd->ipu_present)
+		return 0;
+
 	intsd = find_intsd_by_grp_id(sd->grp_id);
 	if (!intsd)
 		return -ENODEV;
diff --git a/drivers/staging/media/imx/imx-media.h b/drivers/staging/media/imx/imx-media.h
index 44532cd5b812..d40538ecf176 100644
--- a/drivers/staging/media/imx/imx-media.h
+++ b/drivers/staging/media/imx/imx-media.h
@@ -147,6 +147,9 @@ struct imx_media_dev {
 
 	/* for async subdev registration */
 	struct v4l2_async_notifier notifier;
+
+	/* indicator to if the system has IPU */
+	bool ipu_present;
 };
 
 enum codespace_sel {
-- 
2.17.0

WARNING: multiple messages have this Message-ID (diff)
From: Rui Miguel Silva <rui.silva@linaro.org>
To: mchehab@kernel.org, sakari.ailus@linux.intel.com,
	Steve Longerbeam <slongerbeam@gmail.com>,
	Philipp Zabel <p.zabel@pengutronix.de>,
	Rob Herring <robh+dt@kernel.org>
Cc: linux-media@vger.kernel.org, devel@driverdev.osuosl.org,
	Shawn Guo <shawnguo@kernel.org>,
	Fabio Estevam <fabio.estevam@nxp.com>,
	devicetree@vger.kernel.org,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Ryan Harkin <ryan.harkin@linaro.org>,
	Rui Miguel Silva <rui.silva@linaro.org>
Subject: [PATCH v3 01/14] media: staging/imx: add support to media dev for no IPU systems
Date: Mon,  7 May 2018 17:21:39 +0100	[thread overview]
Message-ID: <20180507162152.2545-2-rui.silva@linaro.org> (raw)
In-Reply-To: <20180507162152.2545-1-rui.silva@linaro.org>

Some i.MX SoC do not have IPU, like the i.MX7, add to the the media device
infrastructure support to be used in this type of systems that do not have
internal subdevices besides the CSI.

Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
---
 drivers/staging/media/imx/imx-media-dev.c     | 38 ++++++++++++++++---
 .../staging/media/imx/imx-media-internal-sd.c |  3 ++
 drivers/staging/media/imx/imx-media.h         |  3 ++
 3 files changed, 39 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/media/imx/imx-media-dev.c b/drivers/staging/media/imx/imx-media-dev.c
index f67ec8e27093..b019dcefccd6 100644
--- a/drivers/staging/media/imx/imx-media-dev.c
+++ b/drivers/staging/media/imx/imx-media-dev.c
@@ -27,6 +27,12 @@
 #include <media/imx.h>
 #include "imx-media.h"
 
+static const struct of_device_id imx_media_dt_ids[];
+
+struct imx_media_driver_data {
+	bool ipu_present;
+};
+
 static inline struct imx_media_dev *notifier2dev(struct v4l2_async_notifier *n)
 {
 	return container_of(n, struct imx_media_dev, notifier);
@@ -92,6 +98,9 @@ static int imx_media_get_ipu(struct imx_media_dev *imxmd,
 	struct ipu_soc *ipu;
 	int ipu_id;
 
+	if (!imxmd->ipu_present)
+		return 0;
+
 	ipu = dev_get_drvdata(csi_sd->dev->parent);
 	if (!ipu) {
 		v4l2_err(&imxmd->v4l2_dev,
@@ -440,6 +449,8 @@ static const struct media_device_ops imx_media_md_ops = {
 
 static int imx_media_probe(struct platform_device *pdev)
 {
+	const struct imx_media_driver_data *drvdata;
+	const struct of_device_id *of_id;
 	struct device *dev = &pdev->dev;
 	struct device_node *node = dev->of_node;
 	struct imx_media_dev *imxmd;
@@ -481,16 +492,29 @@ static int imx_media_probe(struct platform_device *pdev)
 		goto notifier_cleanup;
 	}
 
-	ret = imx_media_add_internal_subdevs(imxmd);
-	if (ret) {
-		v4l2_err(&imxmd->v4l2_dev,
-			 "add_internal_subdevs failed with %d\n", ret);
+	of_id = of_match_device(imx_media_dt_ids, &pdev->dev);
+	if (!of_id) {
+		v4l2_err(&imxmd->v4l2_dev, "failed to find driver data\n");
 		goto notifier_cleanup;
 	}
 
+	drvdata = of_id->data;
+
+	imxmd->ipu_present = drvdata->ipu_present;
+
+	if (imxmd->ipu_present) {
+		ret = imx_media_add_internal_subdevs(imxmd);
+		if (ret) {
+			v4l2_err(&imxmd->v4l2_dev,
+				 "add_internal_subdevs failed with %d\n", ret);
+			goto notifier_cleanup;
+		}
+	}
+
 	/* no subdevs? just bail */
 	if (imxmd->notifier.num_subdevs == 0) {
 		ret = -ENODEV;
+		v4l2_err(&imxmd->v4l2_dev, "no subdevs\n");
 		goto notifier_cleanup;
 	}
 
@@ -533,8 +557,12 @@ static int imx_media_remove(struct platform_device *pdev)
 	return 0;
 }
 
+static const struct imx_media_driver_data imx6_drvdata = {
+	.ipu_present = true,
+};
+
 static const struct of_device_id imx_media_dt_ids[] = {
-	{ .compatible = "fsl,imx-capture-subsystem" },
+	{ .compatible = "fsl,imx-capture-subsystem", .data = &imx6_drvdata },
 	{ /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, imx_media_dt_ids);
diff --git a/drivers/staging/media/imx/imx-media-internal-sd.c b/drivers/staging/media/imx/imx-media-internal-sd.c
index 0fdc45dbfb76..2bcdc232369a 100644
--- a/drivers/staging/media/imx/imx-media-internal-sd.c
+++ b/drivers/staging/media/imx/imx-media-internal-sd.c
@@ -238,6 +238,9 @@ int imx_media_create_internal_links(struct imx_media_dev *imxmd,
 	struct media_pad *pad;
 	int i, j, ret;
 
+	if (!imxmd->ipu_present)
+		return 0;
+
 	intsd = find_intsd_by_grp_id(sd->grp_id);
 	if (!intsd)
 		return -ENODEV;
diff --git a/drivers/staging/media/imx/imx-media.h b/drivers/staging/media/imx/imx-media.h
index 44532cd5b812..d40538ecf176 100644
--- a/drivers/staging/media/imx/imx-media.h
+++ b/drivers/staging/media/imx/imx-media.h
@@ -147,6 +147,9 @@ struct imx_media_dev {
 
 	/* for async subdev registration */
 	struct v4l2_async_notifier notifier;
+
+	/* indicator to if the system has IPU */
+	bool ipu_present;
 };
 
 enum codespace_sel {
-- 
2.17.0

  reply	other threads:[~2018-05-07 16:21 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-07 16:21 [PATCH v3 00/14] media: staging/imx7: add i.MX7 media driver Rui Miguel Silva
2018-05-07 16:21 ` Rui Miguel Silva
2018-05-07 16:21 ` Rui Miguel Silva [this message]
2018-05-07 16:21   ` [PATCH v3 01/14] media: staging/imx: add support to media dev for no IPU systems Rui Miguel Silva
2018-05-07 16:21 ` [PATCH v3 02/14] media: staging/imx7: add imx7 CSI subdev driver Rui Miguel Silva
2018-05-07 16:21   ` Rui Miguel Silva
2018-05-07 16:21 ` [PATCH v3 03/14] clk: imx7d: fix mipi dphy div parent Rui Miguel Silva
2018-05-07 16:21   ` Rui Miguel Silva
2018-05-07 16:21 ` [PATCH v3 04/14] clk: imx7d: reset parent for mipi csi root Rui Miguel Silva
2018-05-07 16:21   ` Rui Miguel Silva
2018-05-07 16:21 ` [PATCH v3 05/14] media: staging/imx7: add MIPI CSI-2 receiver subdev for i.MX7 Rui Miguel Silva
2018-05-07 16:21   ` Rui Miguel Silva
2018-05-07 16:21 ` [PATCH v3 06/14] media: staging/imx: add imx7 capture subsystem Rui Miguel Silva
2018-05-07 16:21   ` Rui Miguel Silva
2018-05-07 16:21 ` [PATCH v3 07/14] media: dt-bindings: add bindings for i.MX7 media driver Rui Miguel Silva
2018-05-07 16:21   ` Rui Miguel Silva
2018-05-08 14:30   ` Philipp Zabel
2018-05-08 14:30     ` Philipp Zabel
2018-05-09 11:06     ` Rui Miguel Silva
2018-05-09 11:06       ` Rui Miguel Silva
2018-05-07 16:21 ` [PATCH v3 08/14] ARM: dts: imx7s: add mipi phy power domain Rui Miguel Silva
2018-05-07 16:21   ` Rui Miguel Silva
2018-05-07 16:21 ` [PATCH v3 09/14] ARM: dts: imx7s: add multiplexer controls Rui Miguel Silva
2018-05-07 16:21   ` Rui Miguel Silva
2018-05-09  8:59   ` Philipp Zabel
2018-05-09  8:59     ` Philipp Zabel
2018-05-07 16:21 ` [PATCH v3 10/14] ARM: dts: imx7: Add video mux, csi and mipi_csi and connections Rui Miguel Silva
2018-05-07 16:21   ` Rui Miguel Silva
2018-05-09  8:53   ` Philipp Zabel
2018-05-09  8:53     ` Philipp Zabel
2018-05-09 11:10     ` Rui Miguel Silva
2018-05-09 11:10       ` Rui Miguel Silva
2018-05-07 16:21 ` [PATCH v3 11/14] ARM: dts: imx7s: add capture subsystem Rui Miguel Silva
2018-05-07 16:21   ` Rui Miguel Silva
2018-05-07 16:21 ` [PATCH v3 12/14] ARM: dts: imx7s-warp: add ov2680 sensor node Rui Miguel Silva
2018-05-07 16:21   ` Rui Miguel Silva
2018-05-08 13:28   ` Fabio Estevam
2018-05-08 13:28     ` Fabio Estevam
2018-05-09 11:03     ` Rui Miguel Silva
2018-05-09 11:03       ` Rui Miguel Silva
2018-05-07 16:21 ` [PATCH v3 13/14] media: imx7.rst: add documentation for i.MX7 media driver Rui Miguel Silva
2018-05-07 16:21   ` Rui Miguel Silva
2018-05-08 17:24   ` Randy Dunlap
2018-05-09 11:08     ` Rui Miguel Silva
2018-05-09 11:08       ` Rui Miguel Silva
2018-05-07 16:21 ` [PATCH v3 14/14] media: staging/imx: add i.MX7 entries to TODO file Rui Miguel Silva
2018-05-07 16:21   ` Rui Miguel Silva

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180507162152.2545-2-rui.silva@linaro.org \
    --to=rui.silva@linaro.org \
    --cc=devel@driverdev.osuosl.org \
    --cc=devicetree@vger.kernel.org \
    --cc=fabio.estevam@nxp.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=p.zabel@pengutronix.de \
    --cc=robh+dt@kernel.org \
    --cc=ryan.harkin@linaro.org \
    --cc=sakari.ailus@linux.intel.com \
    --cc=shawnguo@kernel.org \
    --cc=slongerbeam@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.