All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: dri-devel@lists.freedesktop.org
Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
Subject: [PATCH/RFC 43/60] drm/omap: dss: Acquire next dssdev at probe time
Date: Wed,  7 Mar 2018 02:24:46 +0200	[thread overview]
Message-ID: <20180307002503.19455-44-laurent.pinchart@ideasonboard.com> (raw)
In-Reply-To: <20180307002503.19455-1-laurent.pinchart@ideasonboard.com>

Look up the next dssdev at probe time based on device tree links for all
DSS outputs and encoders. This will be used to reverse the order of the
dssdev connect and disconnect call chains.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 drivers/gpu/drm/omapdrm/displays/encoder-opa362.c    |  9 +++++++++
 drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c    |  9 +++++++++
 drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c |  9 +++++++++
 drivers/gpu/drm/omapdrm/dss/dpi.c                    | 17 +++++++++++++----
 drivers/gpu/drm/omapdrm/dss/dsi.c                    | 18 ++++++++++++++++--
 drivers/gpu/drm/omapdrm/dss/hdmi4.c                  | 18 ++++++++++++++++--
 drivers/gpu/drm/omapdrm/dss/hdmi5.c                  | 18 ++++++++++++++++--
 drivers/gpu/drm/omapdrm/dss/omapdss.h                |  1 +
 drivers/gpu/drm/omapdrm/dss/sdi.c                    | 17 +++++++++++++++--
 drivers/gpu/drm/omapdrm/dss/venc.c                   | 18 ++++++++++++++++--
 10 files changed, 120 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/displays/encoder-opa362.c b/drivers/gpu/drm/omapdrm/displays/encoder-opa362.c
index 904ebec5f5e1..a94d6d0cead9 100644
--- a/drivers/gpu/drm/omapdrm/displays/encoder-opa362.c
+++ b/drivers/gpu/drm/omapdrm/displays/encoder-opa362.c
@@ -169,6 +169,13 @@ static int opa362_probe(struct platform_device *pdev)
 	dssdev->owner = THIS_MODULE;
 	dssdev->of_ports = BIT(1) | BIT(0);
 
+	dssdev->next = omapdss_of_find_connected_device(pdev->dev.of_node, 1);
+	if (IS_ERR(dssdev->next)) {
+		if (PTR_ERR(dssdev->next) != -EPROBE_DEFER)
+			dev_err(&pdev->dev, "failed to find video sink\n");
+		return PTR_ERR(dssdev->next);
+	}
+
 	omapdss_device_register(dssdev);
 
 	return 0;
@@ -179,6 +186,8 @@ static int __exit opa362_remove(struct platform_device *pdev)
 	struct panel_drv_data *ddata = platform_get_drvdata(pdev);
 	struct omap_dss_device *dssdev = &ddata->dssdev;
 
+	if (dssdev->next)
+		omapdss_device_put(dssdev->next);
 	omapdss_device_unregister(&ddata->dssdev);
 
 	WARN_ON(omapdss_device_is_enabled(dssdev));
diff --git a/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c b/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c
index cd442f66fa1d..d40a0fd93e67 100644
--- a/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c
+++ b/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c
@@ -192,6 +192,13 @@ static int tfp410_probe(struct platform_device *pdev)
 	dssdev->owner = THIS_MODULE;
 	dssdev->of_ports = BIT(1) | BIT(0);
 
+	dssdev->next = omapdss_of_find_connected_device(pdev->dev.of_node, 1);
+	if (IS_ERR(dssdev->next)) {
+		if (PTR_ERR(dssdev->next) != -EPROBE_DEFER)
+			dev_err(&pdev->dev, "failed to find video sink\n");
+		return PTR_ERR(dssdev->next);
+	}
+
 	omapdss_device_register(dssdev);
 
 	return 0;
@@ -202,6 +209,8 @@ static int __exit tfp410_remove(struct platform_device *pdev)
 	struct panel_drv_data *ddata = platform_get_drvdata(pdev);
 	struct omap_dss_device *dssdev = &ddata->dssdev;
 
