Documentation / devicetree / bindings / display / panel / panel-edp.yaml


Based on kernel version 6.8. Page generated on 2024-03-11 21:26 EST.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/display/panel/panel-edp.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Probeable (via DP AUX / EDID) eDP Panels with simple poweron sequences

maintainers:
  - Douglas Anderson <dianders@chromium.org>

description: |
  This binding file can be used to indicate that an eDP panel is connected
  to a Embedded DisplayPort AUX bus (see display/dp-aux-bus.yaml) without
  actually specifying exactly what panel is connected. This is useful for
  the case that more than one different panel could be connected to the
  board, either for second-sourcing purposes or to support multiple SKUs
  with different LCDs that hook up to a common board.
 
  As per above, a requirement for using this binding is that the panel is
  represented under the DP AUX bus. This means that we can use any
  information provided by the DP AUX bus (including the EDID) to identify
  the panel. We can use this to identify display size, resolution, and
  timings among other things.
 
  One piece of information about eDP panels that is typically _not_
  provided anywhere on the DP AUX bus is the power sequencing timings.
  This is the reason why, historically, we've always had to explicitly
  list eDP panels. We solve that here with two tricks. The "worst case"
  power on timings for any panels expected to be connected to a board are
  specified in these bindings. Once we've powered on, it's expected that
  the operating system will lookup the panel in a table (based on EDID
  information) to figure out other power sequencing timings.
 
  eDP panels in general can have somewhat arbitrary power sequencing
  requirements. However, even though it's arbitrary in general, the
  vast majority of panel datasheets have a power sequence diagram that
  looks the exactly the same as every other panel. Each panel datasheet
  cares about different timings in this diagram but the fact that the
  diagram is so similar means we can come up with a single driver to
  handle it.
 
  These diagrams all look roughly like this, sometimes labeled with
  slightly different numbers / lines but all pretty much the same
  sequence. This is because much of this diagram comes straight from
  the eDP Standard.
 
                __________________________________________________
  Vdd       ___/:                                                :\____       /
          _/    :                                                :     \_____/
           :<T1>:<T2>:                                 :<--T10-->:<T11>:<T12>:
                :    +-----------------------+---------+---------+
  eDP     -----------+ Black video           | Src vid | Blk vid +
  Display       :    +-----------------------+---------+---------+
                :     _______________________:_________:_________:
  HPD           :<T3>|                       :         :         |
          ___________|                       :         :         |_____________
                     :                       :         :         :
  Sink               +-----------------------:---------:---------+
  AUX CH  -----------+ AUX Ch operational    :         :         +-------------
                     +-----------------------:---------:---------+
                     :                       :         :         :
                     :<T4>:             :<T7>:         :         :
  Src main                +------+------+--------------+---------+
  lnk data----------------+LnkTrn| Idle |Valid vid data| Idle/off+-------------
                          +------+------+--------------+---------+
                          : <T5> :<-T6->:<-T8->:       :
                                               :__:<T9>:
  LED_EN                                       |  |
          _____________________________________|  |____________________________
                                               :  :
                                     __________:__:_
  PWM                               |          :  : |
          __________________________|          :  : |__________________________
                                    :          :  : :
                       _____________:__________:__:_:______
  Bklight         ____/:            :          :  : :     :\____
  power   _______/     :<---T13---->:          :  : :<T16>:     \______________
  (Vbl)          :<T17>:<---------T14--------->:  :<-T15->:<T18>:
 
  The above looks fairly complex but, as per above, each panel only cares
  about a subset of those timings.

allOf:
  - $ref: panel-common.yaml#

properties:
  compatible:
    const: edp-panel

  hpd-reliable-delay-ms:
    description:
      A fixed amount of time that must be waited after powering on the
      panel's power-supply before the HPD signal is a reliable way to know
      when the AUX channel is ready. This is useful for panels that glitch
      the HPD at the start of power-on. This value is not needed if HPD is
      always reliable for all panels that might be connected.

  hpd-absent-delay-ms:
    description:
      The panel specifies that HPD will be asserted this many milliseconds
      from power on (timing T3 in the diagram above). If we have no way to
      measure HPD then a fixed delay of this many milliseconds can be used.
      This can also be used as a timeout when waiting for HPD. Does not
      include the hpd-reliable-delay, so if hpd-reliable-delay was 80 ms
      and hpd-absent-delay was 200 ms then we'd do a fixed 80 ms delay and
      then we know HPD would assert in the next 120 ms. This value is not
      needed if HPD hooked up, either through a GPIO in the panel node or
      hooked up directly to the eDP controller.

  backlight: true
  enable-gpios: true
  port: true
  power-supply: true
  no-hpd: true
  hpd-gpios: true

additionalProperties: false

required:
  - compatible
  - power-supply

examples:
  - |
    #include <dt-bindings/clock/qcom,rpmh.h>
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interrupt-controller/irq.h>
 
    i2c {
      #address-cells = <1>;
      #size-cells = <0>;
 
      bridge@2d {
        compatible = "ti,sn65dsi86";
        reg = <0x2d>;
 
        interrupt-parent = <&tlmm>;
        interrupts = <10 IRQ_TYPE_LEVEL_HIGH>;
 
        enable-gpios = <&tlmm 102 GPIO_ACTIVE_HIGH>;
 
        vpll-supply = <&src_pp1800_s4a>;
        vccio-supply = <&src_pp1800_s4a>;
        vcca-supply = <&src_pp1200_l2a>;
        vcc-supply = <&src_pp1200_l2a>;
 
        clocks = <&rpmhcc RPMH_LN_BB_CLK2>;
        clock-names = "refclk";
 
        no-hpd;
 
        ports {
          #address-cells = <1>;
          #size-cells = <0>;
 
          port@0 {
            reg = <0>;
            endpoint {
              remote-endpoint = <&dsi0_out>;
            };
          };
 
          port@1 {
            reg = <1>;
            sn65dsi86_out: endpoint {
              remote-endpoint = <&panel_in_edp>;
            };
          };
        };
 
        aux-bus {
          panel {
            compatible = "edp-panel";
            power-supply = <&pp3300_dx_edp>;
            backlight = <&backlight>;
            hpd-gpios = <&sn65dsi86_bridge 2 GPIO_ACTIVE_HIGH>;
            hpd-reliable-delay-ms = <15>;
 
            port {
              panel_in_edp: endpoint {
                remote-endpoint = <&sn65dsi86_out>;
              };
            };
          };
        };
      };
    };