[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20210730142537.v2.5.I11c226341f8e86d376a53d5ec11cb82f6fd2c38c@changeid>
Date: Fri, 30 Jul 2021 14:26:24 -0700
From: Douglas Anderson <dianders@...omium.org>
To: Thierry Reding <thierry.reding@...il.com>,
Rob Herring <robh+dt@...nel.org>
Cc: Sam Ravnborg <sam@...nborg.org>,
Thomas Zimmermann <tzimmermann@...e.de>,
Daniel Vetter <daniel@...ll.ch>,
dri-devel@...ts.freedesktop.org, linux-arm-msm@...r.kernel.org,
Maarten Lankhorst <maarten.lankhorst@...ux.intel.com>,
devicetree@...r.kernel.org, David Airlie <airlied@...ux.ie>,
Bjorn Andersson <bjorn.andersson@...aro.org>,
Maxime Ripard <mripard@...nel.org>,
Steev Klimaszewski <steev@...i.org>,
Linus W <linus.walleij@...aro.org>,
Douglas Anderson <dianders@...omium.org>,
linux-kernel@...r.kernel.org
Subject: [PATCH v2 5/6] drm/panel-simple: Split the delay structure out of the panel description
In the case where we can read an EDID for a panel the only part of the
panel description that can't be found directly from the EDID is the
description of the delays. Let's break the delay structure out so that
we can specify just the delays for panels that are detected by EDID.
This is simple code motion. No functional change is intended.
Signed-off-by: Douglas Anderson <dianders@...omium.org>
---
Changes in v2:
- Rebased atop revert of delays between GPIO & regulator
drivers/gpu/drm/panel/panel-simple.c | 159 ++++++++++++++-------------
1 file changed, 82 insertions(+), 77 deletions(-)
diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
index b06bf30c65d0..7d80bb20e6e0 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -41,6 +41,87 @@
#include <drm/drm_mipi_dsi.h>
#include <drm/drm_panel.h>
+/**
+ * struct panel_delay - Describes delays for a simple panel.
+ */
+struct panel_delay {
+ /**
+ * @prepare: Time for the panel to become ready.
+ *
+ * The time (in milliseconds) that it takes for the panel to
+ * become ready and start receiving video data
+ */
+ unsigned int prepare;
+
+ /**
+ * @hpd_absent_delay: Time to wait if HPD isn't hooked up.
+ *
+ * Add this to the prepare delay if we know Hot Plug Detect
+ * isn't used.
+ */
+ unsigned int hpd_absent_delay;
+
+ /**
+ * @prepare_to_enable: Time between prepare and enable.
+ *
+ * The minimum time, in milliseconds, that needs to have passed
+ * between when prepare finished and enable may begin. If at
+ * enable time less time has passed since prepare finished,
+ * the driver waits for the remaining time.
+ *
+ * If a fixed enable delay is also specified, we'll start
+ * counting before delaying for the fixed delay.
+ *
+ * If a fixed prepare delay is also specified, we won't start
+ * counting until after the fixed delay. We can't overlap this
+ * fixed delay with the min time because the fixed delay
+ * doesn't happen at the end of the function if a HPD GPIO was
+ * specified.
+ *
+ * In other words:
+ * prepare()
+ * ...
+ * // do fixed prepare delay
+ * // wait for HPD GPIO if applicable
+ * // start counting for prepare_to_enable
+ *
+ * enable()
+ * // do fixed enable delay
+ * // enforce prepare_to_enable min time
+ */
+ unsigned int prepare_to_enable;
+
+ /**
+ * @enable: Time for the panel to display a valid frame.
+ *
+ * The time (in milliseconds) that it takes for the panel to
+ * display the first valid frame after starting to receive
+ * video data.
+ */
+ unsigned int enable;
+
+ /**
+ * @disable: Time for the panel to turn the display off.
+ *
+ * The time (in milliseconds) that it takes for the panel to
+ * turn the display off (no content is visible).
+ */
+ unsigned int disable;
+
+ /**
+ * @unprepare: Time to power down completely.
+ *
+ * The time (in milliseconds) that it takes for the panel
+ * to power itself down completely.
+ *
+ * This time is used to prevent a future "prepare" from
+ * starting until at least this many milliseconds has passed.
+ * If at prepare time less time has passed since unprepare
+ * finished, the driver waits for the remaining time.
+ */
+ unsigned int unprepare;
+};
+
/**
* struct panel_desc - Describes a simple panel.
*/
@@ -85,83 +166,7 @@ struct panel_desc {
} size;
/** @delay: Structure containing various delay values for this panel. */
- struct {
- /**
- * @delay.prepare: Time for the panel to become ready.
- *
- * The time (in milliseconds) that it takes for the panel to
- * become ready and start receiving video data
- */
- unsigned int prepare;
-
- /**
- * @delay.hpd_absent_delay: Time to wait if HPD isn't hooked up.
- *
- * Add this to the prepare delay if we know Hot Plug Detect
- * isn't used.
- */
- unsigned int hpd_absent_delay;
-
- /**
- * @delay.prepare_to_enable: Time between prepare and enable.
- *
- * The minimum time, in milliseconds, that needs to have passed
- * between when prepare finished and enable may begin. If at
- * enable time less time has passed since prepare finished,
- * the driver waits for the remaining time.
- *
- * If a fixed enable delay is also specified, we'll start
- * counting before delaying for the fixed delay.
- *
- * If a fixed prepare delay is also specified, we won't start
- * counting until after the fixed delay. We can't overlap this
- * fixed delay with the min time because the fixed delay
- * doesn't happen at the end of the function if a HPD GPIO was
- * specified.
- *
- * In other words:
- * prepare()
- * ...
- * // do fixed prepare delay
- * // wait for HPD GPIO if applicable
- * // start counting for prepare_to_enable
- *
- * enable()
- * // do fixed enable delay
- * // enforce prepare_to_enable min time
- */
- unsigned int prepare_to_enable;
-
- /**
- * @delay.enable: Time for the panel to display a valid frame.
- *
- * The time (in milliseconds) that it takes for the panel to
- * display the first valid frame after starting to receive
- * video data.
- */
- unsigned int enable;
-
- /**
- * @delay.disable: Time for the panel to turn the display off.
- *
- * The time (in milliseconds) that it takes for the panel to
- * turn the display off (no content is visible).
- */
- unsigned int disable;
-
- /**
- * @delay.unprepare: Time to power down completely.
- *
- * The time (in milliseconds) that it takes for the panel
- * to power itself down completely.
- *
- * This time is used to prevent a future "prepare" from
- * starting until at least this many milliseconds has passed.
- * If at prepare time less time has passed since unprepare
- * finished, the driver waits for the remaining time.
- */
- unsigned int unprepare;
- } delay;
+ struct panel_delay delay;
/** @bus_format: See MEDIA_BUS_FMT_... defines. */
u32 bus_format;
--
2.32.0.554.ge1b32706d8-goog
Powered by blists - more mailing lists