LKML Archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/3] Support non-default LVDS data mapping for simple panel
@ 2023-05-23  8:19 Johannes Zink
  2023-05-23  8:19 ` [PATCH v2 1/3] dt-bindings: display: move LVDS data-mapping definition to separate file Johannes Zink
                   ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Johannes Zink @ 2023-05-23  8:19 UTC (permalink / raw
  To: David Airlie, Daniel Vetter, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Laurent Pinchart, Thierry Reding, Neil Armstrong,
	Sam Ravnborg
  Cc: kernel test robot, Dan Carpenter, patchwork-jzi, kernel,
	Laurent Pinchart, dri-devel, devicetree, linux-kernel,
	Johannes Zink

Some LVDS panels, such as the innolux,g101ice-l01 support multiple LVDS
data mapping modes, which can be configured by strapping a dataformat
pin on the display to a specific voltage.

This can be particularly useful for using the jeida-18 format, which
requires only 3 instead of 4 LVDS lanes.

This series moves the data-mapping property for LVDS panels in a
separate file and optionally adds it to simple-panel when matching to
the innolux,g101ice-l01 compatible. This property allows to override
the default data mapping set in the panel description in simple-panel.

The last patch in this series actually adds the driver support for
parsing the data format override device tree property and modifying the
corresponding values for bit per color and media bus format in the panel
descriptor.

Best regards
Johannes

---

Changelog:

v1 -> v2:  - dt bindings: Worked in Rob's review findings (thanks for your
             review), refactored to use common include instead of duplication
           - driver: added missing error unwinding goto, as found by Dan
             Carpenter's test robot:
             Reported-by: kernel test robot <lkp@intel.com>
             Reported-by: Dan Carpenter <error27@gmail.com>
             Link: https://lore.kernel.org/r/202304160359.4LHmFOlU-lkp@intel.com/

To: David Airlie <airlied@gmail.com>
To: Daniel Vetter <daniel@ffwll.ch>
To: Rob Herring <robh+dt@kernel.org>
To: Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>
To: Conor Dooley <conor+dt@kernel.org>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Thierry Reding <thierry.reding@gmail.com>
To: Neil Armstrong <neil.armstrong@linaro.org>
To: Sam Ravnborg <sam@ravnborg.org>
Cc: patchwork-jzi@pengutronix.de
Cc: kernel@pengutronix.de
Cc: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Cc: dri-devel@lists.freedesktop.org
Cc: devicetree@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Johannes Zink <j.zink@pengutronix.de>

---
Johannes Zink (3):
      dt-bindings: display: move LVDS data-mapping definition to separate file
      dt-bindings: display: simple: support non-default data-mapping
      drm/panel-simple: allow LVDS format override

 .../bindings/display/lvds-data-mapping.yaml        | 84 ++++++++++++++++++++++
 .../devicetree/bindings/display/lvds.yaml          | 75 +++----------------
 .../bindings/display/panel/panel-simple.yaml       | 26 ++++++-
 drivers/gpu/drm/panel/panel-simple.c               | 39 +++++++++-
 4 files changed, 155 insertions(+), 69 deletions(-)
---
base-commit: 33a86170888b7e4aa0cea94ebb9c67180139cea9
change-id: 20230523-simplepanel_support_nondefault_datamapping-13c3f2ea28f8

Best regards,
-- 
Johannes Zink <j.zink@pengutronix.de>


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

* [PATCH v2 1/3] dt-bindings: display: move LVDS data-mapping definition to separate file
  2023-05-23  8:19 [PATCH v2 0/3] Support non-default LVDS data mapping for simple panel Johannes Zink
@ 2023-05-23  8:19 ` Johannes Zink
  2023-05-23 17:16   ` Conor Dooley
  2023-06-02 15:32   ` Laurent Pinchart
  2023-05-23  8:19 ` [PATCH v2 2/3] dt-bindings: display: simple: support non-default data-mapping Johannes Zink
  2023-05-23  8:19 ` [PATCH v2 3/3] drm/panel-simple: allow LVDS format override Johannes Zink
  2 siblings, 2 replies; 13+ messages in thread
From: Johannes Zink @ 2023-05-23  8:19 UTC (permalink / raw
  To: David Airlie, Daniel Vetter, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Laurent Pinchart, Thierry Reding, Neil Armstrong,
	Sam Ravnborg
  Cc: kernel test robot, Dan Carpenter, patchwork-jzi, kernel,
	Laurent Pinchart, dri-devel, devicetree, linux-kernel,
	Johannes Zink

As the LVDS data-mapping property is required in multiple bindings: move
it to separate file and include instead of duplicating it.

Signed-off-by: Johannes Zink <j.zink@pengutronix.de>

---

Changes:

v1 -> v2: worked in Rob's review findings (thank you for reviewing my
          work): extract common properties to
          file and include it instead of duplicating it
---
 .../bindings/display/lvds-data-mapping.yaml        | 84 ++++++++++++++++++++++
 .../devicetree/bindings/display/lvds.yaml          | 75 +++----------------
 2 files changed, 92 insertions(+), 67 deletions(-)

diff --git a/Documentation/devicetree/bindings/display/lvds-data-mapping.yaml b/Documentation/devicetree/bindings/display/lvds-data-mapping.yaml
new file mode 100644
index 000000000000..17ef5c9a5a90
--- /dev/null
+++ b/Documentation/devicetree/bindings/display/lvds-data-mapping.yaml
@@ -0,0 +1,84 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/display/lvds-data-mapping.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: LVDS Data Mapping
+
+maintainers:
+  - Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
+  - Thierry Reding <thierry.reding@gmail.com>
+
+description: |+
+  LVDS is a physical layer specification defined in ANSI/TIA/EIA-644-A. Multiple
+  incompatible data link layers have been used over time to transmit image data
+  to LVDS devices. This bindings supports devices compatible with the following
+  specifications.
+
+  [JEIDA] "Digital Interface Standards for Monitor", JEIDA-59-1999, February
+  1999 (Version 1.0), Japan Electronic Industry Development Association (JEIDA)
+  [LDI] "Open LVDS Display Interface", May 1999 (Version 0.95), National
+  Semiconductor
+  [VESA] "VESA Notebook Panel Standard", October 2007 (Version 1.0), Video
+  Electronics Standards Association (VESA)
+
+  Device compatible with those specifications have been marketed under the
+  FPD-Link and FlatLink brands.
+
+properties:
+  data-mapping:
+    enum:
+      - jeida-18
+      - jeida-24
+      - vesa-24
+    description: |
+      The color signals mapping order.
+
+      LVDS data mappings are defined as follows.
+
+      - "jeida-18" - 18-bit data mapping compatible with the [JEIDA], [LDI] and
+        [VESA] specifications. Data are transferred as follows on 3 LVDS lanes.
+
+      Slot          0       1       2       3       4       5       6
+                ________________                         _________________
+      Clock                     \_______________________/
+                  ______  ______  ______  ______  ______  ______  ______
+      DATA0     ><__G0__><__R5__><__R4__><__R3__><__R2__><__R1__><__R0__><
+      DATA1     ><__B1__><__B0__><__G5__><__G4__><__G3__><__G2__><__G1__><
+      DATA2     ><_CTL2_><_CTL1_><_CTL0_><__B5__><__B4__><__B3__><__B2__><
+
+      - "jeida-24" - 24-bit data mapping compatible with the [DSIM] and [LDI]
+        specifications. Data are transferred as follows on 4 LVDS lanes.
+
+      Slot          0       1       2       3       4       5       6
+                ________________                         _________________
+      Clock                     \_______________________/
+                  ______  ______  ______  ______  ______  ______  ______
+      DATA0     ><__G2__><__R7__><__R6__><__R5__><__R4__><__R3__><__R2__><
+      DATA1     ><__B3__><__B2__><__G7__><__G6__><__G5__><__G4__><__G3__><
+      DATA2     ><_CTL2_><_CTL1_><_CTL0_><__B7__><__B6__><__B5__><__B4__><
+      DATA3     ><_CTL3_><__B1__><__B0__><__G1__><__G0__><__R1__><__R0__><
+
+      - "vesa-24" - 24-bit data mapping compatible with the [VESA] specification.
+        Data are transferred as follows on 4 LVDS lanes.
+
+      Slot          0       1       2       3       4       5       6
+                ________________                         _________________
+      Clock                     \_______________________/
+                  ______  ______  ______  ______  ______  ______  ______
+      DATA0     ><__G0__><__R5__><__R4__><__R3__><__R2__><__R1__><__R0__><
+      DATA1     ><__B1__><__B0__><__G5__><__G4__><__G3__><__G2__><__G1__><
+      DATA2     ><_CTL2_><_CTL1_><_CTL0_><__B5__><__B4__><__B3__><__B2__><
+      DATA3     ><_CTL3_><__B7__><__B6__><__G7__><__G6__><__R7__><__R6__><
+
+      Control signals are mapped as follows.
+
+      CTL0: HSync
+      CTL1: VSync
+      CTL2: Data Enable
+      CTL3: 0
+
+additionalProperties: true
+
+...
diff --git a/Documentation/devicetree/bindings/display/lvds.yaml b/Documentation/devicetree/bindings/display/lvds.yaml
index 7cd2ce7e9c33..2200f986c3cf 100644
--- a/Documentation/devicetree/bindings/display/lvds.yaml
+++ b/Documentation/devicetree/bindings/display/lvds.yaml
@@ -6,83 +6,24 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
 
 title: LVDS Display Common Properties
 
+allOf:
+  - $ref: lvds-data-mapping.yaml#
+
 maintainers:
   - Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
   - Thierry Reding <thierry.reding@gmail.com>
 
 description: |+
