diff mbox series

[v3] dt-bindings: display: atmel,lcdc: convert to dtschema

Message ID 20240304-lcdc-fb-v3-1-8b616fbb0199@microchip.com (mailing list archive)
State New, archived
Headers show
Series [v3] dt-bindings: display: atmel,lcdc: convert to dtschema | expand

Commit Message

Dharma Balasubiramani March 4, 2024, 2:30 p.m. UTC
Convert the atmel,lcdc bindings to DT schema.
Changes during conversion: add missing clocks and clock-names properties.

Signed-off-by: Dharma Balasubiramani <dharma.b@microchip.com>
---
This patch converts the existing lcdc display text binding to JSON schema.
The binding is split into two namely
lcdc.yaml
- Holds the frame buffer properties
lcdc-display.yaml
- Holds the display panel properties which is a phandle to the display
property in lcdc fb node.

These bindings are tested using the following command.
'make DT_CHECKER_FLAGS=-m dt_binding_check'
---
Changes in v3:
- Remove the generic property "bits-per-pixel"
- Link to v2: https://lore.kernel.org/r/20240304-lcdc-fb-v2-1-a14b463c157a@microchip.com

Changes in v2:
- Run checkpatch and remove whitespace errors.
- Add the standard interrupt flags.
- Split the binding into two, namely lcdc.yaml and lcdc-display.yaml.
- Link to v1: https://lore.kernel.org/r/20240223-lcdc-fb-v1-1-4c64cb6277df@microchip.com
---
 .../bindings/display/atmel,lcdc-display.yaml       | 97 ++++++++++++++++++++++
 .../devicetree/bindings/display/atmel,lcdc.txt     | 87 -------------------
 .../devicetree/bindings/display/atmel,lcdc.yaml    | 70 ++++++++++++++++
 3 files changed, 167 insertions(+), 87 deletions(-)


---
base-commit: 90d35da658da8cff0d4ecbb5113f5fac9d00eb72
change-id: 20240223-lcdc-fb-b8d2e2f3c914

Best regards,

Comments

Rob Herring March 4, 2024, 10:01 p.m. UTC | #1
On Mon, Mar 04, 2024 at 08:00:03PM +0530, Dharma Balasubiramani wrote:
> Convert the atmel,lcdc bindings to DT schema.
> Changes during conversion: add missing clocks and clock-names properties.
> 
> Signed-off-by: Dharma Balasubiramani <dharma.b@microchip.com>
> ---
> This patch converts the existing lcdc display text binding to JSON schema.
> The binding is split into two namely
> lcdc.yaml
> - Holds the frame buffer properties
> lcdc-display.yaml
> - Holds the display panel properties which is a phandle to the display
> property in lcdc fb node.
> 
> These bindings are tested using the following command.
> 'make DT_CHECKER_FLAGS=-m dt_binding_check'
> ---
> Changes in v3:
> - Remove the generic property "bits-per-pixel"
> - Link to v2: https://lore.kernel.org/r/20240304-lcdc-fb-v2-1-a14b463c157a@microchip.com
> 
> Changes in v2:
> - Run checkpatch and remove whitespace errors.
> - Add the standard interrupt flags.
> - Split the binding into two, namely lcdc.yaml and lcdc-display.yaml.
> - Link to v1: https://lore.kernel.org/r/20240223-lcdc-fb-v1-1-4c64cb6277df@microchip.com
> ---
>  .../bindings/display/atmel,lcdc-display.yaml       | 97 ++++++++++++++++++++++
>  .../devicetree/bindings/display/atmel,lcdc.txt     | 87 -------------------
>  .../devicetree/bindings/display/atmel,lcdc.yaml    | 70 ++++++++++++++++
>  3 files changed, 167 insertions(+), 87 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/display/atmel,lcdc-display.yaml b/Documentation/devicetree/bindings/display/atmel,lcdc-display.yaml
> new file mode 100644
> index 000000000000..5e0b706d695d
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/display/atmel,lcdc-display.yaml
> @@ -0,0 +1,97 @@
> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/display/atmel,lcdc-display.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Microchip's LCDC Display
> +
> +maintainers:
> +  - Nicolas Ferre <nicolas.ferre@microchip.com>
> +  - Dharma Balasubiramani <dharma.b@microchip.com>
> +
> +description:
> +  The LCD Controller (LCDC) consists of logic for transferring LCD image data
> +  from an external display buffer to a TFT LCD panel. The LCDC has one display
> +  input buffer per layer that fetches pixels through the single bus host
> +  interface and a look-up table to allow palletized display configurations. The
> +  LCDC is programmable on a per layer basis, and supports different LCD
> +  resolutions, window sizes, image formats and pixel depths.
> +
> +# We need a select here since this schema is applicable only for nodes with the
> +# following properties
> +
> +select:
> +  anyOf:
> +    - required: [ 'atmel,dmacon' ]
> +    - required: [ 'atmel,lcdcon2' ]
> +    - required: [ 'atmel,guard-time' ]
> +
> +properties:
> +  atmel,dmacon:
> +    $ref: /schemas/types.yaml#/definitions/uint32
> +    description: dma controller configuration
> +
> +  atmel,lcdcon2:
> +    $ref: /schemas/types.yaml#/definitions/uint32
> +    description: lcd controller configuration
> +
> +  atmel,guard-time:
> +    $ref: /schemas/types.yaml#/definitions/uint32
> +    description: lcd guard time (Delay in frame periods)

