All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sebastian Reichel <sebastian.reichel@collabora.com>
To: Sebastian Reichel <sre@kernel.org>,
	Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	Tomi Valkeinen <tomi.valkeinen@ti.com>
Cc: kernel@collabora.com, Tony Lindgren <tony@atomide.com>,
	"H. Nikolaus Schaller" <hns@goldelico.com>,
	Merlijn Wajer <merlijn@wizzup.org>,
	Sebastian Reichel <sebastian.reichel@collabora.com>,
	dri-devel@lists.freedesktop.org, linux-omap@vger.kernel.org
Subject: [RFCv1 14/42] drm/omap: dsi: request VC via mipi_dsi_attach
Date: Sun, 17 Nov 2019 03:40:00 +0100	[thread overview]
Message-ID: <20191117024028.2233-15-sebastian.reichel@collabora.com> (raw)
In-Reply-To: <20191117024028.2233-1-sebastian.reichel@collabora.com>

Drop custom request_vc/release_vc callbacks by using the
generic mipi_dsi_attach/mipi_dsi_detach functions.

Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
---
 .../gpu/drm/omapdrm/displays/panel-dsi-cm.c   | 24 +++++---
 drivers/gpu/drm/omapdrm/dss/dsi.c             | 61 ++++++++-----------
 drivers/gpu/drm/omapdrm/dss/omapdss.h         |  3 -
 3 files changed, 41 insertions(+), 47 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
index e6c0a6e5aa1d..ddc6dd671cd0 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
@@ -693,14 +693,6 @@ static int dsicm_connect(struct omap_dss_device *src,
 			 struct omap_dss_device *dst)
 {
 	struct panel_drv_data *ddata = to_panel_data(dst);
-	struct device *dev = &ddata->dsi->dev;
-	int r;
-
-	r = src->ops->dsi.request_vc(src, ddata->channel);
-	if (r) {
-		dev_err(dev, "failed to get virtual channel\n");
-		return r;
-	}
 
 	ddata->src = src;
 	return 0;
@@ -711,7 +703,6 @@ static void dsicm_disconnect(struct omap_dss_device *src,
 {
 	struct panel_drv_data *ddata = to_panel_data(dst);
 
-	src->ops->dsi.release_vc(src, ddata->channel);
 	ddata->src = NULL;
 }
 
@@ -1278,8 +1269,21 @@ static int dsicm_probe(struct mipi_dsi_device *dsi)
 		goto err_bl;
 	}
 
+	dsi->lanes = 3;
+	dsi->format = MIPI_DSI_FMT_RGB888;
+	dsi->mode_flags = MIPI_DSI_CLOCK_NON_CONTINUOUS |
+			  MIPI_DSI_MODE_EOT_PACKET;
+	dsi->hs_rate = 300000000;
+	dsi->lp_rate = 10000000;
+
+	r = mipi_dsi_attach(dsi);
+	if (r < 0)
+		goto err_dsi_attach;
+
 	return 0;
 
+err_dsi_attach:
+	sysfs_remove_group(&dsi->dev.kobj, &dsicm_attr_group);
 err_bl:
 	destroy_workqueue(ddata->workqueue);
 err_reg:
@@ -1296,6 +1300,8 @@ static int __exit dsicm_remove(struct mipi_dsi_device *dsi)
 
 	dev_dbg(&dsi->dev, "remove\n");
 
+	mipi_dsi_detach(dsi);
+
 	omapdss_device_unregister(dssdev);
 
 	if (omapdss_device_is_enabled(dssdev))
diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c
index c4107fe5a53d..3cd749cae15c 100644
--- a/drivers/gpu/drm/omapdrm/dss/dsi.c
+++ b/drivers/gpu/drm/omapdrm/dss/dsi.c
@@ -349,7 +349,7 @@ struct dsi_data {
 
 	struct {
 		enum dsi_vc_source source;
-		struct omap_dss_device *dssdev;
+		struct mipi_dsi_device *dest;
 		enum fifo_size tx_fifo_size;
 		enum fifo_size rx_fifo_size;
 	} vc[4];
@@ -4690,32 +4690,6 @@ static enum omap_channel dsi_get_channel(struct dsi_data *dsi)
 	}
 }
 
