dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Philipp Zabel <p.zabel@pengutronix.de>
To: dri-devel@lists.freedesktop.org
Cc: kernel@pengutronix.de,
	Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Subject: [PATCH v4 08/19] drm/imx: imx-ldb: move initialization into probe
Date: Tue,  8 Dec 2020 16:54:40 +0100	[thread overview]
Message-ID: <20201208155451.8421-9-p.zabel@pengutronix.de> (raw)
In-Reply-To: <20201208155451.8421-1-p.zabel@pengutronix.de>

Parts of the initialization that do not require the drm device can be
done once during probe instead of possibly multiple times during bind.
The bind function only creates the encoders.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
---
 drivers/gpu/drm/imx/imx-ldb.c | 72 ++++++++++++++++++-----------------
 1 file changed, 37 insertions(+), 35 deletions(-)

diff --git a/drivers/gpu/drm/imx/imx-ldb.c b/drivers/gpu/drm/imx/imx-ldb.c
index 288a81f134fe..c3639cc32ddf 100644
--- a/drivers/gpu/drm/imx/imx-ldb.c
+++ b/drivers/gpu/drm/imx/imx-ldb.c
@@ -415,6 +415,9 @@ static int imx_ldb_register(struct drm_device *drm,
 	struct drm_encoder *encoder = &imx_ldb_ch->encoder;
 	int ret;
 
+	memset(connector, 0, sizeof(*connector));
+	memset(encoder, 0, sizeof(*encoder));
+
 	ret = imx_drm_encoder_parse_of(drm, encoder, imx_ldb_ch->child);
 	if (ret)
 		return ret;
@@ -559,17 +562,42 @@ static int imx_ldb_panel_ddc(struct device *dev,
 static int imx_ldb_bind(struct device *dev, struct device *master, void *data)
 {
 	struct drm_device *drm = data;
+	struct imx_ldb *imx_ldb = dev_get_drvdata(dev);
+	int ret;
+	int i;
+
+	for (i = 0; i < 2; i++) {
+		struct imx_ldb_channel *channel = &imx_ldb->channel[i];
+
+		if (!channel->ldb)
+			break;
+
+		ret = imx_ldb_register(drm, channel);
+		if (ret)
+			return ret;
+	}
+
+	return 0;
+}
+
+static const struct component_ops imx_ldb_ops = {
+	.bind	= imx_ldb_bind,
+};
+
+static int imx_ldb_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
 	struct device_node *np = dev->of_node;
-	const struct of_device_id *of_id =
-			of_match_device(imx_ldb_dt_ids, dev);
+	const struct of_device_id *of_id = of_match_device(imx_ldb_dt_ids, dev);
 	struct device_node *child;
 	struct imx_ldb *imx_ldb;
 	int dual;
 	int ret;
 	int i;
 
-	imx_ldb = dev_get_drvdata(dev);
-	memset(imx_ldb, 0, sizeof(*imx_ldb));
+	imx_ldb = devm_kzalloc(dev, sizeof(*imx_ldb), GFP_KERNEL);
+	if (!imx_ldb)
+		return -ENOMEM;
 
 	imx_ldb->regmap = syscon_regmap_lookup_by_phandle(np, "gpr");
 	if (IS_ERR(imx_ldb->regmap)) {
@@ -669,25 +697,20 @@ static int imx_ldb_bind(struct device *dev, struct device *master, void *data)
 		}
 		channel->bus_format = bus_format;
 		channel->child = child;
-
-		ret = imx_ldb_register(drm, channel);
-		if (ret) {
-			channel->child = NULL;
-			goto free_child;
-		}
 	}
 
-	return 0;
+	platform_set_drvdata(pdev, imx_ldb);
+
+	return component_add(&pdev->dev, &imx_ldb_ops);
 
 free_child:
 	of_node_put(child);
 	return ret;
 }
 