Is there a maximum?

> +
> +  bits-per-pixel:
> +    $ref: /schemas/types.yaml#/definitions/uint32
> +    description: lcd panel bit-depth.

Constraints?

> +
> +  atmel,lcdcon-backlight:
> +    $ref: /schemas/types.yaml#/definitions/flag
> +    description: enable backlight
> +
> +  atmel,lcdcon-backlight-inverted:
> +    $ref: /schemas/types.yaml#/definitions/flag
> +    description: invert backlight PWM polarity
> +
> +  atmel,lcd-wiring-mode:
> +    $ref: /schemas/types.yaml#/definitions/non-unique-string-array

Isn't this just a single string rather than an array?

> +    description: lcd wiring mode "RGB" or "BRG"

enum:
  - RGB
  - BRG

No BGR?

But wait, the example shows the value is '1'. That should fail testing. 
It didn't, but I've now fixed that.

> +
> +  atmel,power-control-gpio:
> +    description: gpio to power on or off the LCD (as many as needed)

maxItems: 1

> +
> +  display-timings:
> +    $ref: panel/display-timings.yaml#
> +
> +required:
> +  - atmel,dmacon
> +  - atmel,lcdcon2
> +  - atmel,guard-time
> +  - bits-per-pixel
> +
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    display: panel {
> +      bits-per-pixel = <32>;
> +      atmel,lcdcon-backlight;
> +      atmel,dmacon = <0x1>;
> +      atmel,lcdcon2 = <0x80008002>;
> +      atmel,guard-time = <9>;
> +      atmel,lcd-wiring-mode = <1>;
> +
> +      display-timings {
> +        native-mode = <&timing0>;
> +        timing0: timing0 {
> +          clock-frequency = <9000000>;
> +          hactive = <480>;
> +          vactive = <272>;
> +          hback-porch = <1>;
> +          hfront-porch = <1>;
> +          vback-porch = <40>;
> +          vfront-porch = <1>;
> +          hsync-len = <45>;
> +          vsync-len = <1>;
> +        };
> +      };
> +    };
Dharma Balasubiramani March 6, 2024, 2:35 p.m. UTC | #2
On 05/03/24 3:31 am, Rob Herring wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> 
> On Mon, Mar 04, 2024 at 08:00:03PM +0530, Dharma Balasubiramani wrote:
>> Convert the atmel,lcdc bindings to DT schema.
>> Changes during conversion: add missing clocks and clock-names properties.
>>
>> Signed-off-by: Dharma Balasubiramani <dharma.b@microchip.com>
>> ---
>> This patch converts the existing lcdc display text binding to JSON schema.
>> The binding is split into two namely
>> lcdc.yaml
>> - Holds the frame buffer properties
>> lcdc-display.yaml
>> - Holds the display panel properties which is a phandle to the display
>> property in lcdc fb node.
>>
>> These bindings are tested using the following command.
>> 'make DT_CHECKER_FLAGS=-m dt_binding_check'
>> ---
>> Changes in v3:
>> - Remove the generic property "bits-per-pixel"
>> - Link to v2: https://lore.kernel.org/r/20240304-lcdc-fb-v2-1-a14b463c157a@microchip.com
>>
>> Changes in v2:
>> - Run checkpatch and remove whitespace errors.
>> - Add the standard interrupt flags.
>> - Split the binding into two, namely lcdc.yaml and lcdc-display.yaml.
>> - Link to v1: https://lore.kernel.org/r/20240223-lcdc-fb-v1-1-4c64cb6277df@microchip.com
>> ---
>>   .../bindings/display/atmel,lcdc-display.yaml       | 97 ++++++++++++++++++++++
>>   .../devicetree/bindings/display/atmel,lcdc.txt     | 87 -------------------
>>   .../devicetree/bindings/display/atmel,lcdc.yaml    | 70 ++++++++++++++++
>>   3 files changed, 167 insertions(+), 87 deletions(-)
>>
>> diff --git a/Documentation/devicetree/bindings/display/atmel,lcdc-display.yaml b/Documentation/devicetree/bindings/display/atmel,lcdc-display.yaml
>> new file mode 100644
>> index 000000000000..5e0b706d695d
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/display/atmel,lcdc-display.yaml
>> @@ -0,0 +1,97 @@
>> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
>> +%YAML 1.2
>> +---
>> +$id: http://devicetree.org/schemas/display/atmel,lcdc-display.yaml#
>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>> +
>> +title: Microchip's LCDC Display
>> +
>> +maintainers:
>> +  - Nicolas Ferre <nicolas.ferre@microchip.com>
>> +  - Dharma Balasubiramani <dharma.b@microchip.com>
>> +
>> +description:
>> +  The LCD Controller (LCDC) consists of logic for transferring LCD image data
>> +  from an external display buffer to a TFT LCD panel. The LCDC has one display
>> +  input buffer per layer that fetches pixels through the single bus host
>> +  interface and a look-up table to allow palletized display configurations. The
>> +  LCDC is programmable on a per layer basis, and supports different LCD
>> +  resolutions, window sizes, image formats and pixel depths.
>> +
>> +# We need a select here since this schema is applicable only for nodes with the
>> +# following properties
>> +
>> +select:
>> +  anyOf:
>> +    - required: [ 'atmel,dmacon' ]
>> +    - required: [ 'atmel,lcdcon2' ]
>> +    - required: [ 'atmel,guard-time' ]
>> +
>> +properties:
>> +  atmel,dmacon:
>> +    $ref: /schemas/types.yaml#/definitions/uint32
>> +    description: dma controller configuration
>> +
>> +  atmel,lcdcon2:
>> +    $ref: /schemas/types.yaml#/definitions/uint32
>> +    description: lcd controller configuration
>> +
>> +  atmel,guard-time:
>> +    $ref: /schemas/types.yaml#/definitions/uint32
>> +    description: lcd guard time (Delay in frame periods)
> 
> Is there a maximum?

The datasheet (https://www.keil.com/dd/chip/4210.htm) for both 
AT91SAM9261 and AT91SAM9263 specifies the GUARD_TIME field within the 
PWRCON register. This field is 7 bits wide (bits 1-7) and acts as a mask 
to define the guard time delay.

Hence the maximum value for the guard time for both AT91SAM9261 and 
AT91SAM9263 SoCs is 127 when using the GUARD_TIME field in the PWRCON 
register.

The datasheet doesn't specify the duration of each "frame period." So, 
this value only represents the maximum number of frame periods that can 
be set for the guard time, not the actual time delay in seconds or 
milliseconds.

> 
>> +
>> +  bits-per-pixel:
>> +    $ref: /schemas/types.yaml#/definitions/uint32
>> +    description: lcd panel bit-depth.
> 
> Constraints?

The bits-per-pixel value can be 1, 2, 4, 8, 16 or 24.

> 
>> +
>> +  atmel,lcdcon-backlight:
>> +    $ref: /schemas/types.yaml#/definitions/flag
>> +    description: enable backlight
>> +
>> +  atmel,lcdcon-backlight-inverted:
>> +    $ref: /schemas/types.yaml#/definitions/flag
>> +    description: invert backlight PWM polarity
>> +
>> +  atmel,lcd-wiring-mode:
>> +    $ref: /schemas/types.yaml#/definitions/non-unique-string-array
> 
> Isn't this just a single string rather than an array?
> 
>> +    description: lcd wiring mode "RGB" or "BRG"
> 
> enum:
>    - RGB
>    - BRG
> 
> No BGR?

In the current driver implementation, we have interpreted the wiring
mode represented by ATMEL_LCDC_WIRING_BGR as 'BRG' in the array
atmel_lcdfb_wiring_modes. Considering conventional color representation,
would it be appropriate to consider modifying the existing driver to use
the 'BGR' string instead of 'BRG' for better alignment with standard
naming conventions?

static const char *atmel_lcdfb_wiring_modes[] = {
         [ATMEL_LCDC_WIRING_BGR] = "BRG",
         [ATMEL_LCDC_WIRING_RGB] = "RGB",
};


> 
> But wait, the example shows the value is '1'. That should fail testing.
> It didn't, but I've now fixed that.

It seems correctly configured in our dts files but didn't noticed the 
same in the bindings example, thanks for letting me know, I will correct 
it in the next revision.

> 
>> +
>> +  atmel,power-control-gpio:
>> +    description: gpio to power on or off the LCD (as many as needed)
> 
> maxItems: 1

Thanks, I will add it.
> 
>> +
>> +  display-timings:
>> +    $ref: panel/display-timings.yaml#
>> +
>> +required:
>> +  - atmel,dmacon
>> +  - atmel,lcdcon2
>> +  - atmel,guard-time
>> +  - bits-per-pixel
>> +
>> +additionalProperties: false
>> +
>> +examples:
>> +  - |
>> +    display: panel {
>> +      bits-per-pixel = <32>;
>> +      atmel,lcdcon-backlight;
>> +      atmel,dmacon = <0x1>;
>> +      atmel,lcdcon2 = <0x80008002>;
>> +      atmel,guard-time = <9>;
>> +      atmel,lcd-wiring-mode = <1>;
>> +
>> +      display-timings {
>> +        native-mode = <&timing0>;
>> +        timing0: timing0 {
>> +          clock-frequency = <9000000>;
>> +          hactive = <480>;
>> +          vactive = <272>;
>> +          hback-porch = <1>;
>> +          hfront-porch = <1>;
>> +          vback-porch = <40>;
>> +          vfront-porch = <1>;
>> +          hsync-len = <45>;
>> +          vsync-len = <1>;
>> +        };
>> +      };
>> +    };
Nicolas Ferre March 6, 2024, 4:46 p.m. UTC | #3
Dharma, all,

On 06/03/2024 at 15:35, Dharma B - I70843 wrote:
> 
> On 05/03/24 3:31 am, Rob Herring wrote:
>> On Mon, Mar 04, 2024 at 08:00:03PM +0530, Dharma Balasubiramani wrote:
>>> Convert the atmel,lcdc bindings to DT schema.
>>> Changes during conversion: add missing clocks and clock-names properties.
>>>
>>> Signed-off-by: Dharma Balasubiramani <dharma.b@microchip.com>
>>> ---
>>> This patch converts the existing lcdc display text binding to JSON schema.
>>> The binding is split into two namely
>>> lcdc.yaml
>>> - Holds the frame buffer properties
>>> lcdc-display.yaml
>>> - Holds the display panel properties which is a phandle to the display
>>> property in lcdc fb node.
>>>
>>> These bindings are tested using the following command.
>>> 'make DT_CHECKER_FLAGS=-m dt_binding_check'
>>> ---
>>> Changes in v3:
>>> - Remove the generic property "bits-per-pixel"
>>> - Link to v2: https://lore.kernel.org/r/20240304-lcdc-fb-v2-1-a14b463c157a@microchip.com
>>>
>>> Changes in v2:
>>> - Run checkpatch and remove whitespace errors.
>>> - Add the standard interrupt flags.
>>> - Split the binding into two, namely lcdc.yaml and lcdc-display.yaml.
>>> - Link to v1: https://lore.kernel.org/r/20240223-lcdc-fb-v1-1-4c64cb6277df@microchip.com
>>> ---
>>>    .../bindings/display/atmel,lcdc-display.yaml       | 97 ++++++++++++++++++++++
>>>    .../devicetree/bindings/display/atmel,lcdc.txt     | 87 -------------------
>>>    .../devicetree/bindings/display/atmel,lcdc.yaml    | 70 ++++++++++++++++
>>>    3 files changed, 167 insertions(+), 87 deletions(-)
>>>
>>> diff --git a/Documentation/devicetree/bindings/display/atmel,lcdc-display.yaml b/Documentation/devicetree/bindings/display/atmel,lcdc-display.yaml
>>> new file mode 100644
>>> index 000000000000..5e0b706d695d

[..]

>>> +  atmel,lcd-wiring-mode:
>>> +    $ref: /schemas/types.yaml#/definitions/non-unique-string-array
>>
>> Isn't this just a single string rather than an array?
>>
>>> +    description: lcd wiring mode "RGB" or "BRG"
>>
>> enum:
>>     - RGB
>>     - BRG
>>
>> No BGR?
> 
> In the current driver implementation, we have interpreted the wiring
> mode represented by ATMEL_LCDC_WIRING_BGR as 'BRG' in the array
> atmel_lcdfb_wiring_modes. Considering conventional color representation,
> would it be appropriate to consider modifying the existing driver to use
> the 'BGR' string instead of 'BRG' for better alignment with standard
> naming conventions?

This "BRG" thing is definitively a typo. We never had such thing as a 
BRG color wiring but did have BGR wiring mode.

> static const char *atmel_lcdfb_wiring_modes[] = {
>           [ATMEL_LCDC_WIRING_BGR] = "BRG",
>           [ATMEL_LCDC_WIRING_RGB] = "RGB",

The thing is that we have one DT using that:
arch/arm/boot/dts/at91sam9261ek.dts

So, either I would leave it like that: it's only old product using it.
Or just focus on first character in the string so that it works for both 
"BRG" or "BGR", and maintains the backward compatibility.

Regards,
   Nicolas


> };
> 
> 
>>
>> But wait, the example shows the value is '1'. That should fail testing.
>> It didn't, but I've now fixed that.
> 
> It seems correctly configured in our dts files but didn't noticed the
> same in the bindings example, thanks for letting me know, I will correct
> it in the next revision.
Dharma Balasubiramani March 7, 2024, 5:50 a.m. UTC | #4
On 06/03/24 10:16 pm, Nicolas Ferre - M43238 wrote:
> Dharma, all,
> 
> On 06/03/2024 at 15:35, Dharma B - I70843 wrote:
>>
>> On 05/03/24 3:31 am, Rob Herring wrote:
>>> On Mon, Mar 04, 2024 at 08:00:03PM +0530, Dharma Balasubiramani wrote:
>>>> Convert the atmel,lcdc bindings to DT schema.
>>>> Changes during conversion: add missing clocks and clock-names 
>>>> properties.
>>>>
>>>> Signed-off-by: Dharma Balasubiramani <dharma.b@microchip.com>
>>>> ---
>>>> This patch converts the existing lcdc display text binding to JSON 
>>>> schema.
>>>> The binding is split into two namely
>>>> lcdc.yaml
>>>> - Holds the frame buffer properties
>>>> lcdc-display.yaml
>>>> - Holds the display panel properties which is a phandle to the display
>>>> property in lcdc fb node.
>>>>
>>>> These bindings are tested using the following command.
>>>> 'make DT_CHECKER_FLAGS=-m dt_binding_check'
>>>> ---
>>>> Changes in v3:
>>>> - Remove the generic property "bits-per-pixel"
>>>> - Link to v2: 
>>>> https://lore.kernel.org/r/20240304-lcdc-fb-v2-1-a14b463c157a@microchip.com
>>>>
>>>> Changes in v2:
>>>> - Run checkpatch and remove whitespace errors.
>>>> - Add the standard interrupt flags.
>>>> - Split the binding into two, namely lcdc.yaml and lcdc-display.yaml.
>>>> - Link to v1: 
>>>> https://lore.kernel.org/r/20240223-lcdc-fb-v1-1-4c64cb6277df@microchip.com
>>>> ---
>>>>    .../bindings/display/atmel,lcdc-display.yaml       | 97 
>>>> ++++++++++++++++++++++
>>>>    .../devicetree/bindings/display/atmel,lcdc.txt     | 87 
>>>> -------------------
>>>>    .../devicetree/bindings/display/atmel,lcdc.yaml    | 70 
>>>> ++++++++++++++++
>>>>    3 files changed, 167 insertions(+), 87 deletions(-)
>>>>
>>>> diff --git 
>>>> a/Documentation/devicetree/bindings/display/atmel,lcdc-display.yaml 
>>>> b/Documentation/devicetree/bindings/display/atmel,lcdc-display.yaml
>>>> new file mode 100644
>>>> index 000000000000..5e0b706d695d
> 
> [..]
> 
>>>> +  atmel,lcd-wiring-mode:
>>>> +    $ref: /schemas/types.yaml#/definitions/non-unique-string-array
>>>
>>> Isn't this just a single string rather than an array?
>>>
>>>> +    description: lcd wiring mode "RGB" or "BRG"
>>>
>>> enum:
>>>     - RGB
>>>     - BRG
>>>
>>> No BGR?
>>
>> In the current driver implementation, we have interpreted the wiring
>> mode represented by ATMEL_LCDC_WIRING_BGR as 'BRG' in the array
>> atmel_lcdfb_wiring_modes. Considering conventional color representation,
>> would it be appropriate to consider modifying the existing driver to use
>> the 'BGR' string instead of 'BRG' for better alignment with standard
>> naming conventions?
> 
> This "BRG" thing is definitively a typo. We never had such thing as a 
> BRG color wiring but did have BGR wiring mode.
> 
>> static const char *atmel_lcdfb_wiring_modes[] = {
>>           [ATMEL_LCDC_WIRING_BGR] = "BRG",
>>           [ATMEL_LCDC_WIRING_RGB] = "RGB",
> 
> The thing is that we have one DT using that:
> arch/arm/boot/dts/at91sam9261ek.dts
> 
> So, either I would leave it like that: it's only old product using it.

Thank you for your input, Nicolas. If Rob is in agreement with this
proposal as well, I plan to proceed and submit v4, incorporating
adjustments based on other review comments.

> Or just focus on first character in the string so that it works for both 
> "BRG" or "BGR", and maintains the backward compatibility.
> 
> Regards,
>    Nicolas
> 
> 
>> };
>>
>>
>>>
>>> But wait, the example shows the value is '1'. That should fail testing.
>>> It didn't, but I've now fixed that.
>>
>> It seems correctly configured in our dts files but didn't noticed the
>> same in the bindings example, thanks for letting me know, I will correct
>> it in the next revision.
>
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/display/atmel,lcdc-display.yaml b/Documentation/devicetree/bindings/display/atmel,lcdc-display.yaml
new file mode 100644
index 000000000000..5e0b706d695d
--- /dev/null
+++ b/Documentation/devicetree/bindings/display/atmel,lcdc-display.yaml
@@ -0,0 +1,97 @@ 
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/display/atmel,lcdc-display.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Microchip's LCDC Display
+
+maintainers:
+  - Nicolas Ferre <nicolas.ferre@microchip.com>
+  - Dharma Balasubiramani <dharma.b@microchip.com>
+
+description:
+  The LCD Controller (LCDC) consists of logic for transferring LCD image data
+  from an external display buffer to a TFT LCD panel. The LCDC has one display
+  input buffer per layer that fetches pixels through the single bus host
+  interface and a look-up table to allow palletized display configurations. The
+  LCDC is programmable on a per layer basis, and supports different LCD
+  resolutions, window sizes, image formats and pixel depths.
+
+# We need a select here since this schema is applicable only for nodes with the
+# following properties
+
+select:
+  anyOf:
+    - required: [ 'atmel,dmacon' ]
+    - required: [ 'atmel,lcdcon2' ]
+    - required: [ 'atmel,guard-time' ]
+
+properties:
+  atmel,dmacon:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description: dma controller configuration
+
+  atmel,lcdcon2:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description: lcd controller configuration
+
+  atmel,guard-time:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description: lcd guard time (Delay in frame periods)
+
+  bits-per-pixel:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description: lcd panel bit-depth.
+
+  atmel,lcdcon-backlight:
+    $ref: /schemas/types.yaml#/definitions/flag
+    description: enable backlight
+
+  atmel,lcdcon-backlight-inverted:
+    $ref: /schemas/types.yaml#/definitions/flag
+    description: invert backlight PWM polarity
+
+  atmel,lcd-wiring-mode:
+    $ref: /schemas/types.yaml#/definitions/non-unique-string-array
+    description: lcd wiring mode "RGB" or "BRG"
+
+  atmel,power-control-gpio:
+    description: gpio to power on or off the LCD (as many as needed)
+
+  display-timings:
+    $ref: panel/display-timings.yaml#
+
+required:
+  - atmel,dmacon
+  - atmel,lcdcon2
+  - atmel,guard-time
+  - bits-per-pixel
+
+additionalProperties: false
+
+examples:
+  - |
+    display: panel {
+      bits-per-pixel = <32>;
+      atmel,lcdcon-backlight;
+      atmel,dmacon = <0x1>;
+      atmel,lcdcon2 = <0x80008002>;
+      atmel,guard-time = <9>;
+      atmel,lcd-wiring-mode = <1>;
+
+      display-timings {
+        native-mode = <&timing0>;
+        timing0: timing0 {
+          clock-frequency = <9000000>;
+          hactive = <480>;
+          vactive = <272>;
+          hback-porch = <1>;
+          hfront-porch = <1>;
+          vback-porch = <40>;
+          vfront-porch = <1>;
+          hsync-len = <45>;
+          vsync-len = <1>;
+        };
+      };
+    };
diff --git a/Documentation/devicetree/bindings/display/atmel,lcdc.txt b/Documentation/devicetree/bindings/display/atmel,lcdc.txt
deleted file mode 100644
index b5e355ada2fa..000000000000
--- a/Documentation/devicetree/bindings/display/atmel,lcdc.txt
+++ /dev/null
@@ -1,87 +0,0 @@ 
-Atmel LCDC Framebuffer
------------------------------------------------------
-
-Required properties:
-- compatible :
-	"atmel,at91sam9261-lcdc" , 
-	"atmel,at91sam9263-lcdc" ,
-	"atmel,at91sam9g10-lcdc" ,
-	"atmel,at91sam9g45-lcdc" ,
-	"atmel,at91sam9g45es-lcdc" ,
-	"atmel,at91sam9rl-lcdc" ,
-- reg : Should contain 1 register ranges(address and length).
-	Can contain an additional register range(address and length)
-	for fixed framebuffer memory. Useful for dedicated memories.
-- interrupts : framebuffer controller interrupt
-- display: a phandle pointing to the display node
-
-Required nodes:
-- display: a display node is required to initialize the lcd panel
-	This should be in the board dts.
-- default-mode: a videomode within the display with timing parameters
-	as specified below.
-
-Optional properties:
-- lcd-supply: Regulator for LCD supply voltage.
-
-Example:
-
-	fb0: fb@00500000 {
-		compatible = "atmel,at91sam9g45-lcdc";
-		reg = <0x00500000 0x1000>;
-		interrupts = <23 3 0>;
-		pinctrl-names = "default";
-		pinctrl-0 = <&pinctrl_fb>;
-		display = <&display0>;
-		#address-cells = <1>;
-		#size-cells = <1>;
-
-	};
-
-Example for fixed framebuffer memory:
-
-	fb0: fb@00500000 {
-		compatible = "atmel,at91sam9263-lcdc";
-		reg = <0x00700000 0x1000 0x70000000 0x200000>;
-		[...]
-	};
-
-Atmel LCDC Display
------------------------------------------------------
-Required properties (as per of_videomode_helper):
-
- - atmel,dmacon: dma controller configuration
- - atmel,lcdcon2: lcd controller configuration
- - atmel,guard-time: lcd guard time (Delay in frame periods)
- - bits-per-pixel: lcd panel bit-depth.
-
-Optional properties (as per of_videomode_helper):
- - atmel,lcdcon-backlight: enable backlight
- - atmel,lcdcon-backlight-inverted: invert backlight PWM polarity
- - atmel,lcd-wiring-mode: lcd wiring mode "RGB" or "BRG"
- - atmel,power-control-gpio: gpio to power on or off the LCD (as many as needed)
-
-Example:
-	display0: display {
-		bits-per-pixel = <32>;
-		atmel,lcdcon-backlight;
-		atmel,dmacon = <0x1>;
-		atmel,lcdcon2 = <0x80008002>;
-		atmel,guard-time = <9>;
-		atmel,lcd-wiring-mode = <1>;
-
-		display-timings {
-			native-mode = <&timing0>;
-			timing0: timing0 {
-				clock-frequency = <9000000>;
-				hactive = <480>;
-				vactive = <272>;
-				hback-porch = <1>;
-				hfront-porch = <1>;
-				vback-porch = <40>;
-				vfront-porch = <1>;
-				hsync-len = <45>;
-				vsync-len = <1>;
-			};
-		};
-	};
diff --git a/Documentation/devicetree/bindings/display/atmel,lcdc.yaml b/Documentation/devicetree/bindings/display/atmel,lcdc.yaml
new file mode 100644
index 000000000000..1b6f7e395006
--- /dev/null
+++ b/Documentation/devicetree/bindings/display/atmel,lcdc.yaml
@@ -0,0 +1,70 @@ 
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/display/atmel,lcdc.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Microchip's LCDC Framebuffer
+
+maintainers:
+  - Nicolas Ferre <nicolas.ferre@microchip.com>
+  - Dharma Balasubiramani <dharma.b@microchip.com>
+
+description:
+  The LCDC works with a framebuffer, which is a section of memory that contains
+  a complete frame of data representing pixel values for the display. The LCDC
+  reads the pixel data from the framebuffer and sends it to the LCD panel to
+  render the image.
+
+properties:
+  compatible:
+    enum:
+      - atmel,at91sam9261-lcdc
+      - atmel,at91sam9263-lcdc
+      - atmel,at91sam9g10-lcdc
+      - atmel,at91sam9g45-lcdc
+      - atmel,at91sam9g45es-lcdc
+      - atmel,at91sam9rl-lcdc
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  clocks:
+    maxItems: 2
+
+  clock-names:
+    items:
+      - const: hclk
+      - const: lcdc_clk
+
+  display:
+    $ref: /schemas/types.yaml#/definitions/phandle
+    description: A phandle pointing to the display node.
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - clocks
+  - clock-names
+  - display
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/at91.h>
+    #include <dt-bindings/interrupt-controller/irq.h>
+    fb@500000 {
+      compatible = "atmel,at91sam9g45-lcdc";
+      reg = <0x00500000 0x1000>;
+      interrupts = <23 IRQ_TYPE_LEVEL_HIGH 0>;
+      pinctrl-names = "default";
+      pinctrl-0 = <&pinctrl_fb>;
+      clocks = <&pmc PMC_TYPE_PERIPHERAL 23>, <&pmc PMC_TYPE_PERIPHERAL 23>;
+      clock-names = "hclk", "lcdc_clk";
+      display = <&display>;
+    };