-  LVDS is a physical layer specification defined in ANSI/TIA/EIA-644-A. Multiple
-  incompatible data link layers have been used over time to transmit image data
-  to LVDS devices. This bindings supports devices compatible with the following
-  specifications.
-
-  [JEIDA] "Digital Interface Standards for Monitor", JEIDA-59-1999, February
-  1999 (Version 1.0), Japan Electronic Industry Development Association (JEIDA)
-  [LDI] "Open LVDS Display Interface", May 1999 (Version 0.95), National
-  Semiconductor
-  [VESA] "VESA Notebook Panel Standard", October 2007 (Version 1.0), Video
-  Electronics Standards Association (VESA)
-
-  Device compatible with those specifications have been marketed under the
-  FPD-Link and FlatLink brands.
+  This binding extends the data mapping defined in lvds-data-mapping.yaml.
+  It supports reversing the bit order on the formats defined there in order
+  to accomodate for even more specialized data formats, since a variety of
+  data formats and layouts is used to drive LVDS displays.
 
 properties:
-  data-mapping:
-    enum:
-      - jeida-18
-      - jeida-24
-      - vesa-24
-    description: |
-      The color signals mapping order.
-
-      LVDS data mappings are defined as follows.
-
-      - "jeida-18" - 18-bit data mapping compatible with the [JEIDA], [LDI] and
-        [VESA] specifications. Data are transferred as follows on 3 LVDS lanes.
-
-      Slot          0       1       2       3       4       5       6
-                ________________                         _________________
-      Clock                     \_______________________/
-                  ______  ______  ______  ______  ______  ______  ______
-      DATA0     ><__G0__><__R5__><__R4__><__R3__><__R2__><__R1__><__R0__><
-      DATA1     ><__B1__><__B0__><__G5__><__G4__><__G3__><__G2__><__G1__><
-      DATA2     ><_CTL2_><_CTL1_><_CTL0_><__B5__><__B4__><__B3__><__B2__><
-
-      - "jeida-24" - 24-bit data mapping compatible with the [DSIM] and [LDI]
-        specifications. Data are transferred as follows on 4 LVDS lanes.
-
-      Slot          0       1       2       3       4       5       6
-                ________________                         _________________
-      Clock                     \_______________________/
-                  ______  ______  ______  ______  ______  ______  ______
-      DATA0     ><__G2__><__R7__><__R6__><__R5__><__R4__><__R3__><__R2__><
-      DATA1     ><__B3__><__B2__><__G7__><__G6__><__G5__><__G4__><__G3__><
-      DATA2     ><_CTL2_><_CTL1_><_CTL0_><__B7__><__B6__><__B5__><__B4__><
-      DATA3     ><_CTL3_><__B1__><__B0__><__G1__><__G0__><__R1__><__R0__><
-
-      - "vesa-24" - 24-bit data mapping compatible with the [VESA] specification.
-        Data are transferred as follows on 4 LVDS lanes.
-
-      Slot          0       1       2       3       4       5       6
-                ________________                         _________________
-      Clock                     \_______________________/
-                  ______  ______  ______  ______  ______  ______  ______
-      DATA0     ><__G0__><__R5__><__R4__><__R3__><__R2__><__R1__><__R0__><
-      DATA1     ><__B1__><__B0__><__G5__><__G4__><__G3__><__G2__><__G1__><
-      DATA2     ><_CTL2_><_CTL1_><_CTL0_><__B5__><__B4__><__B3__><__B2__><
-      DATA3     ><_CTL3_><__B7__><__B6__><__G7__><__G6__><__R7__><__R6__><
-
-      Control signals are mapped as follows.
-
-      CTL0: HSync
-      CTL1: VSync
-      CTL2: Data Enable
-      CTL3: 0
-
   data-mirror:
     type: boolean
     description:
-      If set, reverse the bit order described in the data mappings below on all
+      If set, reverse the bit order described in the data mappings on all
       data lanes, transmitting bits for slots 6 to 0 instead of 0 to 6.
 
 additionalProperties: true

-- 
2.39.2


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

* [PATCH v2 2/3] dt-bindings: display: simple: support non-default data-mapping
  2023-05-23  8:19 [PATCH v2 0/3] Support non-default LVDS data mapping for simple panel Johannes Zink
  2023-05-23  8:19 ` [PATCH v2 1/3] dt-bindings: display: move LVDS data-mapping definition to separate file Johannes Zink
@ 2023-05-23  8:19 ` Johannes Zink
  2023-05-23 17:21   ` Conor Dooley
  2023-06-02 15:35   ` Laurent Pinchart
  2023-05-23  8:19 ` [PATCH v2 3/3] drm/panel-simple: allow LVDS format override Johannes Zink
  2 siblings, 2 replies; 13+ messages in thread
From: Johannes Zink @ 2023-05-23  8:19 UTC (permalink / raw
  To: David Airlie, Daniel Vetter, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Laurent Pinchart, Thierry Reding, Neil Armstrong,
	Sam Ravnborg
  Cc: kernel test robot, Dan Carpenter, patchwork-jzi, kernel,
	Laurent Pinchart, dri-devel, devicetree, linux-kernel,
	Johannes Zink

Some Displays support more than just a single default lvds data mapping,
which can be used to run displays on only 3 LVDS lanes in the jeida-18
data-mapping mode.

Add an optional data-mapping property to allow overriding the default
data mapping. As it does not generally apply to any display and bus: use
it selectively on the innolux,g101ice-l01, which supports changing the
data mapping via a strapping pin.

Signed-off-by: Johannes Zink <j.zink@pengutronix.de>

---

Changes:

v1 -> v2: - worked in Rob's review findings (thanks for reviewing my
            work): use extracted common property instead of duplicating
	    the property
	  - refined commit message
	  - add an example dts for automated checking
---
 .../bindings/display/panel/panel-simple.yaml       | 26 +++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/display/panel/panel-simple.yaml b/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
index ec50dd268314..698301c8c920 100644
--- a/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
+++ b/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
@@ -21,9 +21,9 @@ description: |
 
 allOf:
   - $ref: panel-common.yaml#
+  - $ref: ../lvds-data-mapping.yaml#
 
 properties:
-
   compatible:
     enum:
     # compatible must be listed in alphabetical order, ordered by compatible.
@@ -353,6 +353,17 @@ properties:
   power-supply: true
   no-hpd: true
   hpd-gpios: true
+  data-mapping: true
+
+if:
+  not:
+    properties:
+      compatible:
+        contains:
+          const: innolux,g101ice-l01
+then:
+  properties:
+    data-mapping: false
 
 additionalProperties: false
 
@@ -372,3 +383,16 @@ examples:
         };
       };
     };
+  - |
+    panel_lvds: panel-lvds {
+      compatible = "innolux,g101ice-l01";
+      power-supply = <&vcc_lcd_reg>;
+
+      data-mapping = "jeida-24";
+
+      port {
+        panel_in_lvds: endpoint {
+          remote-endpoint = <&ltdc_out_lvds>;
+        };
+      };
+    };

-- 
2.39.2


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

* [PATCH v2 3/3] drm/panel-simple: allow LVDS format override
  2023-05-23  8:19 [PATCH v2 0/3] Support non-default LVDS data mapping for simple panel Johannes Zink
  2023-05-23  8:19 ` [PATCH v2 1/3] dt-bindings: display: move LVDS data-mapping definition to separate file Johannes Zink
  2023-05-23  8:19 ` [PATCH v2 2/3] dt-bindings: display: simple: support non-default data-mapping Johannes Zink
@ 2023-05-23  8:19 ` Johannes Zink
  2023-06-02 14:34   ` Johannes Zink
  2023-06-02 15:39   ` Laurent Pinchart
  2 siblings, 2 replies; 13+ messages in thread
