All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/7] drm/tilcdc: Address LCDC rev 2 color errata
@ 2016-08-25 12:03 Jyri Sarha
  2016-08-25 12:03 ` [PATCH v2 1/7] drm/tilcdc: Remove drm_helper_disable_unused_functions() call Jyri Sarha
                   ` (6 more replies)
  0 siblings, 7 replies; 12+ messages in thread
From: Jyri Sarha @ 2016-08-25 12:03 UTC (permalink / raw)
  To: dri-devel, devicetree, bcousson, tony
  Cc: Jyri Sarha, peter.ujfalusi, tomi.valkeinen, kbeldan, laurent.pinchart

Changes since v1:
- Change the blue-and-red-wiring property to boolean blue-and-red-crossed
  - This breaks to little backward compatibility the earlier series had, but
    makes the binding more straight forward
  - This changes requires changes to am335x-evm and am335x-evmsk dts-files
  - The old beaglebone-black dts files remain compatible, but the patch
    suggests in commenst on how to support 24-bit RGB mode with BBB

The first patch ("drm/tilcdc: Remove drm_helper_disable_unused_functions()
call") is completely independent fix.

The red and blue components are reversed between 24 and 16 bit modes
on am335x LCDC output pins. To get 24 RGB format the wires red and
blue wires has to be crossed and this in turn causes 16 colors output
to be in BGR format. With straight wiring the 16 color is RGB and 24
bit is BGR. These patches try to deal with the issue in reasonable
manner.

For more details see section 3.1.1 in AM335x Silicon Errata:
http://www.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=sprz360

Jyri Sarha (7):
  drm/tilcdc: Remove drm_helper_disable_unused_functions() call
  drm/tilcdc: Add blue-and-red-crossed devicetree property
  drm/tilcdc: Choose console BPP that supports RGB
  ARM: dts: am335x-boneblack: Add comments on how to support 24 bit RGB
    mode
  ARM: dts: am335x-evm: Add blue-and-red-crossed -property to lcdc node
  ARM: dts: am335x-evmsk: Whitespace cleanup of lcdc related nodes
  ARM: dts: am335x-evmsk: Add blue-and-red-crossed -property to lcdc
    node

 .../devicetree/bindings/display/tilcdc/tilcdc.txt  | 12 +++++++
 arch/arm/boot/dts/am335x-boneblack.dts             | 12 +++++++
 arch/arm/boot/dts/am335x-evm.dts                   |  2 ++
 arch/arm/boot/dts/am335x-evmsk.dts                 | 42 +++++++++++-----------
 drivers/gpu/drm/tilcdc/tilcdc_drv.c                | 39 ++++++++++++++------
 drivers/gpu/drm/tilcdc/tilcdc_drv.h                |  5 ++-
 drivers/gpu/drm/tilcdc/tilcdc_external.c           |  7 ++--
 drivers/gpu/drm/tilcdc/tilcdc_external.h           |  2 +-
 drivers/gpu/drm/tilcdc/tilcdc_panel.c              |  2 --
 drivers/gpu/drm/tilcdc/tilcdc_plane.c              |  9 ++---
 drivers/gpu/drm/tilcdc/tilcdc_tfp410.c             |  2 --
 11 files changed, 87 insertions(+), 47 deletions(-)

-- 
1.9.1

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

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v2 1/7] drm/tilcdc: Remove drm_helper_disable_unused_functions() call
  2016-08-25 12:03 [PATCH v2 0/7] drm/tilcdc: Address LCDC rev 2 color errata Jyri Sarha
@ 2016-08-25 12:03 ` Jyri Sarha
  2016-08-25 12:03 ` [PATCH v2 2/7] drm/tilcdc: Add blue-and-red-crossed devicetree property Jyri Sarha
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 12+ messages in thread
From: Jyri Sarha @ 2016-08-25 12:03 UTC (permalink / raw)
  To: dri-devel, devicetree, bcousson, tony
  Cc: Jyri Sarha, peter.ujfalusi, tomi.valkeinen, kbeldan, laurent.pinchart

drm_helper_disable_unused_functions() should not be called by atomic
drivers.

Signed-off-by: Jyri Sarha <jsarha@ti.com>
---
 drivers/gpu/drm/tilcdc/tilcdc_drv.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
index 3404d24..e45c268 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
@@ -361,8 +361,6 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags)
 			break;
 	}
 
-	drm_helper_disable_unused_functions(dev);
-
 	drm_mode_config_reset(dev);
 
 	priv->fbdev = drm_fbdev_cma_init(dev, bpp,
-- 
1.9.1

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

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v2 2/7] drm/tilcdc: Add blue-and-red-crossed devicetree property
  2016-08-25 12:03 [PATCH v2 0/7] drm/tilcdc: Address LCDC rev 2 color errata Jyri Sarha
  2016-08-25 12:03 ` [PATCH v2 1/7] drm/tilcdc: Remove drm_helper_disable_unused_functions() call Jyri Sarha
@ 2016-08-25 12:03 ` Jyri Sarha
  2016-08-26 12:51   ` Rob Herring
  2016-08-25 12:03 ` [PATCH v2 3/7] drm/tilcdc: Choose console BPP that supports RGB Jyri Sarha
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 12+ messages in thread
From: Jyri Sarha @ 2016-08-25 12:03 UTC (permalink / raw)
  To: dri-devel, devicetree, bcousson, tony
  Cc: Jyri Sarha, peter.ujfalusi, tomi.valkeinen, kbeldan, laurent.pinchart

Add "blue-and-red-crossed"-device tree property and update devicetree
binding document. The red and blue components are reversed between 24
and 16 bit modes on am335x LCDC output pins. To get 24 RGB format the
red and blue wires has to be crossed and this in turn causes 16 colors
output to be in BGR format. With straight wiring the 16 color is RGB
and 24 bit is BGR. The new property describes whether the red and blue
wires are crossed or not. If the wires are crossed this boolean property
should be present in the relevant devicetree node.

The am335x-evm and am335x-evm have the blue and red wires crossed for
24 bit RGB mode and after this patch their LCDC nodes should have this
property to get correct colors in the display.

For more details see section 3.1.1 in AM335x Silicon Errata:
http://www.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=sprz360

Signed-off-by: Jyri Sarha <jsarha@ti.com>
---
 .../devicetree/bindings/display/tilcdc/tilcdc.txt  | 12 +++++++++++
 drivers/gpu/drm/tilcdc/tilcdc_drv.c                | 24 ++++++++++++++++++++++
 drivers/gpu/drm/tilcdc/tilcdc_drv.h                |  4 ++++
 drivers/gpu/drm/tilcdc/tilcdc_plane.c              |  9 +++-----
 4 files changed, 43 insertions(+), 6 deletions(-)

diff --git a/Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt b/Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt
index 6efa4c5..48a660a 100644
--- a/Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt
+++ b/Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt
@@ -17,6 +17,8 @@ Optional properties:
    the lcd controller.
  - max-pixelclock: The maximum pixel clock that can be supported
    by the lcd controller in KHz.
+ - blue-and-red-crossed: Boolean property, set this of blue and red wires
+   for LCD_DATA are crossed for 24-bit RGB support (and 16-bit BGR mode). [1]
 
 Optional nodes:
 
@@ -28,6 +30,14 @@ Optional nodes:
    Documentation/devicetree/bindings/display/tilcdc/tfp410.txt for connecting
    tfp410 DVI encoder or lcd panel to lcdc
 
+[1] There is an errata about AM335x color wiring. For 16-bit color mode
+    the wires work as they should (LCD_DATA[0:4] is for Blue[3:7]),
+    but for 24 bit color modes the wiring of blue and red components is
+    crossed and LCD_DATA[0:4] is for Red[3:7] and LCD_DATA[11:15] is
+    for Blue[3-7]. For more details see section 3.1.1 in AM335x
+    Silicon Errata:
+    http://www.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=sprz360
+
 Example:
 
 	fb: fb@4830e000 {
@@ -37,6 +47,8 @@ Example:
 		interrupts = <36>;
 		ti,hwmods = "lcdc";
 
+		blue-and-red-wiring = "crossed";
+
 		port {
 			lcdc_0: endpoint@0 {
 				remote-endpoint = <&hdmi_0>;
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
index e45c268..bb65872 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
@@ -33,6 +33,16 @@
 
 static LIST_HEAD(module_list);
 
+static const u32 tilcdc_rev1_formats[] = { DRM_FORMAT_RGB565 };
+
+static const u32 tilcdc_straight_formats[] = { DRM_FORMAT_RGB565,
+					       DRM_FORMAT_BGR888,
+					       DRM_FORMAT_XBGR8888 };
+
+static const u32 tilcdc_crossed_formats[] = { DRM_FORMAT_BGR565,
+					      DRM_FORMAT_RGB888,
+					      DRM_FORMAT_XRGB8888 };
+
 void tilcdc_module_init(struct tilcdc_module *mod, const char *name,
 		const struct tilcdc_module_ops *funcs)
 {
@@ -318,6 +328,20 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags)
 
 	pm_runtime_put_sync(dev->dev);
 
+	if (priv->rev == 1) {
+		DBG("Revision 1 LCDC supports only RGB565 format");
+		priv->pixelformats = tilcdc_rev1_formats;
+		priv->num_pixelformats = ARRAY_SIZE(tilcdc_rev1_formats);
+	} else if (of_property_read_bool(node, "blue-and-red-crossed")) {
+		DBG("Configured for crossed blue and red wires");
+		priv->pixelformats = tilcdc_crossed_formats;
+		priv->num_pixelformats = ARRAY_SIZE(tilcdc_crossed_formats);
+	} else {
+		DBG("Configured for straight blue and red wires");
+		priv->pixelformats = tilcdc_straight_formats;
+		priv->num_pixelformats = ARRAY_SIZE(tilcdc_straight_formats);
+	}
+
 	ret = modeset_init(dev);
 	if (ret < 0) {
 		dev_err(dev->dev, "failed to initialize mode setting\n");
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.h b/drivers/gpu/drm/tilcdc/tilcdc_drv.h
index 13001df..0e19c14 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.h
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.h
@@ -65,6 +65,10 @@ struct tilcdc_drm_private {
 	 */
 	uint32_t max_width;
 
+	/* Supported pixel formats */
+	const uint32_t *pixelformats;
+	uint32_t num_pixelformats;
+
 	/* The context for pm susped/resume cycle is stored here */
 	struct drm_atomic_state *saved_state;
 
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_plane.c b/drivers/gpu/drm/tilcdc/tilcdc_plane.c
index 41911e3..74c65fa 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_plane.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_plane.c
@@ -24,10 +24,6 @@
 
 #include "tilcdc_drv.h"
 
-static const u32 tilcdc_formats[] = { DRM_FORMAT_RGB565,
-				      DRM_FORMAT_RGB888,
-				      DRM_FORMAT_XRGB8888 };
-
 static struct drm_plane_funcs tilcdc_plane_funcs = {
 	.update_plane	= drm_atomic_helper_update_plane,
 	.disable_plane	= drm_atomic_helper_disable_plane,
@@ -114,12 +110,13 @@ static const struct drm_plane_helper_funcs plane_helper_funcs = {
 int tilcdc_plane_init(struct drm_device *dev,
 		      struct drm_plane *plane)
 {
+	struct tilcdc_drm_private *priv = dev->dev_private;
 	int ret;
 
 	ret = drm_plane_init(dev, plane, 1,
 			     &tilcdc_plane_funcs,
-			     tilcdc_formats,
-			     ARRAY_SIZE(tilcdc_formats),
+			     priv->pixelformats,
+			     priv->num_pixelformats,
 			     true);
 	if (ret) {
 		dev_err(dev->dev, "Failed to initialize plane: %d\n", ret);
-- 
1.9.1

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

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v2 3/7] drm/tilcdc: Choose console BPP that supports RGB
  2016-08-25 12:03 [PATCH v2 0/7] drm/tilcdc: Address LCDC rev 2 color errata Jyri Sarha
  2016-08-25 12:03 ` [PATCH v2 1/7] drm/tilcdc: Remove drm_helper_disable_unused_functions() call Jyri Sarha
  2016-08-25 12:03 ` [PATCH v2 2/7] drm/tilcdc: Add blue-and-red-crossed devicetree property Jyri Sarha
@ 2016-08-25 12:03 ` Jyri Sarha
  2016-08-25 12:03 ` [PATCH v2 4/7] ARM: dts: am335x-boneblack: Add comments on how to support 24 bit RGB mode Jyri Sarha
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 12+ messages in thread
From: Jyri Sarha @ 2016-08-25 12:03 UTC (permalink / raw)
  To: dri-devel, devicetree, bcousson, tony
  Cc: Jyri Sarha, peter.ujfalusi, tomi.valkeinen, kbeldan, laurent.pinchart

Choose console BPP that supports RGB and remove the old fbdev bpp
selection code. LCDC on AM335x has red and blue wires switched between
24 bit and 16 bit colors. If 24 format is wired for RGB colors, the 16
bit format is wired for BGR. drm_fbdev_cma_init() does not currently
like anything else but RGB formats, so we must choose such bytes per
pixel value that supports RGB.

Signed-off-by: Jyri Sarha <jsarha@ti.com>
---
 drivers/gpu/drm/tilcdc/tilcdc_drv.c      | 13 ++++---------
 drivers/gpu/drm/tilcdc/tilcdc_drv.h      |  1 -
 drivers/gpu/drm/tilcdc/tilcdc_external.c |  7 +++----
 drivers/gpu/drm/tilcdc/tilcdc_external.h |  2 +-
 drivers/gpu/drm/tilcdc/tilcdc_panel.c    |  2 --
 drivers/gpu/drm/tilcdc/tilcdc_tfp410.c   |  2 --
 6 files changed, 8 insertions(+), 19 deletions(-)

diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
index bb65872..dbc00f7 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
@@ -236,7 +236,6 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags)
 	struct platform_device *pdev = dev->platformdev;
 	struct device_node *node = pdev->dev.of_node;
 	struct tilcdc_drm_private *priv;
-	struct tilcdc_module *mod;
 	struct resource *res;
 	u32 bpp = 0;
 	int ret;
@@ -332,14 +331,17 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags)
 		DBG("Revision 1 LCDC supports only RGB565 format");
 		priv->pixelformats = tilcdc_rev1_formats;
 		priv->num_pixelformats = ARRAY_SIZE(tilcdc_rev1_formats);
+		bpp = 16;
 	} else if (of_property_read_bool(node, "blue-and-red-crossed")) {
 		DBG("Configured for crossed blue and red wires");
 		priv->pixelformats = tilcdc_crossed_formats;
 		priv->num_pixelformats = ARRAY_SIZE(tilcdc_crossed_formats);
+		bpp = 32; /* Choose bpp with RGB support for fbdef */
 	} else {
 		DBG("Configured for straight blue and red wires");
 		priv->pixelformats = tilcdc_straight_formats;
 		priv->num_pixelformats = ARRAY_SIZE(tilcdc_straight_formats);
+		bpp = 16; /* Choose bpp with RGB support for fbdef */
 	}
 
 	ret = modeset_init(dev);
@@ -355,7 +357,7 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags)
 		if (ret < 0)
 			goto fail_mode_config_cleanup;
 
-		ret = tilcdc_add_external_encoders(dev, &bpp);
+		ret = tilcdc_add_external_encoders(dev);
 		if (ret < 0)
 			goto fail_component_cleanup;
 	}
@@ -378,13 +380,6 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags)
 		goto fail_vblank_cleanup;
 	}
 
-	list_for_each_entry(mod, &module_list, list) {
-		DBG("%s: preferred_bpp: %d", mod->name, mod->preferred_bpp);
-		bpp = mod->preferred_bpp;
-		if (bpp > 0)
-			break;
-	}
-
 	drm_mode_config_reset(dev);
 
 	priv->fbdev = drm_fbdev_cma_init(dev, bpp,
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.h b/drivers/gpu/drm/tilcdc/tilcdc_drv.h
index 0e19c14..a6e5e6d 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.h
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.h
@@ -116,7 +116,6 @@ struct tilcdc_module {
 	const char *name;
 	struct list_head list;
 	const struct tilcdc_module_ops *funcs;
-	unsigned int preferred_bpp;
 };
 
 void tilcdc_module_init(struct tilcdc_module *mod, const char *name,
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_external.c b/drivers/gpu/drm/tilcdc/tilcdc_external.c
index 849b23e..68e8950 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_external.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_external.c
@@ -52,7 +52,7 @@ static int tilcdc_external_mode_valid(struct drm_connector *connector,
 	return MODE_OK;
 }
 
-static int tilcdc_add_external_encoder(struct drm_device *dev, int *bpp,
+static int tilcdc_add_external_encoder(struct drm_device *dev,
 				       struct drm_connector *connector)
 {
 	struct tilcdc_drm_private *priv = dev->dev_private;
@@ -64,7 +64,6 @@ static int tilcdc_add_external_encoder(struct drm_device *dev, int *bpp,
 	/* Only tda998x is supported at the moment. */
 	tilcdc_crtc_set_simulate_vesa_sync(priv->crtc, true);
 	tilcdc_crtc_set_panel_info(priv->crtc, &panel_info_tda998x);
-	*bpp = panel_info_tda998x.bpp;
 
 	connector_funcs = devm_kzalloc(dev->dev, sizeof(*connector_funcs),
 				       GFP_KERNEL);
@@ -94,7 +93,7 @@ static int tilcdc_add_external_encoder(struct drm_device *dev, int *bpp,
 	return 0;
 }
 
-int tilcdc_add_external_encoders(struct drm_device *dev, int *bpp)
+int tilcdc_add_external_encoders(struct drm_device *dev)
 {
 	struct tilcdc_drm_private *priv = dev->dev_private;
 	struct drm_connector *connector;
@@ -108,7 +107,7 @@ int tilcdc_add_external_encoders(struct drm_device *dev, int *bpp)
 			if (connector == priv->connectors[i])
 				found = true;
 		if (!found) {
-			ret = tilcdc_add_external_encoder(dev, bpp, connector);
+			ret = tilcdc_add_external_encoder(dev, connector);
 			if (ret)
 				return ret;
 		}
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_external.h b/drivers/gpu/drm/tilcdc/tilcdc_external.h
index 6aabe27..c700e0c 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_external.h
+++ b/drivers/gpu/drm/tilcdc/tilcdc_external.h
@@ -18,7 +18,7 @@
 #ifndef __TILCDC_EXTERNAL_H__
 #define __TILCDC_EXTERNAL_H__
 
-int tilcdc_add_external_encoders(struct drm_device *dev, int *bpp);
+int tilcdc_add_external_encoders(struct drm_device *dev);
 void tilcdc_remove_external_encoders(struct drm_device *dev);
 int tilcdc_get_external_components(struct device *dev,
 				   struct component_match **match);
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_panel.c b/drivers/gpu/drm/tilcdc/tilcdc_panel.c
index 4ac1d25..7b36509 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_panel.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_panel.c
@@ -397,8 +397,6 @@ static int panel_probe(struct platform_device *pdev)
 		goto fail_timings;
 	}
 
-	mod->preferred_bpp = panel_mod->info->bpp;
-
 	return 0;
 
 fail_timings:
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c b/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c
index 741c7b5..c6a70da 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c
@@ -327,8 +327,6 @@ static int tfp410_probe(struct platform_device *pdev)
 		goto fail;
 	}
 
-	mod->preferred_bpp = dvi_info.bpp;
-
 	i2c_node = of_find_node_by_phandle(i2c_phandle);
 	if (!i2c_node) {
 		dev_err(&pdev->dev, "could not get i2c bus node\n");
-- 
1.9.1

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

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v2 4/7] ARM: dts: am335x-boneblack: Add comments on how to support 24 bit RGB mode
  2016-08-25 12:03 [PATCH v2 0/7] drm/tilcdc: Address LCDC rev 2 color errata Jyri Sarha
                   ` (2 preceding siblings ...)
  2016-08-25 12:03 ` [PATCH v2 3/7] drm/tilcdc: Choose console BPP that supports RGB Jyri Sarha
@ 2016-08-25 12:03 ` Jyri Sarha
  2016-08-25 12:03 ` [PATCH v2 5/7] ARM: dts: am335x-evm: Add blue-and-red-crossed -property to lcdc node Jyri Sarha
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 12+ messages in thread
From: Jyri Sarha @ 2016-08-25 12:03 UTC (permalink / raw)
  To: dri-devel, devicetree, bcousson, tony
  Cc: Jyri Sarha, peter.ujfalusi, tomi.valkeinen, kbeldan, laurent.pinchart

Add comments on how to support 24 bit RGB mode. In other words how to
convert BGR from LCDC to RGB in tda19988 with video-ports property and
how to tell LCDC that blue and red wires are crossed, with
blue-and-red-crossed LCDC boolean property. This changes supported
color formats from 16 bit RGB and 24 bit BGR to 16 bit BGR and 24 bit
RGB, if the suggested changes are uncommented.

Signed-off-by: Jyri Sarha <jsarha@ti.com>
---
 arch/arm/boot/dts/am335x-boneblack.dts | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/arch/arm/boot/dts/am335x-boneblack.dts b/arch/arm/boot/dts/am335x-boneblack.dts
index 528559b..6d5159d 100644
--- a/arch/arm/boot/dts/am335x-boneblack.dts
+++ b/arch/arm/boot/dts/am335x-boneblack.dts
@@ -90,6 +90,15 @@
 
 &lcdc {
 	status = "okay";
+
+	/* If you want to get 24 bit RGB and 16 BGR mode instead of
+	 * current 16 bit RGB and 24 BGR modes, uncomment the boolean
+	 * property below and the video-ports -property in tda19988 
+	 * node.
+	 *
+	 * blue-and-red-crossed;
+	 */
+
 	port {
 		lcdc_0: endpoint@0 {
 			remote-endpoint = <&hdmi_0>;
@@ -106,6 +115,9 @@
 		pinctrl-0 = <&nxp_hdmi_bonelt_pins>;
 		pinctrl-1 = <&nxp_hdmi_bonelt_off_pins>;
 
+		/* Convert 24bit BGR to RGB, e.g. cross red and blue wiring */
+		/* video-ports = <0x234501>; */
+
 		#sound-dai-cells = <0>;
 		audio-ports = <	TDA998x_I2S	0x03>;
 
-- 
1.9.1

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

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v2 5/7] ARM: dts: am335x-evm: Add blue-and-red-crossed -property to lcdc node
  2016-08-25 12:03 [PATCH v2 0/7] drm/tilcdc: Address LCDC rev 2 color errata Jyri Sarha
                   ` (3 preceding siblings ...)
  2016-08-25 12:03 ` [PATCH v2 4/7] ARM: dts: am335x-boneblack: Add comments on how to support 24 bit RGB mode Jyri Sarha
@ 2016-08-25 12:03 ` Jyri Sarha
  2016-08-25 12:03 ` [PATCH v2 6/7] ARM: dts: am335x-evmsk: Whitespace cleanup of lcdc related nodes Jyri Sarha
  2016-08-25 12:03 ` [PATCH v2 7/7] ARM: dts: am335x-evmsk: Add blue-and-red-crossed -property to lcdc node Jyri Sarha
  6 siblings, 0 replies; 12+ messages in thread
From: Jyri Sarha @ 2016-08-25 12:03 UTC (permalink / raw)
  To: dri-devel, devicetree, bcousson, tony
  Cc: Jyri Sarha, peter.ujfalusi, tomi.valkeinen, kbeldan, laurent.pinchart

Add blue-and-red-crossed -property to lcdc node. The am335x-evm has blue
and red wires crossed to get 24-bit RGB (and 16-bit BGR) support. See
details in Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt.

Signed-off-by: Jyri Sarha <jsarha@ti.com>
---
 arch/arm/boot/dts/am335x-evm.dts | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/arm/boot/dts/am335x-evm.dts b/arch/arm/boot/dts/am335x-evm.dts
index 5d28712..246453b 100644
--- a/arch/arm/boot/dts/am335x-evm.dts
+++ b/arch/arm/boot/dts/am335x-evm.dts
@@ -497,6 +497,8 @@
 
 &lcdc {
 	status = "okay";
+
+	blue-and-red-crossed;
 };
 
 &elm {
-- 
1.9.1

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

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v2 6/7] ARM: dts: am335x-evmsk: Whitespace cleanup of lcdc related nodes
  2016-08-25 12:03 [PATCH v2 0/7] drm/tilcdc: Address LCDC rev 2 color errata Jyri Sarha
                   ` (4 preceding siblings ...)
  2016-08-25 12:03 ` [PATCH v2 5/7] ARM: dts: am335x-evm: Add blue-and-red-crossed -property to lcdc node Jyri Sarha
@ 2016-08-25 12:03 ` Jyri Sarha
  2016-08-25 12:03 ` [PATCH v2 7/7] ARM: dts: am335x-evmsk: Add blue-and-red-crossed -property to lcdc node Jyri Sarha
  6 siblings, 0 replies; 12+ messages in thread
From: Jyri Sarha @ 2016-08-25 12:03 UTC (permalink / raw)
  To: dri-devel, devicetree, bcousson, tony
  Cc: Jyri Sarha, peter.ujfalusi, tomi.valkeinen, kbeldan, laurent.pinchart

Whitespace cleanup of lcdc related nodes. Do all indentation and
alignment with tabs instead of spaces.

Signed-off-by: Jyri Sarha <jsarha@ti.com>
---
 arch/arm/boot/dts/am335x-evmsk.dts | 40 +++++++++++++++++++-------------------
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/arch/arm/boot/dts/am335x-evmsk.dts b/arch/arm/boot/dts/am335x-evmsk.dts
index 09308d6..23b94e7 100644
--- a/arch/arm/boot/dts/am335x-evmsk.dts
+++ b/arch/arm/boot/dts/am335x-evmsk.dts
@@ -170,29 +170,29 @@
 		pinctrl-1 = <&lcd_pins_sleep>;
 		status = "okay";
 		panel-info {
-			ac-bias           = <255>;
-			ac-bias-intrpt    = <0>;
-			dma-burst-sz      = <16>;
-			bpp               = <32>;
-			fdd               = <0x80>;
-			sync-edge         = <0>;
-			sync-ctrl         = <1>;
-			raster-order      = <0>;
-			fifo-th           = <0>;
+			ac-bias		= <255>;
+			ac-bias-intrpt	= <0>;
+			dma-burst-sz	= <16>;
+			bpp		= <32>;
+			fdd		= <0x80>;
+			sync-edge	= <0>;
+			sync-ctrl	= <1>;
+			raster-order	= <0>;
+			fifo-th		= <0>;
 		};
 		display-timings {
 			480x272 {
-				hactive         = <480>;
-				vactive         = <272>;
-				hback-porch     = <43>;
-				hfront-porch    = <8>;
-				hsync-len       = <4>;
-				vback-porch     = <12>;
-				vfront-porch    = <4>;
-				vsync-len       = <10>;
+				hactive		= <480>;
+				vactive		= <272>;
+				hback-porch	= <43>;
+				hfront-porch	= <8>;
+				hsync-len	= <4>;
+				vback-porch	= <12>;
+				vfront-porch	= <4>;
+				vsync-len	= <10>;
 				clock-frequency = <9000000>;
-				hsync-active    = <0>;
-				vsync-active    = <0>;
+				hsync-active	= <0>;
+				vsync-active	= <0>;
 			};
 		};
 	};
@@ -711,5 +711,5 @@
 };
 
 &lcdc {
-      status = "okay";
+	status = "okay";
 };
-- 
1.9.1

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

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v2 7/7] ARM: dts: am335x-evmsk: Add blue-and-red-crossed -property to lcdc node
  2016-08-25 12:03 [PATCH v2 0/7] drm/tilcdc: Address LCDC rev 2 color errata Jyri Sarha
                   ` (5 preceding siblings ...)
  2016-08-25 12:03 ` [PATCH v2 6/7] ARM: dts: am335x-evmsk: Whitespace cleanup of lcdc related nodes Jyri Sarha
@ 2016-08-25 12:03 ` Jyri Sarha
  6 siblings, 0 replies; 12+ messages in thread
From: Jyri Sarha @ 2016-08-25 12:03 UTC (permalink / raw)
  To: dri-devel, devicetree, bcousson, tony
  Cc: Jyri Sarha, peter.ujfalusi, tomi.valkeinen, kbeldan, laurent.pinchart

Add blue-and-red-crossed -property to lcdc node. The am335x-evmsk has blue
and red wires crossed to get 24-bit RGB (and 16-bit BGR) support. See
details in Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt.

Signed-off-by: Jyri Sarha <jsarha@ti.com>
---
 arch/arm/boot/dts/am335x-evmsk.dts | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/arm/boot/dts/am335x-evmsk.dts b/arch/arm/boot/dts/am335x-evmsk.dts
index 23b94e7..006d8e8 100644
--- a/arch/arm/boot/dts/am335x-evmsk.dts
+++ b/arch/arm/boot/dts/am335x-evmsk.dts
@@ -712,4 +712,6 @@
 
 &lcdc {
 	status = "okay";
+
+	blue-and-red-crossed;
 };
-- 
1.9.1

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

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 2/7] drm/tilcdc: Add blue-and-red-crossed devicetree property
  2016-08-25 12:03 ` [PATCH v2 2/7] drm/tilcdc: Add blue-and-red-crossed devicetree property Jyri Sarha
@ 2016-08-26 12:51   ` Rob Herring
  2016-08-26 17:44     ` Jyri Sarha
  0 siblings, 1 reply; 12+ messages in thread
From: Rob Herring @ 2016-08-26 12:51 UTC (permalink / raw)
  To: Jyri Sarha
  Cc: devicetree, Tony Lindgren, dri-devel, Peter Ujfalusi,
	Tomi Valkeinen, Karl Beldan, Laurent Pinchart, Benoit Cousson

On Thu, Aug 25, 2016 at 7:03 AM, Jyri Sarha <jsarha@ti.com> wrote:
> Add "blue-and-red-crossed"-device tree property and update devicetree
> binding document. The red and blue components are reversed between 24
> and 16 bit modes on am335x LCDC output pins. To get 24 RGB format the
> red and blue wires has to be crossed and this in turn causes 16 colors
> output to be in BGR format. With straight wiring the 16 color is RGB
> and 24 bit is BGR. The new property describes whether the red and blue
> wires are crossed or not. If the wires are crossed this boolean property
> should be present in the relevant devicetree node.
>
> The am335x-evm and am335x-evm have the blue and red wires crossed for
> 24 bit RGB mode and after this patch their LCDC nodes should have this
> property to get correct colors in the display.
>
> For more details see section 3.1.1 in AM335x Silicon Errata:
> http://www.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=sprz360
>
> Signed-off-by: Jyri Sarha <jsarha@ti.com>
> ---
>  .../devicetree/bindings/display/tilcdc/tilcdc.txt  | 12 +++++++++++
>  drivers/gpu/drm/tilcdc/tilcdc_drv.c                | 24 ++++++++++++++++++++++
>  drivers/gpu/drm/tilcdc/tilcdc_drv.h                |  4 ++++
>  drivers/gpu/drm/tilcdc/tilcdc_plane.c              |  9 +++-----
>  4 files changed, 43 insertions(+), 6 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt b/Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt
> index 6efa4c5..48a660a 100644
> --- a/Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt
> +++ b/Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt
> @@ -17,6 +17,8 @@ Optional properties:
>     the lcd controller.
>   - max-pixelclock: The maximum pixel clock that can be supported
>     by the lcd controller in KHz.
> + - blue-and-red-crossed: Boolean property, set this of blue and red wires
> +   for LCD_DATA are crossed for 24-bit RGB support (and 16-bit BGR mode). [1]

Doesn't this need to be blue-and-red-straight for compatibility?

>
>  Optional nodes:
>
> @@ -28,6 +30,14 @@ Optional nodes:
>     Documentation/devicetree/bindings/display/tilcdc/tfp410.txt for connecting
>     tfp410 DVI encoder or lcd panel to lcdc
>
> +[1] There is an errata about AM335x color wiring. For 16-bit color mode
> +    the wires work as they should (LCD_DATA[0:4] is for Blue[3:7]),
> +    but for 24 bit color modes the wiring of blue and red components is
> +    crossed and LCD_DATA[0:4] is for Red[3:7] and LCD_DATA[11:15] is
> +    for Blue[3-7]. For more details see section 3.1.1 in AM335x
> +    Silicon Errata:
> +    http://www.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=sprz360
> +
>  Example:
>
>         fb: fb@4830e000 {
> @@ -37,6 +47,8 @@ Example:
>                 interrupts = <36>;
>                 ti,hwmods = "lcdc";
>
> +               blue-and-red-wiring = "crossed";
> +

This needs to be updated.

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

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 2/7] drm/tilcdc: Add blue-and-red-crossed devicetree property
  2016-08-26 12:51   ` Rob Herring
@ 2016-08-26 17:44     ` Jyri Sarha
       [not found]       ` <f4f9d53e-bc9a-6b88-7fe4-3f3015abfdb5-l0cyMroinI0@public.gmane.org>
  0 siblings, 1 reply; 12+ messages in thread
From: Jyri Sarha @ 2016-08-26 17:44 UTC (permalink / raw)
  To: Rob Herring
  Cc: devicetree, Tony Lindgren, dri-devel, Peter Ujfalusi,
	Tomi Valkeinen, Karl Beldan, Laurent Pinchart, Benoit Cousson

On 08/26/16 15:51, Rob Herring wrote:
>> --- a/Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt
>> > +++ b/Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt
>> > @@ -17,6 +17,8 @@ Optional properties:
>> >     the lcd controller.
>> >   - max-pixelclock: The maximum pixel clock that can be supported
>> >     by the lcd controller in KHz.
>> > + - blue-and-red-crossed: Boolean property, set this of blue and red wires
>> > +   for LCD_DATA are crossed for 24-bit RGB support (and 16-bit BGR mode). [1]
> Doesn't this need to be blue-and-red-straight for compatibility?
> 

There is no way to be backward compatible with all am3 based devices.
This choice keeps the compatibility with Beaglebone-Black as far as it
can be kept and it is more logical choice for the binding. After all BBB
is way more common device than am335x-evm and am335x-evmsk are together.

I don't think there is any problems with the boards that have dts file
in the mainline source tree, like these three boards, as if the user
uses the latest mainline kernel, he probably uses the latest dtb file too.

The problem is the custom boards with custom dts files. I can not think
of any way to deal with this problem while still being 100% compatible
with all the dtb out there. This default setting is compatible with
standard colour wiring that does not take the colour errata into account.

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

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 2/7] drm/tilcdc: Add blue-and-red-crossed devicetree property
       [not found]       ` <f4f9d53e-bc9a-6b88-7fe4-3f3015abfdb5-l0cyMroinI0@public.gmane.org>
@ 2016-08-30 12:46         ` Tomi Valkeinen
  2016-08-30 12:54           ` Jyri Sarha
  0 siblings, 1 reply; 12+ messages in thread
From: Tomi Valkeinen @ 2016-08-30 12:46 UTC (permalink / raw)
  To: Jyri Sarha, Rob Herring
  Cc: dri-devel, devicetree-u79uwXL29TY76Z2rM5mHXA, Benoit Cousson,
	Tony Lindgren, David Airlie, Daniel Vetter, Laurent Pinchart,
	Peter Ujfalusi, Karl Beldan


[-- Attachment #1.1: Type: text/plain, Size: 1056 bytes --]



On 26/08/16 20:44, Jyri Sarha wrote:
> On 08/26/16 15:51, Rob Herring wrote:
>>> --- a/Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt
>>>> +++ b/Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt
>>>> @@ -17,6 +17,8 @@ Optional properties:
>>>>     the lcd controller.
>>>>   - max-pixelclock: The maximum pixel clock that can be supported
>>>>     by the lcd controller in KHz.
>>>> + - blue-and-red-crossed: Boolean property, set this of blue and red wires
>>>> +   for LCD_DATA are crossed for 24-bit RGB support (and 16-bit BGR mode). [1]
>> Doesn't this need to be blue-and-red-straight for compatibility?
>>
> 
> There is no way to be backward compatible with all am3 based devices.

Hmm, I guess it would be possible to have three options:

- No property set: driver advertises RG16 and RG24. This is wrong, but
that's what the current status is, right?
- Property set to "default" or "straight" or whatever: driver says RG16
and BG24
- Property set to "crossed": driver says BG16 and RG24

 Tomi


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 2/7] drm/tilcdc: Add blue-and-red-crossed devicetree property
  2016-08-30 12:46         ` Tomi Valkeinen
@ 2016-08-30 12:54           ` Jyri Sarha
  0 siblings, 0 replies; 12+ messages in thread
From: Jyri Sarha @ 2016-08-30 12:54 UTC (permalink / raw)
  To: Tomi Valkeinen, Rob Herring
  Cc: devicetree, Tony Lindgren, dri-devel, Peter Ujfalusi,
	Karl Beldan, Laurent Pinchart, Benoit Cousson

On 08/30/16 15:46, Tomi Valkeinen wrote:
> 
> 
> On 26/08/16 20:44, Jyri Sarha wrote:
>> On 08/26/16 15:51, Rob Herring wrote:
>>>> --- a/Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt
>>>>> +++ b/Documentation/devicetree/bindings/display/tilcdc/tilcdc.txt
>>>>> @@ -17,6 +17,8 @@ Optional properties:
>>>>>     the lcd controller.
>>>>>   - max-pixelclock: The maximum pixel clock that can be supported
>>>>>     by the lcd controller in KHz.
>>>>> + - blue-and-red-crossed: Boolean property, set this of blue and red wires
>>>>> +   for LCD_DATA are crossed for 24-bit RGB support (and 16-bit BGR mode). [1]
>>> Doesn't this need to be blue-and-red-straight for compatibility?
>>>
>>
>> There is no way to be backward compatible with all am3 based devices.
> 
> Hmm, I guess it would be possible to have three options:
> 
> - No property set: driver advertises RG16 and RG24. This is wrong, but
> that's what the current status is, right?
> - Property set to "default" or "straight" or whatever: driver says RG16
> and BG24
> - Property set to "crossed": driver says BG16 and RG24
> 

Yes, that would be backward compatible and probably the best approach.
As this way all applications would still run, even if the colours are
wrong (as they have always been).

I'll do that if no one suggests otherwise.

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

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2016-08-30 12:54 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-25 12:03 [PATCH v2 0/7] drm/tilcdc: Address LCDC rev 2 color errata Jyri Sarha
2016-08-25 12:03 ` [PATCH v2 1/7] drm/tilcdc: Remove drm_helper_disable_unused_functions() call Jyri Sarha
2016-08-25 12:03 ` [PATCH v2 2/7] drm/tilcdc: Add blue-and-red-crossed devicetree property Jyri Sarha
2016-08-26 12:51   ` Rob Herring
2016-08-26 17:44     ` Jyri Sarha
     [not found]       ` <f4f9d53e-bc9a-6b88-7fe4-3f3015abfdb5-l0cyMroinI0@public.gmane.org>
2016-08-30 12:46         ` Tomi Valkeinen
2016-08-30 12:54           ` Jyri Sarha
2016-08-25 12:03 ` [PATCH v2 3/7] drm/tilcdc: Choose console BPP that supports RGB Jyri Sarha
2016-08-25 12:03 ` [PATCH v2 4/7] ARM: dts: am335x-boneblack: Add comments on how to support 24 bit RGB mode Jyri Sarha
2016-08-25 12:03 ` [PATCH v2 5/7] ARM: dts: am335x-evm: Add blue-and-red-crossed -property to lcdc node Jyri Sarha
2016-08-25 12:03 ` [PATCH v2 6/7] ARM: dts: am335x-evmsk: Whitespace cleanup of lcdc related nodes Jyri Sarha
2016-08-25 12:03 ` [PATCH v2 7/7] ARM: dts: am335x-evmsk: Add blue-and-red-crossed -property to lcdc node Jyri Sarha

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.