# 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)
    maximum: 127

  bits-per-pixel:
    $ref: /schemas/types.yaml#/definitions/uint32
    description: lcd panel bit-depth.
    enum: [1, 2, 4, 8, 16, 24, 32]

  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/string
    description: lcd wiring mode "RGB" or "BRG"
    enum:
      - RGB
      - BRG

  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 = "RGB";

      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>;
        };
      };
    };