From: Johannes Zink @ 2023-05-23  8:19 UTC (permalink / raw
  To: David Airlie, Daniel Vetter, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Laurent Pinchart, Thierry Reding, Neil Armstrong,
	Sam Ravnborg
  Cc: kernel test robot, Dan Carpenter, patchwork-jzi, kernel,
	Laurent Pinchart, dri-devel, devicetree, linux-kernel,
	Johannes Zink

Some panels support multiple LVDS data mapping formats, which can be
used e.g. run displays on jeida-18 format when only 3 LVDS lanes are
available.

Add parsing of an optional data-mapping devicetree property, which also
touches up the bits per color to match the bus format.

Signed-off-by: Johannes Zink <j.zink@pengutronix.de>

---

Changes:

  v1 -> v2: - fix missing unwind goto found by test robot
              Reported-by: kernel test robot <lkp@intel.com>
              Reported-by: Dan Carpenter <error27@gmail.com>
              Link: https://lore.kernel.org/r/202304160359.4LHmFOlU-lkp@intel.com/
---
 drivers/gpu/drm/panel/panel-simple.c | 39 +++++++++++++++++++++++++++++++++++-
 1 file changed, 38 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
index 2a9c1a785a5c..0a35fdb49ccb 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -40,6 +40,7 @@
 #include <drm/drm_edid.h>
 #include <drm/drm_mipi_dsi.h>
 #include <drm/drm_panel.h>
+#include <drm/drm_of.h>
 
 /**
  * struct panel_desc - Describes a simple panel.
@@ -559,7 +560,7 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
 	struct device_node *ddc;
 	int connector_type;
 	u32 bus_flags;
-	int err;
+	int err, ret;
 
 	panel = devm_kzalloc(dev, sizeof(*panel), GFP_KERNEL);
 	if (!panel)
@@ -605,6 +606,42 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
 			panel_simple_parse_panel_timing_node(dev, panel, &dt);
 	}
 
+
+	/* optional data-mapping property for overriding bus format */
+	ret = drm_of_lvds_get_data_mapping(dev->of_node);
+	if (ret == -EINVAL) {
+		dev_warn(dev, "Ignore invalid data-mapping property");
+	} else if (ret != -ENODEV) {
+		int bpc;
+
+		switch (ret) {
+		default:
+			WARN_ON(1);
+			fallthrough;
+		case MEDIA_BUS_FMT_RGB888_1X7X4_SPWG:
+			fallthrough;
+		case MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA:
+			bpc = 8;
+			break;
+		case MEDIA_BUS_FMT_RGB666_1X7X3_SPWG:
+			bpc = 6;
+		}
+
+		if (desc->bpc != bpc || desc->bus_format != ret) {
+			struct panel_desc *override_desc;
+
+			override_desc = devm_kmemdup(dev, desc, sizeof(*desc), GFP_KERNEL);
+			if (!override_desc) {
+				err = -ENOMEM;
+				goto free_ddc;
+			}
+
+			override_desc->bus_format = ret;
+			override_desc->bpc = bpc;
+			panel->desc = override_desc;
+		}
+	}
+
 	connector_type = desc->connector_type;
 	/* Catch common mistakes for panels. */
 	switch (connector_type) {

-- 
2.39.2


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

* Re: [PATCH v2 1/3] dt-bindings: display: move LVDS data-mapping definition to separate file
  2023-05-23  8:19 ` [PATCH v2 1/3] dt-bindings: display: move LVDS data-mapping definition to separate file Johannes Zink
@ 2023-05-23 17:16   ` Conor Dooley
  2023-06-02 15:32   ` Laurent Pinchart
  1 sibling, 0 replies; 13+ messages in thread
From: Conor Dooley @ 2023-05-23 17:16 UTC (permalink / raw
  To: Johannes Zink
  Cc: David Airlie, Daniel Vetter, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Laurent Pinchart, Thierry Reding, Neil Armstrong,
	Sam Ravnborg, kernel test robot, Dan Carpenter, patchwork-jzi,
	kernel, Laurent Pinchart, dri-devel, devicetree, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 9875 bytes --]

On Tue, May 23, 2023 at 10:19:41AM +0200, Johannes Zink wrote:
> As the LVDS data-mapping property is required in multiple bindings: move
> it to separate file and include instead of duplicating it.
> 
> Signed-off-by: Johannes Zink <j.zink@pengutronix.de>
> 
> ---
> 
> Changes:
> 
> v1 -> v2: worked in Rob's review findings (thank you for reviewing my
>           work): extract common properties to
>           file and include it instead of duplicating it
> ---
>  .../bindings/display/lvds-data-mapping.yaml        | 84 ++++++++++++++++++++++
>  .../devicetree/bindings/display/lvds.yaml          | 75 +++----------------
>  2 files changed, 92 insertions(+), 67 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/display/lvds-data-mapping.yaml b/Documentation/devicetree/bindings/display/lvds-data-mapping.yaml
> new file mode 100644
> index 000000000000..17ef5c9a5a90
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/display/lvds-data-mapping.yaml
> @@ -0,0 +1,84 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/display/lvds-data-mapping.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: LVDS Data Mapping
> +
> +maintainers:
> +  - Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> +  - Thierry Reding <thierry.reding@gmail.com>
> +
> +description: |+

Apparently this + is a "chomping indicator", but I have no clue why that
is needed here. You didn't add it though and the movement seems faithful
to me, so:
Reviewed-by: Conor Dooley <conor.dooley@microchip.com>

Thanks,
Conor.

> +  LVDS is a physical layer specification defined in ANSI/TIA/EIA-644-A. Multiple
> +  incompatible data link layers have been used over time to transmit image data
> +  to LVDS devices. This bindings supports devices compatible with the following
> +  specifications.
> +
> +  [JEIDA] "Digital Interface Standards for Monitor", JEIDA-59-1999, February
> +  1999 (Version 1.0), Japan Electronic Industry Development Association (JEIDA)
> +  [LDI] "Open LVDS Display Interface", May 1999 (Version 0.95), National
> +  Semiconductor
> +  [VESA] "VESA Notebook Panel Standard", October 2007 (Version 1.0), Video
> +  Electronics Standards Association (VESA)
> +
> +  Device compatible with those specifications have been marketed under the
> +  FPD-Link and FlatLink brands.
> +
> +properties:
> +  data-mapping:
> +    enum:
> +      - jeida-18
> +      - jeida-24
> +      - vesa-24
> +    description: |
> +      The color signals mapping order.
> +
> +      LVDS data mappings are defined as follows.
> +
> +      - "jeida-18" - 18-bit data mapping compatible with the [JEIDA], [LDI] and
> +        [VESA] specifications. Data are transferred as follows on 3 LVDS lanes.
> +
> +      Slot          0       1       2       3       4       5       6
> +                ________________                         _________________
> +      Clock                     \_______________________/
> +                  ______  ______  ______  ______  ______  ______  ______
> +      DATA0     ><__G0__><__R5__><__R4__><__R3__><__R2__><__R1__><__R0__><
> +      DATA1     ><__B1__><__B0__><__G5__><__G4__><__G3__><__G2__><__G1__><
> +      DATA2     ><_CTL2_><_CTL1_><_CTL0_><__B5__><__B4__><__B3__><__B2__><
> +
> +      - "jeida-24" - 24-bit data mapping compatible with the [DSIM] and [LDI]
> +        specifications. Data are transferred as follows on 4 LVDS lanes.
> +
> +      Slot          0       1       2       3       4       5       6
> +                ________________                         _________________
> +      Clock                     \_______________________/
> +                  ______  ______  ______  ______  ______  ______  ______
> +      DATA0     ><__G2__><__R7__><__R6__><__R5__><__R4__><__R3__><__R2__><
> +      DATA1     ><__B3__><__B2__><__G7__><__G6__><__G5__><__G4__><__G3__><
> +      DATA2     ><_CTL2_><_CTL1_><_CTL0_><__B7__><__B6__><__B5__><__B4__><
> +      DATA3     ><_CTL3_><__B1__><__B0__><__G1__><__G0__><__R1__><__R0__><
> +
> +      - "vesa-24" - 24-bit data mapping compatible with the [VESA] specification.
> +        Data are transferred as follows on 4 LVDS lanes.
> +
> +      Slot          0       1       2       3       4       5       6
> +                ________________                         _________________
> +      Clock                     \_______________________/
> +                  ______  ______  ______  ______  ______  ______  ______
> +      DATA0     ><__G0__><__R5__><__R4__><__R3__><__R2__><__R1__><__R0__><
> +      DATA1     ><__B1__><__B0__><__G5__><__G4__><__G3__><__G2__><__G1__><
> +      DATA2     ><_CTL2_><_CTL1_><_CTL0_><__B5__><__B4__><__B3__><__B2__><
> +      DATA3     ><_CTL3_><__B7__><__B6__><__G7__><__G6__><__R7__><__R6__><
> +
> +      Control signals are mapped as follows.
> +
> +      CTL0: HSync
> +      CTL1: VSync
> +      CTL2: Data Enable
> +      CTL3: 0
> +
> +additionalProperties: true
> +
> +...
> diff --git a/Documentation/devicetree/bindings/display/lvds.yaml b/Documentation/devicetree/bindings/display/lvds.yaml
> index 7cd2ce7e9c33..2200f986c3cf 100644
> --- a/Documentation/devicetree/bindings/display/lvds.yaml
> +++ b/Documentation/devicetree/bindings/display/lvds.yaml
> @@ -6,83 +6,24 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
>  
>  title: LVDS Display Common Properties
>  
> +allOf:
> +  - $ref: lvds-data-mapping.yaml#
> +
>  maintainers:
>    - Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
>    - Thierry Reding <thierry.reding@gmail.com>
>  
>  description: |+
> -  LVDS is a physical layer specification defined in ANSI/TIA/EIA-644-A. Multiple
> -  incompatible data link layers have been used over time to transmit image data
> -  to LVDS devices. This bindings supports devices compatible with the following
> -  specifications.
> -
> -  [JEIDA] "Digital Interface Standards for Monitor", JEIDA-59-1999, February
> -  1999 (Version 1.0), Japan Electronic Industry Development Association (JEIDA)
> -  [LDI] "Open LVDS Display Interface", May 1999 (Version 0.95), National
> -  Semiconductor
> -  [VESA] "VESA Notebook Panel Standard", October 2007 (Version 1.0), Video
> -  Electronics Standards Association (VESA)
> -
> -  Device compatible with those specifications have been marketed under the
> -  FPD-Link and FlatLink brands.
> +  This binding extends the data mapping defined in lvds-data-mapping.yaml.
> +  It supports reversing the bit order on the formats defined there in order
> +  to accomodate for even more specialized data formats, since a variety of
> +  data formats and layouts is used to drive LVDS displays.
>  
>  properties:
> -  data-mapping:
> -    enum:
> -      - jeida-18
> -      - jeida-24
> -      - vesa-24
> -    description: |
> -      The color signals mapping order.
> -
> -      LVDS data mappings are defined as follows.
> -
> -      - "jeida-18" - 18-bit data mapping compatible with the [JEIDA], [LDI] and
> -        [VESA] specifications. Data are transferred as follows on 3 LVDS lanes.
> -
> -      Slot          0       1       2       3       4       5       6
> -                ________________                         _________________
> -      Clock                     \_______________________/
> -                  ______  ______  ______  ______  ______  ______  ______
> -      DATA0     ><__G0__><__R5__><__R4__><__R3__><__R2__><__R1__><__R0__><
> -      DATA1     ><__B1__><__B0__><__G5__><__G4__><__G3__><__G2__><__G1__><
> -      DATA2     ><_CTL2_><_CTL1_><_CTL0_><__B5__><__B4__><__B3__><__B2__><
> -
> -      - "jeida-24" - 24-bit data mapping compatible with the [DSIM] and [LDI]
> -        specifications. Data are transferred as follows on 4 LVDS lanes.
> -
> -      Slot          0       1       2       3       4       5       6
> -                ________________                         _________________
> -      Clock                     \_______________________/
> -                  ______  ______  ______  ______  ______  ______  ______
> -      DATA0     ><__G2__><__R7__><__R6__><__R5__><__R4__><__R3__><__R2__><
> -      DATA1     ><__B3__><__B2__><__G7__><__G6__><__G5__><__G4__><__G3__><
> -      DATA2     ><_CTL2_><_CTL1_><_CTL0_><__B7__><__B6__><__B5__><__B4__><
> -      DATA3     ><_CTL3_><__B1__><__B0__><__G1__><__G0__><__R1__><__R0__><
> -
> -      - "vesa-24" - 24-bit data mapping compatible with the [VESA] specification.
> -        Data are transferred as follows on 4 LVDS lanes.
> -
> -      Slot          0       1       2       3       4       5       6
> -                ________________                         _________________
> -      Clock                     \_______________________/
> -                  ______  ______  ______  ______  ______  ______  ______
> -      DATA0     ><__G0__><__R5__><__R4__><__R3__><__R2__><__R1__><__R0__><
> -      DATA1     ><__B1__><__B0__><__G5__><__G4__><__G3__><__G2__><__G1__><
> -      DATA2     ><_CTL2_><_CTL1_><_CTL0_><__B5__><__B4__><__B3__><__B2__><
> -      DATA3     ><_CTL3_><__B7__><__B6__><__G7__><__G6__><__R7__><__R6__><
> -
> -      Control signals are mapped as follows.
> -
> -      CTL0: HSync
> -      CTL1: VSync
> -      CTL2: Data Enable
> -      CTL3: 0
> -
>    data-mirror:
>      type: boolean
>      description:
> -      If set, reverse the bit order described in the data mappings below on all
> +      If set, reverse the bit order described in the data mappings on all
>        data lanes, transmitting bits for slots 6 to 0 instead of 0 to 6.
>  
>  additionalProperties: true
> 
> -- 
> 2.39.2
> 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

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

* Re: [PATCH v2 2/3] dt-bindings: display: simple: support non-default data-mapping
  2023-05-23  8:19 ` [PATCH v2 2/3] dt-bindings: display: simple: support non-default data-mapping Johannes Zink
@ 2023-05-23 17:21   ` Conor Dooley
  2023-06-02 15:35   ` Laurent Pinchart
  1 sibling, 0 replies; 13+ messages in thread
From: Conor Dooley @ 2023-05-23 17:21 UTC (permalink / raw
  To: Johannes Zink
  Cc: David Airlie, Daniel Vetter, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Laurent Pinchart, Thierry Reding, Neil Armstrong,
	Sam Ravnborg, kernel test robot, Dan Carpenter, patchwork-jzi,
	kernel, Laurent Pinchart, dri-devel, devicetree, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 2541 bytes --]

On Tue, May 23, 2023 at 10:19:42AM +0200, Johannes Zink wrote:
> Some Displays support more than just a single default lvds data mapping,
> which can be used to run displays on only 3 LVDS lanes in the jeida-18
> data-mapping mode.
> 
> Add an optional data-mapping property to allow overriding the default
> data mapping. As it does not generally apply to any display and bus: use
> it selectively on the innolux,g101ice-l01, which supports changing the
> data mapping via a strapping pin.
> 
> Signed-off-by: Johannes Zink <j.zink@pengutronix.de>
> 
> ---
> 
> Changes:
> 
> v1 -> v2: - worked in Rob's review findings (thanks for reviewing my
>             work): use extracted common property instead of duplicating
> 	    the property

That looks to be true (and Rob's AFK at the moment, hence unable to reply
to your ping) so,
Reviewed-by: Conor Dooley <conor.dooley@microchip.com>

Thanks,
Conor.

> 	  - refined commit message
> 	  - add an example dts for automated checking
> ---
>  .../bindings/display/panel/panel-simple.yaml       | 26 +++++++++++++++++++++-
>  1 file changed, 25 insertions(+), 1 deletion(-)
> 
> diff --git a/Documentation/devicetree/bindings/display/panel/panel-simple.yaml b/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
> index ec50dd268314..698301c8c920 100644
> --- a/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
> +++ b/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
> @@ -21,9 +21,9 @@ description: |
>  
>  allOf:
>    - $ref: panel-common.yaml#
> +  - $ref: ../lvds-data-mapping.yaml#
>  
>  properties:
> -
>    compatible:
>      enum:
>      # compatible must be listed in alphabetical order, ordered by compatible.
> @@ -353,6 +353,17 @@ properties:
>    power-supply: true
>    no-hpd: true
>    hpd-gpios: true
> +  data-mapping: true
> +
> +if:
> +  not:
> +    properties:
> +      compatible:
> +        contains:
> +          const: innolux,g101ice-l01
> +then:
> +  properties:
> +    data-mapping: false
>  
>  additionalProperties: false
>  
> @@ -372,3 +383,16 @@ examples:
>          };
>        };
>      };
> +  - |
> +    panel_lvds: panel-lvds {
> +      compatible = "innolux,g101ice-l01";
> +      power-supply = <&vcc_lcd_reg>;
> +
> +      data-mapping = "jeida-24";
> +
> +      port {
> +        panel_in_lvds: endpoint {
> +          remote-endpoint = <&ltdc_out_lvds>;
> +        };
> +      };
> +    };
> 
> -- 
> 2.39.2
> 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

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

