diff mbox series

[1/3,v4] drm/panel: Add generic DSI panel YAML bindings

Message ID 20191024114305.15581-1-linus.walleij@linaro.org (mailing list archive)
State New, archived
Headers show
Series [1/3,v4] drm/panel: Add generic DSI panel YAML bindings | expand

Commit Message

Linus Walleij Oct. 24, 2019, 11:43 a.m. UTC
This adds a starting point for processing and defining generic
bindings used by DSI panels. We just define one single bool
property to force the panel into video mode for now.

Cc: devicetree@vger.kernel.org
Suggested-by: Rob Herring <robh@kernel.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
ChangeLog v3->v4:
- Rename into display/dsi-controller.yaml
- Require a virtual channel number for the DSI panel, as
  DSI have this 2-bit virtual address field.
- Bring in some but not all properties from the existing MIPI
  DSI bindings. This schema can be used with simpler panels but
  not complex panels with multiple virtual channels for the
  moment. Let's handle it when we get there.
- Add an example.
ChangeLog v2->v3:
- Make a more complete DSI panel binding including the controller
  and its address-cells and size-cells and a pattern for the panel
  nodes. The panel is one per DSI master, the reg property is
  compulsory but should always be 0 (as far as I can tell) as
  only one panel can be connected. The bus doesn't really have
  any addresses for the panel, the address/reg notation seems
  to be cargo-culted from the port graphs and is not necessary
  to parse some device trees, it is used to tell whether the
  node is a panel or not rather than any addressing.
- I have no idea how many displays you can daisychain on a single
  DSI master, I just guess 15 will be enough. The MIPI-specs
  are memberwalled. Someone who knows can tell perhaps?
ChangeLog v1->v2:
- New patch after feedback.
---
 .../bindings/display/dsi-controller.yaml      | 88 +++++++++++++++++++
 1 file changed, 88 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/display/dsi-controller.yaml

Comments

Rob Herring Oct. 25, 2019, 7:20 p.m. UTC | #1
On Thu, Oct 24, 2019 at 01:43:03PM +0200, Linus Walleij wrote:
> This adds a starting point for processing and defining generic
> bindings used by DSI panels. We just define one single bool
> property to force the panel into video mode for now.
> 
> Cc: devicetree@vger.kernel.org
> Suggested-by: Rob Herring <robh@kernel.org>
> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
> ---
> ChangeLog v3->v4:
> - Rename into display/dsi-controller.yaml
> - Require a virtual channel number for the DSI panel, as
>   DSI have this 2-bit virtual address field.
> - Bring in some but not all properties from the existing MIPI
>   DSI bindings. This schema can be used with simpler panels but
>   not complex panels with multiple virtual channels for the
>   moment. Let's handle it when we get there.
> - Add an example.

A broken example...