-static int dsi_request_vc(struct omap_dss_device *dssdev, int channel)
-{
-	struct dsi_data *dsi = to_dsi_data(dssdev);
-
-	if (channel < 0 || channel > 3)
-		return -EINVAL;
-
-	if (dsi->vc[channel].dssdev) {
-		DSSERR("cannot get VC for display %s", dssdev->name);
-		return -EBUSY;
-	}
-
-	dsi->vc[channel].dssdev = dssdev;
-	return 0;
-}
-
-static void dsi_release_vc(struct omap_dss_device *dssdev, int channel)
-{
-	struct dsi_data *dsi = to_dsi_data(dssdev);
-
-	if ((channel >= 0 && channel <= 3) &&
-		dsi->vc[channel].dssdev == dssdev) {
-		dsi->vc[channel].dssdev = NULL;
-	}
-}
-
 static ssize_t omap_dsi_host_transfer(struct mipi_dsi_host *host,
 				      const struct mipi_dsi_msg *msg)
 {
@@ -4792,23 +4766,40 @@ static const struct omap_dss_device_ops dsi_ops = {
 		.update = dsi_update,
 
 		.enable_te = dsi_enable_te,
-
-		.request_vc = dsi_request_vc,
-		.release_vc = dsi_release_vc,
 	},
 };
 
 int omap_dsi_host_attach(struct mipi_dsi_host *host,
-			 struct mipi_dsi_device *dsi)
+			 struct mipi_dsi_device *client)
 {
-	/* TODO: convert driver from custom binding method to this one */
+	struct dsi_data *dsi = host_to_omap(host);
+	unsigned int channel = client->channel;
+
+	if (channel > 3)
+		return -EINVAL;
+
+	if (dsi->vc[channel].dest) {
+		DSSERR("cannot get VC for display %s", dev_name(&client->dev));
+		return -EBUSY;
+	}
+
+	dsi->vc[channel].dest = client;
 	return 0;
 }
 
 int omap_dsi_host_detach(struct mipi_dsi_host *host,
-			 struct mipi_dsi_device *dsi)
+			 struct mipi_dsi_device *client)
 {
-	/* TODO: convert driver from custom binding method to this one */
+	struct dsi_data *dsi = host_to_omap(host);
+	unsigned int channel = client->channel;
+
+	if (channel > 3)
+		return -EINVAL;
+
+	if (dsi->vc[channel].dest != client)
+		return -EINVAL;
+
+	dsi->vc[channel].dest = NULL;
 	return 0;
 }
 
@@ -5267,7 +5258,7 @@ static int dsi_probe(struct platform_device *pdev)
 	/* DSI VCs initialization */
 	for (i = 0; i < ARRAY_SIZE(dsi->vc); i++) {
 		dsi->vc[i].source = DSI_VC_SOURCE_L4;
-		dsi->vc[i].dssdev = NULL;
+		dsi->vc[i].dest = NULL;
 	}
 
 	r = dsi_get_clocks(dsi);
diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h
index be37c9eb212c..28faacb9636b 100644
--- a/drivers/gpu/drm/omapdrm/dss/omapdss.h
+++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h
@@ -307,9 +307,6 @@ struct omapdss_dsi_ops {
 	int (*enable_video_output)(struct omap_dss_device *dssdev, int channel);
 	void (*disable_video_output)(struct omap_dss_device *dssdev,
 			int channel);
-
-	int (*request_vc)(struct omap_dss_device *dssdev, int channel);
-	void (*release_vc)(struct omap_dss_device *dssdev, int channel);
 };
 
 struct omap_dss_device_ops {
-- 
2.24.0

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

  parent reply	other threads:[~2019-11-17  2:40 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-17  2:39 [RFCv1 00/42] drm/omap: Convert DSI code to use drm_mipi_dsi and drm_panel Sebastian Reichel
2019-11-17  2:39 ` [RFCv1 01/42] omap/drm: drop unused dsi.configure_pins Sebastian Reichel
2019-11-17  2:39 ` [RFCv1 02/42] drm/omap: dsi: use MIPI_DSI_FMT_* instead of OMAP_DSS_DSI_FMT_* Sebastian Reichel
2019-11-17  2:39 ` [RFCv1 03/42] drm/omap: constify write buffers Sebastian Reichel
2019-11-17  2:39 ` [RFCv1 04/42] drm/omap: dsi: add generic transfer function Sebastian Reichel
2019-11-17  2:39 ` [RFCv1 05/42] drm/omap: panel-dsi-cm: convert to transfer API Sebastian Reichel
2019-11-17  2:39 ` [RFCv1 06/42] drm/omap: dsi: unexport specific data transfer functions Sebastian Reichel
2019-11-17  2:39 ` [RFCv1 07/42] drm/omap: dsi: drop virtual channel logic Sebastian Reichel
2019-11-17  2:39 ` [RFCv1 08/42] drm/omap: dsi: simplify write function Sebastian Reichel
2019-11-17  2:39 ` [RFCv1 09/42] drm/omap: dsi: simplify read functions Sebastian Reichel
2019-11-17  2:39 ` [RFCv1 10/42] drm/omap: dsi: switch dsi_vc_send_long/short to mipi_dsi_msg Sebastian Reichel
2019-11-17  2:39 ` [RFCv1 11/42] ARM: dts: omap: add channel to DSI panels Sebastian Reichel
2019-11-18 13:05   ` Tomi Valkeinen
2019-11-18 14:33     ` Sebastian Reichel
2019-11-18 14:37       ` H. Nikolaus Schaller
2019-11-18 15:03         ` Sebastian Reichel
2019-11-18 22:52           ` Tony Lindgren
2019-11-19 21:23             ` Sebastian Reichel
2019-11-17  2:39 ` [RFCv1 12/42] drm/omap: dsi: introduce mipi_dsi_host Sebastian Reichel
2019-11-17  2:39 ` [RFCv1 13/42] drm/omap: panel-dsi-cm: use DSI helpers Sebastian Reichel
2019-11-17  2:40 ` Sebastian Reichel [this message]
2019-11-17  2:40 ` [RFCv1 15/42] drm/omap: panel-dsi-cm: drop hardcoded VC Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 16/42] drm/omap: panel-dsi-cm: use common MIPI DCS 1.3 defines Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 17/42] drm/omap: dsi: drop unused memory_read() Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 18/42] drm/omap: dsi: drop unused get_te() Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 19/42] drm/omap: dsi: drop unused enable_te() Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 20/42] drm/omap: dsi: drop useless sync() Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 21/42] drm/omap: dsi: use pixel-format and mode from attach Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 22/42] drm/omap: panel-dsi-cm: use bulk regulator API Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 23/42] drm/omap: dsi: lp/hs switching support for transfer() Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 24/42] drm/omap: dsi: move TE GPIO handling into core Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 25/42] drm/omap: dsi: drop custom enable_te() API Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 26/42] drm/omap: dsi: do bus locking in host driver Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 27/42] drm/omap: dsi: untangle ulps ops from enable/disable Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 28/42] drm/dsi: add MIPI_DSI_MODE_ULPS_IDLE Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 29/42] drm/omap: dsi: do ULPS in host driver Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 30/42] drm/omap: dsi: move panel refresh function to host Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 31/42] drm/omap: dsi: Reverse direction of the DSS device enable/disable operations Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 32/42] drm/omap: dsi: convert to drm_panel Sebastian Reichel
2019-11-17 19:23   ` H. Nikolaus Schaller
2019-11-18 14:45     ` Sebastian Reichel
2019-11-18 14:51       ` H. Nikolaus Schaller
2019-11-19  9:42         ` H. Nikolaus Schaller
2019-11-19 21:21           ` Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 33/42] drm/omap: dsi: use atomic helper for dirtyfb Sebastian Reichel
2019-11-18 23:05   ` Tony Lindgren
2019-11-19  5:42     ` Tomi Valkeinen
2019-11-19 14:32       ` Tony Lindgren
2019-11-19 14:53         ` Tomi Valkeinen
2019-11-19 15:06           ` Tony Lindgren
2019-11-19 15:55             ` Tomi Valkeinen
2019-11-19 18:46               ` Andreas Kemnade
2019-11-19 21:15                 ` Sebastian Reichel
2019-11-20  3:48               ` Tony Lindgren
2019-11-17  2:40 ` [RFCv1 34/42] drm/omap: dsi: implement check timings Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 35/42] drm/omap: panel-dsi-cm: use DEVICE_ATTR_RO Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 36/42] drm/omap: panel-dsi-cm: support unbinding Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 37/42] drm/omap: panel-dsi-cm: fix remove() Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 38/42] drm/omap: panel-dsi-cm: do not power on/off twice Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 39/42] drm/omap: dsi: return proper error code from dsi_update_all() Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 40/42] drm/omap: dsi: support panel un/re-binding Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 41/42] ARM: dts: omap4-droid4: add panel compatible Sebastian Reichel
2019-11-17  2:40 ` [RFCv1 42/42] drm/panel: Move OMAP's DSI command mode panel driver 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=20191117024028.2233-15-sebastian.reichel@collabora.com \
    --to=sebastian.reichel@collabora.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=hns@goldelico.com \
    --cc=kernel@collabora.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-omap@vger.kernel.org \
    --cc=merlijn@wizzup.org \
    --cc=sre@kernel.org \
    --cc=tomi.valkeinen@ti.com \
    --cc=tony@atomide.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.