* Re: [PATCH v2 3/3] drm/panel-simple: allow LVDS format override
  2023-05-23  8:19 ` [PATCH v2 3/3] drm/panel-simple: allow LVDS format override Johannes Zink
@ 2023-06-02 14:34   ` Johannes Zink
  2023-06-02 15:39   ` Laurent Pinchart
  1 sibling, 0 replies; 13+ messages in thread
From: Johannes Zink @ 2023-06-02 14:34 UTC (permalink / raw
  To: David Airlie, Daniel Vetter, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Laurent Pinchart, Thierry Reding, Neil Armstrong,
	Sam Ravnborg
  Cc: devicetree, Laurent Pinchart, Dan Carpenter, kernel test robot,
	linux-kernel, dri-devel, kernel, patchwork-jzi

Hi,

gentle ping here - Do you have any feedback for me on this patch?

Thanks and best regards
Johannes

On 5/23/23 10:19, Johannes Zink wrote:
> Some panels support multiple LVDS data mapping formats, which can be
> used e.g. run displays on jeida-18 format when only 3 LVDS lanes are
> available.
> 
> Add parsing of an optional data-mapping devicetree property, which also
> touches up the bits per color to match the bus format.
> 
> Signed-off-by: Johannes Zink <j.zink@pengutronix.de>
> 
> ---
> 
> Changes:
> 
>    v1 -> v2: - fix missing unwind goto found by test robot
>                Reported-by: kernel test robot <lkp@intel.com>
>                Reported-by: Dan Carpenter <error27@gmail.com>
>                Link: https://lore.kernel.org/r/202304160359.4LHmFOlU-lkp@intel.com/
> ---
>   drivers/gpu/drm/panel/panel-simple.c | 39 +++++++++++++++++++++++++++++++++++-
>   1 file changed, 38 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
> index 2a9c1a785a5c..0a35fdb49ccb 100644
> --- a/drivers/gpu/drm/panel/panel-simple.c
> +++ b/drivers/gpu/drm/panel/panel-simple.c
> @@ -40,6 +40,7 @@
>   #include <drm/drm_edid.h>
>   #include <drm/drm_mipi_dsi.h>
>   #include <drm/drm_panel.h>
> +#include <drm/drm_of.h>
>   
>   /**
>    * struct panel_desc - Describes a simple panel.
> @@ -559,7 +560,7 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
>   	struct device_node *ddc;
>   	int connector_type;
>   	u32 bus_flags;
> -	int err;
> +	int err, ret;
>   
>   	panel = devm_kzalloc(dev, sizeof(*panel), GFP_KERNEL);
>   	if (!panel)
> @@ -605,6 +606,42 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
>   			panel_simple_parse_panel_timing_node(dev, panel, &dt);
>   	}
>   
> +
> +	/* optional data-mapping property for overriding bus format */
> +	ret = drm_of_lvds_get_data_mapping(dev->of_node);
> +	if (ret == -EINVAL) {
> +		dev_warn(dev, "Ignore invalid data-mapping property");
> +	} else if (ret != -ENODEV) {
> +		int bpc;
> +
> +		switch (ret) {
> +		default:
> +			WARN_ON(1);
> +			fallthrough;
> +		case MEDIA_BUS_FMT_RGB888_1X7X4_SPWG:
> +			fallthrough;
> +		case MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA:
> +			bpc = 8;
> +			break;
> +		case MEDIA_BUS_FMT_RGB666_1X7X3_SPWG:
> +			bpc = 6;
> +		}
> +
> +		if (desc->bpc != bpc || desc->bus_format != ret) {
> +			struct panel_desc *override_desc;
> +
> +			override_desc = devm_kmemdup(dev, desc, sizeof(*desc), GFP_KERNEL);
> +			if (!override_desc) {
> +				err = -ENOMEM;
> +				goto free_ddc;
> +			}
> +
> +			override_desc->bus_format = ret;
> +			override_desc->bpc = bpc;
> +			panel->desc = override_desc;
> +		}
> +	}
> +
>   	connector_type = desc->connector_type;
>   	/* Catch common mistakes for panels. */
>   	switch (connector_type) {
> 

-- 
Pengutronix e.K.                | Johannes Zink                  |
Steuerwalder Str. 21            | https://www.pengutronix.de/    |
31137 Hildesheim, Germany       | Phone: +49-5121-206917-0       |
Amtsgericht Hildesheim, HRA 2686| Fax:   +49-5121-206917-5555    |


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

* Re: [PATCH v2 1/3] dt-bindings: display: move LVDS data-mapping definition to separate file
  2023-05-23  8:19 ` [PATCH v2 1/3] dt-bindings: display: move LVDS data-mapping definition to separate file Johannes Zink
  2023-05-23 17:16   ` Conor Dooley
@ 2023-06-02 15:32   ` Laurent Pinchart
  2023-07-28  8:33     ` Johannes Zink
  1 sibling, 1 reply; 13+ messages in thread
From: Laurent Pinchart @ 2023-06-02 15:32 UTC (permalink / raw
  To: Johannes Zink
  Cc: David Airlie, Daniel Vetter, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Thierry Reding, Neil Armstrong, Sam Ravnborg,
	kernel test robot, Dan Carpenter, patchwork-jzi, kernel,
	dri-devel, devicetree, linux-kernel

Hello Johannes,

Thank you for the patch.

On Tue, May 23, 2023 at 10:19:41AM +0200, Johannes Zink wrote:
> As the LVDS data-mapping property is required in multiple bindings: move
> it to separate file and include instead of duplicating it.
> 
> Signed-off-by: Johannes Zink <j.zink@pengutronix.de>
> 
> ---
> 
> Changes:
> 
> v1 -> v2: worked in Rob's review findings (thank you for reviewing my
>           work): extract common properties to
>           file and include it instead of duplicating it
> ---
>  .../bindings/display/lvds-data-mapping.yaml        | 84 ++++++++++++++++++++++
>  .../devicetree/bindings/display/lvds.yaml          | 75 +++----------------
>  2 files changed, 92 insertions(+), 67 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/display/lvds-data-mapping.yaml b/Documentation/devicetree/bindings/display/lvds-data-mapping.yaml
> new file mode 100644
> index 000000000000..17ef5c9a5a90
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/display/lvds-data-mapping.yaml
> @@ -0,0 +1,84 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/display/lvds-data-mapping.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: LVDS Data Mapping
> +
> +maintainers:
> +  - Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> +  - Thierry Reding <thierry.reding@gmail.com>
> +
> +description: |+
> +  LVDS is a physical layer specification defined in ANSI/TIA/EIA-644-A. Multiple
> +  incompatible data link layers have been used over time to transmit image data
> +  to LVDS devices. This bindings supports devices compatible with the following
> +  specifications.
> +
> +  [JEIDA] "Digital Interface Standards for Monitor", JEIDA-59-1999, February
> +  1999 (Version 1.0), Japan Electronic Industry Development Association (JEIDA)
> +  [LDI] "Open LVDS Display Interface", May 1999 (Version 0.95), National
> +  Semiconductor
> +  [VESA] "VESA Notebook Panel Standard", October 2007 (Version 1.0), Video
> +  Electronics Standards Association (VESA)
> +
> +  Device compatible with those specifications have been marketed under the
> +  FPD-Link and FlatLink brands.
> +
> +properties:
> +  data-mapping:
> +    enum:
> +      - jeida-18
> +      - jeida-24
> +      - vesa-24
> +    description: |
> +      The color signals mapping order.
> +
> +      LVDS data mappings are defined as follows.
> +
> +      - "jeida-18" - 18-bit data mapping compatible with the [JEIDA], [LDI] and
> +        [VESA] specifications. Data are transferred as follows on 3 LVDS lanes.
> +
> +      Slot          0       1       2       3       4       5       6
> +                ________________                         _________________
> +      Clock                     \_______________________/
> +                  ______  ______  ______  ______  ______  ______  ______
> +      DATA0     ><__G0__><__R5__><__R4__><__R3__><__R2__><__R1__><__R0__><
> +      DATA1     ><__B1__><__B0__><__G5__><__G4__><__G3__><__G2__><__G1__><
> +      DATA2     ><_CTL2_><_CTL1_><_CTL0_><__B5__><__B4__><__B3__><__B2__><
> +
> +      - "jeida-24" - 24-bit data mapping compatible with the [DSIM] and [LDI]
> +        specifications. Data are transferred as follows on 4 LVDS lanes.
> +
> +      Slot          0       1       2       3       4       5       6
> +                ________________                         _________________
> +      Clock                     \_______________________/
> +                  ______  ______  ______  ______  ______  ______  ______
> +      DATA0     ><__G2__><__R7__><__R6__><__R5__><__R4__><__R3__><__R2__><
> +      DATA1     ><__B3__><__B2__><__G7__><__G6__><__G5__><__G4__><__G3__><
> +      DATA2     ><_CTL2_><_CTL1_><_CTL0_><__B7__><__B6__><__B5__><__B4__><
> +      DATA3     ><_CTL3_><__B1__><__B0__><__G1__><__G0__><__R1__><__R0__><
> +
> +      - "vesa-24" - 24-bit data mapping compatible with the [VESA] specification.
> +        Data are transferred as follows on 4 LVDS lanes.
> +
> +      Slot          0       1       2       3       4       5       6
> +                ________________                         _________________
> +      Clock                     \_______________________/
> +                  ______  ______  ______  ______  ______  ______  ______
> +      DATA0     ><__G0__><__R5__><__R4__><__R3__><__R2__><__R1__><__R0__><
> +      DATA1     ><__B1__><__B0__><__G5__><__G4__><__G3__><__G2__><__G1__><
> +      DATA2     ><_CTL2_><_CTL1_><_CTL0_><__B5__><__B4__><__B3__><__B2__><
> +      DATA3     ><_CTL3_><__B7__><__B6__><__G7__><__G6__><__R7__><__R6__><
> +
> +      Control signals are mapped as follows.
> +
> +      CTL0: HSync
> +      CTL1: VSync
> +      CTL2: Data Enable
> +      CTL3: 0
> +
> +additionalProperties: true
> +
> +...
> diff --git a/Documentation/devicetree/bindings/display/lvds.yaml b/Documentation/devicetree/bindings/display/lvds.yaml
> index 7cd2ce7e9c33..2200f986c3cf 100644
> --- a/Documentation/devicetree/bindings/display/lvds.yaml
> +++ b/Documentation/devicetree/bindings/display/lvds.yaml
> @@ -6,83 +6,24 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
>  
>  title: LVDS Display Common Properties
>  
> +allOf:
> +  - $ref: lvds-data-mapping.yaml#
> +
>  maintainers:
>    - Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
>    - Thierry Reding <thierry.reding@gmail.com>
>  
>  description: |+

You can drop the |+ here.

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

> -  LVDS is a physical layer specification defined in ANSI/TIA/EIA-644-A. Multiple
> -  incompatible data link layers have been used over time to transmit image data
> -  to LVDS devices. This bindings supports devices compatible with the following
> -  specifications.
> -
> -  [JEIDA] "Digital Interface Standards for Monitor", JEIDA-59-1999, February
> -  1999 (Version 1.0), Japan Electronic Industry Development Association (JEIDA)
> -  [LDI] "Open LVDS Display Interface", May 1999 (Version 0.95), National
> -  Semiconductor
> -  [VESA] "VESA Notebook Panel Standard", October 2007 (Version 1.0), Video
> -  Electronics Standards Association (VESA)
> -
> -  Device compatible with those specifications have been marketed under the
> -  FPD-Link and FlatLink brands.
> +  This binding extends the data mapping defined in lvds-data-mapping.yaml.
> +  It supports reversing the bit order on the formats defined there in order
> +  to accomodate for even more specialized data formats, since a variety of
> +  data formats and layouts is used to drive LVDS displays.
>  
>  properties:
> -  data-mapping:
> -    enum:
> -      - jeida-18
> -      - jeida-24
> -      - vesa-24
> -    description: |
> -      The color signals mapping order.
> -
> -      LVDS data mappings are defined as follows.
> -
> -      - "jeida-18" - 18-bit data mapping compatible with the [JEIDA], [LDI] and
> -        [VESA] specifications. Data are transferred as follows on 3 LVDS lanes.
> -
> -      Slot          0       1       2       3       4       5       6
> -                ________________                         _________________
> -      Clock                     \_______________________/
> -                  ______  ______  ______  ______  ______  ______  ______
> -      DATA0     ><__G0__><__R5__><__R4__><__R3__><__R2__><__R1__><__R0__><
> -      DATA1     ><__B1__><__B0__><__G5__><__G4__><__G3__><__G2__><__G1__><
> -      DATA2     ><_CTL2_><_CTL1_><_CTL0_><__B5__><__B4__><__B3__><__B2__><
> -
> -      - "jeida-24" - 24-bit data mapping compatible with the [DSIM] and [LDI]
> -        specifications. Data are transferred as follows on 4 LVDS lanes.
> -
> -      Slot          0       1       2       3       4       5       6
> -                ________________                         _________________
> -      Clock                     \_______________________/
> -                  ______  ______  ______  ______  ______  ______  ______
> -      DATA0     ><__G2__><__R7__><__R6__><__R5__><__R4__><__R3__><__R2__><
> -      DATA1     ><__B3__><__B2__><__G7__><__G6__><__G5__><__G4__><__G3__><
> -      DATA2     ><_CTL2_><_CTL1_><_CTL0_><__B7__><__B6__><__B5__><__B4__><
> -      DATA3     ><_CTL3_><__B1__><__B0__><__G1__><__G0__><__R1__><__R0__><
> -
> -      - "vesa-24" - 24-bit data mapping compatible with the [VESA] specification.
> -        Data are transferred as follows on 4 LVDS lanes.
> -
> -      Slot          0       1       2       3       4       5       6
> -                ________________                         _________________
> -      Clock                     \_______________________/
> -                  ______  ______  ______  ______  ______  ______  ______
> -      DATA0     ><__G0__><__R5__><__R4__><__R3__><__R2__><__R1__><__R0__><
> -      DATA1     ><__B1__><__B0__><__G5__><__G4__><__G3__><__G2__><__G1__><
> -      DATA2     ><_CTL2_><_CTL1_><_CTL0_><__B5__><__B4__><__B3__><__B2__><
> -      DATA3     ><_CTL3_><__B7__><__B6__><__G7__><__G6__><__R7__><__R6__><
> -
> -      Control signals are mapped as follows.
> -
> -      CTL0: HSync
> -      CTL1: VSync
> -      CTL2: Data Enable
> -      CTL3: 0
> -
>    data-mirror:
>      type: boolean
>      description:
> -      If set, reverse the bit order described in the data mappings below on all
> +      If set, reverse the bit order described in the data mappings on all
>        data lanes, transmitting bits for slots 6 to 0 instead of 0 to 6.
>  
>  additionalProperties: true
> 

-- 
Regards,

Laurent Pinchart

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

* Re: [PATCH v2 2/3] dt-bindings: display: simple: support non-default data-mapping
  2023-05-23  8:19 ` [PATCH v2 2/3] dt-bindings: display: simple: support non-default data-mapping Johannes Zink
  2023-05-23 17:21   ` Conor Dooley
@ 2023-06-02 15:35   ` Laurent Pinchart
  2023-07-28  8:36     ` Johannes Zink
  1 sibling, 1 reply; 13+ messages in thread
From: Laurent Pinchart @ 2023-06-02 15:35 UTC (permalink / raw
  To: Johannes Zink
  Cc: David Airlie, Daniel Vetter, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Thierry Reding, Neil Armstrong, Sam Ravnborg,
	kernel test robot, Dan Carpenter, patchwork-jzi, kernel,
	dri-devel, devicetree, linux-kernel

Hi Johannes,

Thank you for the patch.

On Tue, May 23, 2023 at 10:19:42AM +0200, Johannes Zink wrote:
> Some Displays support more than just a single default lvds data mapping,

s/lvds/LVDS/

> which can be used to run displays on only 3 LVDS lanes in the jeida-18
> data-mapping mode.
> 
> Add an optional data-mapping property to allow overriding the default
> data mapping. As it does not generally apply to any display and bus: use

s/bus:/bus,/

> it selectively on the innolux,g101ice-l01, which supports changing the
> data mapping via a strapping pin.
> 
> Signed-off-by: Johannes Zink <j.zink@pengutronix.de>
> ---
> 
> Changes:
> 
> v1 -> v2: - worked in Rob's review findings (thanks for reviewing my
>             work): use extracted common property instead of duplicating
> 	    the property
> 	  - refined commit message
> 	  - add an example dts for automated checking
> ---
>  .../bindings/display/panel/panel-simple.yaml       | 26 +++++++++++++++++++++-
>  1 file changed, 25 insertions(+), 1 deletion(-)
> 
> diff --git a/Documentation/devicetree/bindings/display/panel/panel-simple.yaml b/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
> index ec50dd268314..698301c8c920 100644
> --- a/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
> +++ b/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
> @@ -21,9 +21,9 @@ description: |
>  
>  allOf:
>    - $ref: panel-common.yaml#
> +  - $ref: ../lvds-data-mapping.yaml#
>  
>  properties:
> -
>    compatible:
>      enum:
>      # compatible must be listed in alphabetical order, ordered by compatible.
> @@ -353,6 +353,17 @@ properties:
>    power-supply: true
>    no-hpd: true
>    hpd-gpios: true
> +  data-mapping: true

As the property is optional, don't you need a default value ?

> +
> +if:
> +  not:
> +    properties:
> +      compatible:
> +        contains:
> +          const: innolux,g101ice-l01
> +then:
> +  properties:
> +    data-mapping: false
>  
>  additionalProperties: false
>  
> @@ -372,3 +383,16 @@ examples:
>          };
>        };
>      };
> +  - |
> +    panel_lvds: panel-lvds {
> +      compatible = "innolux,g101ice-l01";
> +      power-supply = <&vcc_lcd_reg>;
> +
> +      data-mapping = "jeida-24";
> +
> +      port {
> +        panel_in_lvds: endpoint {
> +          remote-endpoint = <&ltdc_out_lvds>;
> +        };
> +      };
> +    };
> 

-- 
Regards,

Laurent Pinchart

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

* Re: [PATCH v2 3/3] drm/panel-simple: allow LVDS format override
  2023-05-23  8:19 ` [PATCH v2 3/3] drm/panel-simple: allow LVDS format override Johannes Zink
  2023-06-02 14:34   ` Johannes Zink
@ 2023-06-02 15:39   ` Laurent Pinchart
  2023-06-05  6:20     ` Johannes Zink
  1 sibling, 1 reply; 13+ messages in thread
From: Laurent Pinchart @ 2023-06-02 15:39 UTC (permalink / raw
  To: Johannes Zink
  Cc: David Airlie, Daniel Vetter, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Thierry Reding, Neil Armstrong, Sam Ravnborg,
	kernel test robot, Dan Carpenter, patchwork-jzi, kernel,
	dri-devel, devicetree, linux-kernel

Hi Johannes,

Thank you for the patch.

On Tue, May 23, 2023 at 10:19:43AM +0200, Johannes Zink wrote:
> Some panels support multiple LVDS data mapping formats, which can be
> used e.g. run displays on jeida-18 format when only 3 LVDS lanes are
> available.
> 
> Add parsing of an optional data-mapping devicetree property, which also
> touches up the bits per color to match the bus format.

Of course one could argue that the innolux,g101ice-l01 panel should have
used the panel-lvds bindings... :-)

> Signed-off-by: Johannes Zink <j.zink@pengutronix.de>
> 
> ---
> 
> Changes:
> 
>   v1 -> v2: - fix missing unwind goto found by test robot
>               Reported-by: kernel test robot <lkp@intel.com>
>               Reported-by: Dan Carpenter <error27@gmail.com>
>               Link: https://lore.kernel.org/r/202304160359.4LHmFOlU-lkp@intel.com/
> ---
>  drivers/gpu/drm/panel/panel-simple.c | 39 +++++++++++++++++++++++++++++++++++-
>  1 file changed, 38 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
> index 2a9c1a785a5c..0a35fdb49ccb 100644
> --- a/drivers/gpu/drm/panel/panel-simple.c
> +++ b/drivers/gpu/drm/panel/panel-simple.c
> @@ -40,6 +40,7 @@
>  #include <drm/drm_edid.h>
>  #include <drm/drm_mipi_dsi.h>
>  #include <drm/drm_panel.h>
> +#include <drm/drm_of.h>
>  
>  /**
>   * struct panel_desc - Describes a simple panel.
> @@ -559,7 +560,7 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
>  	struct device_node *ddc;
>  	int connector_type;
>  	u32 bus_flags;
> -	int err;
> +	int err, ret;
>  
>  	panel = devm_kzalloc(dev, sizeof(*panel), GFP_KERNEL);
>  	if (!panel)
> @@ -605,6 +606,42 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
>  			panel_simple_parse_panel_timing_node(dev, panel, &dt);
>  	}
>  
> +

Double blank line.

> +	/* optional data-mapping property for overriding bus format */

s/optional/Optional/

> +	ret = drm_of_lvds_get_data_mapping(dev->of_node);
> +	if (ret == -EINVAL) {
> +		dev_warn(dev, "Ignore invalid data-mapping property");
> +	} else if (ret != -ENODEV) {

If someone incorrectly sets the property in DT for a non-LVDS panel,
the result won't be nice. That's of course a DT issue, but I wonder if
we could/should protect against it. You could move this code to a
separate function (which would have the added benefit of lowering the
indentation level as you can return early in error cases), and call it
from panel_simple_probe() only if the panel is an LVDS panel (as
reported by its desc->bus_format value).

> +		int bpc;
> +
> +		switch (ret) {
> +		default:
> +			WARN_ON(1);
> +			fallthrough;
> +		case MEDIA_BUS_FMT_RGB888_1X7X4_SPWG:
> +			fallthrough;
> +		case MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA:
> +			bpc = 8;
> +			break;
> +		case MEDIA_BUS_FMT_RGB666_1X7X3_SPWG:
> +			bpc = 6;
> +		}
> +
> +		if (desc->bpc != bpc || desc->bus_format != ret) {
> +			struct panel_desc *override_desc;
> +
> +			override_desc = devm_kmemdup(dev, desc, sizeof(*desc), GFP_KERNEL);
> +			if (!override_desc) {
> +				err = -ENOMEM;
> +				goto free_ddc;
> +			}
> +
> +			override_desc->bus_format = ret;
> +			override_desc->bpc = bpc;
> +			panel->desc = override_desc;
> +		}
> +	}
> +
>  	connector_type = desc->connector_type;
>  	/* Catch common mistakes for panels. */
>  	switch (connector_type) {

-- 
Regards,

Laurent Pinchart

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

* Re: [PATCH v2 3/3] drm/panel-simple: allow LVDS format override
  2023-06-02 15:39   ` Laurent Pinchart