-static void imx_ldb_unbind(struct device *dev, struct device *master,
-	void *data)
+static int imx_ldb_remove(struct platform_device *pdev)
 {
-	struct imx_ldb *imx_ldb = dev_get_drvdata(dev);
+	struct imx_ldb *imx_ldb = platform_get_drvdata(pdev);
 	int i;
 
 	for (i = 0; i < 2; i++) {
@@ -696,28 +719,7 @@ static void imx_ldb_unbind(struct device *dev, struct device *master,
 		kfree(channel->edid);
 		i2c_put_adapter(channel->ddc);
 	}
-}
-
-static const struct component_ops imx_ldb_ops = {
-	.bind	= imx_ldb_bind,
-	.unbind	= imx_ldb_unbind,
-};
 
-static int imx_ldb_probe(struct platform_device *pdev)
-{
-	struct imx_ldb *imx_ldb;
-
-	imx_ldb = devm_kzalloc(&pdev->dev, sizeof(*imx_ldb), GFP_KERNEL);
-	if (!imx_ldb)
-		return -ENOMEM;
-
-	platform_set_drvdata(pdev, imx_ldb);
-
-	return component_add(&pdev->dev, &imx_ldb_ops);
-}
-
-static int imx_ldb_remove(struct platform_device *pdev)
-{
 	component_del(&pdev->dev, &imx_ldb_ops);
 	return 0;
 }
-- 
2.20.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  parent reply	other threads:[~2020-12-08 15:55 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-08 15:54 [PATCH v4 00/19] drm: managed encoder/plane/crtc allocation Philipp Zabel
2020-12-08 15:54 ` [PATCH v4 01/19] drm/encoder: make encoder control functions optional Philipp Zabel
2020-12-08 18:48   ` Sam Ravnborg
2020-12-09 10:58     ` Philipp Zabel
2020-12-09 15:58       ` Daniel Vetter
2020-12-09 15:59         ` Daniel Vetter
2020-12-08 15:54 ` [PATCH v4 02/19] drm: add drmm_encoder_alloc() Philipp Zabel
2020-12-09 16:05   ` Daniel Vetter
2020-12-10 11:59     ` Philipp Zabel
2020-12-10 13:13       ` Daniel Vetter
2020-12-08 15:54 ` [PATCH v4 03/19] drm/simple_kms_helper: add drmm_simple_encoder_alloc() Philipp Zabel
2020-12-09 20:04   ` Daniel Vetter
2020-12-08 15:54 ` [PATCH v4 04/19] drm/plane: add drmm_universal_plane_alloc() Philipp Zabel
2020-12-09 20:08   ` Daniel Vetter
2020-12-08 15:54 ` [PATCH v4 05/19] drm/crtc: add drmm_crtc_alloc_with_planes() Philipp Zabel
2020-12-09 20:21   ` Daniel Vetter
2020-12-08 15:54 ` [PATCH v4 06/19] drm/imx: dw_hdmi-imx: move initialization into probe Philipp Zabel
2020-12-08 15:54 ` [PATCH v4 07/19] drm/imx: imx-ldb: use local connector variable Philipp Zabel
2020-12-08 15:54 ` Philipp Zabel [this message]
2020-12-08 15:54 ` [PATCH v4 09/19] drm/imx: imx-tve: use local encoder and connector variables Philipp Zabel
2020-12-08 15:54 ` [PATCH v4 10/19] drm/imx: imx-tve: move initialization into probe Philipp Zabel
2020-12-08 15:54 ` [PATCH v4 11/19] drm/imx: imx-tve: use devm_clk_register Philipp Zabel
2020-12-08 15:54 ` [PATCH v4 12/19] drm/imx: parallel-display: use local bridge and connector variables Philipp Zabel
2020-12-08 15:54 ` [PATCH v4 13/19] drm/imx: parallel-display: move initialization into probe Philipp Zabel
2020-12-08 15:54 ` [PATCH v4 14/19] drm/imx: dw_hdmi-imx: use drm managed resources Philipp Zabel
2020-12-08 15:54 ` [PATCH v4 15/19] drm/imx: imx-ldb: " Philipp Zabel
2020-12-08 15:54 ` [PATCH v4 16/19] drm/imx: imx-tve: " Philipp Zabel
2020-12-08 15:54 ` [PATCH v4 17/19] drm/imx: parallel-display: " Philipp Zabel
2020-12-08 15:54 ` [PATCH v4 18/19] drm/imx: ipuv3-plane: " Philipp Zabel
2020-12-08 15:54 ` [PATCH v4 19/19] drm/imx: ipuv3-crtc: " Philipp Zabel
2020-12-08 15:59 ` [PATCH v4 00/19] drm: managed encoder/plane/crtc allocation Philipp Zabel
2020-12-09 21:10   ` Daniel Vetter
2020-12-09 21:13     ` Daniel Vetter
2020-12-10 12:19       ` Laurent Pinchart
2020-12-11 10:19         ` Philipp Zabel

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=20201208155451.8421-9-p.zabel@pengutronix.de \
    --to=p.zabel@pengutronix.de \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=kernel@pengutronix.de \
    --cc=laurent.pinchart@ideasonboard.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox