diff mbox series

[RFC,PATCHv2,1/9] drm: Add support for extracting sync signal drive edge from videomode

Message ID 20180618132242.8673-2-tomi.valkeinen@ti.com
State New
Headers show
Series [RFC,PATCHv2,1/9] drm: Add support for extracting sync signal drive edge from videomode | expand

Commit Message

Tomi Valkeinen June 18, 2018, 1:22 p.m. UTC
From: Peter Ujfalusi <peter.ujfalusi@ti.com>


The sync in some panels needs to be driven by different edge of the pixel
clock compared to data. This is reflected by the
DISPLAY_FLAGS_SYNC_(POS|NEG)EDGE in videmode flags.
Add similar similar definitions for bus_flags and convert the sync drive
edge via drm_bus_flags_from_videomode().

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>

Signed-off-by: Jyri Sarha <jsarha@ti.com>

---
 drivers/gpu/drm/drm_modes.c | 15 +++++++++++----
 include/drm/drm_connector.h |  4 ++++
 2 files changed, 15 insertions(+), 4 deletions(-)

-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Thierry Reding July 10, 2018, 1:55 p.m. UTC | #1
On Mon, Jun 18, 2018 at 04:22:34PM +0300, Tomi Valkeinen wrote:
> From: Peter Ujfalusi <peter.ujfalusi@ti.com>

> 

> The sync in some panels needs to be driven by different edge of the pixel

> clock compared to data. This is reflected by the

> DISPLAY_FLAGS_SYNC_(POS|NEG)EDGE in videmode flags.

> Add similar similar definitions for bus_flags and convert the sync drive

> edge via drm_bus_flags_from_videomode().

> 

> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>

> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>

> Signed-off-by: Jyri Sarha <jsarha@ti.com>

> ---

>  drivers/gpu/drm/drm_modes.c | 15 +++++++++++----

>  include/drm/drm_connector.h |  4 ++++

>  2 files changed, 15 insertions(+), 4 deletions(-)


Also applied this as a dependency for patch 7/9. How do you want to deal
with the remaining patches?

Thierry
Laurent Pinchart July 24, 2018, 2 p.m. UTC | #2
Hi Tomi,

Thank you for the patch.


On Monday, 18 June 2018 16:22:34 EEST Tomi Valkeinen wrote:
> From: Peter Ujfalusi <peter.ujfalusi@ti.com>

> 

> The sync in some panels needs to be driven by different edge of the pixel

> clock compared to data. This is reflected by the

> DISPLAY_FLAGS_SYNC_(POS|NEG)EDGE in videmode flags.

> Add similar similar definitions for bus_flags and convert the sync drive

> edge via drm_bus_flags_from_videomode().

> 

> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>

> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>

> Signed-off-by: Jyri Sarha <jsarha@ti.com>


Given "[PATCH 08/23] drm: Add display info bus flags to specify sync signals 
clock edges" (https://patchwork.kernel.org/patch/10454713/),

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>


> ---

>  drivers/gpu/drm/drm_modes.c | 15 +++++++++++----

>  include/drm/drm_connector.h |  4 ++++

>  2 files changed, 15 insertions(+), 4 deletions(-)

> 

> diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c

> index e82b61e08f8c..1661bfc55687 100644

> --- a/drivers/gpu/drm/drm_modes.c

> +++ b/drivers/gpu/drm/drm_modes.c

> @@ -659,10 +659,12 @@ EXPORT_SYMBOL_GPL(drm_display_mode_to_videomode);

>   * drm_bus_flags_from_videomode - extract information about pixelclk and

>   * DE polarity from videomode and store it in a separate variable

>   * @vm: videomode structure to use

> - * @bus_flags: information about pixelclk and DE polarity will be stored

> here + * @bus_flags: information about pixelclk, sync and DE polarity will

> be stored + * here

>   *

> - * Sets DRM_BUS_FLAG_DE_(LOW|HIGH) and DRM_BUS_FLAG_PIXDATA_(POS|NEG)EDGE

> - * in @bus_flags according to DISPLAY_FLAGS found in @vm

> + * Sets DRM_BUS_FLAG_DE_(LOW|HIGH),  DRM_BUS_FLAG_PIXDATA_(POS|NEG)EDGE and

> + * DISPLAY_FLAGS_SYNC_(POS|NEG)EDGE in @bus_flags according to

> DISPLAY_FLAGS + * found in @vm

>   */