@ 2023-06-05  6:20     ` Johannes Zink
  0 siblings, 0 replies; 13+ messages in thread
From: Johannes Zink @ 2023-06-05  6:20 UTC (permalink / raw
  To: Laurent Pinchart
  Cc: David Airlie, Daniel Vetter, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Thierry Reding, Neil Armstrong, Sam Ravnborg,
	kernel test robot, Dan Carpenter, patchwork-jzi, kernel,
	dri-devel, devicetree, linux-kernel

Hi Laurent,

thanks for your review and your feedback.

On 6/2/23 17:39, Laurent Pinchart wrote:
> Hi Johannes,
> 
> Thank you for the patch.
> 
> On Tue, May 23, 2023 at 10:19:43AM +0200, Johannes Zink wrote:
>> Some panels support multiple LVDS data mapping formats, which can be
>> used e.g. run displays on jeida-18 format when only 3 LVDS lanes are
>> available.
>>
>> Add parsing of an optional data-mapping devicetree property, which also
>> touches up the bits per color to match the bus format.
> 
> Of course one could argue that the innolux,g101ice-l01 panel should have
> used the panel-lvds bindings... :-)

I would prefer to add it in the panel-simple, if ever possible, as this already 
has the timing information etc. in the driver. I would probably opt to use the 
panel-lvds for an entirely new LVDS display, but as the innolux,g101ice-l01 is 
already supported in panel-simple, imho there should be no harm in supporting 
the jeida-18 operating mode as well. Also other displays in panel-simple 
_might_ benefit from supporting non-default LVDS mapping modes, though I have 
not researched whether they have actual hardware support for doing so.

> 
>> Signed-off-by: Johannes Zink <j.zink@pengutronix.de>
>>
>> ---
>>
>> Changes:
>>
>>    v1 -> v2: - fix missing unwind goto found by test robot
>>                Reported-by: kernel test robot <lkp@intel.com>
>>                Reported-by: Dan Carpenter <error27@gmail.com>
>>                Link: https://lore.kernel.org/r/202304160359.4LHmFOlU-lkp@intel.com/
>> ---
>>   drivers/gpu/drm/panel/panel-simple.c | 39 +++++++++++++++++++++++++++++++++++-
>>   1 file changed, 38 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
>> index 2a9c1a785a5c..0a35fdb49ccb 100644
>> --- a/drivers/gpu/drm/panel/panel-simple.c
>> +++ b/drivers/gpu/drm/panel/panel-simple.c
>> @@ -40,6 +40,7 @@
>>   #include <drm/drm_edid.h>
>>   #include <drm/drm_mipi_dsi.h>
>>   #include <drm/drm_panel.h>
>> +#include <drm/drm_of.h>
>>   
>>   /**
>>    * struct panel_desc - Describes a simple panel.
>> @@ -559,7 +560,7 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
>>   	struct device_node *ddc;
>>   	int connector_type;
>>   	u32 bus_flags;
>> -	int err;
>> +	int err, ret;
>>   
>>   	panel = devm_kzalloc(dev, sizeof(*panel), GFP_KERNEL);
>>   	if (!panel)
>> @@ -605,6 +606,42 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
>>   			panel_simple_parse_panel_timing_node(dev, panel, &dt);
>>   	}
>>   
>> +
> 
> Double blank line.

ack, gonna fix in v3.

> 
>> +	/* optional data-mapping property for overriding bus format */
> 
> s/optional/Optional/

ack, gonna fix in v3.

> 
>> +	ret = drm_of_lvds_get_data_mapping(dev->of_node);
>> +	if (ret == -EINVAL) {
>> +		dev_warn(dev, "Ignore invalid data-mapping property");
>> +	} else if (ret != -ENODEV) {
> 
> If someone incorrectly sets the property in DT for a non-LVDS panel,
> the result won't be nice. That's of course a DT issue, but I wonder if
> we could/should protect against it. You could move this code to a
> separate function (which would have the added benefit of lowering the
> indentation level as you can return early in error cases), and call it
> from panel_simple_probe() only if the panel is an LVDS panel (as
> reported by its desc->bus_format value).
> 

that's a good idea, gonna change it for v3.

>> +		int bpc;
>> +
>> +		switch (ret) {
>> +		default:
>> +			WARN_ON(1);
>> +			fallthrough;
>> +		case MEDIA_BUS_FMT_RGB888_1X7X4_SPWG:
>> +			fallthrough;
>> +		case MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA:
>> +			bpc = 8;
>> +			break;
>> +		case MEDIA_BUS_FMT_RGB666_1X7X3_SPWG:
>> +			bpc = 6;
>> +		}
>> +
>> +		if (desc->bpc != bpc || desc->bus_format != ret) {
>> +			struct panel_desc *override_desc;
>> +
>> +			override_desc = devm_kmemdup(dev, desc, sizeof(*desc), GFP_KERNEL);
>> +			if (!override_desc) {
>> +				err = -ENOMEM;
>> +				goto free_ddc;
>> +			}
>> +
>> +			override_desc->bus_format = ret;
>> +			override_desc->bpc = bpc;
>> +			panel->desc = override_desc;
>> +		}
>> +	}
>> +
>>   	connector_type = desc->connector_type;
>>   	/* Catch common mistakes for panels. */
>>   	switch (connector_type) {
> 

-- 
Pengutronix e.K.                | Johannes Zink                  |
Steuerwalder Str. 21            | https://www.pengutronix.de/    |
31137 Hildesheim, Germany       | Phone: +49-5121-206917-0       |
Amtsgericht Hildesheim, HRA 2686| Fax:   +49-5121-206917-5555    |


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

* Re: [PATCH v2 1/3] dt-bindings: display: move LVDS data-mapping definition to separate file
  2023-06-02 15:32   ` Laurent Pinchart
