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 01/23] drm/omap: Pass both output and display omap_dss_device to connector init
Date: Fri,  8 Jun 2018 19:29:04 +0300	[thread overview]
Message-ID: <20180608162926.28729-2-laurent.pinchart@ideasonboard.com> (raw)
In-Reply-To: <20180608162926.28729-1-laurent.pinchart@ideasonboard.com>

The drm_connector implementation requires access to the omap_dss_device
corresponding to the display, which is passed to its initialization
function and stored internally. Refactoring of the timings operations
will require access to the output omap_dss_device. To prepare for that,
pass it to the connector initialization function and store it internally
as well.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 drivers/gpu/drm/omapdrm/omap_connector.c | 30 +++++++++++++++++-------------
 drivers/gpu/drm/omapdrm/omap_connector.h |  4 ++--
 drivers/gpu/drm/omapdrm/omap_drv.c       |  3 ++-
 3 files changed, 21 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/omap_connector.c b/drivers/gpu/drm/omapdrm/omap_connector.c
index a1d379816732..77b044b778d6 100644
--- a/drivers/gpu/drm/omapdrm/omap_connector.c
+++ b/drivers/gpu/drm/omapdrm/omap_connector.c
@@ -29,7 +29,8 @@
 
 struct omap_connector {
 	struct drm_connector base;
-	struct omap_dss_device *dssdev;
+	struct omap_dss_device *output;
+	struct omap_dss_device *display;
 	struct omap_dss_device *hpd;
 	bool hdmi_mode;
 };