+	if (dssdev->next)
+		omapdss_device_put(dssdev->next);
 	omapdss_device_unregister(&ddata->dssdev);
 
 	WARN_ON(omapdss_device_is_enabled(dssdev));
diff --git a/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c b/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
index c32eb7537d5a..0f7943cfc4b5 100644
--- a/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
+++ b/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
@@ -292,6 +292,13 @@ static int tpd_probe(struct platform_device *pdev)
 	dssdev->owner = THIS_MODULE;
 	dssdev->of_ports = BIT(1) | BIT(0);
 
+	dssdev->next = omapdss_of_find_connected_device(pdev->dev.of_node, 1);
+	if (IS_ERR(dssdev->next)) {
+		if (PTR_ERR(dssdev->next) != -EPROBE_DEFER)
+			dev_err(&pdev->dev, "failed to find video sink\n");
+		return PTR_ERR(dssdev->next);
+	}
+
 	omapdss_device_register(dssdev);
 
 	return 0;
@@ -302,6 +309,8 @@ static int __exit tpd_remove(struct platform_device *pdev)
 	struct panel_drv_data *ddata = platform_get_drvdata(pdev);
 	struct omap_dss_device *dssdev = &ddata->dssdev;
 
+	if (dssdev->next)
+		omapdss_device_put(dssdev->next);
 	omapdss_device_unregister(&ddata->dssdev);
 
 	WARN_ON(omapdss_device_is_enabled(dssdev));
diff --git a/drivers/gpu/drm/omapdrm/dss/dpi.c b/drivers/gpu/drm/omapdrm/dss/dpi.c
index dc189b717fef..b73d7aad3d89 100644
--- a/drivers/gpu/drm/omapdrm/dss/dpi.c
+++ b/drivers/gpu/drm/omapdrm/dss/dpi.c
@@ -687,7 +687,7 @@ static const struct omap_dss_device_ops dpi_ops = {
 	.set_timings = dpi_set_timings,
 };
 
-static void dpi_init_output_port(struct dpi_data *dpi, struct device_node *port)
+static int dpi_init_output_port(struct dpi_data *dpi, struct device_node *port)
 {
 	struct omap_dss_device *out = &dpi->output;
 	u32 port_num = 0;
@@ -716,7 +716,16 @@ static void dpi_init_output_port(struct dpi_data *dpi, struct device_node *port)
 	out->ops = &dpi_ops;
 	out->owner = THIS_MODULE;
 
+	out->next = omapdss_of_find_connected_device(out->dev->of_node, 0);
+	if (IS_ERR(out->next)) {
+		if (PTR_ERR(out->next) != -EPROBE_DEFER)
+			dev_err(out->dev, "failed to find video sink\n");
+		return PTR_ERR(out->next);
+	}
+
 	omapdss_device_register(out);
+
+	return 0;
 }
 
 static void dpi_uninit_output_port(struct device_node *port)
@@ -724,6 +733,8 @@ static void dpi_uninit_output_port(struct device_node *port)
 	struct dpi_data *dpi = port->data;
 	struct omap_dss_device *out = &dpi->output;
 
+	if (out->next)
+		omapdss_device_put(out->next);
 	omapdss_device_unregister(out);
 }
 
@@ -759,9 +770,7 @@ int dpi_init_port(struct dss_device *dss, struct platform_device *pdev,
 
 	mutex_init(&dpi->lock);
 
-	dpi_init_output_port(dpi, port);
-
-	return 0;
+	return dpi_init_output_port(dpi, port);
 }
 
 void dpi_uninit_port(struct device_node *port)
diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c
index 79312e53bfd9..b48ee792244b 100644
--- a/drivers/gpu/drm/omapdrm/dss/dsi.c
+++ b/drivers/gpu/drm/omapdrm/dss/dsi.c
@@ -5165,7 +5165,7 @@ static const struct component_ops dsi_component_ops = {
  * Probe & Remove, Suspend & Resume
  */
 
-static void dsi_init_output(struct dsi_data *dsi)
+static int dsi_init_output(struct dsi_data *dsi)
 {
 	struct omap_dss_device *out = &dsi->output;
 
@@ -5180,13 +5180,24 @@ static void dsi_init_output(struct dsi_data *dsi)
 	out->owner = THIS_MODULE;
 	out->of_ports = BIT(0);
 
+	out->next = omapdss_of_find_connected_device(out->dev->of_node, 0);
+	if (IS_ERR(out->next)) {
+		if (PTR_ERR(out->next) != -EPROBE_DEFER)
+			dev_err(out->dev, "failed to find video sink\n");
+		return PTR_ERR(out->next);
+	}
+
 	omapdss_device_register(out);
+
+	return 0;
 }
 
 static void dsi_uninit_output(struct dsi_data *dsi)
 {
 	struct omap_dss_device *out = &dsi->output;
 
+	if (out->next)
+		omapdss_device_put(out->next);
 	omapdss_device_unregister(out);
 }
 
@@ -5431,7 +5442,9 @@ static int dsi_probe(struct platform_device *pdev)
 	else
 		dsi->num_lanes_supported = 3;
 
-	dsi_init_output(dsi);
+	r = dsi_init_output(dsi);
+	if (r)
+		goto err_pm_disable;
 
 	r = dsi_probe_of(dsi);
 	if (r) {
@@ -5451,6 +5464,7 @@ static int dsi_probe(struct platform_device *pdev)
 
 err_uninit_output:
 	dsi_uninit_output(dsi);
+err_pm_disable:
 	pm_runtime_disable(dev);
 	return r;
 }
diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
index b56f8498fe64..8b9bb3b2b418 100644
--- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c
+++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
@@ -721,7 +721,7 @@ static const struct component_ops hdmi4_component_ops = {
  * Probe & Remove, Suspend & Resume
  */
 
-static void hdmi4_init_output(struct omap_hdmi *hdmi)
+static int hdmi4_init_output(struct omap_hdmi *hdmi)
 {
 	struct omap_dss_device *out = &hdmi->output;
 
@@ -734,13 +734,24 @@ static void hdmi4_init_output(struct omap_hdmi *hdmi)
 	out->owner = THIS_MODULE;
 	out->of_ports = BIT(0);
 
+	out->next = omapdss_of_find_connected_device(out->dev->of_node, 0);
+	if (IS_ERR(out->next)) {
+		if (PTR_ERR(out->next) != -EPROBE_DEFER)
+			dev_err(out->dev, "failed to find video sink\n");
+		return PTR_ERR(out->next);
+	}
+
 	omapdss_device_register(out);
+
+	return 0;
 }
 
 static void hdmi4_uninit_output(struct omap_hdmi *hdmi)
 {
 	struct omap_dss_device *out = &hdmi->output;
 
+	if (out->next)
+		omapdss_device_put(out->next);
 	omapdss_device_unregister(out);
 }
 
@@ -810,7 +821,9 @@ static int hdmi4_probe(struct platform_device *pdev)
 
 	pm_runtime_enable(&pdev->dev);
 
-	hdmi4_init_output(hdmi);
+	r = hdmi4_init_output(hdmi);
+	if (r)
+		goto err_pm_disable;
 
 	r = component_add(&pdev->dev, &hdmi4_component_ops);
 	if (r)
@@ -820,6 +833,7 @@ static int hdmi4_probe(struct platform_device *pdev)
 
 err_uninit_output:
 	hdmi4_uninit_output(hdmi);
+err_pm_disable:
 	pm_runtime_disable(&pdev->dev);
 err_free:
 	kfree(hdmi);
diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi5.c b/drivers/gpu/drm/omapdrm/dss/hdmi5.c
index 767727677f9a..0f611b2b554a 100644
--- a/drivers/gpu/drm/omapdrm/dss/hdmi5.c
+++ b/drivers/gpu/drm/omapdrm/dss/hdmi5.c
@@ -711,7 +711,7 @@ static const struct component_ops hdmi5_component_ops = {
  * Probe & Remove, Suspend & Resume
  */
 
-static void hdmi5_init_output(struct omap_hdmi *hdmi)
+static int hdmi5_init_output(struct omap_hdmi *hdmi)
 {
 	struct omap_dss_device *out = &hdmi->output;
 
@@ -724,13 +724,24 @@ static void hdmi5_init_output(struct omap_hdmi *hdmi)
 	out->owner = THIS_MODULE;
 	out->of_ports = BIT(0);
 
+	out->next = omapdss_of_find_connected_device(out->dev->of_node, 0);
+	if (IS_ERR(out->next)) {
+		if (PTR_ERR(out->next) != -EPROBE_DEFER)
+			dev_err(out->dev, "failed to find video sink\n");
+		return PTR_ERR(out->next);
+	}
+
 	omapdss_device_register(out);
+
+	return 0;
 }
 
 static void hdmi5_uninit_output(struct omap_hdmi *hdmi)
 {
 	struct omap_dss_device *out = &hdmi->output;
 
+	if (out->next)
+		omapdss_device_put(out->next);
 	omapdss_device_unregister(out);
 }
 
@@ -800,7 +811,9 @@ static int hdmi5_probe(struct platform_device *pdev)
 
 	pm_runtime_enable(&pdev->dev);
 
-	hdmi5_init_output(hdmi);
+	r = hdmi5_init_output(hdmi);
+	if (r)
+		goto err_pm_disable;
 
 	r = component_add(&pdev->dev, &hdmi5_component_ops);
 	if (r)
@@ -810,6 +823,7 @@ static int hdmi5_probe(struct platform_device *pdev)
 
 err_uninit_output:
 	hdmi5_uninit_output(hdmi);
+err_pm_disable:
 	pm_runtime_disable(&pdev->dev);
 err_free:
 	kfree(hdmi);
diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h
index 62d0c5390b5b..076512628afc 100644
--- a/drivers/gpu/drm/omapdrm/dss/omapdss.h
+++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h
@@ -392,6 +392,7 @@ struct omap_dss_device {
 	struct dss_device *dss;
 	struct omap_dss_device *src;
 	struct omap_dss_device *dst;
+	struct omap_dss_device *next;
 
 	struct list_head list;
 
diff --git a/drivers/gpu/drm/omapdrm/dss/sdi.c b/drivers/gpu/drm/omapdrm/dss/sdi.c
index 0ace553a21c5..8be01ca79817 100644
--- a/drivers/gpu/drm/omapdrm/dss/sdi.c
+++ b/drivers/gpu/drm/omapdrm/dss/sdi.c
@@ -314,7 +314,7 @@ static const struct omap_dss_device_ops sdi_ops = {
 	.set_timings = sdi_set_timings,
 };
 
-static void sdi_init_output(struct sdi_device *sdi)
+static int sdi_init_output(struct sdi_device *sdi)
 {
 	struct omap_dss_device *out = &sdi->output;
 
@@ -328,11 +328,22 @@ static void sdi_init_output(struct sdi_device *sdi)
 	out->ops = &sdi_ops;
 	out->owner = THIS_MODULE;
 
+	out->next = omapdss_of_find_connected_device(out->dev->of_node, 1);
+	if (IS_ERR(out->next)) {
+		if (PTR_ERR(out->next) != -EPROBE_DEFER)
+			dev_err(out->dev, "failed to find video sink\n");
+		return PTR_ERR(out->next);
+	}
+
 	omapdss_device_register(out);
+
+	return 0;
 }
 
 static void sdi_uninit_output(struct sdi_device *sdi)
 {
+	if (sdi->output.next)
+		omapdss_device_put(sdi->output.next);
 	omapdss_device_unregister(&sdi->output);
 }
 
@@ -367,7 +378,9 @@ int sdi_init_port(struct dss_device *dss, struct platform_device *pdev,
 	sdi->pdev = pdev;
 	port->data = sdi;
 
-	sdi_init_output(sdi);
+	r = sdi_init_output(sdi);
+	if (r)
+		goto err_free;
 
 	return 0;
 
diff --git a/drivers/gpu/drm/omapdrm/dss/venc.c b/drivers/gpu/drm/omapdrm/dss/venc.c
index 84069e79ca6a..7bd3156a52a9 100644
--- a/drivers/gpu/drm/omapdrm/dss/venc.c
+++ b/drivers/gpu/drm/omapdrm/dss/venc.c
@@ -800,7 +800,7 @@ static const struct component_ops venc_component_ops = {
  * Probe & Remove, Suspend & Resume
  */
 
-static void venc_init_output(struct venc_device *venc)
+static int venc_init_output(struct venc_device *venc)
 {
 	struct omap_dss_device *out = &venc->output;
 
@@ -813,11 +813,22 @@ static void venc_init_output(struct venc_device *venc)
 	out->owner = THIS_MODULE;
 	out->of_ports = BIT(0);
 
+	out->next = omapdss_of_find_connected_device(out->dev->of_node, 0);
+	if (IS_ERR(out->next)) {
+		if (PTR_ERR(out->next) != -EPROBE_DEFER)
+			dev_err(out->dev, "failed to find video sink\n");
+		return PTR_ERR(out->next);
+	}
+
 	omapdss_device_register(out);
+
+	return 0;
 }
 
 static void venc_uninit_output(struct venc_device *venc)
 {
+	if (venc->output.next)
+		omapdss_device_put(venc->output.next);
 	omapdss_device_unregister(&venc->output);
 }
 
@@ -909,7 +920,9 @@ static int venc_probe(struct platform_device *pdev)
 
 	pm_runtime_enable(&pdev->dev);
 
-	venc_init_output(venc);
+	r = venc_init_output(venc);
+	if (r)
+		goto err_pm_disable;
 
 	r = component_add(&pdev->dev, &venc_component_ops);
 	if (r)
@@ -919,6 +932,7 @@ static int venc_probe(struct platform_device *pdev)
 
 err_uninit_output:
 	venc_uninit_output(venc);
+err_pm_disable:
 	pm_runtime_disable(&pdev->dev);
 err_free:
 	kfree(venc);
-- 
Regards,

Laurent Pinchart

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

  parent reply	other threads:[~2018-03-07  0:24 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-07  0:24 [PATCH/RFC 00/60] omapdrm: Reverse direction of DSS device (dis)connect operations Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 01/60] drm/omap: Allocate drm_device earlier and unref it as last step Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 02/60] drm/omap: Manage the usable omap_dss_device list within omap_drm_private Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 03/60] drm/omap: Do dss_device (display) ordering in omap_drv.c Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 04/60] drm/omap: dss: Remove display ordering from dss/display.c Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 05/60] drm/omap: dss: Gather OMAP DSS components at probe time Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 06/60] drm/omap: dss: Move platform_device_register from core.c to dss.c probe Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 07/60] drm/omap: dss: Remove omapdss_hdmi_ops set_infoframe operation Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 08/60] drm/omap: dss: Remove omapdss_atv_ops get_wss and set_wss operations Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 09/60] drm/omap: dss: Remove DSS encoders get_timings operation Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 10/60] drm/omap: dss: Remove unused omapdss_default_get_timings() Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 11/60] drm/omap: dss: Constify omap_dss_driver operations structure Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 12/60] drm/omap: displays: Remove videomode from omap_dss_device structure Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 13/60] drm/omap: dss: Remove omap_dss_device panel fields Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 14/60] drm/omap: dss: Rename omap_dss_device list field to output_list Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 15/60] drm/omap: dss: Create global list of all omap_dss_device instances Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 16/60] drm/omap: dss: Create and use omapdss_device_is_registered() Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 17/60] drm/omap: dss: Rework output lookup by port node Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 18/60] drm/omap: dss: Allow looking up any device by port Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 19/60] drm/omap: dss: Move common device operations to common structure Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 20/60] drm/omap: dss: Add functions to connect and disconnect devices Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 21/60] drm/omap: dss: Move debug message and checks to connection handlers Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 22/60] drm/omap: dss: Move src and dst check and set " Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 23/60] drm/omap: displays: Remove input omap_dss_device from panel data Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 24/60] drm/omap: dsi: Simplify debugfs implementation Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 25/60] drm/omap: Move DSI debugfs clocks dump to dsi%u_clks files Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 26/60] drm/omap: dss: Remove output devices list Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 27/60] drm/omap: dss: Rename for_each_dss_dev macro to for_each_dss_display Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 28/60] drm/omap: dss: Make omap_dss_get_next_device() more generic Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 29/60] drm/omap: dss: Split omapdss_register_display() Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 30/60] drm/omap: dss: Remove panel devices list Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 31/60] drm/omap: dss: Move and rename omap_dss_(get|put)_device() Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 32/60] drm/omap: dss: Store dss_device pointer in omap_dss_device Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 33/60] drm/omap: dss: Move DSS mgr ops and private data to dss_device Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 34/60] drm/omap: dss: Modify omapdss_find_output_from_display() to return channel Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 35/60] drm/omap: dss: Replace omap_dss_device port number with bitmask Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 36/60] drm/omap: dss: Extend omapdss_of_find_source_for_first_ep() to sinks Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 37/60] drm/omap: displays: Don't cast dssdev to panel data unnecessarily Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 38/60] drm/omap: dss: Cleanup error paths in output init functions Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 39/60] drm/omap: dss: dsi: Move initialization code from bind to probe Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 40/60] drm/omap: dss: hdmi4: " Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 41/60] drm/omap: dss: hdmi5: " Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 42/60] drm/omap: dss: venc: " Laurent Pinchart