@ 2023-07-28  8:33     ` Johannes Zink
  0 siblings, 0 replies; 13+ messages in thread
From: Johannes Zink @ 2023-07-28  8:33 UTC (permalink / raw
  To: Laurent Pinchart
  Cc: Neil Armstrong, Conor Dooley, Dan Carpenter, Daniel Vetter,
	devicetree, Sam Ravnborg, linux-kernel, Rob Herring,
	Thierry Reding, dri-devel, Krzysztof Kozlowski, patchwork-jzi,
	David Airlie, kernel, kernel test robot

Hi Laurent,

thank you for your review.

On 6/2/23 17:32, Laurent Pinchart wrote:
> Hello Johannes,
> 
> Thank you for the patch.
> 
> On Tue, May 23, 2023 at 10:19:41AM +0200, Johannes Zink wrote:
>> As the LVDS data-mapping property is required in multiple bindings: move
>> it to separate file and include instead of duplicating it.
>>
>> Signed-off-by: Johannes Zink <j.zink@pengutronix.de>
>>
>> ---
>>
>> Changes:
>>
>> v1 -> v2: worked in Rob's review findings (thank you for reviewing my
>>            work): extract common properties to
>>            file and include it instead of duplicating it
>> ---
>>   .../bindings/display/lvds-data-mapping.yaml        | 84 ++++++++++++++++++++++
>>   .../devicetree/bindings/display/lvds.yaml          | 75 +++----------------
>>   2 files changed, 92 insertions(+), 67 deletions(-)
>>
>> diff --git a/Documentation/devicetree/bindings/display/lvds-data-mapping.yaml b/Documentation/devicetree/bindings/display/lvds-data-mapping.yaml
>> new file mode 100644
>> index 000000000000..17ef5c9a5a90
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/display/lvds-data-mapping.yaml
>> @@ -0,0 +1,84 @@
>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
>> +%YAML 1.2
>> +---
>> +$id: http://devicetree.org/schemas/display/lvds-data-mapping.yaml#
>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>> +
>> +title: LVDS Data Mapping
>> +
>> +maintainers:
>> +  - Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
>> +  - Thierry Reding <thierry.reding@gmail.com>
>> +
>> +description: |+
>> +  LVDS is a physical layer specification defined in ANSI/TIA/EIA-644-A. Multiple
>> +  incompatible data link layers have been used over time to transmit image data
>> +  to LVDS devices. This bindings supports devices compatible with the following
>> +  specifications.
>> +
>> +  [JEIDA] "Digital Interface Standards for Monitor", JEIDA-59-1999, February
>> +  1999 (Version 1.0), Japan Electronic Industry Development Association (JEIDA)
>> +  [LDI] "Open LVDS Display Interface", May 1999 (Version 0.95), National
>> +  Semiconductor
>> +  [VESA] "VESA Notebook Panel Standard", October 2007 (Version 1.0), Video
>> +  Electronics Standards Association (VESA)
>> +
>> +  Device compatible with those specifications have been marketed under the
>> +  FPD-Link and FlatLink brands.
>> +
>> +properties:
>> +  data-mapping:
>> +    enum:
>> +      - jeida-18
>> +      - jeida-24
>> +      - vesa-24
>> +    description: |
>> +      The color signals mapping order.
>> +
>> +      LVDS data mappings are defined as follows.
>> +
>> +      - "jeida-18" - 18-bit data mapping compatible with the [JEIDA], [LDI] and
>> +        [VESA] specifications. Data are transferred as follows on 3 LVDS lanes.
>> +
>> +      Slot          0       1       2       3       4       5       6
>> +                ________________                         _________________
>> +      Clock                     \_______________________/
>> +                  ______  ______  ______  ______  ______  ______  ______
>> +      DATA0     ><__G0__><__R5__><__R4__><__R3__><__R2__><__R1__><__R0__><
>> +      DATA1     ><__B1__><__B0__><__G5__><__G4__><__G3__><__G2__><__G1__><
>> +      DATA2     ><_CTL2_><_CTL1_><_CTL0_><__B5__><__B4__><__B3__><__B2__><
>> +
>> +      - "jeida-24" - 24-bit data mapping compatible with the [DSIM] and [LDI]
>> +        specifications. Data are transferred as follows on 4 LVDS lanes.
>> +
>> +      Slot          0       1       2       3       4       5       6
>> +                ________________                         _________________
>> +      Clock                     \_______________________/
>> +                  ______  ______  ______  ______  ______  ______  ______
>> +      DATA0     ><__G2__><__R7__><__R6__><__R5__><__R4__><__R3__><__R2__><
>> +      DATA1     ><__B3__><__B2__><__G7__><__G6__><__G5__><__G4__><__G3__><
>> +      DATA2     ><_CTL2_><_CTL1_><_CTL0_><__B7__><__B6__><__B5__><__B4__><
>> +      DATA3     ><_CTL3_><__B1__><__B0__><__G1__><__G0__><__R1__><__R0__><
>> +
>> +      - "vesa-24" - 24-bit data mapping compatible with the [VESA] specification.
>> +        Data are transferred as follows on 4 LVDS lanes.
>> +
>> +      Slot          0       1       2       3       4       5       6
>> +                ________________                         _________________
>> +      Clock                     \_______________________/
>> +                  ______  ______  ______  ______  ______  ______  ______
>> +      DATA0     ><__G0__><__R5__><__R4__><__R3__><__R2__><__R1__><__R0__><
>> +      DATA1     ><__B1__><__B0__><__G5__><__G4__><__G3__><__G2__><__G1__><
>> +      DATA2     ><_CTL2_><_CTL1_><_CTL0_><__B5__><__B4__><__B3__><__B2__><
>> +      DATA3     ><_CTL3_><__B7__><__B6__><__G7__><__G6__><__R7__><__R6__><
>> +
>> +      Control signals are mapped as follows.
>> +
>> +      CTL0: HSync
>> +      CTL1: VSync
>> +      CTL2: Data Enable
>> +      CTL3: 0
>> +
>> +additionalProperties: true
>> +
>> +...
>> diff --git a/Documentation/devicetree/bindings/display/lvds.yaml b/Documentation/devicetree/bindings/display/lvds.yaml
>> index 7cd2ce7e9c33..2200f986c3cf 100644
>> --- a/Documentation/devicetree/bindings/display/lvds.yaml
>> +++ b/Documentation/devicetree/bindings/display/lvds.yaml
>> @@ -6,83 +6,24 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
>>   
>>   title: LVDS Display Common Properties
>>   
>> +allOf:
>> +  - $ref: lvds-data-mapping.yaml#
>> +
>>   maintainers:
>>     - Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
>>     - Thierry Reding <thierry.reding@gmail.com>
>>   
>>   description: |+
> 
> You can drop the |+ here.

ack, gonna change that in V3.

Best regards
Johannes

> 
> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> 
>> -  LVDS is a physical layer specification defined in ANSI/TIA/EIA-644-A. Multiple
>> -  incompatible data link layers have been used over time to transmit image data
>> -  to LVDS devices. This bindings supports devices compatible with the following
>> -  specifications.
>> -
>> -  [JEIDA] "Digital Interface Standards for Monitor", JEIDA-59-1999, February
>> -  1999 (Version 1.0), Japan Electronic Industry Development Association (JEIDA)
>> -  [LDI] "Open LVDS Display Interface", May 1999 (Version 0.95), National
>> -  Semiconductor
>> -  [VESA] "VESA Notebook Panel Standard", October 2007 (Version 1.0), Video
>> -  Electronics Standards Association (VESA)
>> -
>> -  Device compatible with those specifications have been marketed under the
>> -  FPD-Link and FlatLink brands.
>> +  This binding extends the data mapping defined in lvds-data-mapping.yaml.
>> +  It supports reversing the bit order on the formats defined there in order
>> +  to accomodate for even more specialized data formats, since a variety of
>> +  data formats and layouts is used to drive LVDS displays.
>>   
>>   properties:
>> -  data-mapping:
>> -    enum:
>> -      - jeida-18
>> -      - jeida-24
>> -      - vesa-24
>> -    description: |
>> -      The color signals mapping order.
>> -
>> -      LVDS data mappings are defined as follows.
>> -
>> -      - "jeida-18" - 18-bit data mapping compatible with the [JEIDA], [LDI] and
>> -        [VESA] specifications. Data are transferred as follows on 3 LVDS lanes.
>> -
>> -      Slot          0       1       2       3       4       5       6
>> -                ________________                         _________________
>> -      Clock                     \_______________________/
>> -                  ______  ______  ______  ______  ______  ______  ______
>> -      DATA0     ><__G0__><__R5__><__R4__><__R3__><__R2__><__R1__><__R0__><
>> -      DATA1     ><__B1__><__B0__><__G5__><__G4__><__G3__><__G2__><__G1__><
>> -      DATA2     ><_CTL2_><_CTL1_><_CTL0_><__B5__><__B4__><__B3__><__B2__><
>> -
>> -      - "jeida-24" - 24-bit data mapping compatible with the [DSIM] and [LDI]
>> -        specifications. Data are transferred as follows on 4 LVDS lanes.
>> -
>> -      Slot          0       1       2       3       4       5       6
>> -                ________________                         _________________
>> -      Clock                     \_______________________/
>> -                  ______  ______  ______  ______  ______  ______  ______
>> -      DATA0     ><__G2__><__R7__><__R6__><__R5__><__R4__><__R3__><__R2__><
>> -      DATA1     ><__B3__><__B2__><__G7__><__G6__><__G5__><__G4__><__G3__><
>> -      DATA2     ><_CTL2_><_CTL1_><_CTL0_><__B7__><__B6__><__B5__><__B4__><
>> -      DATA3     ><_CTL3_><__B1__><__B0__><__G1__><__G0__><__R1__><__R0__><
>> -
>> -      - "vesa-24" - 24-bit data mapping compatible with the [VESA] specification.
>> -        Data are transferred as follows on 4 LVDS lanes.
>> -
>> -      Slot          0       1       2       3       4       5       6
>> -                ________________                         _________________
>> -      Clock                     \_______________________/
>> -                  ______  ______  ______  ______  ______  ______  ______
>> -      DATA0     ><__G0__><__R5__><__R4__><__R3__><__R2__><__R1__><__R0__><
>> -      DATA1     ><__B1__><__B0__><__G5__><__G4__><__G3__><__G2__><__G1__><
>> -      DATA2     ><_CTL2_><_CTL1_><_CTL0_><__B5__><__B4__><__B3__><__B2__><
>> -      DATA3     ><_CTL3_><__B7__><__B6__><__G7__><__G6__><__R7__><__R6__><
>> -
>> -      Control signals are mapped as follows.
>> -
>> -      CTL0: HSync
>> -      CTL1: VSync
>> -      CTL2: Data Enable
>> -      CTL3: 0
>> -
>>     data-mirror:
>>       type: boolean
>>       description:
>> -      If set, reverse the bit order described in the data mappings below on all
>> +      If set, reverse the bit order described in the data mappings on all
>>         data lanes, transmitting bits for slots 6 to 0 instead of 0 to 6.
>>   
>>   additionalProperties: true
>>
> 

-- 
Pengutronix e.K.                | Johannes Zink                  |
Steuerwalder Str. 21            | https://www.pengutronix.de/    |
31137 Hildesheim, Germany       | Phone: +49-5121-206917-0       |
Amtsgericht Hildesheim, HRA 2686| Fax:   +49-5121-206917-5555    |


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

* Re: [PATCH v2 2/3] dt-bindings: display: simple: support non-default data-mapping
  2023-06-02 15:35   ` Laurent Pinchart