@@ -104,7 +105,7 @@ omap_connector_find_device(struct drm_connector *connector,
 	struct omap_connector *omap_connector = to_omap_connector(connector);
 	struct omap_dss_device *dssdev;
 
-	for (dssdev = omap_connector->dssdev; dssdev; dssdev = dssdev->src) {
+	for (dssdev = omap_connector->display; dssdev; dssdev = dssdev->src) {
 		if (dssdev->ops_flags & op)
 			return dssdev;
 	}
@@ -129,7 +130,7 @@ static enum drm_connector_status omap_connector_detect(
 
 		omap_connector_hpd_notify(connector, dssdev->src, status);
 	} else {
-		switch (omap_connector->dssdev->type) {
+		switch (omap_connector->display->type) {
 		case OMAP_DISPLAY_TYPE_DPI:
 		case OMAP_DISPLAY_TYPE_DBI:
 		case OMAP_DISPLAY_TYPE_SDI:
@@ -142,7 +143,7 @@ static enum drm_connector_status omap_connector_detect(
 		}
 	}
 
-	VERB("%s: %d (force=%d)", omap_connector->dssdev->name, status, force);
+	VERB("%s: %d (force=%d)", omap_connector->display->name, status, force);
 
 	return status;
 }
@@ -151,7 +152,7 @@ static void omap_connector_destroy(struct drm_connector *connector)
 {
 	struct omap_connector *omap_connector = to_omap_connector(connector);
 
-	DBG("%s", omap_connector->dssdev->name);
+	DBG("%s", omap_connector->display->name);
 
 	if (omap_connector->hpd) {
 		struct omap_dss_device *hpd = omap_connector->hpd;
@@ -165,7 +166,8 @@ static void omap_connector_destroy(struct drm_connector *connector)
 	drm_connector_cleanup(connector);
 	kfree(omap_connector);
 
-	omapdss_device_put(omap_connector->dssdev);
+	omapdss_device_put(omap_connector->output);
+	omapdss_device_put(omap_connector->display);
 }
 
 #define MAX_EDID  512
@@ -212,7 +214,7 @@ static int omap_connector_get_modes(struct drm_connector *connector)
 	struct drm_display_mode *mode;
 	struct videomode vm = {0};
 
-	DBG("%s", omap_connector->dssdev->name);
+	DBG("%s", omap_connector->display->name);
 
 	/*
 	 * If display exposes EDID, then we parse that in the normal way to
@@ -229,7 +231,7 @@ static int omap_connector_get_modes(struct drm_connector *connector)
 	if (!mode)
 		return 0;
 
-	dssdev = omap_connector->dssdev;
+	dssdev = omap_connector->display;
 	dssdev->ops->get_timings(dssdev, &vm);
 
 	drm_display_mode_from_videomode(&vm, mode);
@@ -250,7 +252,7 @@ static int omap_connector_mode_valid(struct drm_connector *connector,
 				 const struct drm_display_mode *mode)
 {
 	struct omap_connector *omap_connector = to_omap_connector(connector);
-	struct omap_dss_device *dssdev = omap_connector->dssdev;
+	struct omap_dss_device *dssdev = omap_connector->display;
 	struct videomode vm = {0};
 	struct drm_device *dev = connector->dev;
 	struct drm_display_mode *new_mode;
@@ -326,19 +328,21 @@ static const struct drm_connector_helper_funcs omap_connector_helper_funcs = {
 
 /* initialize connector */
 struct drm_connector *omap_connector_init(struct drm_device *dev,
-		int connector_type, struct omap_dss_device *dssdev,
-		struct drm_encoder *encoder)
+		int connector_type, struct omap_dss_device *output,
+		struct omap_dss_device *display, struct drm_encoder *encoder)
 {
 	struct drm_connector *connector = NULL;
 	struct omap_connector *omap_connector;
+	struct omap_dss_device *dssdev;
 
-	DBG("%s", dssdev->name);
+	DBG("%s", display->name);
 
 	omap_connector = kzalloc(sizeof(*omap_connector), GFP_KERNEL);
 	if (!omap_connector)
 		goto fail;
 
-	omap_connector->dssdev = omapdss_device_get(dssdev);
+	omap_connector->output = omapdss_device_get(output);
+	omap_connector->display = omapdss_device_get(display);
 
 	connector = &omap_connector->base;
 	connector->interlace_allowed = 1;
diff --git a/drivers/gpu/drm/omapdrm/omap_connector.h b/drivers/gpu/drm/omapdrm/omap_connector.h
index 465b3c9499d5..42ff0a106179 100644
--- a/drivers/gpu/drm/omapdrm/omap_connector.h
+++ b/drivers/gpu/drm/omapdrm/omap_connector.h
@@ -28,8 +28,8 @@ struct drm_encoder;
 struct omap_dss_device;
 
 struct drm_connector *omap_connector_init(struct drm_device *dev,
-		int connector_type, struct omap_dss_device *dssdev,
-		struct drm_encoder *encoder);
+		int connector_type, struct omap_dss_device *output,
+		struct omap_dss_device *display, struct drm_encoder *encoder);
 struct drm_encoder *omap_connector_attached_encoder(
 		struct drm_connector *connector);
 bool omap_connector_get_hdmi_mode(struct drm_connector *connector);
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
index 49cd7609fa3b..fd2d869304e7 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.c
+++ b/drivers/gpu/drm/omapdrm/omap_drv.c
@@ -323,7 +323,8 @@ static int omap_modeset_init(struct drm_device *dev)
 			return -ENOMEM;
 
 		connector = omap_connector_init(dev,
-				get_connector_type(display), display, encoder);
+				get_connector_type(display), pipe->output,
+				display, encoder);
 		if (!connector)
 			return -ENOMEM;
 
-- 
Regards,

Laurent Pinchart

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

  reply	other threads:[~2018-06-08 16:29 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-08 16:29 [PATCH 00/23] omapdrm: Rework the timing-related operations Laurent Pinchart
2018-06-08 16:29 ` Laurent Pinchart [this message]
2018-06-08 16:29 ` [PATCH 02/23] drm/omap: Determine connector type directly in omap_connector.c Laurent Pinchart
2018-06-08 16:29 ` [PATCH 03/23] drm/omap: dss: hdmi: Rename hdmi_display_(set|check)_timing() functions Laurent Pinchart
2018-06-08 16:29 ` [PATCH 04/23] drm/omap: Make the video_mode pointer to .set_timings() const Laurent Pinchart
2018-06-08 16:29 ` [PATCH 05/23] drm/omap: Remove duplicate calls to .set_timings() operation Laurent Pinchart
2018-06-08 16:29 ` [PATCH 06/23] drm/omap: Remove unneeded fallback for missing .check_timings() Laurent Pinchart
2018-06-08 16:29 ` [PATCH 07/23] drm/omap: Don't store video mode internally for external encoders Laurent Pinchart
2018-06-08 16:29 ` [PATCH 08/23] drm: Add display info bus flags to specify sync signals clock edges Laurent Pinchart
2018-06-08 16:29 ` [PATCH 09/23] drm/omap: Store bus flags in the omap_dss_device structure Laurent Pinchart
2018-06-08 16:29 ` [PATCH 10/23] drm/omap: Don't call .check_timings() operation recursively Laurent Pinchart
2018-06-08 16:29 ` [PATCH 11/23] drm/omap: Query timing information from analog TV encoder Laurent Pinchart
2018-06-08 16:29 ` [PATCH 12/23] drm/omap: Remove .get_timings() operation from display connectors Laurent Pinchart
2018-06-08 16:29 ` [PATCH 13/23] drm/omap: panels: Don't modify fixed timings Laurent Pinchart
2018-06-08 16:29 ` [PATCH 14/23] drm/omap: Move bus flag hack to encoder implementation Laurent Pinchart
2018-06-08 16:29 ` [PATCH 15/23] drm/omap: Split mode fixup and mode set from encoder enable Laurent Pinchart
2018-06-08 16:29 ` [PATCH 16/23] drm/omap: Call dispc timings check operation directly Laurent Pinchart
2018-06-08 16:29 ` [PATCH 17/23] drm/omap: dpi: Don't fixup video mode in dpi_set_mode() Laurent Pinchart
2018-06-08 16:29 ` [PATCH 18/23] drm/omap: dsi: Fixup video mode in .set_config() operation Laurent Pinchart
2018-06-08 16:29 ` [PATCH 19/23] drm/omap: hdmi: Constify video mode and related pointers Laurent Pinchart
2018-06-08 16:29 ` [PATCH 20/23] drm/omap: sdi: Fixup video mode in .check_timings() operation Laurent Pinchart
2018-06-08 16:29 ` [PATCH 21/23] drm/omap: venc: " Laurent Pinchart
2018-06-08 16:29 ` [PATCH 22/23] drm/omap: Store CRTC timings in .set_timings() operation Laurent Pinchart
2018-06-08 16:29 ` [PATCH 23/23] drm/omap: Don't call .set_timings() operation recursively Laurent Pinchart
2018-06-12 12:18 ` [PATCH 00/23] omapdrm: Rework the timing-related operations Sebastian Reichel

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=20180608162926.28729-2-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.