> ChangeLog v2->v3:
> - Make a more complete DSI panel binding including the controller
>   and its address-cells and size-cells and a pattern for the panel
>   nodes. The panel is one per DSI master, the reg property is
>   compulsory but should always be 0 (as far as I can tell) as
>   only one panel can be connected. The bus doesn't really have
>   any addresses for the panel, the address/reg notation seems
>   to be cargo-culted from the port graphs and is not necessary
>   to parse some device trees, it is used to tell whether the
>   node is a panel or not rather than any addressing.
> - I have no idea how many displays you can daisychain on a single
>   DSI master, I just guess 15 will be enough. The MIPI-specs
>   are memberwalled. Someone who knows can tell perhaps?
> ChangeLog v1->v2:
> - New patch after feedback.
> ---
>  .../bindings/display/dsi-controller.yaml      | 88 +++++++++++++++++++
>  1 file changed, 88 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/display/dsi-controller.yaml
> 
> diff --git a/Documentation/devicetree/bindings/display/dsi-controller.yaml b/Documentation/devicetree/bindings/display/dsi-controller.yaml
> new file mode 100644
> index 000000000000..2a6d872a40c5
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/display/dsi-controller.yaml
> @@ -0,0 +1,88 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/display/panel/panel-dsi-common.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Common Properties for DSI Display Panels
> +
> +maintainers:
> +  - Linus Walleij <linus.walleij@linaro.org>
> +
> +description: |
> +  This document defines device tree properties common to DSI, Display
> +  Serial Interface panels. It doesn't constitute a device tree binding
> +  specification by itself but is meant to be referenced by device tree
> +  bindings.
> +
> +  When referenced from panel device tree bindings the properties defined in
> +  this document are defined as follows. The panel device tree bindings are
> +  responsible for defining whether each property is required or optional.
> +
> +  Notice: this binding concerns DSI panels connected directly to a master
> +  without any intermediate port graph to the panel. Each DSI master
> +  can control exactly one panel. They should all just have a node "panel"
> +  for their panel with their reg-property set to 0.
> +
> +properties:
> +  $nodename:
> +    pattern: "^dsi-controller(@.*)?$"
> +
> +  "#address-cells":
> +    const: 1
> +
> +  "#size-cells":
> +    const: 0
> +
> +patternProperties:
> +  "^panel@[0-3]$":
> +    type: object
> +
> +    properties:
> +      reg:
> +        minimum: 0
> +        maximum: 3
> +        description:
> +          The virtual channel number of a DSI peripheral. Must be in the range
> +          from 0 to 3, as DSI uses a 2-bit addressing scheme. Some DSI
> +          peripherals respond to more than a single virtual channel. In that
> +          case the reg property can take multiple entries, one for each virtual
> +          channel that the peripheral responds to.
> +
> +      clock-master:
> +        type: boolean
> +        description:
> +           Should be enabled if the host is being used in conjunction with
> +           another DSI host to drive the same peripheral. Hardware supporting
> +           such a configuration generally requires the data on both the busses
> +           to be driven by the same clock. Only the DSI host instance
> +           controlling this clock should contain this property.
> +
> +      enforce-video-mode:
> +        type: boolean
> +        description:
> +          The best option is usually to run a panel in command mode, as this
> +          gives better control over the panel hardware. However for different
> +          reasons like broken hardware, missing features or testing, it may be
> +          useful to be able to force a command mode-capable panel into video
> +          mode.
> +
> +    required:
> +      - reg
> +
> +examples:
> +  - |
> +    dsi-controller@55aa55aa {
> +      compatible = "acme,foo";

Eventually, I want to start reporting if compatible strings aren't 
documented (i.e. matched to a schema). This will break then...

> +      reg = <0x55aa55aa>;

This will fail because a size cell is expected.

I'd just drop both properties here. A 'dsi-controller' node name is 
enough to select this schema.

> +      #address-cells = <1>;
> +      #size-cells = <0>;
> +      panel@0 {
> +        compatible = "acme,bar";

Just pick a real one. (Or drop the example because the binding for the 
real panel will have the same example).

> +        reg = <0>;
> +        vddi-supply = <&foo>;
> +        reset-gpios = <&foo_gpio 0 GPIO_ACTIVE_LOW>;
> +      };
> +    };
> +
> +...
> -- 
> 2.21.0
>
Linus Walleij Oct. 30, 2019, 1:50 p.m. UTC | #2
On Fri, Oct 25, 2019 at 9:20 PM Rob Herring <robh@kernel.org> wrote:

