Hello,
This patch series adds support to the mxsfb driver for bus width override. The need came from a hardware platform where a 18-bpp panel had the R[5:0], G[5:0] and B[5:0] signals connected to LCD_DATA[7:2], LCD_DATA[15:10] and LCD_DATA[23:18] instead of LCD_DATA[5:0], LCD_DATA[11:6] and LCD_DATA[17:12]. The bus width, automatically configured to 18 by querying the panel, is incorrect in this case, and needs to be set to 24.
To solve this issue, a new bus-width DT property is added to the mxsfb DT binding. Patch 1/8 first converts the binding to YAML, with a fix for the compatible string values in 2/8. Patch 3/8 then adds the new property, and 4/8 renames the binding file to fsl,lcdif.yaml to match the usual naming convention. I've kept that patch last to make it easy to drop should should mxsfb.yaml be preferred.
Patches 5/8 to 6/8 then fix the DT sources to match the LCDIF bindings, as I noticed during the conversion that the compatible strings were badly managed (see patch 2/8 for a longer explanation). Patch 7/8 drops an unused clock from DT sources.
Patch 8/8 finally adds support for the bus-width property to the mxsfb driver.
Laurent Pinchart (8): dt-bindings: display: mxsfb: Convert binding to YAML dt-bindings: display: mxsfb: Add and fix compatible strings dt-bindings: display: mxsfb: Add a bus-width endpoint property dt-bindings: display: mxsfb: Rename to fsl,lcdif.yaml ARM: dts: imx: Fix LCDIF compatible strings arm64: dts: imx8mq: Fix LCDIF compatible strings ARM: dts: imx: Remove unneeded LCDIF disp_axi clock drm: mxsfb: Add support for the bus-width DT property
.../bindings/display/fsl,lcdif.yaml | 135 ++++++++++++++++++ .../devicetree/bindings/display/mxsfb.txt | 87 ----------- MAINTAINERS | 2 +- arch/arm/boot/dts/imx6sl.dtsi | 7 +- arch/arm/boot/dts/imx6sll.dtsi | 7 +- arch/arm/boot/dts/imx6sx.dtsi | 4 +- arch/arm/boot/dts/imx6ul.dtsi | 7 +- arch/arm64/boot/dts/freescale/imx8mq.dtsi | 2 +- drivers/gpu/drm/mxsfb/mxsfb_drv.c | 26 ++++ drivers/gpu/drm/mxsfb/mxsfb_drv.h | 2 + drivers/gpu/drm/mxsfb/mxsfb_kms.c | 8 +- 11 files changed, 182 insertions(+), 105 deletions(-) create mode 100644 Documentation/devicetree/bindings/display/fsl,lcdif.yaml delete mode 100644 Documentation/devicetree/bindings/display/mxsfb.txt
Convert the mxsfb binding to YAML. The deprecated binding is dropped, as neither the DT sources nor the driver support it anymore.
The compatible strings are messy, and DT sources use different kinds of combination of documented and undocumented values. Keep it simple for now, and update the example to make it valid. Aligning the binding with the existing DT sources will be performed separately.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com --- .../devicetree/bindings/display/mxsfb.txt | 87 ------------- .../devicetree/bindings/display/mxsfb.yaml | 115 ++++++++++++++++++ MAINTAINERS | 2 +- 3 files changed, 116 insertions(+), 88 deletions(-) delete mode 100644 Documentation/devicetree/bindings/display/mxsfb.txt create mode 100644 Documentation/devicetree/bindings/display/mxsfb.yaml
diff --git a/Documentation/devicetree/bindings/display/mxsfb.txt b/Documentation/devicetree/bindings/display/mxsfb.txt deleted file mode 100644 index c985871c46b3..000000000000 --- a/Documentation/devicetree/bindings/display/mxsfb.txt +++ /dev/null @@ -1,87 +0,0 @@ -* Freescale MXS LCD Interface (LCDIF) - -New bindings: -============= -Required properties: -- compatible: Should be "fsl,imx23-lcdif" for i.MX23. - Should be "fsl,imx28-lcdif" for i.MX28. - Should be "fsl,imx6sx-lcdif" for i.MX6SX. - Should be "fsl,imx8mq-lcdif" for i.MX8MQ. -- reg: Address and length of the register set for LCDIF -- interrupts: Should contain LCDIF interrupt -- clocks: A list of phandle + clock-specifier pairs, one for each - entry in 'clock-names'. -- clock-names: A list of clock names. For MXSFB it should contain: - - "pix" for the LCDIF block clock - - (MX6SX-only) "axi", "disp_axi" for the bus interface clock - -Required sub-nodes: - - port: The connection to an encoder chip. - -Example: - - lcdif1: display-controller@2220000 { - compatible = "fsl,imx6sx-lcdif", "fsl,imx28-lcdif"; - reg = <0x02220000 0x4000>; - interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>; - clocks = <&clks IMX6SX_CLK_LCDIF1_PIX>, - <&clks IMX6SX_CLK_LCDIF_APB>, - <&clks IMX6SX_CLK_DISPLAY_AXI>; - clock-names = "pix", "axi", "disp_axi"; - - port { - parallel_out: endpoint { - remote-endpoint = <&panel_in_parallel>; - }; - }; - }; - -Deprecated bindings: -==================== -Required properties: -- compatible: Should be "fsl,imx23-lcdif" for i.MX23. - Should be "fsl,imx28-lcdif" for i.MX28. -- reg: Address and length of the register set for LCDIF -- interrupts: Should contain LCDIF interrupts -- display: phandle to display node (see below for details) - -* display node - -Required properties: -- bits-per-pixel: <16> for RGB565, <32> for RGB888/666. -- bus-width: number of data lines. Could be <8>, <16>, <18> or <24>. - -Required sub-node: -- display-timings: Refer to binding doc display-timing.txt for details. - -Examples: - -lcdif@80030000 { - compatible = "fsl,imx28-lcdif"; - reg = <0x80030000 2000>; - interrupts = <38 86>; - - display: display { - bits-per-pixel = <32>; - bus-width = <24>; - - display-timings { - native-mode = <&timing0>; - timing0: timing0 { - clock-frequency = <33500000>; - hactive = <800>; - vactive = <480>; - hfront-porch = <164>; - hback-porch = <89>; - hsync-len = <10>; - vback-porch = <23>; - vfront-porch = <10>; - vsync-len = <10>; - hsync-active = <0>; - vsync-active = <0>; - de-active = <1>; - pixelclk-active = <0>; - }; - }; - }; -}; diff --git a/Documentation/devicetree/bindings/display/mxsfb.yaml b/Documentation/devicetree/bindings/display/mxsfb.yaml new file mode 100644 index 000000000000..202381ec5bb7 --- /dev/null +++ b/Documentation/devicetree/bindings/display/mxsfb.yaml @@ -0,0 +1,115 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/display/mxsfb.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Freescale/NXP i.MX LCD Interface (LCDIF) + +maintainers: + - Marek Vasut marex@denx.de + - Stefan Agner stefan@agner.ch + +description: | + (e)LCDIF display controller found in the Freescale/NXP i.MX SoCs. + +properties: + compatible: + enum: + - fsl,imx23-lcdif + - fsl,imx28-lcdif + - fsl,imx6sx-lcdif + - fsl,imx8mq-lcdif + + reg: + maxItems: 1 + + clocks: + items: + - description: Pixel clock + - description: Bus clock + - description: Display AXI clock + minItems: 1 + + clock-names: + items: + - const: "pix" + - const: "axi" + - const: "disp_axi" + minItems: 1 + + interrupts: + maxItems: 1 + + port: + description: The LCDIF output port + type: object + + properties: + endpoint: + type: object + + properties: + remote-endpoint: + $ref: /schemas/types.yaml#/definitions/phandle + + required: + - remote-endpoint + + additionalProperties: false + + additionalProperties: false + +required: + - compatible + - reg + - clocks + - interrupts + - port + +additionalProperties: false + +allOf: + - if: + properties: + compatible: + contains: + const: fsl,imx6sx-lcdif + then: + properties: + clocks: + minItems: 2 + maxItems: 3 + clock-names: + minItems: 2 + maxItems: 3 + required: + - clock-names + else: + properties: + clocks: + minItems: 1 + clock-names: + minItems: 1 + +examples: + - | + #include <dt-bindings/clock/imx6sx-clock.h> + #include <dt-bindings/interrupt-controller/arm-gic.h> + + display-controller@2220000 { + compatible = "fsl,imx6sx-lcdif"; + reg = <0x02220000 0x4000>; + interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clks IMX6SX_CLK_LCDIF1_PIX>, + <&clks IMX6SX_CLK_LCDIF_APB>, + <&clks IMX6SX_CLK_DISPLAY_AXI>; + clock-names = "pix", "axi", "disp_axi"; + + port { + endpoint { + remote-endpoint = <&panel_in>; + }; + }; + }; +... diff --git a/MAINTAINERS b/MAINTAINERS index e3467e88714f..e3fac23383d2 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -11757,7 +11757,7 @@ M: Stefan Agner stefan@agner.ch L: dri-devel@lists.freedesktop.org S: Supported T: git git://anongit.freedesktop.org/drm/drm-misc -F: Documentation/devicetree/bindings/display/mxsfb.txt +F: Documentation/devicetree/bindings/display/mxsfb.yaml F: drivers/gpu/drm/mxsfb/
MYLEX DAC960 PCI RAID Controller
Hi Laurent.
Good to see one of the imx bindings migrating to yaml.
On Thu, Aug 13, 2020 at 04:29:03AM +0300, Laurent Pinchart wrote:
Convert the mxsfb binding to YAML. The deprecated binding is dropped, as neither the DT sources nor the driver support it anymore.
The compatible strings are messy, and DT sources use different kinds of combination of documented and undocumented values. Keep it simple for now, and update the example to make it valid. Aligning the binding with the existing DT sources will be performed separately.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
Reviewed-by: Sam Ravnborg sam@ravnborg.org But see below for a few nits
.../devicetree/bindings/display/mxsfb.txt | 87 ------------- .../devicetree/bindings/display/mxsfb.yaml | 115 ++++++++++++++++++ MAINTAINERS | 2 +- 3 files changed, 116 insertions(+), 88 deletions(-) delete mode 100644 Documentation/devicetree/bindings/display/mxsfb.txt create mode 100644 Documentation/devicetree/bindings/display/mxsfb.yaml
diff --git a/Documentation/devicetree/bindings/display/mxsfb.txt b/Documentation/devicetree/bindings/display/mxsfb.txt deleted file mode 100644 index c985871c46b3..000000000000 --- a/Documentation/devicetree/bindings/display/mxsfb.txt +++ /dev/null @@ -1,87 +0,0 @@ -* Freescale MXS LCD Interface (LCDIF)
-New bindings:
-Required properties: -- compatible: Should be "fsl,imx23-lcdif" for i.MX23.
Should be "fsl,imx28-lcdif" for i.MX28.
Should be "fsl,imx6sx-lcdif" for i.MX6SX.
Should be "fsl,imx8mq-lcdif" for i.MX8MQ.
-- reg: Address and length of the register set for LCDIF -- interrupts: Should contain LCDIF interrupt -- clocks: A list of phandle + clock-specifier pairs, one for each
entry in 'clock-names'.
-- clock-names: A list of clock names. For MXSFB it should contain:
- "pix" for the LCDIF block clock
- (MX6SX-only) "axi", "disp_axi" for the bus interface clock
-Required sub-nodes:
- port: The connection to an encoder chip.
-Example:
- lcdif1: display-controller@2220000 {
compatible = "fsl,imx6sx-lcdif", "fsl,imx28-lcdif";
reg = <0x02220000 0x4000>;
interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX6SX_CLK_LCDIF1_PIX>,
<&clks IMX6SX_CLK_LCDIF_APB>,
<&clks IMX6SX_CLK_DISPLAY_AXI>;
clock-names = "pix", "axi", "disp_axi";
port {
parallel_out: endpoint {
remote-endpoint = <&panel_in_parallel>;
};
};
- };
-Deprecated bindings:
-Required properties: -- compatible: Should be "fsl,imx23-lcdif" for i.MX23.
Should be "fsl,imx28-lcdif" for i.MX28.
-- reg: Address and length of the register set for LCDIF -- interrupts: Should contain LCDIF interrupts -- display: phandle to display node (see below for details)
-* display node
-Required properties: -- bits-per-pixel: <16> for RGB565, <32> for RGB888/666. -- bus-width: number of data lines. Could be <8>, <16>, <18> or <24>.
-Required sub-node: -- display-timings: Refer to binding doc display-timing.txt for details.
-Examples:
-lcdif@80030000 {
- compatible = "fsl,imx28-lcdif";
- reg = <0x80030000 2000>;
- interrupts = <38 86>;
- display: display {
bits-per-pixel = <32>;
bus-width = <24>;
display-timings {
native-mode = <&timing0>;
timing0: timing0 {
clock-frequency = <33500000>;
hactive = <800>;
vactive = <480>;
hfront-porch = <164>;
hback-porch = <89>;
hsync-len = <10>;
vback-porch = <23>;
vfront-porch = <10>;
vsync-len = <10>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <1>;
pixelclk-active = <0>;
};
};
- };
-}; diff --git a/Documentation/devicetree/bindings/display/mxsfb.yaml b/Documentation/devicetree/bindings/display/mxsfb.yaml new file mode 100644 index 000000000000..202381ec5bb7 --- /dev/null +++ b/Documentation/devicetree/bindings/display/mxsfb.yaml @@ -0,0 +1,115 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/display/mxsfb.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml#
+title: Freescale/NXP i.MX LCD Interface (LCDIF)
+maintainers:
- Marek Vasut marex@denx.de
- Stefan Agner stefan@agner.ch
+description: |
- (e)LCDIF display controller found in the Freescale/NXP i.MX SoCs.
+properties:
- compatible:
- enum:
- fsl,imx23-lcdif
- fsl,imx28-lcdif
- fsl,imx6sx-lcdif
- fsl,imx8mq-lcdif
- reg:
- maxItems: 1
- clocks:
- items:
- description: Pixel clock
- description: Bus clock
- description: Display AXI clock
- minItems: 1
- clock-names:
- items:
- const: "pix"
- const: "axi"
- const: "disp_axi"
- minItems: 1
- interrupts:
- maxItems: 1
- port:
- description: The LCDIF output port
- type: object
- properties:
endpoint:
type: object
properties:
remote-endpoint:
$ref: /schemas/types.yaml#/definitions/phandle
required:
- remote-endpoint
additionalProperties: false
- additionalProperties: false
+required:
- compatible
- reg
- clocks
- interrupts
- port
+additionalProperties: false
+allOf:
- if:
properties:
compatible:
contains:
const: fsl,imx6sx-lcdif
- then:
properties:
clocks:
minItems: 2
maxItems: 3
clock-names:
minItems: 2
maxItems: 3
required:
- clock-names
- else:
properties:
clocks:
minItems: 1
clock-names:
minItems: 1
The else parts looks like it is not needed. The clock, clock-names properties has minItems: 1 already from above.
+examples:
- |
- #include <dt-bindings/clock/imx6sx-clock.h>
- #include <dt-bindings/interrupt-controller/arm-gic.h>
- display-controller@2220000 {
compatible = "fsl,imx6sx-lcdif";
reg = <0x02220000 0x4000>;
interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX6SX_CLK_LCDIF1_PIX>,
<&clks IMX6SX_CLK_LCDIF_APB>,
<&clks IMX6SX_CLK_DISPLAY_AXI>;
clock-names = "pix", "axi", "disp_axi";
port {
endpoint {
remote-endpoint = <&panel_in>;
};
};
- };
empty line before "..." - at least most files have it
+... diff --git a/MAINTAINERS b/MAINTAINERS index e3467e88714f..e3fac23383d2 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -11757,7 +11757,7 @@ M: Stefan Agner stefan@agner.ch L: dri-devel@lists.freedesktop.org S: Supported T: git git://anongit.freedesktop.org/drm/drm-misc -F: Documentation/devicetree/bindings/display/mxsfb.txt +F: Documentation/devicetree/bindings/display/mxsfb.yaml F: drivers/gpu/drm/mxsfb/
MYLEX DAC960 PCI RAID Controller
Regards,
Laurent Pinchart
dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Hi Sam,
On Sun, Aug 16, 2020 at 08:22:42AM +0200, Sam Ravnborg wrote:
Hi Laurent.
Good to see one of the imx bindings migrating to yaml.
On Thu, Aug 13, 2020 at 04:29:03AM +0300, Laurent Pinchart wrote:
Convert the mxsfb binding to YAML. The deprecated binding is dropped, as neither the DT sources nor the driver support it anymore.
The compatible strings are messy, and DT sources use different kinds of combination of documented and undocumented values. Keep it simple for now, and update the example to make it valid. Aligning the binding with the existing DT sources will be performed separately.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
Reviewed-by: Sam Ravnborg sam@ravnborg.org But see below for a few nits
.../devicetree/bindings/display/mxsfb.txt | 87 ------------- .../devicetree/bindings/display/mxsfb.yaml | 115 ++++++++++++++++++ MAINTAINERS | 2 +- 3 files changed, 116 insertions(+), 88 deletions(-) delete mode 100644 Documentation/devicetree/bindings/display/mxsfb.txt create mode 100644 Documentation/devicetree/bindings/display/mxsfb.yaml
diff --git a/Documentation/devicetree/bindings/display/mxsfb.txt b/Documentation/devicetree/bindings/display/mxsfb.txt deleted file mode 100644 index c985871c46b3..000000000000 --- a/Documentation/devicetree/bindings/display/mxsfb.txt +++ /dev/null @@ -1,87 +0,0 @@ -* Freescale MXS LCD Interface (LCDIF)
-New bindings:
-Required properties: -- compatible: Should be "fsl,imx23-lcdif" for i.MX23.
Should be "fsl,imx28-lcdif" for i.MX28.
Should be "fsl,imx6sx-lcdif" for i.MX6SX.
Should be "fsl,imx8mq-lcdif" for i.MX8MQ.
-- reg: Address and length of the register set for LCDIF -- interrupts: Should contain LCDIF interrupt -- clocks: A list of phandle + clock-specifier pairs, one for each
entry in 'clock-names'.
-- clock-names: A list of clock names. For MXSFB it should contain:
- "pix" for the LCDIF block clock
- (MX6SX-only) "axi", "disp_axi" for the bus interface clock
-Required sub-nodes:
- port: The connection to an encoder chip.
-Example:
- lcdif1: display-controller@2220000 {
compatible = "fsl,imx6sx-lcdif", "fsl,imx28-lcdif";
reg = <0x02220000 0x4000>;
interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX6SX_CLK_LCDIF1_PIX>,
<&clks IMX6SX_CLK_LCDIF_APB>,
<&clks IMX6SX_CLK_DISPLAY_AXI>;
clock-names = "pix", "axi", "disp_axi";
port {
parallel_out: endpoint {
remote-endpoint = <&panel_in_parallel>;
};
};
- };
-Deprecated bindings:
-Required properties: -- compatible: Should be "fsl,imx23-lcdif" for i.MX23.
Should be "fsl,imx28-lcdif" for i.MX28.
-- reg: Address and length of the register set for LCDIF -- interrupts: Should contain LCDIF interrupts -- display: phandle to display node (see below for details)
-* display node
-Required properties: -- bits-per-pixel: <16> for RGB565, <32> for RGB888/666. -- bus-width: number of data lines. Could be <8>, <16>, <18> or <24>.
-Required sub-node: -- display-timings: Refer to binding doc display-timing.txt for details.
-Examples:
-lcdif@80030000 {
- compatible = "fsl,imx28-lcdif";
- reg = <0x80030000 2000>;
- interrupts = <38 86>;
- display: display {
bits-per-pixel = <32>;
bus-width = <24>;
display-timings {
native-mode = <&timing0>;
timing0: timing0 {
clock-frequency = <33500000>;
hactive = <800>;
vactive = <480>;
hfront-porch = <164>;
hback-porch = <89>;
hsync-len = <10>;
vback-porch = <23>;
vfront-porch = <10>;
vsync-len = <10>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <1>;
pixelclk-active = <0>;
};
};
- };
-}; diff --git a/Documentation/devicetree/bindings/display/mxsfb.yaml b/Documentation/devicetree/bindings/display/mxsfb.yaml new file mode 100644 index 000000000000..202381ec5bb7 --- /dev/null +++ b/Documentation/devicetree/bindings/display/mxsfb.yaml @@ -0,0 +1,115 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/display/mxsfb.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml#
+title: Freescale/NXP i.MX LCD Interface (LCDIF)
+maintainers:
- Marek Vasut marex@denx.de
- Stefan Agner stefan@agner.ch
+description: |
- (e)LCDIF display controller found in the Freescale/NXP i.MX SoCs.
+properties:
- compatible:
- enum:
- fsl,imx23-lcdif
- fsl,imx28-lcdif
- fsl,imx6sx-lcdif
- fsl,imx8mq-lcdif
- reg:
- maxItems: 1
- clocks:
- items:
- description: Pixel clock
- description: Bus clock
- description: Display AXI clock
- minItems: 1
- clock-names:
- items:
- const: "pix"
- const: "axi"
- const: "disp_axi"
- minItems: 1
- interrupts:
- maxItems: 1
- port:
- description: The LCDIF output port
- type: object
- properties:
endpoint:
type: object
properties:
remote-endpoint:
$ref: /schemas/types.yaml#/definitions/phandle
required:
- remote-endpoint
additionalProperties: false
- additionalProperties: false
+required:
- compatible
- reg
- clocks
- interrupts
- port
+additionalProperties: false
+allOf:
- if:
properties:
compatible:
contains:
const: fsl,imx6sx-lcdif
- then:
properties:
clocks:
minItems: 2
maxItems: 3
clock-names:
minItems: 2
maxItems: 3
required:
- clock-names
- else:
properties:
clocks:
minItems: 1
clock-names:
minItems: 1
The else parts looks like it is not needed. The clock, clock-names properties has minItems: 1 already from above.
Conceptually you're right, this should be maxItems, not minItems. However, the DT schema checker automatically adds a maxItems property that equal minItems when only minItems is specified (and the other way around as well). This is meant to allow shorter notations. I'm not convinced it's a good idea, but that's the way it is today.
I'll change to maxItems as it's more explicit.
+examples:
- |
- #include <dt-bindings/clock/imx6sx-clock.h>
- #include <dt-bindings/interrupt-controller/arm-gic.h>
- display-controller@2220000 {
compatible = "fsl,imx6sx-lcdif";
reg = <0x02220000 0x4000>;
interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX6SX_CLK_LCDIF1_PIX>,
<&clks IMX6SX_CLK_LCDIF_APB>,
<&clks IMX6SX_CLK_DISPLAY_AXI>;
clock-names = "pix", "axi", "disp_axi";
port {
endpoint {
remote-endpoint = <&panel_in>;
};
};
- };
empty line before "..." - at least most files have it
I'll add that.
+... diff --git a/MAINTAINERS b/MAINTAINERS index e3467e88714f..e3fac23383d2 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -11757,7 +11757,7 @@ M: Stefan Agner stefan@agner.ch L: dri-devel@lists.freedesktop.org S: Supported T: git git://anongit.freedesktop.org/drm/drm-misc -F: Documentation/devicetree/bindings/display/mxsfb.txt +F: Documentation/devicetree/bindings/display/mxsfb.yaml F: drivers/gpu/drm/mxsfb/
MYLEX DAC960 PCI RAID Controller
On Thu, Aug 13, 2020 at 04:29:03AM +0300, Laurent Pinchart wrote:
Convert the mxsfb binding to YAML. The deprecated binding is dropped, as neither the DT sources nor the driver support it anymore.
Ah, the first display controller I worked on...
The compatible strings are messy, and DT sources use different kinds of combination of documented and undocumented values. Keep it simple for now, and update the example to make it valid. Aligning the binding with the existing DT sources will be performed separately.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
.../devicetree/bindings/display/mxsfb.txt | 87 ------------- .../devicetree/bindings/display/mxsfb.yaml | 115 ++++++++++++++++++ MAINTAINERS | 2 +- 3 files changed, 116 insertions(+), 88 deletions(-) delete mode 100644 Documentation/devicetree/bindings/display/mxsfb.txt create mode 100644 Documentation/devicetree/bindings/display/mxsfb.yaml
diff --git a/Documentation/devicetree/bindings/display/mxsfb.txt b/Documentation/devicetree/bindings/display/mxsfb.txt deleted file mode 100644 index c985871c46b3..000000000000 --- a/Documentation/devicetree/bindings/display/mxsfb.txt +++ /dev/null @@ -1,87 +0,0 @@ -* Freescale MXS LCD Interface (LCDIF)
-New bindings:
-Required properties: -- compatible: Should be "fsl,imx23-lcdif" for i.MX23.
Should be "fsl,imx28-lcdif" for i.MX28.
Should be "fsl,imx6sx-lcdif" for i.MX6SX.
Should be "fsl,imx8mq-lcdif" for i.MX8MQ.
-- reg: Address and length of the register set for LCDIF -- interrupts: Should contain LCDIF interrupt -- clocks: A list of phandle + clock-specifier pairs, one for each
entry in 'clock-names'.
-- clock-names: A list of clock names. For MXSFB it should contain:
- "pix" for the LCDIF block clock
- (MX6SX-only) "axi", "disp_axi" for the bus interface clock
-Required sub-nodes:
- port: The connection to an encoder chip.
-Example:
- lcdif1: display-controller@2220000 {
compatible = "fsl,imx6sx-lcdif", "fsl,imx28-lcdif";
reg = <0x02220000 0x4000>;
interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX6SX_CLK_LCDIF1_PIX>,
<&clks IMX6SX_CLK_LCDIF_APB>,
<&clks IMX6SX_CLK_DISPLAY_AXI>;
clock-names = "pix", "axi", "disp_axi";
port {
parallel_out: endpoint {
remote-endpoint = <&panel_in_parallel>;
};
};
- };
-Deprecated bindings:
-Required properties: -- compatible: Should be "fsl,imx23-lcdif" for i.MX23.
Should be "fsl,imx28-lcdif" for i.MX28.
-- reg: Address and length of the register set for LCDIF -- interrupts: Should contain LCDIF interrupts -- display: phandle to display node (see below for details)
-* display node
-Required properties: -- bits-per-pixel: <16> for RGB565, <32> for RGB888/666. -- bus-width: number of data lines. Could be <8>, <16>, <18> or <24>.
-Required sub-node: -- display-timings: Refer to binding doc display-timing.txt for details.
-Examples:
-lcdif@80030000 {
- compatible = "fsl,imx28-lcdif";
- reg = <0x80030000 2000>;
- interrupts = <38 86>;
- display: display {
bits-per-pixel = <32>;
bus-width = <24>;
display-timings {
native-mode = <&timing0>;
timing0: timing0 {
clock-frequency = <33500000>;
hactive = <800>;
vactive = <480>;
hfront-porch = <164>;
hback-porch = <89>;
hsync-len = <10>;
vback-porch = <23>;
vfront-porch = <10>;
vsync-len = <10>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <1>;
pixelclk-active = <0>;
};
};
- };
-}; diff --git a/Documentation/devicetree/bindings/display/mxsfb.yaml b/Documentation/devicetree/bindings/display/mxsfb.yaml new file mode 100644 index 000000000000..202381ec5bb7 --- /dev/null +++ b/Documentation/devicetree/bindings/display/mxsfb.yaml @@ -0,0 +1,115 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/display/mxsfb.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml#
+title: Freescale/NXP i.MX LCD Interface (LCDIF)
+maintainers:
- Marek Vasut marex@denx.de
- Stefan Agner stefan@agner.ch
+description: |
- (e)LCDIF display controller found in the Freescale/NXP i.MX SoCs.
+properties:
- compatible:
- enum:
- fsl,imx23-lcdif
- fsl,imx28-lcdif
- fsl,imx6sx-lcdif
- fsl,imx8mq-lcdif
- reg:
- maxItems: 1
- clocks:
- items:
- description: Pixel clock
- description: Bus clock
- description: Display AXI clock
- minItems: 1
- clock-names:
- items:
- const: "pix"
- const: "axi"
- const: "disp_axi"
Don't need quotes here.
- minItems: 1
- interrupts:
- maxItems: 1
- port:
- description: The LCDIF output port
- type: object
- properties:
endpoint:
type: object
properties:
remote-endpoint:
$ref: /schemas/types.yaml#/definitions/phandle
required:
- remote-endpoint
additionalProperties: false
- additionalProperties: false
+required:
- compatible
- reg
- clocks
- interrupts
- port
+additionalProperties: false
+allOf:
- if:
properties:
compatible:
contains:
const: fsl,imx6sx-lcdif
- then:
properties:
clocks:
minItems: 2
maxItems: 3
clock-names:
minItems: 2
maxItems: 3
required:
- clock-names
- else:
properties:
clocks:
minItems: 1
clock-names:
minItems: 1
+examples:
- |
- #include <dt-bindings/clock/imx6sx-clock.h>
- #include <dt-bindings/interrupt-controller/arm-gic.h>
- display-controller@2220000 {
compatible = "fsl,imx6sx-lcdif";
reg = <0x02220000 0x4000>;
interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX6SX_CLK_LCDIF1_PIX>,
<&clks IMX6SX_CLK_LCDIF_APB>,
<&clks IMX6SX_CLK_DISPLAY_AXI>;
clock-names = "pix", "axi", "disp_axi";
port {
endpoint {
remote-endpoint = <&panel_in>;
};
};
- };
+... diff --git a/MAINTAINERS b/MAINTAINERS index e3467e88714f..e3fac23383d2 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -11757,7 +11757,7 @@ M: Stefan Agner stefan@agner.ch L: dri-devel@lists.freedesktop.org S: Supported T: git git://anongit.freedesktop.org/drm/drm-misc -F: Documentation/devicetree/bindings/display/mxsfb.txt +F: Documentation/devicetree/bindings/display/mxsfb.yaml F: drivers/gpu/drm/mxsfb/
MYLEX DAC960 PCI RAID Controller
Regards,
Laurent Pinchart
Additional compatible strings have been added in DT source for the i.MX6SL, i.MX6SLL, i.MX6UL and i.MX7D without updating the bindings. Most of the upstream DT sources use the fsl,imx28-lcdif compatible string, which mostly predates the realization that the LCDIF in the i.MX6 and newer SoCs have extra features compared to the i.MX28.
Update the bindings to add the missing compatible strings, with the correct fallback values. This fails to validate some of the upstream DT sources. Instead of adding the incorrect compatible fallback to the binding, the sources should be updated separately.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com --- .../devicetree/bindings/display/mxsfb.yaml | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/Documentation/devicetree/bindings/display/mxsfb.yaml b/Documentation/devicetree/bindings/display/mxsfb.yaml index 202381ec5bb7..ec6533b1d4a3 100644 --- a/Documentation/devicetree/bindings/display/mxsfb.yaml +++ b/Documentation/devicetree/bindings/display/mxsfb.yaml @@ -15,11 +15,19 @@ description: |
properties: compatible: - enum: - - fsl,imx23-lcdif - - fsl,imx28-lcdif - - fsl,imx6sx-lcdif - - fsl,imx8mq-lcdif + oneOf: + - enum: + - fsl,imx23-lcdif + - fsl,imx28-lcdif + - fsl,imx6sx-lcdif + - items: + - enum: + - fsl,imx6sl-lcdif + - fsl,imx6sll-lcdif + - fsl,imx6ul-lcdif + - fsl,imx7d-lcdif + - fsl,imx8mq-lcdif + - const: fsl,imx6sx-lcdif
reg: maxItems: 1
On Thu, Aug 13, 2020 at 04:29:04AM +0300, Laurent Pinchart wrote:
Additional compatible strings have been added in DT source for the i.MX6SL, i.MX6SLL, i.MX6UL and i.MX7D without updating the bindings. Most of the upstream DT sources use the fsl,imx28-lcdif compatible string, which mostly predates the realization that the LCDIF in the i.MX6 and newer SoCs have extra features compared to the i.MX28.
Update the bindings to add the missing compatible strings, with the correct fallback values. This fails to validate some of the upstream DT sources. Instead of adding the incorrect compatible fallback to the binding, the sources should be updated separately.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
.../devicetree/bindings/display/mxsfb.yaml | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/Documentation/devicetree/bindings/display/mxsfb.yaml b/Documentation/devicetree/bindings/display/mxsfb.yaml index 202381ec5bb7..ec6533b1d4a3 100644 --- a/Documentation/devicetree/bindings/display/mxsfb.yaml +++ b/Documentation/devicetree/bindings/display/mxsfb.yaml @@ -15,11 +15,19 @@ description: |
properties: compatible:
- enum:
- fsl,imx23-lcdif
- fsl,imx28-lcdif
- fsl,imx6sx-lcdif
- fsl,imx8mq-lcdif
- oneOf:
- enum:
- fsl,imx23-lcdif
- fsl,imx28-lcdif
- fsl,imx6sx-lcdif
Indent correct.
- items:
- enum:
- fsl,imx6sl-lcdif
- fsl,imx6sll-lcdif
- fsl,imx6ul-lcdif
- fsl,imx7d-lcdif
- fsl,imx8mq-lcdif
Indent shall be two more spaces like above. (This is at least my best uderstanding)
- const: fsl,imx6sx-lcdif
With the above the following compatibles are supported:
"fsl,imx23-lcdif" "fsl,imx28-lcdif" "fsl,imx6sx-lcdif" "fsl,imx8mq-lcdif"
"fsl,imx6sl-lcdif", "fsl,imx6sx-lcdif" "fsl,imx6sll-lcdif", "fsl,imx6sx-lcdif" "fsl,imx6ul-lcdif", "fsl,imx6sx-lcdif" "fsl,imx7d-lcdif", "fsl,imx6sx-lcdif" "fsl,imx8mq-lcdif", "fsl,imx6sx-lcdif"
So the fallback value is the later "fsl,imx6sx-lcdif" which looks ok.
With indent fixed (or explained why I am wrong): Reviewed-by: Sam Ravnborg sam@ravnborg.org
reg: maxItems: 1 -- Regards,
Laurent Pinchart
dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Hi Sam,
On Sun, Aug 16, 2020 at 08:39:33AM +0200, Sam Ravnborg wrote:
On Thu, Aug 13, 2020 at 04:29:04AM +0300, Laurent Pinchart wrote:
Additional compatible strings have been added in DT source for the i.MX6SL, i.MX6SLL, i.MX6UL and i.MX7D without updating the bindings. Most of the upstream DT sources use the fsl,imx28-lcdif compatible string, which mostly predates the realization that the LCDIF in the i.MX6 and newer SoCs have extra features compared to the i.MX28.
Update the bindings to add the missing compatible strings, with the correct fallback values. This fails to validate some of the upstream DT sources. Instead of adding the incorrect compatible fallback to the binding, the sources should be updated separately.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
.../devicetree/bindings/display/mxsfb.yaml | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/Documentation/devicetree/bindings/display/mxsfb.yaml b/Documentation/devicetree/bindings/display/mxsfb.yaml index 202381ec5bb7..ec6533b1d4a3 100644 --- a/Documentation/devicetree/bindings/display/mxsfb.yaml +++ b/Documentation/devicetree/bindings/display/mxsfb.yaml @@ -15,11 +15,19 @@ description: |
properties: compatible:
- enum:
- fsl,imx23-lcdif
- fsl,imx28-lcdif
- fsl,imx6sx-lcdif
- fsl,imx8mq-lcdif
- oneOf:
- enum:
- fsl,imx23-lcdif
- fsl,imx28-lcdif
- fsl,imx6sx-lcdif
Indent correct.
- items:
- enum:
- fsl,imx6sl-lcdif
- fsl,imx6sll-lcdif
- fsl,imx6ul-lcdif
- fsl,imx7d-lcdif
- fsl,imx8mq-lcdif
Indent shall be two more spaces like above. (This is at least my best uderstanding)
I think you're right. I wonder why dt_binding_check doesn't complain. I'll fix it anyway.
- const: fsl,imx6sx-lcdif
With the above the following compatibles are supported:
"fsl,imx23-lcdif" "fsl,imx28-lcdif" "fsl,imx6sx-lcdif" "fsl,imx8mq-lcdif"
"fsl,imx6sl-lcdif", "fsl,imx6sx-lcdif" "fsl,imx6sll-lcdif", "fsl,imx6sx-lcdif" "fsl,imx6ul-lcdif", "fsl,imx6sx-lcdif" "fsl,imx7d-lcdif", "fsl,imx6sx-lcdif" "fsl,imx8mq-lcdif", "fsl,imx6sx-lcdif"
So the fallback value is the later "fsl,imx6sx-lcdif" which looks ok.
With indent fixed (or explained why I am wrong): Reviewed-by: Sam Ravnborg sam@ravnborg.org
reg: maxItems: 1
On Mon, Aug 17, 2020 at 03:04:06AM +0300, Laurent Pinchart wrote:
Hi Sam,
On Sun, Aug 16, 2020 at 08:39:33AM +0200, Sam Ravnborg wrote:
On Thu, Aug 13, 2020 at 04:29:04AM +0300, Laurent Pinchart wrote:
Additional compatible strings have been added in DT source for the i.MX6SL, i.MX6SLL, i.MX6UL and i.MX7D without updating the bindings. Most of the upstream DT sources use the fsl,imx28-lcdif compatible string, which mostly predates the realization that the LCDIF in the i.MX6 and newer SoCs have extra features compared to the i.MX28.
Update the bindings to add the missing compatible strings, with the correct fallback values. This fails to validate some of the upstream DT sources. Instead of adding the incorrect compatible fallback to the binding, the sources should be updated separately.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
.../devicetree/bindings/display/mxsfb.yaml | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/Documentation/devicetree/bindings/display/mxsfb.yaml b/Documentation/devicetree/bindings/display/mxsfb.yaml index 202381ec5bb7..ec6533b1d4a3 100644 --- a/Documentation/devicetree/bindings/display/mxsfb.yaml +++ b/Documentation/devicetree/bindings/display/mxsfb.yaml @@ -15,11 +15,19 @@ description: |
properties: compatible:
- enum:
- fsl,imx23-lcdif
- fsl,imx28-lcdif
- fsl,imx6sx-lcdif
- fsl,imx8mq-lcdif
- oneOf:
- enum:
- fsl,imx23-lcdif
- fsl,imx28-lcdif
- fsl,imx6sx-lcdif
Indent correct.
- items:
- enum:
- fsl,imx6sl-lcdif
- fsl,imx6sll-lcdif
- fsl,imx6ul-lcdif
- fsl,imx7d-lcdif
- fsl,imx8mq-lcdif
Indent shall be two more spaces like above. (This is at least my best uderstanding)
I think you're right. I wonder why dt_binding_check doesn't complain. I'll fix it anyway.
Because I haven't integrated yamllint yet. I do have a config file at least.
- const: fsl,imx6sx-lcdif
With the above the following compatibles are supported:
"fsl,imx23-lcdif" "fsl,imx28-lcdif" "fsl,imx6sx-lcdif" "fsl,imx8mq-lcdif"
"fsl,imx6sl-lcdif", "fsl,imx6sx-lcdif" "fsl,imx6sll-lcdif", "fsl,imx6sx-lcdif" "fsl,imx6ul-lcdif", "fsl,imx6sx-lcdif" "fsl,imx7d-lcdif", "fsl,imx6sx-lcdif" "fsl,imx8mq-lcdif", "fsl,imx6sx-lcdif"
So the fallback value is the later "fsl,imx6sx-lcdif" which looks ok.
With indent fixed (or explained why I am wrong): Reviewed-by: Sam Ravnborg sam@ravnborg.org
reg: maxItems: 1
-- Regards,
Laurent Pinchart
On 2020-08-13 03:29, Laurent Pinchart wrote:
Additional compatible strings have been added in DT source for the i.MX6SL, i.MX6SLL, i.MX6UL and i.MX7D without updating the bindings. Most of the upstream DT sources use the fsl,imx28-lcdif compatible string, which mostly predates the realization that the LCDIF in the i.MX6 and newer SoCs have extra features compared to the i.MX28.
Agreed, we should add fsl,imx6sx-lcdif for those devices.
But shouldn't we also keep fsl,imx28-lcdif? From what I can tell, the devices can be driven by a driver only supporting fsl,imx28-lcdif semantics, right?
-- Stefan
Update the bindings to add the missing compatible strings, with the correct fallback values. This fails to validate some of the upstream DT sources. Instead of adding the incorrect compatible fallback to the binding, the sources should be updated separately.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
.../devicetree/bindings/display/mxsfb.yaml | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/Documentation/devicetree/bindings/display/mxsfb.yaml b/Documentation/devicetree/bindings/display/mxsfb.yaml index 202381ec5bb7..ec6533b1d4a3 100644 --- a/Documentation/devicetree/bindings/display/mxsfb.yaml +++ b/Documentation/devicetree/bindings/display/mxsfb.yaml @@ -15,11 +15,19 @@ description: |
properties: compatible:
- enum:
- fsl,imx23-lcdif
- fsl,imx28-lcdif
- fsl,imx6sx-lcdif
- fsl,imx8mq-lcdif
oneOf:
- enum:
- fsl,imx23-lcdif
- fsl,imx28-lcdif
- fsl,imx6sx-lcdif
- items:
- enum:
- fsl,imx6sl-lcdif
- fsl,imx6sll-lcdif
- fsl,imx6ul-lcdif
- fsl,imx7d-lcdif
- fsl,imx8mq-lcdif
- const: fsl,imx6sx-lcdif
reg: maxItems: 1
Hi Stefan,
On Fri, Aug 21, 2020 at 04:53:56PM +0200, Stefan Agner wrote:
On 2020-08-13 03:29, Laurent Pinchart wrote:
Additional compatible strings have been added in DT source for the i.MX6SL, i.MX6SLL, i.MX6UL and i.MX7D without updating the bindings. Most of the upstream DT sources use the fsl,imx28-lcdif compatible string, which mostly predates the realization that the LCDIF in the i.MX6 and newer SoCs have extra features compared to the i.MX28.
Agreed, we should add fsl,imx6sx-lcdif for those devices.
But shouldn't we also keep fsl,imx28-lcdif? From what I can tell, the devices can be driven by a driver only supporting fsl,imx28-lcdif semantics, right?
Isn't it kept by this patch ?
Update the bindings to add the missing compatible strings, with the correct fallback values. This fails to validate some of the upstream DT sources. Instead of adding the incorrect compatible fallback to the binding, the sources should be updated separately.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
.../devicetree/bindings/display/mxsfb.yaml | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/Documentation/devicetree/bindings/display/mxsfb.yaml b/Documentation/devicetree/bindings/display/mxsfb.yaml index 202381ec5bb7..ec6533b1d4a3 100644 --- a/Documentation/devicetree/bindings/display/mxsfb.yaml +++ b/Documentation/devicetree/bindings/display/mxsfb.yaml @@ -15,11 +15,19 @@ description: |
properties: compatible:
- enum:
- fsl,imx23-lcdif
- fsl,imx28-lcdif
- fsl,imx6sx-lcdif
- fsl,imx8mq-lcdif
- oneOf:
- enum:
- fsl,imx23-lcdif
- fsl,imx28-lcdif
Here -----------------^
The binding now support any of "fsl,imx23-lcdif", "fsl,imx28-lcdif" or "fsl,imx6sx-lcdif" alone, or "fsl,imx6sx-lcdif" with another device-specific compatible string. The driver supports the three base compatible strings, for V3, V4 and V6 of the IP core.
- fsl,imx6sx-lcdif
- items:
- enum:
- fsl,imx6sl-lcdif
- fsl,imx6sll-lcdif
- fsl,imx6ul-lcdif
- fsl,imx7d-lcdif
- fsl,imx8mq-lcdif
- const: fsl,imx6sx-lcdif
reg: maxItems: 1
On 2020-08-24 01:26, Laurent Pinchart wrote:
Hi Stefan,
On Fri, Aug 21, 2020 at 04:53:56PM +0200, Stefan Agner wrote:
On 2020-08-13 03:29, Laurent Pinchart wrote:
Additional compatible strings have been added in DT source for the i.MX6SL, i.MX6SLL, i.MX6UL and i.MX7D without updating the bindings. Most of the upstream DT sources use the fsl,imx28-lcdif compatible string, which mostly predates the realization that the LCDIF in the i.MX6 and newer SoCs have extra features compared to the i.MX28.
Agreed, we should add fsl,imx6sx-lcdif for those devices.
But shouldn't we also keep fsl,imx28-lcdif? From what I can tell, the devices can be driven by a driver only supporting fsl,imx28-lcdif semantics, right?
Isn't it kept by this patch ?
Update the bindings to add the missing compatible strings, with the correct fallback values. This fails to validate some of the upstream DT sources. Instead of adding the incorrect compatible fallback to the binding, the sources should be updated separately.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
.../devicetree/bindings/display/mxsfb.yaml | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/Documentation/devicetree/bindings/display/mxsfb.yaml b/Documentation/devicetree/bindings/display/mxsfb.yaml index 202381ec5bb7..ec6533b1d4a3 100644 --- a/Documentation/devicetree/bindings/display/mxsfb.yaml +++ b/Documentation/devicetree/bindings/display/mxsfb.yaml @@ -15,11 +15,19 @@ description: |
properties: compatible:
- enum:
- fsl,imx23-lcdif
- fsl,imx28-lcdif
- fsl,imx6sx-lcdif
- fsl,imx8mq-lcdif
- oneOf:
- enum:
- fsl,imx23-lcdif
- fsl,imx28-lcdif
Here -----------------^
The binding now support any of "fsl,imx23-lcdif", "fsl,imx28-lcdif" or "fsl,imx6sx-lcdif" alone, or "fsl,imx6sx-lcdif" with another device-specific compatible string. The driver supports the three base compatible strings, for V3, V4 and V6 of the IP core.
The binding yes, but I mean the device descriptions in the device tree.
Since the device can be driven by a older kernel which only knows about the fsl,imx28-lcdif compatible string, we could keep that compatible.
From what I can tell, we can add both safely, e.g.
compatible = "fsl,imx6sx-lcdif", "fsl,imx28-lcdif"
From how I read the description this now replaces "fsl,imx28-lcdif" with
"fsl,imx6sx-lcdif" for the devices supporting the additional features, e.g.:
--- a/arch/arm/boot/dts/imx6sl.dtsi +++ b/arch/arm/boot/dts/imx6sl.dtsi @@ -769,7 +769,7 @@ epdc: epdc@20f4000 { };
lcdif: lcdif@20f8000 { - compatible = "fsl,imx6sl-lcdif", "fsl,imx28-lcdif"; + compatible = "fsl,imx6sl-lcdif", "fsl,imx6sx-lcdif"; reg = <0x020f8000 0x4000>; interrupts = <0 39 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clks IMX6SL_CLK_LCDIF_PIX>,
-- Stefan
- fsl,imx6sx-lcdif
- items:
- enum:
- fsl,imx6sl-lcdif
- fsl,imx6sll-lcdif
- fsl,imx6ul-lcdif
- fsl,imx7d-lcdif
- fsl,imx8mq-lcdif
- const: fsl,imx6sx-lcdif
reg: maxItems: 1
Hi Stefan,
On Mon, Aug 24, 2020 at 04:19:23PM +0200, Stefan Agner wrote:
On 2020-08-24 01:26, Laurent Pinchart wrote:
On Fri, Aug 21, 2020 at 04:53:56PM +0200, Stefan Agner wrote:
On 2020-08-13 03:29, Laurent Pinchart wrote:
Additional compatible strings have been added in DT source for the i.MX6SL, i.MX6SLL, i.MX6UL and i.MX7D without updating the bindings. Most of the upstream DT sources use the fsl,imx28-lcdif compatible string, which mostly predates the realization that the LCDIF in the i.MX6 and newer SoCs have extra features compared to the i.MX28.
Agreed, we should add fsl,imx6sx-lcdif for those devices.
But shouldn't we also keep fsl,imx28-lcdif? From what I can tell, the devices can be driven by a driver only supporting fsl,imx28-lcdif semantics, right?
Isn't it kept by this patch ?
Update the bindings to add the missing compatible strings, with the correct fallback values. This fails to validate some of the upstream DT sources. Instead of adding the incorrect compatible fallback to the binding, the sources should be updated separately.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
.../devicetree/bindings/display/mxsfb.yaml | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/Documentation/devicetree/bindings/display/mxsfb.yaml b/Documentation/devicetree/bindings/display/mxsfb.yaml index 202381ec5bb7..ec6533b1d4a3 100644 --- a/Documentation/devicetree/bindings/display/mxsfb.yaml +++ b/Documentation/devicetree/bindings/display/mxsfb.yaml @@ -15,11 +15,19 @@ description: |
properties: compatible:
- enum:
- fsl,imx23-lcdif
- fsl,imx28-lcdif
- fsl,imx6sx-lcdif
- fsl,imx8mq-lcdif
- oneOf:
- enum:
- fsl,imx23-lcdif
- fsl,imx28-lcdif
Here -----------------^
The binding now support any of "fsl,imx23-lcdif", "fsl,imx28-lcdif" or "fsl,imx6sx-lcdif" alone, or "fsl,imx6sx-lcdif" with another device-specific compatible string. The driver supports the three base compatible strings, for V3, V4 and V6 of the IP core.
The binding yes, but I mean the device descriptions in the device tree.
Since the device can be driven by a older kernel which only knows about the fsl,imx28-lcdif compatible string, we could keep that compatible.
I don't think we need to care about forward-compatibility. If one updates the device tree, it's expected that the kernel should be updated accordingly. The bindings should in my opinion document the current recommended device tree properties, drivers have to ensure backward compatibility with older DT, but the other way around shouldn't be required.
From what I can tell, we can add both safely, e.g.
compatible = "fsl,imx6sx-lcdif", "fsl,imx28-lcdif"
From how I read the description this now replaces "fsl,imx28-lcdif" with "fsl,imx6sx-lcdif" for the devices supporting the additional features, e.g.:
--- a/arch/arm/boot/dts/imx6sl.dtsi +++ b/arch/arm/boot/dts/imx6sl.dtsi @@ -769,7 +769,7 @@ epdc: epdc@20f4000 { };
lcdif: lcdif@20f8000 {
compatible = "fsl,imx6sl-lcdif", "fsl,imx28-lcdif";
compatible = "fsl,imx6sl-lcdif", "fsl,imx6sx-lcdif"; reg = <0x020f8000 0x4000>; interrupts = <0 39 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clks IMX6SL_CLK_LCDIF_PIX>,
- fsl,imx6sx-lcdif
- items:
- enum:
- fsl,imx6sl-lcdif
- fsl,imx6sll-lcdif
- fsl,imx6ul-lcdif
- fsl,imx7d-lcdif
- fsl,imx8mq-lcdif
- const: fsl,imx6sx-lcdif
reg: maxItems: 1
When the PCB routes the display data signals in an unconventional way, the output bus width may differ from the bus width of the connected panel or encoder. For instance, when a 18-bit RGB panel has its R[5:0], G[5:0] and B[5:0] signals connected to LCD_DATA[7:2], LCD_DATA[15:10] and LCD_DATA[23:18], the output bus width is 24 instead of 18 when the signals are routed to LCD_DATA[5:0], LCD_DATA[11:6] and LCD_DATA[17:12].
Add a bus-width property to describe this data routing.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com --- Documentation/devicetree/bindings/display/mxsfb.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+)
diff --git a/Documentation/devicetree/bindings/display/mxsfb.yaml b/Documentation/devicetree/bindings/display/mxsfb.yaml index ec6533b1d4a3..d15bb8edc29f 100644 --- a/Documentation/devicetree/bindings/display/mxsfb.yaml +++ b/Documentation/devicetree/bindings/display/mxsfb.yaml @@ -58,6 +58,18 @@ properties: type: object
properties: + data-shift: + enum: [16, 18, 24] + description: | + The output bus width. This value overrides the configuration + derived from the connected device (encoder or panel). It should + only be specified when PCB routing of the data signals require a + different bus width on the LCDIF and the connected device. For + instance, when a 18-bit RGB panel has its R[5:0], G[5:0] and + B[5:0] signals connected to LCD_DATA[7:2], LCD_DATA[15:10] and + LCD_DATA[23:18] instead of LCD_DATA[5:0], LCD_DATA[11:6] and + LCD_DATA[17:12], bus-width should be set to 24. + remote-endpoint: $ref: /schemas/types.yaml#/definitions/phandle
Hi Laurent, On Thu, Aug 13, 2020 at 04:29:05AM +0300, Laurent Pinchart wrote:
When the PCB routes the display data signals in an unconventional way, the output bus width may differ from the bus width of the connected panel or encoder. For instance, when a 18-bit RGB panel has its R[5:0], G[5:0] and B[5:0] signals connected to LCD_DATA[7:2], LCD_DATA[15:10] and LCD_DATA[23:18], the output bus width is 24 instead of 18 when the signals are routed to LCD_DATA[5:0], LCD_DATA[11:6] and LCD_DATA[17:12].
Add a bus-width property to describe this data routing.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
Documentation/devicetree/bindings/display/mxsfb.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+)
diff --git a/Documentation/devicetree/bindings/display/mxsfb.yaml b/Documentation/devicetree/bindings/display/mxsfb.yaml index ec6533b1d4a3..d15bb8edc29f 100644 --- a/Documentation/devicetree/bindings/display/mxsfb.yaml +++ b/Documentation/devicetree/bindings/display/mxsfb.yaml @@ -58,6 +58,18 @@ properties: type: object
properties:
data-shift:
Shouldn't that be bus-width ? -- Guido
enum: [16, 18, 24]
description: |
The output bus width. This value overrides the configuration
derived from the connected device (encoder or panel). It should
only be specified when PCB routing of the data signals require a
different bus width on the LCDIF and the connected device. For
instance, when a 18-bit RGB panel has its R[5:0], G[5:0] and
B[5:0] signals connected to LCD_DATA[7:2], LCD_DATA[15:10] and
LCD_DATA[23:18] instead of LCD_DATA[5:0], LCD_DATA[11:6] and
LCD_DATA[17:12], bus-width should be set to 24.
remote-endpoint: $ref: /schemas/types.yaml#/definitions/phandle
-- Regards,
Laurent Pinchart
Hi Guido,
On Sat, Aug 15, 2020 at 11:28:38PM +0200, Guido Günther wrote:
On Thu, Aug 13, 2020 at 04:29:05AM +0300, Laurent Pinchart wrote:
When the PCB routes the display data signals in an unconventional way, the output bus width may differ from the bus width of the connected panel or encoder. For instance, when a 18-bit RGB panel has its R[5:0], G[5:0] and B[5:0] signals connected to LCD_DATA[7:2], LCD_DATA[15:10] and LCD_DATA[23:18], the output bus width is 24 instead of 18 when the signals are routed to LCD_DATA[5:0], LCD_DATA[11:6] and LCD_DATA[17:12].
Add a bus-width property to describe this data routing.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
Documentation/devicetree/bindings/display/mxsfb.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+)
diff --git a/Documentation/devicetree/bindings/display/mxsfb.yaml b/Documentation/devicetree/bindings/display/mxsfb.yaml index ec6533b1d4a3..d15bb8edc29f 100644 --- a/Documentation/devicetree/bindings/display/mxsfb.yaml +++ b/Documentation/devicetree/bindings/display/mxsfb.yaml @@ -58,6 +58,18 @@ properties: type: object
properties:
data-shift:
Shouldn't that be bus-width ?
Absolutely. I'll fix that.
enum: [16, 18, 24]
description: |
The output bus width. This value overrides the configuration
derived from the connected device (encoder or panel). It should
only be specified when PCB routing of the data signals require a
different bus width on the LCDIF and the connected device. For
instance, when a 18-bit RGB panel has its R[5:0], G[5:0] and
B[5:0] signals connected to LCD_DATA[7:2], LCD_DATA[15:10] and
LCD_DATA[23:18] instead of LCD_DATA[5:0], LCD_DATA[11:6] and
LCD_DATA[17:12], bus-width should be set to 24.
remote-endpoint: $ref: /schemas/types.yaml#/definitions/phandle
Hi Laurent.
On Thu, Aug 13, 2020 at 04:29:05AM +0300, Laurent Pinchart wrote:
When the PCB routes the display data signals in an unconventional way, the output bus width may differ from the bus width of the connected panel or encoder. For instance, when a 18-bit RGB panel has its R[5:0], G[5:0] and B[5:0] signals connected to LCD_DATA[7:2], LCD_DATA[15:10] and LCD_DATA[23:18], the output bus width is 24 instead of 18 when the signals are routed to LCD_DATA[5:0], LCD_DATA[11:6] and LCD_DATA[17:12].
Add a bus-width property to describe this data routing.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
Some general comments. We have the bus format - for example MEDIA_BUS_FMT_RGB666_1X18. I was under the impression that the bus format defined the wiring used, so for example the bus format would tell if on used 18 bits as above. So with the bus format available the bus-width is not needed.
Today this detail is not expressed in DT but comes based on the compatible for the panel - so what this patch does is to add the bus format information to DT.
But then to do so would we not need to have something so we can specify all relevant MEDIA_BUS_FMT's? bus-width will not cut it.
Also the bus-width property (and data-shift property you accidentally reference) are both described in media/video-interfaces.txt. If we need bus-witdh - is it possible to re-use video-interfaces? It may need a conversion to yaml to get full validation, but a lot of .yaml files refer to the text file today so conversion can come later.
Sam
Documentation/devicetree/bindings/display/mxsfb.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+)
diff --git a/Documentation/devicetree/bindings/display/mxsfb.yaml b/Documentation/devicetree/bindings/display/mxsfb.yaml index ec6533b1d4a3..d15bb8edc29f 100644 --- a/Documentation/devicetree/bindings/display/mxsfb.yaml +++ b/Documentation/devicetree/bindings/display/mxsfb.yaml @@ -58,6 +58,18 @@ properties: type: object
properties:
data-shift:
enum: [16, 18, 24]
description: |
The output bus width. This value overrides the configuration
derived from the connected device (encoder or panel). It should
only be specified when PCB routing of the data signals require a
different bus width on the LCDIF and the connected device. For
instance, when a 18-bit RGB panel has its R[5:0], G[5:0] and
B[5:0] signals connected to LCD_DATA[7:2], LCD_DATA[15:10] and
LCD_DATA[23:18] instead of LCD_DATA[5:0], LCD_DATA[11:6] and
LCD_DATA[17:12], bus-width should be set to 24.
remote-endpoint: $ref: /schemas/types.yaml#/definitions/phandle
-- Regards,
Laurent Pinchart
dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Hi Sam,
On Sun, Aug 16, 2020 at 09:25:20AM +0200, Sam Ravnborg wrote:
On Thu, Aug 13, 2020 at 04:29:05AM +0300, Laurent Pinchart wrote:
When the PCB routes the display data signals in an unconventional way, the output bus width may differ from the bus width of the connected panel or encoder. For instance, when a 18-bit RGB panel has its R[5:0], G[5:0] and B[5:0] signals connected to LCD_DATA[7:2], LCD_DATA[15:10] and LCD_DATA[23:18], the output bus width is 24 instead of 18 when the signals are routed to LCD_DATA[5:0], LCD_DATA[11:6] and LCD_DATA[17:12].
Add a bus-width property to describe this data routing.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
Some general comments. We have the bus format - for example MEDIA_BUS_FMT_RGB666_1X18. I was under the impression that the bus format defined the wiring used, so for example the bus format would tell if on used 18 bits as above. So with the bus format available the bus-width is not needed.
Today this detail is not expressed in DT but comes based on the compatible for the panel - so what this patch does is to add the bus format information to DT.
But then to do so would we not need to have something so we can specify all relevant MEDIA_BUS_FMT's? bus-width will not cut it.
Different formats can be transported with a given wiring (for instance when the full 24-bit RGB bus is wired, the display controller can ouput 24-bit RGB, or 18-bit RGB on the MSB with dithering enabled), and different wirings can transport the same format (MEDIA_BUS_FMT_RGB666_1X18 can be transported with a 24 bits wiring, or a 18 bits wiring as described in the commit message). While we may in this case be able to express the information through bus formats (specifying MEDIA_BUS_FMT_RGB666_1X18 would imply that only 18 bits are wired), I think it's conceptually speaking the wrong information to provide, and would be confusing in some cases.
Also the bus-width property (and data-shift property you accidentally reference) are both described in media/video-interfaces.txt. If we need bus-witdh - is it possible to re-use video-interfaces? It may need a conversion to yaml to get full validation, but a lot of .yaml files refer to the text file today so conversion can come later.
How do you mean reuse ? I can reference the file in the description, but as video-interfaces.txt documents the property just as "number of data lines actively used, valid for the parallel busses", I would need a description here anyway, to explain how it applies to this device in particular, even after video-interfaces.txt gets converted to YAML.
Documentation/devicetree/bindings/display/mxsfb.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+)
diff --git a/Documentation/devicetree/bindings/display/mxsfb.yaml b/Documentation/devicetree/bindings/display/mxsfb.yaml index ec6533b1d4a3..d15bb8edc29f 100644 --- a/Documentation/devicetree/bindings/display/mxsfb.yaml +++ b/Documentation/devicetree/bindings/display/mxsfb.yaml @@ -58,6 +58,18 @@ properties: type: object
properties:
data-shift:
enum: [16, 18, 24]
description: |
The output bus width. This value overrides the configuration
derived from the connected device (encoder or panel). It should
only be specified when PCB routing of the data signals require a
different bus width on the LCDIF and the connected device. For
instance, when a 18-bit RGB panel has its R[5:0], G[5:0] and
B[5:0] signals connected to LCD_DATA[7:2], LCD_DATA[15:10] and
LCD_DATA[23:18] instead of LCD_DATA[5:0], LCD_DATA[11:6] and
LCD_DATA[17:12], bus-width should be set to 24.
remote-endpoint: $ref: /schemas/types.yaml#/definitions/phandle
Rename the mxsfb.yaml binding schema to fsl,lcdif.yaml to match the usual bindings naming scheme.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com --- .../devicetree/bindings/display/{mxsfb.yaml => fsl,lcdif.yaml} | 2 +- MAINTAINERS | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename Documentation/devicetree/bindings/display/{mxsfb.yaml => fsl,lcdif.yaml} (98%)
diff --git a/Documentation/devicetree/bindings/display/mxsfb.yaml b/Documentation/devicetree/bindings/display/fsl,lcdif.yaml similarity index 98% rename from Documentation/devicetree/bindings/display/mxsfb.yaml rename to Documentation/devicetree/bindings/display/fsl,lcdif.yaml index d15bb8edc29f..60210775c31e 100644 --- a/Documentation/devicetree/bindings/display/mxsfb.yaml +++ b/Documentation/devicetree/bindings/display/fsl,lcdif.yaml @@ -1,7 +1,7 @@ # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) %YAML 1.2 --- -$id: http://devicetree.org/schemas/display/mxsfb.yaml# +$id: http://devicetree.org/schemas/display/fsl,lcdif.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Freescale/NXP i.MX LCD Interface (LCDIF) diff --git a/MAINTAINERS b/MAINTAINERS index e3fac23383d2..fe1bda639a39 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -11757,7 +11757,7 @@ M: Stefan Agner stefan@agner.ch L: dri-devel@lists.freedesktop.org S: Supported T: git git://anongit.freedesktop.org/drm/drm-misc -F: Documentation/devicetree/bindings/display/mxsfb.yaml +F: Documentation/devicetree/bindings/display/fsl,lcdif.yaml F: drivers/gpu/drm/mxsfb/
MYLEX DAC960 PCI RAID Controller
On Thu, Aug 13, 2020 at 04:29:06AM +0300, Laurent Pinchart wrote:
Rename the mxsfb.yaml binding schema to fsl,lcdif.yaml to match the usual bindings naming scheme.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
I have been confused by the mxsfb name in the past, so this rename i welcome. Acked-by: Sam Ravnborg sam@ravnborg.org
.../devicetree/bindings/display/{mxsfb.yaml => fsl,lcdif.yaml} | 2 +- MAINTAINERS | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename Documentation/devicetree/bindings/display/{mxsfb.yaml => fsl,lcdif.yaml} (98%)
diff --git a/Documentation/devicetree/bindings/display/mxsfb.yaml b/Documentation/devicetree/bindings/display/fsl,lcdif.yaml similarity index 98% rename from Documentation/devicetree/bindings/display/mxsfb.yaml rename to Documentation/devicetree/bindings/display/fsl,lcdif.yaml index d15bb8edc29f..60210775c31e 100644 --- a/Documentation/devicetree/bindings/display/mxsfb.yaml +++ b/Documentation/devicetree/bindings/display/fsl,lcdif.yaml @@ -1,7 +1,7 @@ # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) %YAML 1.2
-$id: http://devicetree.org/schemas/display/mxsfb.yaml# +$id: http://devicetree.org/schemas/display/fsl,lcdif.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Freescale/NXP i.MX LCD Interface (LCDIF) diff --git a/MAINTAINERS b/MAINTAINERS index e3fac23383d2..fe1bda639a39 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -11757,7 +11757,7 @@ M: Stefan Agner stefan@agner.ch L: dri-devel@lists.freedesktop.org S: Supported T: git git://anongit.freedesktop.org/drm/drm-misc -F: Documentation/devicetree/bindings/display/mxsfb.yaml +F: Documentation/devicetree/bindings/display/fsl,lcdif.yaml F: drivers/gpu/drm/mxsfb/
MYLEX DAC960 PCI RAID Controller
Regards,
Laurent Pinchart
dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
On 2020-08-13 03:29, Laurent Pinchart wrote:
Rename the mxsfb.yaml binding schema to fsl,lcdif.yaml to match the usual bindings naming scheme.
I tend to prefer to just name it fsl,lcdif.yaml from the get-go.
If you prefer keeping it separate, then it should be patch 2 of the series.
-- Stefan
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
.../devicetree/bindings/display/{mxsfb.yaml => fsl,lcdif.yaml} | 2 +- MAINTAINERS | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename Documentation/devicetree/bindings/display/{mxsfb.yaml => fsl,lcdif.yaml} (98%)
diff --git a/Documentation/devicetree/bindings/display/mxsfb.yaml b/Documentation/devicetree/bindings/display/fsl,lcdif.yaml similarity index 98% rename from Documentation/devicetree/bindings/display/mxsfb.yaml rename to Documentation/devicetree/bindings/display/fsl,lcdif.yaml index d15bb8edc29f..60210775c31e 100644 --- a/Documentation/devicetree/bindings/display/mxsfb.yaml +++ b/Documentation/devicetree/bindings/display/fsl,lcdif.yaml @@ -1,7 +1,7 @@ # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) %YAML 1.2
-$id: http://devicetree.org/schemas/display/mxsfb.yaml# +$id: http://devicetree.org/schemas/display/fsl,lcdif.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Freescale/NXP i.MX LCD Interface (LCDIF) diff --git a/MAINTAINERS b/MAINTAINERS index e3fac23383d2..fe1bda639a39 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -11757,7 +11757,7 @@ M: Stefan Agner stefan@agner.ch L: dri-devel@lists.freedesktop.org S: Supported T: git git://anongit.freedesktop.org/drm/drm-misc -F: Documentation/devicetree/bindings/display/mxsfb.yaml +F: Documentation/devicetree/bindings/display/fsl,lcdif.yaml F: drivers/gpu/drm/mxsfb/
MYLEX DAC960 PCI RAID Controller
Hi Stefan,
On Fri, Aug 21, 2020 at 04:55:38PM +0200, Stefan Agner wrote:
On 2020-08-13 03:29, Laurent Pinchart wrote:
Rename the mxsfb.yaml binding schema to fsl,lcdif.yaml to match the usual bindings naming scheme.
I tend to prefer to just name it fsl,lcdif.yaml from the get-go.
If you prefer keeping it separate, then it should be patch 2 of the series.
I'm certainly fine squashing this with 1/8. Should I submit a v2, or would you like to squash them locally before applying ? If you would like a v2, have you reviewed the entire series, or should I still wait ?
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
.../devicetree/bindings/display/{mxsfb.yaml => fsl,lcdif.yaml} | 2 +- MAINTAINERS | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename Documentation/devicetree/bindings/display/{mxsfb.yaml => fsl,lcdif.yaml} (98%)
diff --git a/Documentation/devicetree/bindings/display/mxsfb.yaml b/Documentation/devicetree/bindings/display/fsl,lcdif.yaml similarity index 98% rename from Documentation/devicetree/bindings/display/mxsfb.yaml rename to Documentation/devicetree/bindings/display/fsl,lcdif.yaml index d15bb8edc29f..60210775c31e 100644 --- a/Documentation/devicetree/bindings/display/mxsfb.yaml +++ b/Documentation/devicetree/bindings/display/fsl,lcdif.yaml @@ -1,7 +1,7 @@ # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) %YAML 1.2
-$id: http://devicetree.org/schemas/display/mxsfb.yaml# +$id: http://devicetree.org/schemas/display/fsl,lcdif.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Freescale/NXP i.MX LCD Interface (LCDIF) diff --git a/MAINTAINERS b/MAINTAINERS index e3fac23383d2..fe1bda639a39 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -11757,7 +11757,7 @@ M: Stefan Agner stefan@agner.ch L: dri-devel@lists.freedesktop.org S: Supported T: git git://anongit.freedesktop.org/drm/drm-misc -F: Documentation/devicetree/bindings/display/mxsfb.yaml +F: Documentation/devicetree/bindings/display/fsl,lcdif.yaml F: drivers/gpu/drm/mxsfb/
MYLEX DAC960 PCI RAID Controller
The LCDIF in the i.MX6 SoCs has additional features compared to the i.MX28. Replace the fsl,imx28-lcdif fallback compatible string with fsl,imx6sx-lcdif to reflect that.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com --- arch/arm/boot/dts/imx6sl.dtsi | 2 +- arch/arm/boot/dts/imx6sll.dtsi | 2 +- arch/arm/boot/dts/imx6sx.dtsi | 4 ++-- arch/arm/boot/dts/imx6ul.dtsi | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/arch/arm/boot/dts/imx6sl.dtsi b/arch/arm/boot/dts/imx6sl.dtsi index 911d8cf77f2c..deeb647ffc3f 100644 --- a/arch/arm/boot/dts/imx6sl.dtsi +++ b/arch/arm/boot/dts/imx6sl.dtsi @@ -769,7 +769,7 @@ epdc: epdc@20f4000 { };
lcdif: lcdif@20f8000 { - compatible = "fsl,imx6sl-lcdif", "fsl,imx28-lcdif"; + compatible = "fsl,imx6sl-lcdif", "fsl,imx6sx-lcdif"; reg = <0x020f8000 0x4000>; interrupts = <0 39 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clks IMX6SL_CLK_LCDIF_PIX>, diff --git a/arch/arm/boot/dts/imx6sll.dtsi b/arch/arm/boot/dts/imx6sll.dtsi index edd3abb9a9f1..c51072bb43ba 100644 --- a/arch/arm/boot/dts/imx6sll.dtsi +++ b/arch/arm/boot/dts/imx6sll.dtsi @@ -644,7 +644,7 @@ pxp: pxp@20f0000 { };
lcdif: lcd-controller@20f8000 { - compatible = "fsl,imx6sll-lcdif", "fsl,imx28-lcdif"; + compatible = "fsl,imx6sll-lcdif", "fsl,imx6sx-lcdif"; reg = <0x020f8000 0x4000>; interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clks IMX6SLL_CLK_LCDIF_PIX>, diff --git a/arch/arm/boot/dts/imx6sx.dtsi b/arch/arm/boot/dts/imx6sx.dtsi index 94e3df47d1ad..67da3a2d48ec 100644 --- a/arch/arm/boot/dts/imx6sx.dtsi +++ b/arch/arm/boot/dts/imx6sx.dtsi @@ -1241,7 +1241,7 @@ csi2: csi@221c000 { };
lcdif1: lcdif@2220000 { - compatible = "fsl,imx6sx-lcdif", "fsl,imx28-lcdif"; + compatible = "fsl,imx6sx-lcdif"; reg = <0x02220000 0x4000>; interrupts = <GIC_SPI 5 IRQ_TYPE_EDGE_RISING>; clocks = <&clks IMX6SX_CLK_LCDIF1_PIX>, @@ -1253,7 +1253,7 @@ lcdif1: lcdif@2220000 { };
lcdif2: lcdif@2224000 { - compatible = "fsl,imx6sx-lcdif", "fsl,imx28-lcdif"; + compatible = "fsl,imx6sx-lcdif"; reg = <0x02224000 0x4000>; interrupts = <GIC_SPI 6 IRQ_TYPE_EDGE_RISING>; clocks = <&clks IMX6SX_CLK_LCDIF2_PIX>, diff --git a/arch/arm/boot/dts/imx6ul.dtsi b/arch/arm/boot/dts/imx6ul.dtsi index 5379a03391bd..b16cce1680a9 100644 --- a/arch/arm/boot/dts/imx6ul.dtsi +++ b/arch/arm/boot/dts/imx6ul.dtsi @@ -978,7 +978,7 @@ csi: csi@21c4000 { };
lcdif: lcdif@21c8000 { - compatible = "fsl,imx6ul-lcdif", "fsl,imx28-lcdif"; + compatible = "fsl,imx6ul-lcdif", "fsl,imx6sx-lcdif"; reg = <0x021c8000 0x4000>; interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clks IMX6UL_CLK_LCDIF_PIX>,
On Thu, Aug 13, 2020 at 04:29:07AM +0300, Laurent Pinchart wrote:
The LCDIF in the i.MX6 SoCs has additional features compared to the i.MX28. Replace the fsl,imx28-lcdif fallback compatible string with fsl,imx6sx-lcdif to reflect that.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
Acked-by: Sam Ravnborg sam@ravnborg.org
arch/arm/boot/dts/imx6sl.dtsi | 2 +- arch/arm/boot/dts/imx6sll.dtsi | 2 +- arch/arm/boot/dts/imx6sx.dtsi | 4 ++-- arch/arm/boot/dts/imx6ul.dtsi | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/arch/arm/boot/dts/imx6sl.dtsi b/arch/arm/boot/dts/imx6sl.dtsi index 911d8cf77f2c..deeb647ffc3f 100644 --- a/arch/arm/boot/dts/imx6sl.dtsi +++ b/arch/arm/boot/dts/imx6sl.dtsi @@ -769,7 +769,7 @@ epdc: epdc@20f4000 { };
lcdif: lcdif@20f8000 {
compatible = "fsl,imx6sl-lcdif", "fsl,imx28-lcdif";
compatible = "fsl,imx6sl-lcdif", "fsl,imx6sx-lcdif"; reg = <0x020f8000 0x4000>; interrupts = <0 39 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clks IMX6SL_CLK_LCDIF_PIX>,
diff --git a/arch/arm/boot/dts/imx6sll.dtsi b/arch/arm/boot/dts/imx6sll.dtsi index edd3abb9a9f1..c51072bb43ba 100644 --- a/arch/arm/boot/dts/imx6sll.dtsi +++ b/arch/arm/boot/dts/imx6sll.dtsi @@ -644,7 +644,7 @@ pxp: pxp@20f0000 { };
lcdif: lcd-controller@20f8000 {
compatible = "fsl,imx6sll-lcdif", "fsl,imx28-lcdif";
compatible = "fsl,imx6sll-lcdif", "fsl,imx6sx-lcdif"; reg = <0x020f8000 0x4000>; interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clks IMX6SLL_CLK_LCDIF_PIX>,
diff --git a/arch/arm/boot/dts/imx6sx.dtsi b/arch/arm/boot/dts/imx6sx.dtsi index 94e3df47d1ad..67da3a2d48ec 100644 --- a/arch/arm/boot/dts/imx6sx.dtsi +++ b/arch/arm/boot/dts/imx6sx.dtsi @@ -1241,7 +1241,7 @@ csi2: csi@221c000 { };
lcdif1: lcdif@2220000 {
compatible = "fsl,imx6sx-lcdif", "fsl,imx28-lcdif";
compatible = "fsl,imx6sx-lcdif"; reg = <0x02220000 0x4000>; interrupts = <GIC_SPI 5 IRQ_TYPE_EDGE_RISING>; clocks = <&clks IMX6SX_CLK_LCDIF1_PIX>,
@@ -1253,7 +1253,7 @@ lcdif1: lcdif@2220000 { };
lcdif2: lcdif@2224000 {
compatible = "fsl,imx6sx-lcdif", "fsl,imx28-lcdif";
compatible = "fsl,imx6sx-lcdif"; reg = <0x02224000 0x4000>; interrupts = <GIC_SPI 6 IRQ_TYPE_EDGE_RISING>; clocks = <&clks IMX6SX_CLK_LCDIF2_PIX>,
diff --git a/arch/arm/boot/dts/imx6ul.dtsi b/arch/arm/boot/dts/imx6ul.dtsi index 5379a03391bd..b16cce1680a9 100644 --- a/arch/arm/boot/dts/imx6ul.dtsi +++ b/arch/arm/boot/dts/imx6ul.dtsi @@ -978,7 +978,7 @@ csi: csi@21c4000 { };
lcdif: lcdif@21c8000 {
compatible = "fsl,imx6ul-lcdif", "fsl,imx28-lcdif";
compatible = "fsl,imx6ul-lcdif", "fsl,imx6sx-lcdif"; reg = <0x021c8000 0x4000>; interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clks IMX6UL_CLK_LCDIF_PIX>,
-- Regards,
Laurent Pinchart
dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
The LCDIF in the i.MX8 SoCs has additional features compared to the i.MX28. Replace the fsl,imx28-lcdif fallback compatible string with fsl,imx6sx-lcdif to reflect that.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com --- arch/arm64/boot/dts/freescale/imx8mq.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm64/boot/dts/freescale/imx8mq.dtsi b/arch/arm64/boot/dts/freescale/imx8mq.dtsi index 978f8122c0d2..4731c3992179 100644 --- a/arch/arm64/boot/dts/freescale/imx8mq.dtsi +++ b/arch/arm64/boot/dts/freescale/imx8mq.dtsi @@ -506,7 +506,7 @@ sdma2: sdma@302c0000 { };
lcdif: lcd-controller@30320000 { - compatible = "fsl,imx8mq-lcdif", "fsl,imx28-lcdif"; + compatible = "fsl,imx8mq-lcdif", "fsl,imx6sx-lcdif"; reg = <0x30320000 0x10000>; interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clk IMX8MQ_CLK_LCDIF_PIXEL>;
On Thu, Aug 13, 2020 at 04:29:08AM +0300, Laurent Pinchart wrote:
The LCDIF in the i.MX8 SoCs has additional features compared to the i.MX28. Replace the fsl,imx28-lcdif fallback compatible string with fsl,imx6sx-lcdif to reflect that.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
Acked-by: Sam Ravnborg sam@ravnborg.org
arch/arm64/boot/dts/freescale/imx8mq.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm64/boot/dts/freescale/imx8mq.dtsi b/arch/arm64/boot/dts/freescale/imx8mq.dtsi index 978f8122c0d2..4731c3992179 100644 --- a/arch/arm64/boot/dts/freescale/imx8mq.dtsi +++ b/arch/arm64/boot/dts/freescale/imx8mq.dtsi @@ -506,7 +506,7 @@ sdma2: sdma@302c0000 { };
lcdif: lcd-controller@30320000 {
compatible = "fsl,imx8mq-lcdif", "fsl,imx28-lcdif";
compatible = "fsl,imx8mq-lcdif", "fsl,imx6sx-lcdif"; reg = <0x30320000 0x10000>; interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clk IMX8MQ_CLK_LCDIF_PIXEL>;
-- Regards,
Laurent Pinchart
dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
The LCDIF disp_axi clock is not mandatory in the DT binding and not required by the driver. Remove it when it points to a dummy clock.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com --- arch/arm/boot/dts/imx6sl.dtsi | 5 ++--- arch/arm/boot/dts/imx6sll.dtsi | 5 ++--- arch/arm/boot/dts/imx6ul.dtsi | 5 ++--- 3 files changed, 6 insertions(+), 9 deletions(-)
diff --git a/arch/arm/boot/dts/imx6sl.dtsi b/arch/arm/boot/dts/imx6sl.dtsi index deeb647ffc3f..a4d74216c9f4 100644 --- a/arch/arm/boot/dts/imx6sl.dtsi +++ b/arch/arm/boot/dts/imx6sl.dtsi @@ -773,9 +773,8 @@ lcdif: lcdif@20f8000 { reg = <0x020f8000 0x4000>; interrupts = <0 39 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clks IMX6SL_CLK_LCDIF_PIX>, - <&clks IMX6SL_CLK_LCDIF_AXI>, - <&clks IMX6SL_CLK_DUMMY>; - clock-names = "pix", "axi", "disp_axi"; + <&clks IMX6SL_CLK_LCDIF_AXI>; + clock-names = "pix", "axi"; status = "disabled"; power-domains = <&pd_disp>; }; diff --git a/arch/arm/boot/dts/imx6sll.dtsi b/arch/arm/boot/dts/imx6sll.dtsi index c51072bb43ba..55775318559b 100644 --- a/arch/arm/boot/dts/imx6sll.dtsi +++ b/arch/arm/boot/dts/imx6sll.dtsi @@ -648,9 +648,8 @@ lcdif: lcd-controller@20f8000 { reg = <0x020f8000 0x4000>; interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clks IMX6SLL_CLK_LCDIF_PIX>, - <&clks IMX6SLL_CLK_LCDIF_APB>, - <&clks IMX6SLL_CLK_DUMMY>; - clock-names = "pix", "axi", "disp_axi"; + <&clks IMX6SLL_CLK_LCDIF_APB>; + clock-names = "pix", "axi"; status = "disabled"; };
diff --git a/arch/arm/boot/dts/imx6ul.dtsi b/arch/arm/boot/dts/imx6ul.dtsi index b16cce1680a9..35df39cc85a4 100644 --- a/arch/arm/boot/dts/imx6ul.dtsi +++ b/arch/arm/boot/dts/imx6ul.dtsi @@ -982,9 +982,8 @@ lcdif: lcdif@21c8000 { reg = <0x021c8000 0x4000>; interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clks IMX6UL_CLK_LCDIF_PIX>, - <&clks IMX6UL_CLK_LCDIF_APB>, - <&clks IMX6UL_CLK_DUMMY>; - clock-names = "pix", "axi", "disp_axi"; + <&clks IMX6UL_CLK_LCDIF_APB>; + clock-names = "pix", "axi"; status = "disabled"; };
On Thu, Aug 13, 2020 at 04:29:09AM +0300, Laurent Pinchart wrote:
The LCDIF disp_axi clock is not mandatory in the DT binding and not required by the driver. Remove it when it points to a dummy clock.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
Acked-by: Sam Ravnborg sam@ravnborg.org
arch/arm/boot/dts/imx6sl.dtsi | 5 ++--- arch/arm/boot/dts/imx6sll.dtsi | 5 ++--- arch/arm/boot/dts/imx6ul.dtsi | 5 ++--- 3 files changed, 6 insertions(+), 9 deletions(-)
diff --git a/arch/arm/boot/dts/imx6sl.dtsi b/arch/arm/boot/dts/imx6sl.dtsi index deeb647ffc3f..a4d74216c9f4 100644 --- a/arch/arm/boot/dts/imx6sl.dtsi +++ b/arch/arm/boot/dts/imx6sl.dtsi @@ -773,9 +773,8 @@ lcdif: lcdif@20f8000 { reg = <0x020f8000 0x4000>; interrupts = <0 39 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clks IMX6SL_CLK_LCDIF_PIX>,
<&clks IMX6SL_CLK_LCDIF_AXI>,
<&clks IMX6SL_CLK_DUMMY>;
clock-names = "pix", "axi", "disp_axi";
<&clks IMX6SL_CLK_LCDIF_AXI>;
clock-names = "pix", "axi"; status = "disabled"; power-domains = <&pd_disp>; };
diff --git a/arch/arm/boot/dts/imx6sll.dtsi b/arch/arm/boot/dts/imx6sll.dtsi index c51072bb43ba..55775318559b 100644 --- a/arch/arm/boot/dts/imx6sll.dtsi +++ b/arch/arm/boot/dts/imx6sll.dtsi @@ -648,9 +648,8 @@ lcdif: lcd-controller@20f8000 { reg = <0x020f8000 0x4000>; interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clks IMX6SLL_CLK_LCDIF_PIX>,
<&clks IMX6SLL_CLK_LCDIF_APB>,
<&clks IMX6SLL_CLK_DUMMY>;
clock-names = "pix", "axi", "disp_axi";
<&clks IMX6SLL_CLK_LCDIF_APB>;
clock-names = "pix", "axi"; status = "disabled"; };
diff --git a/arch/arm/boot/dts/imx6ul.dtsi b/arch/arm/boot/dts/imx6ul.dtsi index b16cce1680a9..35df39cc85a4 100644 --- a/arch/arm/boot/dts/imx6ul.dtsi +++ b/arch/arm/boot/dts/imx6ul.dtsi @@ -982,9 +982,8 @@ lcdif: lcdif@21c8000 { reg = <0x021c8000 0x4000>; interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clks IMX6UL_CLK_LCDIF_PIX>,
<&clks IMX6UL_CLK_LCDIF_APB>,
<&clks IMX6UL_CLK_DUMMY>;
clock-names = "pix", "axi", "disp_axi";
<&clks IMX6UL_CLK_LCDIF_APB>;
clock-names = "pix", "axi"; status = "disabled"; };
-- Regards,
Laurent Pinchart
dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
A new bus-width DT property has been introduced in the bindings to allow overriding the bus width. Support it.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com --- drivers/gpu/drm/mxsfb/mxsfb_drv.c | 26 ++++++++++++++++++++++++++ drivers/gpu/drm/mxsfb/mxsfb_drv.h | 2 ++ drivers/gpu/drm/mxsfb/mxsfb_kms.c | 8 ++++++-- 3 files changed, 34 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.c b/drivers/gpu/drm/mxsfb/mxsfb_drv.c index 8c549c3931af..fab3aae8cf73 100644 --- a/drivers/gpu/drm/mxsfb/mxsfb_drv.c +++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.c @@ -95,10 +95,36 @@ static int mxsfb_attach_bridge(struct mxsfb_drm_private *mxsfb) { struct drm_device *drm = mxsfb->drm; struct drm_connector_list_iter iter; + struct device_node *ep; struct drm_panel *panel; struct drm_bridge *bridge; + u32 bus_width = 0; int ret;
+ ep = of_graph_get_endpoint_by_regs(drm->dev->of_node, 0, 0); + if (!ep) + return -ENODEV; + + of_property_read_u32(ep, "bus-width", &bus_width); + of_node_put(ep); + + switch (bus_width) { + case 16: + mxsfb->bus_format = MEDIA_BUS_FMT_RGB565_1X16; + break; + case 18: + mxsfb->bus_format = MEDIA_BUS_FMT_RGB666_1X18; + break; + case 24: + mxsfb->bus_format = MEDIA_BUS_FMT_RGB888_1X24; + break; + case 0: + break; + default: + DRM_DEV_ERROR(drm->dev, "Invalid bus-width %u", bus_width); + return -ENODEV; + } + ret = drm_of_find_panel_or_bridge(drm->dev->of_node, 0, 0, &panel, &bridge); if (ret) diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.h b/drivers/gpu/drm/mxsfb/mxsfb_drv.h index 399d23e91ed1..c4f7a8a0c891 100644 --- a/drivers/gpu/drm/mxsfb/mxsfb_drv.h +++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.h @@ -32,6 +32,8 @@ struct mxsfb_drm_private { struct clk *clk_axi; struct clk *clk_disp_axi;
+ u32 bus_format; + struct drm_device *drm; struct { struct drm_plane primary; diff --git a/drivers/gpu/drm/mxsfb/mxsfb_kms.c b/drivers/gpu/drm/mxsfb/mxsfb_kms.c index b721b8b262ce..6d512f346918 100644 --- a/drivers/gpu/drm/mxsfb/mxsfb_kms.c +++ b/drivers/gpu/drm/mxsfb/mxsfb_kms.c @@ -50,11 +50,15 @@ static void mxsfb_set_formats(struct mxsfb_drm_private *mxsfb) { struct drm_device *drm = mxsfb->drm; const u32 format = mxsfb->crtc.primary->state->fb->format->format; - u32 bus_format = MEDIA_BUS_FMT_RGB888_1X24; + u32 bus_format; u32 ctrl, ctrl1;
- if (mxsfb->connector->display_info.num_bus_formats) + if (mxsfb->bus_format) + bus_format = mxsfb->bus_format; + else if (mxsfb->connector->display_info.num_bus_formats) bus_format = mxsfb->connector->display_info.bus_formats[0]; + else + bus_format = MEDIA_BUS_FMT_RGB888_1X24;
DRM_DEV_DEBUG_DRIVER(drm->dev, "Using bus_format: 0x%08X\n", bus_format);
Hi Laurent.
On Thu, Aug 13, 2020 at 04:29:10AM +0300, Laurent Pinchart wrote:
A new bus-width DT property has been introduced in the bindings to allow overriding the bus width. Support it.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
We already reads the bus-width in following files in drm: atmel-hlcdc/atmel_hlcdc_output.c bridge/ti-tfp410.c
So this calls for a common helper to do this like:
int drm_of_bus_fmt(const struct device_node *ep) { }
This helper could then read bus-width, data-shift (if relevant) and return the relevant bus format.
I can see that bridge/ti-tfp410.c assumes 12 equals MEDIA_BUS_FMT_RGB888_2X12_LE where as mxsfb assumes 12 is MEDIA_BUS_FMT_RGB444_1X12. I do not know why neither how to handle this difference. Maybe this is something to do with DVI as this is what tfp410 seems to support.
Sam
drivers/gpu/drm/mxsfb/mxsfb_drv.c | 26 ++++++++++++++++++++++++++ drivers/gpu/drm/mxsfb/mxsfb_drv.h | 2 ++ drivers/gpu/drm/mxsfb/mxsfb_kms.c | 8 ++++++-- 3 files changed, 34 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.c b/drivers/gpu/drm/mxsfb/mxsfb_drv.c index 8c549c3931af..fab3aae8cf73 100644 --- a/drivers/gpu/drm/mxsfb/mxsfb_drv.c +++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.c @@ -95,10 +95,36 @@ static int mxsfb_attach_bridge(struct mxsfb_drm_private *mxsfb) { struct drm_device *drm = mxsfb->drm; struct drm_connector_list_iter iter;
struct device_node *ep; struct drm_panel *panel; struct drm_bridge *bridge;
u32 bus_width = 0; int ret;
ep = of_graph_get_endpoint_by_regs(drm->dev->of_node, 0, 0);
if (!ep)
return -ENODEV;
of_property_read_u32(ep, "bus-width", &bus_width);
of_node_put(ep);
switch (bus_width) {
case 16:
mxsfb->bus_format = MEDIA_BUS_FMT_RGB565_1X16;
break;
case 18:
mxsfb->bus_format = MEDIA_BUS_FMT_RGB666_1X18;
break;
case 24:
mxsfb->bus_format = MEDIA_BUS_FMT_RGB888_1X24;
break;
case 0:
break;
default:
DRM_DEV_ERROR(drm->dev, "Invalid bus-width %u", bus_width);
return -ENODEV;
}
ret = drm_of_find_panel_or_bridge(drm->dev->of_node, 0, 0, &panel, &bridge); if (ret)
diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.h b/drivers/gpu/drm/mxsfb/mxsfb_drv.h index 399d23e91ed1..c4f7a8a0c891 100644 --- a/drivers/gpu/drm/mxsfb/mxsfb_drv.h +++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.h @@ -32,6 +32,8 @@ struct mxsfb_drm_private { struct clk *clk_axi; struct clk *clk_disp_axi;
- u32 bus_format;
- struct drm_device *drm; struct { struct drm_plane primary;
diff --git a/drivers/gpu/drm/mxsfb/mxsfb_kms.c b/drivers/gpu/drm/mxsfb/mxsfb_kms.c index b721b8b262ce..6d512f346918 100644 --- a/drivers/gpu/drm/mxsfb/mxsfb_kms.c +++ b/drivers/gpu/drm/mxsfb/mxsfb_kms.c @@ -50,11 +50,15 @@ static void mxsfb_set_formats(struct mxsfb_drm_private *mxsfb) { struct drm_device *drm = mxsfb->drm; const u32 format = mxsfb->crtc.primary->state->fb->format->format;
- u32 bus_format = MEDIA_BUS_FMT_RGB888_1X24;
- u32 bus_format; u32 ctrl, ctrl1;
- if (mxsfb->connector->display_info.num_bus_formats)
if (mxsfb->bus_format)
bus_format = mxsfb->bus_format;
else if (mxsfb->connector->display_info.num_bus_formats) bus_format = mxsfb->connector->display_info.bus_formats[0];
else
bus_format = MEDIA_BUS_FMT_RGB888_1X24;
DRM_DEV_DEBUG_DRIVER(drm->dev, "Using bus_format: 0x%08X\n", bus_format);
-- Regards,
Laurent Pinchart
dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Hi Sam,
On Sun, Aug 16, 2020 at 09:46:30AM +0200, Sam Ravnborg wrote:
On Thu, Aug 13, 2020 at 04:29:10AM +0300, Laurent Pinchart wrote:
A new bus-width DT property has been introduced in the bindings to allow overriding the bus width. Support it.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
We already reads the bus-width in following files in drm: atmel-hlcdc/atmel_hlcdc_output.c bridge/ti-tfp410.c
So this calls for a common helper to do this like:
int drm_of_bus_fmt(const struct device_node *ep) { }
This helper could then read bus-width, data-shift (if relevant) and return the relevant bus format.
I can see that bridge/ti-tfp410.c assumes 12 equals MEDIA_BUS_FMT_RGB888_2X12_LE where as mxsfb assumes 12 is MEDIA_BUS_FMT_RGB444_1X12. I do not know why neither how to handle this difference. Maybe this is something to do with DVI as this is what tfp410 seems to support.
I think the mapping from bus width to format is device-specific, I'm not sure a common helper is possible.
And now that I think about this, I wonder if data-shift = <2> wouldn't be a better option than bus-width = <24>, as a 18-bpp panel will always be connected with 18 lines, not 24. One issue, however, is that for the 565 case, I'd need a different data-shift value for R/B and for G, which isn't possible. I don't think that turning data-shift into a multi-integers property is worth it though. Given that DT properties are interpreted in the context of a particular binding using bus-width could be fine here, but I'm open to better alternatives if someone has a good proposal.
drivers/gpu/drm/mxsfb/mxsfb_drv.c | 26 ++++++++++++++++++++++++++ drivers/gpu/drm/mxsfb/mxsfb_drv.h | 2 ++ drivers/gpu/drm/mxsfb/mxsfb_kms.c | 8 ++++++-- 3 files changed, 34 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.c b/drivers/gpu/drm/mxsfb/mxsfb_drv.c index 8c549c3931af..fab3aae8cf73 100644 --- a/drivers/gpu/drm/mxsfb/mxsfb_drv.c +++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.c @@ -95,10 +95,36 @@ static int mxsfb_attach_bridge(struct mxsfb_drm_private *mxsfb) { struct drm_device *drm = mxsfb->drm; struct drm_connector_list_iter iter;
struct device_node *ep; struct drm_panel *panel; struct drm_bridge *bridge;
u32 bus_width = 0; int ret;
ep = of_graph_get_endpoint_by_regs(drm->dev->of_node, 0, 0);
if (!ep)
return -ENODEV;
of_property_read_u32(ep, "bus-width", &bus_width);
of_node_put(ep);
switch (bus_width) {
case 16:
mxsfb->bus_format = MEDIA_BUS_FMT_RGB565_1X16;
break;
case 18:
mxsfb->bus_format = MEDIA_BUS_FMT_RGB666_1X18;
break;
case 24:
mxsfb->bus_format = MEDIA_BUS_FMT_RGB888_1X24;
break;
case 0:
break;
default:
DRM_DEV_ERROR(drm->dev, "Invalid bus-width %u", bus_width);
return -ENODEV;
}
ret = drm_of_find_panel_or_bridge(drm->dev->of_node, 0, 0, &panel, &bridge); if (ret)
diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.h b/drivers/gpu/drm/mxsfb/mxsfb_drv.h index 399d23e91ed1..c4f7a8a0c891 100644 --- a/drivers/gpu/drm/mxsfb/mxsfb_drv.h +++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.h @@ -32,6 +32,8 @@ struct mxsfb_drm_private { struct clk *clk_axi; struct clk *clk_disp_axi;
- u32 bus_format;
- struct drm_device *drm; struct { struct drm_plane primary;
diff --git a/drivers/gpu/drm/mxsfb/mxsfb_kms.c b/drivers/gpu/drm/mxsfb/mxsfb_kms.c index b721b8b262ce..6d512f346918 100644 --- a/drivers/gpu/drm/mxsfb/mxsfb_kms.c +++ b/drivers/gpu/drm/mxsfb/mxsfb_kms.c @@ -50,11 +50,15 @@ static void mxsfb_set_formats(struct mxsfb_drm_private *mxsfb) { struct drm_device *drm = mxsfb->drm; const u32 format = mxsfb->crtc.primary->state->fb->format->format;
- u32 bus_format = MEDIA_BUS_FMT_RGB888_1X24;
- u32 bus_format; u32 ctrl, ctrl1;
- if (mxsfb->connector->display_info.num_bus_formats)
if (mxsfb->bus_format)
bus_format = mxsfb->bus_format;
else if (mxsfb->connector->display_info.num_bus_formats) bus_format = mxsfb->connector->display_info.bus_formats[0];
else
bus_format = MEDIA_BUS_FMT_RGB888_1X24;
DRM_DEV_DEBUG_DRIVER(drm->dev, "Using bus_format: 0x%08X\n", bus_format);
dri-devel@lists.freedesktop.org