>  void drm_bus_flags_from_videomode(const struct videomode *vm, u32

> *bus_flags) {

> @@ -672,6 +674,11 @@ void drm_bus_flags_from_videomode(const struct

> videomode *vm, u32 *bus_flags) if (vm->flags &

> DISPLAY_FLAGS_PIXDATA_NEGEDGE)

>  		*bus_flags |= DRM_BUS_FLAG_PIXDATA_NEGEDGE;

> 

> +	if (vm->flags & DISPLAY_FLAGS_SYNC_POSEDGE)

> +		*bus_flags |= DRM_BUS_FLAG_SYNC_POSEDGE;

> +	if (vm->flags & DISPLAY_FLAGS_SYNC_NEGEDGE)

> +		*bus_flags |= DRM_BUS_FLAG_SYNC_NEGEDGE;

> +

>  	if (vm->flags & DISPLAY_FLAGS_DE_LOW)

>  		*bus_flags |= DRM_BUS_FLAG_DE_LOW;

>  	if (vm->flags & DISPLAY_FLAGS_DE_HIGH)

> @@ -684,7 +691,7 @@ EXPORT_SYMBOL_GPL(drm_bus_flags_from_videomode);

>   * of_get_drm_display_mode - get a drm_display_mode from devicetree

>   * @np: device_node with the timing specification

>   * @dmode: will be set to the return value

> - * @bus_flags: information about pixelclk and DE polarity

> + * @bus_flags: information about pixelclk, sync and DE polarity

>   * @index: index into the list of display timings in devicetree

>   *

>   * This function is expensive and should only be used, if only one mode is

> to be diff --git a/include/drm/drm_connector.h

> b/include/drm/drm_connector.h index 675cc3f8cf85..8fa901637f00 100644

> --- a/include/drm/drm_connector.h

> +++ b/include/drm/drm_connector.h

> @@ -290,6 +290,10 @@ struct drm_display_info {

>  #define DRM_BUS_FLAG_DATA_MSB_TO_LSB	(1<<4)

>  /* data is transmitted LSB to MSB on the bus */

>  #define DRM_BUS_FLAG_DATA_LSB_TO_MSB	(1<<5)

> +/* drive sync on pos. edge */

> +#define DRM_BUS_FLAG_SYNC_POSEDGE	(1<<6)

> +/* drive sync on neg. edge */

> +#define DRM_BUS_FLAG_SYNC_NEGEDGE	(1<<7)

> 

>  	/**

>  	 * @bus_flags: Additional information (like pixel signal polarity) for


-- 
Regards,

Laurent Pinchart



--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox series

Patch

diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
index e82b61e08f8c..1661bfc55687 100644
--- a/drivers/gpu/drm/drm_modes.c
+++ b/drivers/gpu/drm/drm_modes.c
@@ -659,10 +659,12 @@  EXPORT_SYMBOL_GPL(drm_display_mode_to_videomode);
  * drm_bus_flags_from_videomode - extract information about pixelclk and
  * DE polarity from videomode and store it in a separate variable
  * @vm: videomode structure to use
- * @bus_flags: information about pixelclk and DE polarity will be stored here
+ * @bus_flags: information about pixelclk, sync and DE polarity will be stored
+ * here
  *
- * Sets DRM_BUS_FLAG_DE_(LOW|HIGH) and DRM_BUS_FLAG_PIXDATA_(POS|NEG)EDGE
- * in @bus_flags according to DISPLAY_FLAGS found in @vm
+ * Sets DRM_BUS_FLAG_DE_(LOW|HIGH),  DRM_BUS_FLAG_PIXDATA_(POS|NEG)EDGE and
+ * DISPLAY_FLAGS_SYNC_(POS|NEG)EDGE in @bus_flags according to DISPLAY_FLAGS
+ * found in @vm
  */
 void drm_bus_flags_from_videomode(const struct videomode *vm, u32 *bus_flags)
 {
@@ -672,6 +674,11 @@  void drm_bus_flags_from_videomode(const struct videomode *vm, u32 *bus_flags)
 	if (vm->flags & DISPLAY_FLAGS_PIXDATA_NEGEDGE)
 		*bus_flags |= DRM_BUS_FLAG_PIXDATA_NEGEDGE;
 
+	if (vm->flags & DISPLAY_FLAGS_SYNC_POSEDGE)
+		*bus_flags |= DRM_BUS_FLAG_SYNC_POSEDGE;
+	if (vm->flags & DISPLAY_FLAGS_SYNC_NEGEDGE)
+		*bus_flags |= DRM_BUS_FLAG_SYNC_NEGEDGE;
+
 	if (vm->flags & DISPLAY_FLAGS_DE_LOW)
 		*bus_flags |= DRM_BUS_FLAG_DE_LOW;
 	if (vm->flags & DISPLAY_FLAGS_DE_HIGH)
@@ -684,7 +691,7 @@  EXPORT_SYMBOL_GPL(drm_bus_flags_from_videomode);
  * of_get_drm_display_mode - get a drm_display_mode from devicetree
  * @np: device_node with the timing specification
  * @dmode: will be set to the return value
- * @bus_flags: information about pixelclk and DE polarity
+ * @bus_flags: information about pixelclk, sync and DE polarity
  * @index: index into the list of display timings in devicetree
  *
  * This function is expensive and should only be used, if only one mode is to be
diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
index 675cc3f8cf85..8fa901637f00 100644
--- a/include/drm/drm_connector.h
+++ b/include/drm/drm_connector.h
@@ -290,6 +290,10 @@  struct drm_display_info {
 #define DRM_BUS_FLAG_DATA_MSB_TO_LSB	(1<<4)
 /* data is transmitted LSB to MSB on the bus */
 #define DRM_BUS_FLAG_DATA_LSB_TO_MSB	(1<<5)
+/* drive sync on pos. edge */
+#define DRM_BUS_FLAG_SYNC_POSEDGE	(1<<6)
+/* drive sync on neg. edge */
+#define DRM_BUS_FLAG_SYNC_NEGEDGE	(1<<7)
 
 	/**
 	 * @bus_flags: Additional information (like pixel signal polarity) for