> [Me]
> > +    dsi-controller@55aa55aa {
> > +      compatible = "acme,foo";
>
> Eventually, I want to start reporting if compatible strings aren't
> documented (i.e. matched to a schema). This will break then...

OK I drop this.

> > +      reg = <0x55aa55aa>;
>
> This will fail because a size cell is expected.

Do you mean it will fail the day we actually check reg properties to
be properly formed under the circumstances?

Because:
  HOSTLD  scripts/dtc/dtc
  CHKDT   Documentation/devicetree/bindings/display/panel/sony,acx424akp.yaml
  CHKDT   Documentation/devicetree/bindings/display/dsi-controller.yaml
  SCHEMA  Documentation/devicetree/bindings/processed-schema.yaml
(...)

It passes just fine.

I get a bit nervous since the schema is all about being strict about
stuff so I get the feeling that "should have failed".

Yours,
Linus Walleij
Rob Herring Oct. 30, 2019, 7:45 p.m. UTC | #3
On Wed, Oct 30, 2019 at 8:50 AM Linus Walleij <linus.walleij@linaro.org> wrote:
>
> On Fri, Oct 25, 2019 at 9:20 PM Rob Herring <robh@kernel.org> wrote:
>
> > [Me]
> > > +    dsi-controller@55aa55aa {
> > > +      compatible = "acme,foo";
> >
> > Eventually, I want to start reporting if compatible strings aren't
> > documented (i.e. matched to a schema). This will break then...
>
> OK I drop this.
>
> > > +      reg = <0x55aa55aa>;
> >
> > This will fail because a size cell is expected.
>
> Do you mean it will fail the day we actually check reg properties to
> be properly formed under the circumstances?
>
> Because:
>   HOSTLD  scripts/dtc/dtc
>   CHKDT   Documentation/devicetree/bindings/display/panel/sony,acx424akp.yaml
>   CHKDT   Documentation/devicetree/bindings/display/dsi-controller.yaml
>   SCHEMA  Documentation/devicetree/bindings/processed-schema.yaml
> (...)
>
> It passes just fine.

Yes, but the examples are built and validated after this. With the
other errors currently, you're erroring out before this happens.

> I get a bit nervous since the schema is all about being strict about
> stuff so I get the feeling that "should have failed".

It's actually dtc that will complain here because it's aware of
#*-cells values. Can't do that with schema.

Rob
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/display/dsi-controller.yaml b/Documentation/devicetree/bindings/display/dsi-controller.yaml
new file mode 100644
index 000000000000..2a6d872a40c5
--- /dev/null
+++ b/Documentation/devicetree/bindings/display/dsi-controller.yaml
@@ -0,0 +1,88 @@ 
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/display/panel/panel-dsi-common.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Common Properties for DSI Display Panels
+
+maintainers:
+  - Linus Walleij <linus.walleij@linaro.org>
+
+description: |
+  This document defines device tree properties common to DSI, Display
+  Serial Interface panels. It doesn't constitute a device tree binding
+  specification by itself but is meant to be referenced by device tree
+  bindings.
+
+  When referenced from panel device tree bindings the properties defined in
+  this document are defined as follows. The panel device tree bindings are
+  responsible for defining whether each property is required or optional.
+
+  Notice: this binding concerns DSI panels connected directly to a master
+  without any intermediate port graph to the panel. Each DSI master
+  can control exactly one panel. They should all just have a node "panel"
+  for their panel with their reg-property set to 0.
+
+properties:
+  $nodename:
+    pattern: "^dsi-controller(@.*)?$"
+
+  "#address-cells":
+    const: 1
+
+  "#size-cells":
+    const: 0
+
+patternProperties:
+  "^panel@[0-3]$":
+    type: object
+
+    properties:
+      reg:
+        minimum: 0
+        maximum: 3
+        description:
+          The virtual channel number of a DSI peripheral. Must be in the range
+          from 0 to 3, as DSI uses a 2-bit addressing scheme. Some DSI
+          peripherals respond to more than a single virtual channel. In that
+          case the reg property can take multiple entries, one for each virtual
+          channel that the peripheral responds to.
+
+      clock-master:
+        type: boolean
+        description:
+           Should be enabled if the host is being used in conjunction with
+           another DSI host to drive the same peripheral. Hardware supporting
+           such a configuration generally requires the data on both the busses
+           to be driven by the same clock. Only the DSI host instance
+           controlling this clock should contain this property.
+
+      enforce-video-mode:
+        type: boolean
+        description:
+          The best option is usually to run a panel in command mode, as this
+          gives better control over the panel hardware. However for different
+          reasons like broken hardware, missing features or testing, it may be
+          useful to be able to force a command mode-capable panel into video
+          mode.
+
+    required:
+      - reg
+
+examples:
+  - |
+    dsi-controller@55aa55aa {
+      compatible = "acme,foo";
+      reg = <0x55aa55aa>;
+      #address-cells = <1>;
+      #size-cells = <0>;
+      panel@0 {
+        compatible = "acme,bar";
+        reg = <0>;
+        vddi-supply = <&foo>;
+        reset-gpios = <&foo_gpio 0 GPIO_ACTIVE_LOW>;
+      };
+    };
+
+...