2018-03-07  0:24 ` Laurent Pinchart [this message]
2018-03-07  0:24 ` [PATCH/RFC 44/60] drm/omap: dss: Add for_each_dss_output() macro Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 45/60] drm/omap: dss: Add function to retrieve display for an output Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 46/60] drm/omap: dss: Remove duplicated parameter to dss_mgr_(dis)connect() Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 47/60] drm/omap: dss: Get regulators at probe time Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 48/60] drm/omap: Remove unneeded variable assignments in omap_modeset_init Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 49/60] drm/omap: Create all planes before CRTCs Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 50/60] drm/omap: Group CRTC, encoder, connector and dssdev in a structure Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 51/60] drm/omap: Reverse direction of DSS device (dis)connect operations Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 52/60] drm/omap: dss: Move connection checks to omapdss_device_(dis)connect Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 53/60] drm/omap: dss: Move display type validation to initialization time Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 54/60] drm/omap: dss: Merge two disconnection helpers Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 55/60] drm/omap: Pass pipe pointer to omap_crtc_init() Laurent Pinchart
2018-03-07  0:24 ` [PATCH/RFC 56/60] drm/omap: Store CRTC lookup by channel table in omap_drm_private Laurent Pinchart
2018-03-07  0:25 ` [PATCH/RFC 57/60] drm/omap: Remove omap_crtc_output global array Laurent Pinchart
2018-03-07  0:25 ` [PATCH/RFC 58/60] drm/omap: Remove supported output check in CRTC connect handler Laurent Pinchart
2018-03-07  0:25 ` [PATCH/RFC 59/60] drm/omap: Set dispc_channel_connect from DSS output connect handlers Laurent Pinchart
2018-03-07  0:25 ` [PATCH/RFC 60/60] drm/omap: dss: Remove the dss_mgr_(dis)connect() operations Laurent Pinchart
2018-03-07 14:11 ` [PATCH/RFC 00/60] omapdrm: Reverse direction of DSS device (dis)connect operations Tomi Valkeinen
2018-03-07 18:41   ` Laurent Pinchart

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=20180307002503.19455-44-laurent.pinchart@ideasonboard.com \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=tomi.valkeinen@ti.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.