]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
drm/panel: Augment the TPO TPG110 bindings
authorLinus Walleij <linus.walleij@linaro.org>
Thu, 1 Nov 2018 21:32:55 +0000 (22:32 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Thu, 15 Nov 2018 14:40:41 +0000 (15:40 +0100)
The TPO TPG110 bindings were using the DPI bindings (popular
in the fbdev subsystem) but this misses the finer points
learned in the DRM subsystem.

We need to augment the bindings for proper DRM integration:
the timings are expressed by the hardware, not put into the
device tree. I.e. this hardware is self-describing and can
report the resolutions and timings needed. It should not
be described in the device tree.

Further the device was incorrectly modeled with GPIO lines
instead of an SPI child, even though the device was using
SPI.

No known deployments of the device using device tree
exist, so it should be fine to augment the bindings.

Cc: devicetree@vger.kernel.org
Reviewed-by: Rob Herring <robh@kernel.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20181101213256.12097-1-linus.walleij@linaro.org
Documentation/devicetree/bindings/display/panel/tpo,tpg110.txt

index f5e3c6f2095a502d420fec40af372c009e80e418..40f3d7c713bb13ccd4759bd2cef8f51c3b97253b 100644 (file)
@@ -1,47 +1,70 @@
 TPO TPG110 Panel
 ================
 
-This binding builds on the DPI bindings, adding a few properties
-as a superset of a DPI. See panel-dpi.txt for the required DPI
-bindings.
+This panel driver is a component that acts as an intermediary
+between an RGB output and a variety of panels. The panel
+driver is strapped up in electronics to the desired resolution
+and other properties, and has a control interface over 3WIRE
+SPI. By talking to the TPG110 over SPI, the strapped properties
+can be discovered and the hardware is therefore mostly
+self-describing.
+
+       +--------+
+SPI -> |  TPO   | -> physical display
+RGB -> | TPG110 |
+       +--------+
+
+If some electrical strap or alternate resolution is desired,
+this can be set up by taking software control of the display
+over the SPI interface. The interface can also adjust
+for properties of the display such as gamma correction and
+certain electrical driving levels.
+
+The TPG110 does not know the physical dimensions of the panel
+connected, so this needs to be specified in the device tree.
+
+It requires a GPIO line for control of its reset line.
+
+The serial protocol has line names that resemble I2C but the
+protocol is not I2C but 3WIRE SPI.
 
 Required properties:
-- compatible : "tpo,tpg110"
+- compatible : one of:
+  "ste,nomadik-nhk15-display", "tpo,tpg110"
+  "tpo,tpg110"
 - grestb-gpios : panel reset GPIO
-- scen-gpios : serial control enable GPIO
-- scl-gpios : serial control clock line GPIO
-- sda-gpios : serial control data line GPIO
+- width-mm : see display/panel/panel-common.txt
+- height-mm : see display/panel/panel-common.txt
+
+The device needs to be a child of an SPI bus, see
+spi/spi-bus.txt. The SPI child must set the following
+properties:
+- spi-3wire
+- spi-max-frequency = <3000000>;
+as these are characteristics of this device.
 
-Required nodes:
-- Video port for DPI input, see panel-dpi.txt
-- Panel timing for DPI setup, see panel-dpi.txt
+The device node can contain one 'port' child node with one child
+'endpoint' node, according to the bindings defined in
+media/video-interfaces.txt. This node should describe panel's video bus.
 
 Example
 -------
 
-panel {
-       compatible = "tpo,tpg110", "panel-dpi";
-       grestb-gpios = <&stmpe_gpio44 5 GPIO_ACTIVE_LOW>;
-       scen-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
-       scl-gpios = <&gpio0 5 GPIO_ACTIVE_HIGH>;
-       sda-gpios = <&gpio0 4 GPIO_ACTIVE_HIGH>;
+panel: display@0 {
+       compatible = "tpo,tpg110";
+       reg = <0>;
+       spi-3wire;
+       /* 320 ns min period ~= 3 MHz */
+       spi-max-frequency = <3000000>;
+       /* Width and height from data sheet */
+       width-mm = <116>;
+       height-mm = <87>;
+       grestb-gpios = <&foo_gpio 5 GPIO_ACTIVE_LOW>;
        backlight = <&bl>;
 
        port {
                nomadik_clcd_panel: endpoint {
-                       remote-endpoint = <&nomadik_clcd_pads>;
+                       remote-endpoint = <&foo>;
                };
        };
-
-       panel-timing {
-               clock-frequency = <33200000>;
-               hactive = <800>;
-               hback-porch = <216>;
-               hfront-porch = <40>;
-               hsync-len = <1>;
-               vactive = <480>;
-               vback-porch = <35>;
-               vfront-porch = <10>;
-               vsync-len = <1>;
-       };
 };