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 v3 48/61] drm/omap: dss: Get regulators at probe time
Date: Mon,  6 Aug 2018 03:27:28 +0300	[thread overview]
Message-ID: <20180806002741.30929-49-laurent.pinchart@ideasonboard.com> (raw)
In-Reply-To: <20180806002741.30929-1-laurent.pinchart@ideasonboard.com>

Regulators for the DPI, DSI, HDMI, SDI and VENC outputs are all looked
up when connecting the output omap_dss_device. There's no need to delay
regulator handling to that time, get the regulators at probe time.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
---
 drivers/gpu/drm/omapdrm/dss/dpi.c   | 69 ++++++++++++++++++-------------------
 drivers/gpu/drm/omapdrm/dss/dsi.c   | 36 ++++---------------
 drivers/gpu/drm/omapdrm/dss/hdmi4.c | 33 +++++-------------
 drivers/gpu/drm/omapdrm/dss/hdmi5.c | 31 +++++------------
 drivers/gpu/drm/omapdrm/dss/sdi.c   | 32 +++++------------
 drivers/gpu/drm/omapdrm/dss/venc.c  | 32 +++++------------
 6 files changed, 72 insertions(+), 161 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/dss/dpi.c b/drivers/gpu/drm/omapdrm/dss/dpi.c
index 533d87e11bf5..35d63c686393 100644
--- a/drivers/gpu/drm/omapdrm/dss/dpi.c
+++ b/drivers/gpu/drm/omapdrm/dss/dpi.c
@@ -551,38 +551,6 @@ static int dpi_verify_pll(struct dss_pll *pll)
 	return 0;
 }
 