@ 2023-07-28  8:36     ` Johannes Zink
  0 siblings, 0 replies; 13+ messages in thread
From: Johannes Zink @ 2023-07-28  8:36 UTC (permalink / raw
  To: Laurent Pinchart
  Cc: David Airlie, Daniel Vetter, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Thierry Reding, Neil Armstrong, Sam Ravnborg,
	kernel test robot, Dan Carpenter, patchwork-jzi, kernel,
	dri-devel, devicetree, linux-kernel

Hi Laurent,

thank you for your review.

On 6/2/23 17:35, Laurent Pinchart wrote:
> Hi Johannes,
> 
> Thank you for the patch.
> 
> On Tue, May 23, 2023 at 10:19:42AM +0200, Johannes Zink wrote:
>> Some Displays support more than just a single default lvds data mapping,
> 
> s/lvds/LVDS/

ack, gonna fix in V3

> 
>> which can be used to run displays on only 3 LVDS lanes in the jeida-18
>> data-mapping mode.
>>
>> Add an optional data-mapping property to allow overriding the default
>> data mapping. As it does not generally apply to any display and bus: use
> 
> s/bus:/bus,/

ack, gonna fix in V3

> 
>> it selectively on the innolux,g101ice-l01, which supports changing the
>> data mapping via a strapping pin.
>>
>> Signed-off-by: Johannes Zink <j.zink@pengutronix.de>
>> ---
>>
>> Changes:
>>
>> v1 -> v2: - worked in Rob's review findings (thanks for reviewing my
>>              work): use extracted common property instead of duplicating
>> 	    the property
>> 	  - refined commit message
>> 	  - add an example dts for automated checking
>> ---
>>   .../bindings/display/panel/panel-simple.yaml       | 26 +++++++++++++++++++++-
>>   1 file changed, 25 insertions(+), 1 deletion(-)
>>
>> diff --git a/Documentation/devicetree/bindings/display/panel/panel-simple.yaml b/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
>> index ec50dd268314..698301c8c920 100644
>> --- a/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
>> +++ b/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
>> @@ -21,9 +21,9 @@ description: |
>>   
>>   allOf:
>>     - $ref: panel-common.yaml#
>> +  - $ref: ../lvds-data-mapping.yaml#
>>   
>>   properties:
>> -
>>     compatible:
>>       enum:
>>       # compatible must be listed in alphabetical order, ordered by compatible.
>> @@ -353,6 +353,17 @@ properties:
>>     power-supply: true
>>     no-hpd: true
>>     hpd-gpios: true
>> +  data-mapping: true
> 
> As the property is optional, don't you need a default value ?

as the simple-bus implicitely assumes default data mappings for LVDS panels, I 
think this is not necessary. If the property is not used in a DT, the default 
data mapping is used.

Best regards
Johannes

> 
>> +
>> +if:
>> +  not:
>> +    properties:
>> +      compatible:
>> +        contains:
>> +          const: innolux,g101ice-l01
>> +then:
>> +  properties:
>> +    data-mapping: false
>>   
>>   additionalProperties: false
>>   
>> @@ -372,3 +383,16 @@ examples:
>>           };
>>         };
>>       };
>> +  - |
>> +    panel_lvds: panel-lvds {
>> +      compatible = "innolux,g101ice-l01";
>> +      power-supply = <&vcc_lcd_reg>;
>> +
>> +      data-mapping = "jeida-24";
>> +
>> +      port {
>> +        panel_in_lvds: endpoint {
>> +          remote-endpoint = <&ltdc_out_lvds>;
>> +        };
>> +      };
>> +    };
>>
> 

-- 
Pengutronix e.K.                | Johannes Zink                  |
Steuerwalder Str. 21            | https://www.pengutronix.de/    |
31137 Hildesheim, Germany       | Phone: +49-5121-206917-0       |
Amtsgericht Hildesheim, HRA 2686| Fax:   +49-5121-206917-5555    |


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

end of thread, other threads:[~2023-07-28  8:38 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-23  8:19 [PATCH v2 0/3] Support non-default LVDS data mapping for simple panel Johannes Zink
2023-05-23  8:19 ` [PATCH v2 1/3] dt-bindings: display: move LVDS data-mapping definition to separate file Johannes Zink
2023-05-23 17:16   ` Conor Dooley
2023-06-02 15:32   ` Laurent Pinchart
2023-07-28  8:33     ` Johannes Zink
2023-05-23  8:19 ` [PATCH v2 2/3] dt-bindings: display: simple: support non-default data-mapping Johannes Zink
2023-05-23 17:21   ` Conor Dooley
2023-06-02 15:35   ` Laurent Pinchart
2023-07-28  8:36     ` Johannes Zink
2023-05-23  8:19 ` [PATCH v2 3/3] drm/panel-simple: allow LVDS format override Johannes Zink
2023-06-02 14:34   ` Johannes Zink
2023-06-02 15:39   ` Laurent Pinchart
2023-06-05  6:20     ` Johannes Zink

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).