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 23/42] drm/omap: dsi: lp/hs switching support for transfer()
Date: Sun, 17 Nov 2019 03:40:09 +0100	[thread overview]
Message-ID: <20191117024028.2233-24-sebastian.reichel@collabora.com> (raw)
In-Reply-To: <20191117024028.2233-1-sebastian.reichel@collabora.com>

Integrate low-power / high-speed bus switching into transfer
function and drop the omapdrm specific enable_hs() callback.

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

diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
index 170cbc78fbef..5603dae0fd0f 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
@@ -269,7 +269,7 @@ static int dsicm_exit_ulps(struct panel_drv_data *ddata)
 		return 0;
 
 	src->ops->enable(src);
-	src->ops->dsi.enable_hs(src, ddata->dsi->channel, true);
+	ddata->dsi->mode_flags &= ~MIPI_DSI_MODE_LPM;
 
 	r = _dsicm_enable_te(ddata, true);
 	if (r) {
@@ -574,7 +574,7 @@ static int dsicm_power_on(struct panel_drv_data *ddata)
 
 	dsicm_hw_reset(ddata);
 
-	src->ops->dsi.enable_hs(src, ddata->dsi->channel, false);
+	ddata->dsi->mode_flags |= MIPI_DSI_MODE_LPM;
 
 	r = dsicm_sleep_out(ddata);
 	if (r)
@@ -617,7 +617,7 @@ static int dsicm_power_on(struct panel_drv_data *ddata)
 		ddata->intro_printed = true;
 	}
 
-	src->ops->dsi.enable_hs(src, ddata->dsi->channel, true);
+	ddata->dsi->mode_flags &= ~MIPI_DSI_MODE_LPM;
 
 	return 0;
 err:
diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c
index 32271870e74c..8eb323adb30a 100644
--- a/drivers/gpu/drm/omapdrm/dss/dsi.c
+++ b/drivers/gpu/drm/omapdrm/dss/dsi.c
@@ -45,6 +45,9 @@ struct dsi_reg { u16 module; u16 idx; };
 
 #define DSI_REG(mod, idx)		((const struct dsi_reg) { mod, idx })
 
+/* returns true iff both arguments logically differs */
+#define NEQV(a, b) (!(a) ^ !(b))
+
 /* DSI Protocol Engine */
 
 #define DSI_PROTO			0
@@ -329,6 +332,7 @@ struct dsi_data {
 	int irq;
 
 	bool is_enabled;
+	bool in_lp_mode;
 
 	struct clk *dss_clk;
 	struct regmap *syscon;
@@ -2431,6 +2435,8 @@ static void dsi_vc_enable_hs(struct omap_dss_device *dssdev, int channel,
 	/* start the DDR clock by sending a NULL packet */
 	if (dsi->vm_timings.ddr_clk_always_on && enable)
 		dsi_vc_send_null(dsi, channel);
+
+	dsi->in_lp_mode = !enable;
 }
 
 static void dsi_vc_flush_long_data(struct dsi_data *dsi, int channel)
@@ -4697,6 +4703,11 @@ static ssize_t omap_dsi_host_transfer(struct mipi_dsi_host *host,
 	struct dsi_data *dsi = host_to_omap(host);
 	struct omap_dss_device *dssdev = &dsi->output;
 
+	if (NEQV(msg->flags & MIPI_DSI_MSG_USE_LPM, dsi->in_lp_mode)) {
+		dsi_vc_enable_hs(dssdev, msg->channel,
+				 !(msg->flags & MIPI_DSI_MSG_USE_LPM));
+	}
+
 	switch (msg->type) {
 	case MIPI_DSI_GENERIC_SHORT_WRITE_0_PARAM:
 	case MIPI_DSI_GENERIC_SHORT_WRITE_1_PARAM:
@@ -4757,8 +4768,6 @@ static const struct omap_dss_device_ops dsi_ops = {
 
 		.disable = dsi_display_disable,
 
-		.enable_hs = dsi_vc_enable_hs,
-
 		.set_config = dsi_set_config,
 
 		.enable_video_output = dsi_enable_video_output,
diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h
index cd9769711b58..5bcc14d9f737 100644
--- a/drivers/gpu/drm/omapdrm/dss/omapdss.h
+++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h
@@ -294,8 +294,6 @@ struct omapdss_dsi_ops {
 	int (*set_config)(struct omap_dss_device *dssdev,
 			const struct omap_dss_dsi_config *cfg);
 
-	void (*enable_hs)(struct omap_dss_device *dssdev, int channel,
-			bool enable);
 	int (*enable_te)(struct omap_dss_device *dssdev, bool enable);
 
 	int (*update)(struct omap_dss_device *dssdev, int channel,
-- 
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 ` [RFCv1 14/42] drm/omap: dsi: request VC via mipi_dsi_attach Sebastian Reichel
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 ` Sebastian Reichel [this message]
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-24-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.