-static const struct soc_device_attribute dpi_soc_devices[] = {
-	{ .machine = "OMAP3[456]*" },
-	{ .machine = "[AD]M37*" },
-	{ /* sentinel */ }
-};
-
-static int dpi_init_regulator(struct dpi_data *dpi)
-{
-	struct regulator *vdds_dsi;
-
-	/*
-	 * The DPI uses the DSI VDDS on OMAP34xx, OMAP35xx, OMAP36xx, AM37xx and
-	 * DM37xx only.
-	 */
-	if (!soc_device_match(dpi_soc_devices))
-		return 0;
-
-	if (dpi->vdds_dsi_reg)
-		return 0;
-
-	vdds_dsi = devm_regulator_get(&dpi->pdev->dev, "vdds_dsi");
-	if (IS_ERR(vdds_dsi)) {
-		if (PTR_ERR(vdds_dsi) != -EPROBE_DEFER)
-			DSSERR("can't get VDDS_DSI regulator\n");
-		return PTR_ERR(vdds_dsi);
-	}
-
-	dpi->vdds_dsi_reg = vdds_dsi;
-
-	return 0;
-}
-
 static void dpi_init_pll(struct dpi_data *dpi)
 {
 	struct dss_pll *pll;
@@ -646,10 +614,6 @@ static int dpi_connect(struct omap_dss_device *dssdev,
 	struct dpi_data *dpi = dpi_get_data_from_dssdev(dssdev);
 	int r;
 
-	r = dpi_init_regulator(dpi);
-	if (r)
-		return r;
-
 	dpi_init_pll(dpi);
 
 	r = dss_mgr_connect(dssdev);
@@ -737,6 +701,35 @@ static void dpi_uninit_output_port(struct device_node *port)
 	omapdss_device_unregister(out);
 }
 
+static const struct soc_device_attribute dpi_soc_devices[] = {
+	{ .machine = "OMAP3[456]*" },
+	{ .machine = "[AD]M37*" },
+	{ /* sentinel */ }
+};
+
+static int dpi_init_regulator(struct dpi_data *dpi)
+{
+	struct regulator *vdds_dsi;
+
+	/*
+	 * The DPI uses the DSI VDDS on OMAP34xx, OMAP35xx, OMAP36xx, AM37xx and
+	 * DM37xx only.
+	 */
+	if (!soc_device_match(dpi_soc_devices))
+		return 0;
+
+	vdds_dsi = devm_regulator_get(&dpi->pdev->dev, "vdds_dsi");
+	if (IS_ERR(vdds_dsi)) {
+		if (PTR_ERR(vdds_dsi) != -EPROBE_DEFER)
+			DSSERR("can't get VDDS_DSI regulator\n");
+		return PTR_ERR(vdds_dsi);
+	}
+
+	dpi->vdds_dsi_reg = vdds_dsi;
+
+	return 0;
+}
+
 int dpi_init_port(struct dss_device *dss, struct platform_device *pdev,
 		  struct device_node *port, enum dss_model dss_model)
 {
@@ -769,6 +762,10 @@ int dpi_init_port(struct dss_device *dss, struct platform_device *pdev,
 
 	mutex_init(&dpi->lock);
 
+	r = dpi_init_regulator(dpi);
+	if (r)
+		return r;
+
 	return dpi_init_output_port(dpi, port);
 }
 
diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c
index d5ae01529901..41a98021d5bf 100644
--- a/drivers/gpu/drm/omapdrm/dss/dsi.c
+++ b/drivers/gpu/drm/omapdrm/dss/dsi.c
@@ -1137,26 +1137,6 @@ static void dsi_runtime_put(struct dsi_data *dsi)
 	WARN_ON(r < 0 && r != -ENOSYS);
 }
 
-static int dsi_regulator_init(struct dsi_data *dsi)
-{
-	struct regulator *vdds_dsi;
-
-	if (dsi->vdds_dsi_reg != NULL)
-		return 0;
-
-	vdds_dsi = devm_regulator_get(dsi->dev, "vdd");
-
-	if (IS_ERR(vdds_dsi)) {
-		if (PTR_ERR(vdds_dsi) != -EPROBE_DEFER)
-			DSSERR("can't get DSI VDD regulator\n");
-		return PTR_ERR(vdds_dsi);
-	}
-
-	dsi->vdds_dsi_reg = vdds_dsi;
-
-	return 0;
-}
-
 static void _dsi_print_reset_status(struct dsi_data *dsi)
 {
 	u32 l;
@@ -1353,10 +1333,6 @@ static int dsi_pll_enable(struct dss_pll *pll)
 
 	DSSDBG("PLL init\n");
 
-	r = dsi_regulator_init(dsi);
-	if (r)
-		return r;
-
 	r = dsi_runtime_get(dsi);
 	if (r)
 		return r;
@@ -4908,13 +4884,8 @@ static int dsi_get_clocks(struct dsi_data *dsi)
 static int dsi_connect(struct omap_dss_device *dssdev,
 		struct omap_dss_device *dst)
 {
-	struct dsi_data *dsi = to_dsi_data(dssdev);
 	int r;
 
-	r = dsi_regulator_init(dsi);
-	if (r)
-		return r;
-
 	r = dss_mgr_connect(dssdev);
 	if (r)
 		return r;
@@ -5384,6 +5355,13 @@ static int dsi_probe(struct platform_device *pdev)
 		return r;
 	}
 
+	dsi->vdds_dsi_reg = devm_regulator_get(dev, "vdd");
+	if (IS_ERR(dsi->vdds_dsi_reg)) {
+		if (PTR_ERR(dsi->vdds_dsi_reg) != -EPROBE_DEFER)
+			DSSERR("can't get DSI VDD regulator\n");
+		return PTR_ERR(dsi->vdds_dsi_reg);
+	}
+
 	soc = soc_device_match(dsi_soc_devices);
 	if (soc)
 		dsi->data = soc->data;
diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
index 5216c5554741..6edb85898a7d 100644
--- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c
+++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
@@ -108,26 +108,6 @@ static irqreturn_t hdmi_irq_handler(int irq, void *data)
 	return IRQ_HANDLED;
 }
 
-static int hdmi_init_regulator(struct omap_hdmi *hdmi)
-{
-	struct regulator *reg;
-
-	if (hdmi->vdda_reg != NULL)
-		return 0;
-
-	reg = devm_regulator_get(&hdmi->pdev->dev, "vdda");
-
-	if (IS_ERR(reg)) {
-		if (PTR_ERR(reg) != -EPROBE_DEFER)
-			DSSERR("can't get VDDA regulator\n");
-		return PTR_ERR(reg);
-	}
-
-	hdmi->vdda_reg = reg;
-
-	return 0;
-}
-
 static int hdmi_power_on_core(struct omap_hdmi *hdmi)
 {
 	int r;
@@ -451,13 +431,8 @@ void hdmi4_core_disable(struct hdmi_core_data *core)
 static int hdmi_connect(struct omap_dss_device *dssdev,
 		struct omap_dss_device *dst)
 {
-	struct omap_hdmi *hdmi = dssdev_to_hdmi(dssdev);
 	int r;
 
-	r = hdmi_init_regulator(hdmi);
-	if (r)
-		return r;
-
 	r = dss_mgr_connect(dssdev);
 	if (r)
 		return r;
@@ -827,6 +802,14 @@ static int hdmi4_probe(struct platform_device *pdev)
 		goto err_free;
 	}
 
+	hdmi->vdda_reg = devm_regulator_get(&pdev->dev, "vdda");
+	if (IS_ERR(hdmi->vdda_reg)) {
+		r = PTR_ERR(hdmi->vdda_reg);
+		if (r != -EPROBE_DEFER)
+			DSSERR("can't get VDDA regulator\n");
+		goto err_free;
+	}
+
 	pm_runtime_enable(&pdev->dev);
 
 	r = hdmi4_init_output(hdmi);
diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi5.c b/drivers/gpu/drm/omapdrm/dss/hdmi5.c
index 363bc5843e0f..db20a578091b 100644
--- a/drivers/gpu/drm/omapdrm/dss/hdmi5.c
+++ b/drivers/gpu/drm/omapdrm/dss/hdmi5.c
@@ -117,24 +117,6 @@ static irqreturn_t hdmi_irq_handler(int irq, void *data)
 	return IRQ_HANDLED;
 }
 
-static int hdmi_init_regulator(struct omap_hdmi *hdmi)
-{
-	struct regulator *reg;
-
-	if (hdmi->vdda_reg != NULL)
-		return 0;
-
-	reg = devm_regulator_get(&hdmi->pdev->dev, "vdda");
-	if (IS_ERR(reg)) {
-		DSSERR("can't get VDDA regulator\n");
-		return PTR_ERR(reg);
-	}
-
-	hdmi->vdda_reg = reg;
-
-	return 0;
-}
-
 static int hdmi_power_on_core(struct omap_hdmi *hdmi)
 {
 	int r;
@@ -454,13 +436,8 @@ static void hdmi_core_disable(struct omap_hdmi *hdmi)
 static int hdmi_connect(struct omap_dss_device *dssdev,
 		struct omap_dss_device *dst)
 {
-	struct omap_hdmi *hdmi = dssdev_to_hdmi(dssdev);
 	int r;
 
-	r = hdmi_init_regulator(hdmi);
-	if (r)
-		return r;
-
 	r = dss_mgr_connect(dssdev);
 	if (r)
 		return r;
@@ -817,6 +794,14 @@ static int hdmi5_probe(struct platform_device *pdev)
 		goto err_free;
 	}
 
+	hdmi->vdda_reg = devm_regulator_get(&pdev->dev, "vdda");
+	if (IS_ERR(hdmi->vdda_reg)) {
+		r = PTR_ERR(hdmi->vdda_reg);
+		if (r != -EPROBE_DEFER)
+			DSSERR("can't get VDDA regulator\n");
+		goto err_free;
+	}
+
 	pm_runtime_enable(&pdev->dev);
 
 	r = hdmi5_init_output(hdmi);
diff --git a/drivers/gpu/drm/omapdrm/dss/sdi.c b/drivers/gpu/drm/omapdrm/dss/sdi.c
index 4b3a24d98065..1fb25e2c5f87 100644
--- a/drivers/gpu/drm/omapdrm/dss/sdi.c
+++ b/drivers/gpu/drm/omapdrm/dss/sdi.c
@@ -252,35 +252,11 @@ static int sdi_check_timings(struct omap_dss_device *dssdev,
 	return 0;
 }
 
-static int sdi_init_regulator(struct sdi_device *sdi)
-{
-	struct regulator *vdds_sdi;
-
-	if (sdi->vdds_sdi_reg)
-		return 0;
-
-	vdds_sdi = devm_regulator_get(&sdi->pdev->dev, "vdds_sdi");
-	if (IS_ERR(vdds_sdi)) {
-		if (PTR_ERR(vdds_sdi) != -EPROBE_DEFER)
-			DSSERR("can't get VDDS_SDI regulator\n");
-		return PTR_ERR(vdds_sdi);
-	}
-
-	sdi->vdds_sdi_reg = vdds_sdi;
-
-	return 0;
-}
-
 static int sdi_connect(struct omap_dss_device *dssdev,
 		struct omap_dss_device *dst)
 {
-	struct sdi_device *sdi = dssdev_to_sdi(dssdev);
 	int r;
 
-	r = sdi_init_regulator(sdi);
-	if (r)
-		return r;
-
 	r = dss_mgr_connect(dssdev);
 	if (r)
 		return r;
@@ -379,6 +355,14 @@ int sdi_init_port(struct dss_device *dss, struct platform_device *pdev,
 	sdi->pdev = pdev;
 	port->data = sdi;
 
+	sdi->vdds_sdi_reg = devm_regulator_get(&pdev->dev, "vdds_sdi");
+	if (IS_ERR(sdi->vdds_sdi_reg)) {
+		r = PTR_ERR(sdi->vdds_sdi_reg);
+		if (r != -EPROBE_DEFER)
+			DSSERR("can't get VDDS_SDI regulator\n");
+		goto err_free;
+	}
+
 	r = sdi_init_output(sdi);
 	if (r)
 		goto err_free;
diff --git a/drivers/gpu/drm/omapdrm/dss/venc.c b/drivers/gpu/drm/omapdrm/dss/venc.c
index 24a2b9a41864..7aa06b796481 100644
--- a/drivers/gpu/drm/omapdrm/dss/venc.c
+++ b/drivers/gpu/drm/omapdrm/dss/venc.c
@@ -614,25 +614,6 @@ static int venc_check_timings(struct omap_dss_device *dssdev,
 	}
 }
 
-static int venc_init_regulator(struct venc_device *venc)
-{
-	struct regulator *vdda_dac;
-
-	if (venc->vdda_dac_reg != NULL)
-		return 0;
-
-	vdda_dac = devm_regulator_get(&venc->pdev->dev, "vdda");
-	if (IS_ERR(vdda_dac)) {
-		if (PTR_ERR(vdda_dac) != -EPROBE_DEFER)
-			DSSERR("can't get VDDA_DAC regulator\n");
-		return PTR_ERR(vdda_dac);
-	}
-
-	venc->vdda_dac_reg = vdda_dac;
-
-	return 0;
-}
-
 static int venc_dump_regs(struct seq_file *s, void *p)
 {
 	struct venc_device *venc = s->private;
@@ -713,13 +694,8 @@ static int venc_get_clocks(struct venc_device *venc)
 static int venc_connect(struct omap_dss_device *dssdev,
 		struct omap_dss_device *dst)
 {
-	struct venc_device *venc = dssdev_to_venc(dssdev);
 	int r;
 
-	r = venc_init_regulator(venc);
-	if (r)
-		return r;
-
 	r = dss_mgr_connect(dssdev);
 	if (r)
 		return r;
@@ -908,6 +884,14 @@ static int venc_probe(struct platform_device *pdev)
 		goto err_free;
 	}
 
+	venc->vdda_dac_reg = devm_regulator_get(&pdev->dev, "vdda");
+	if (IS_ERR(venc->vdda_dac_reg)) {
+		r = PTR_ERR(venc->vdda_dac_reg);
+		if (r != -EPROBE_DEFER)
+			DSSERR("can't get VDDA_DAC regulator\n");
+		goto err_free;
+	}
+
 	r = venc_get_clocks(venc);
 	if (r)
 		goto err_free;
-- 
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-08-06  0:27 UTC|newest]

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