Hi, On Mon, Jan 20, 2020 at 09:06:39PM +0100, Sam Ravnborg wrote: > Add meta-schema variant of panel-timing and > reference it from panel-common.yaml. > > Signed-off-by: Sam Ravnborg <sam@xxxxxxxxxxxx> > Cc: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > Cc: Rob Herring <robh@xxxxxxxxxx> > Cc: Thierry Reding <thierry.reding@xxxxxxxxx> > Cc: Oleksandr Suvorov <oleksandr.suvorov@xxxxxxxxxxx> > Cc: devicetree@xxxxxxxxxxxxxxx > --- > .../bindings/display/panel/panel-common.yaml | 7 +- > .../bindings/display/panel/panel-timing.yaml | 253 ++++++++++++++++++ > 2 files changed, 256 insertions(+), 4 deletions(-) > create mode 100644 Documentation/devicetree/bindings/display/panel/panel-timing.yaml > > diff --git a/Documentation/devicetree/bindings/display/panel/panel-common.yaml b/Documentation/devicetree/bindings/display/panel/panel-common.yaml > index ef8d8cdfcede..8070c439adbd 100644 > --- a/Documentation/devicetree/bindings/display/panel/panel-common.yaml > +++ b/Documentation/devicetree/bindings/display/panel/panel-common.yaml > @@ -54,13 +54,12 @@ properties: > > # Display Timings > panel-timing: > - type: object > description: > Most display panels are restricted to a single resolution and > require specific display timings. The panel-timing subnode expresses those > - timings as specified in the timing subnode section of the display timing > - bindings defined in > - Documentation/devicetree/bindings/display/panel/display-timing.txt. > + timings. > + allOf: > + - $ref: panel-timing.yaml# > > # Connectivity > port: > diff --git a/Documentation/devicetree/bindings/display/panel/panel-timing.yaml b/Documentation/devicetree/bindings/display/panel/panel-timing.yaml > new file mode 100644 > index 000000000000..59891c7a58ee > --- /dev/null > +++ b/Documentation/devicetree/bindings/display/panel/panel-timing.yaml > @@ -0,0 +1,253 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/display/panel/panel-timing.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: panel timing bindings > + > +maintainers: > + - Thierry Reding <thierry.reding@xxxxxxxxx> > + - Sam Ravnborg <sam@xxxxxxxxxxxx> > + > +description: | > + There are different ways of describing the timing data data of a panel. The > + devicetree representation corresponds to the one commonly found in datasheets > + for panels. If a panel supports multiple signal timings, the native-mode > + can be specified. > + > + The parameters are defined as seen in the following illustration. > + > + +----------+-------------------------------------+----------+-------+ > + | | ^ | | | > + | | |vback_porch | | | > + | | v | | | > + +----------#######################################----------+-------+ > + | # ^ # | | > + | # | # | | > + | hback # | # hfront | hsync | > + | porch # | hactive # porch | len | > + |<-------->#<-------+--------------------------->#<-------->|<----->| > + | # | # | | > + | # |vactive # | | > + | # | # | | > + | # v # | | > + +----------#######################################----------+-------+ > + | | ^ | | | > + | | |vfront_porch | | | > + | | v | | | > + +----------+-------------------------------------+----------+-------+ > + | | ^ | | | > + | | |vsync_len | | | > + | | v | | | > + +----------+-------------------------------------+----------+-------+ > + > + > + The following is the panel timings shown with time on the x-axis. > + This matches the timing diagrams often found in data sheets. > + > + Active Front Sync Back > + Region Porch Porch > + <-----------------------><----------------><-------------><--------------> > + //////////////////////| > + ////////////////////// | > + ////////////////////// |.................. ................ > + _______________ > + > + Timing can be specified either as a typical value or as a tuple > + of min, typ, max values. > + > +properties: > + > + clock-frequency: > + $ref: /schemas/types.yaml#/definitions/uint32 > + description: | > + Panel clock in Hz > + > + hactive: > + $ref: /schemas/types.yaml#/definitions/uint32 > + description: | > + Horizontal panel resolution in pixels > + > + vactive: > + $ref: /schemas/types.yaml#/definitions/uint32 > + description: | > + Verical panel resolution in pixels > + > + hfront-porch: > + description: | > + Horizontal front porch panel timing > + oneOf: > + - allOf: > + - $ref: /schemas/types.yaml#/definitions/uint32-array > + - maxItems: 1 > + items: > + description: typical number of pixels You have that on a number of occasions, but that could just be an uint32, right? > + - allOf: > + - $ref: /schemas/types.yaml#/definitions/uint32-array > + - minItems: 3 > + maxItems: 3 > + items: > + description: min, typ, max number of pixels When minItems and maxitems are equal, you can just set one, the other one will be filled by the DT schemas tools. > + hsync-active: > + description: | > + Horizontal sync pulse. > + If omitted then it is not used by the hardware > + oneOf: > + - const: 0 > + description: active low > + - const: 1 > + description: active high You probably should use an enum here (and in other similar places). oneOf / anyOf / allOF errors are pretty cryptic, while it will it's really better with an enum. Thanks! Maxime