1*29145a56SDouglas Anderson# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2*29145a56SDouglas Anderson%YAML 1.2 3*29145a56SDouglas Anderson--- 4*29145a56SDouglas Anderson$id: http://devicetree.org/schemas/display/panel/panel-edp.yaml# 5*29145a56SDouglas Anderson$schema: http://devicetree.org/meta-schemas/core.yaml# 6*29145a56SDouglas Anderson 7*29145a56SDouglas Andersontitle: Probeable (via DP AUX / EDID) eDP Panels with simple poweron sequences 8*29145a56SDouglas Anderson 9*29145a56SDouglas Andersonmaintainers: 10*29145a56SDouglas Anderson - Douglas Anderson <dianders@chromium.org> 11*29145a56SDouglas Anderson 12*29145a56SDouglas Andersondescription: | 13*29145a56SDouglas Anderson This binding file can be used to indicate that an eDP panel is connected 14*29145a56SDouglas Anderson to a Embedded DisplayPort AUX bus (see display/dp-aux-bus.yaml) without 15*29145a56SDouglas Anderson actually specifying exactly what panel is connected. This is useful for 16*29145a56SDouglas Anderson the case that more than one different panel could be connected to the 17*29145a56SDouglas Anderson board, either for second-sourcing purposes or to support multiple SKUs 18*29145a56SDouglas Anderson with different LCDs that hook up to a common board. 19*29145a56SDouglas Anderson 20*29145a56SDouglas Anderson As per above, a requirement for using this binding is that the panel is 21*29145a56SDouglas Anderson represented under the DP AUX bus. This means that we can use any 22*29145a56SDouglas Anderson information provided by the DP AUX bus (including the EDID) to identify 23*29145a56SDouglas Anderson the panel. We can use this to identify display size, resolution, and 24*29145a56SDouglas Anderson timings among other things. 25*29145a56SDouglas Anderson 26*29145a56SDouglas Anderson One piece of information about eDP panels that is typically _not_ 27*29145a56SDouglas Anderson provided anywhere on the DP AUX bus is the power sequencing timings. 28*29145a56SDouglas Anderson This is the reason why, historically, we've always had to explicitly 29*29145a56SDouglas Anderson list eDP panels. We solve that here with two tricks. The "worst case" 30*29145a56SDouglas Anderson power on timings for any panels expected to be connected to a board are 31*29145a56SDouglas Anderson specified in these bindings. Once we've powered on, it's expected that 32*29145a56SDouglas Anderson the operating system will lookup the panel in a table (based on EDID 33*29145a56SDouglas Anderson information) to figure out other power sequencing timings. 34*29145a56SDouglas Anderson 35*29145a56SDouglas Anderson eDP panels in general can have somewhat arbitrary power sequencing 36*29145a56SDouglas Anderson requirements. However, even though it's arbitrary in general, the 37*29145a56SDouglas Anderson vast majority of panel datasheets have a power sequence diagram that 38*29145a56SDouglas Anderson looks the exactly the same as every other panel. Each panel datasheet 39*29145a56SDouglas Anderson cares about different timings in this diagram but the fact that the 40*29145a56SDouglas Anderson diagram is so similar means we can come up with a single driver to 41*29145a56SDouglas Anderson handle it. 42*29145a56SDouglas Anderson 43*29145a56SDouglas Anderson These diagrams all look roughly like this, sometimes labeled with 44*29145a56SDouglas Anderson slightly different numbers / lines but all pretty much the same 45*29145a56SDouglas Anderson sequence. This is because much of this diagram comes straight from 46*29145a56SDouglas Anderson the eDP Standard. 47*29145a56SDouglas Anderson 48*29145a56SDouglas Anderson __________________________________________________ 49*29145a56SDouglas Anderson Vdd ___/: :\____ / 50*29145a56SDouglas Anderson _/ : : \_____/ 51*29145a56SDouglas Anderson :<T1>:<T2>: :<--T10-->:<T11>:<T12>: 52*29145a56SDouglas Anderson : +-----------------------+---------+---------+ 53*29145a56SDouglas Anderson eDP -----------+ Black video | Src vid | Blk vid + 54*29145a56SDouglas Anderson Display : +-----------------------+---------+---------+ 55*29145a56SDouglas Anderson : _______________________:_________:_________: 56*29145a56SDouglas Anderson HPD :<T3>| : : | 57*29145a56SDouglas Anderson ___________| : : |_____________ 58*29145a56SDouglas Anderson : : : : 59*29145a56SDouglas Anderson Sink +-----------------------:---------:---------+ 60*29145a56SDouglas Anderson AUX CH -----------+ AUX Ch operational : : +------------- 61*29145a56SDouglas Anderson +-----------------------:---------:---------+ 62*29145a56SDouglas Anderson : : : : 63*29145a56SDouglas Anderson :<T4>: :<T7>: : : 64*29145a56SDouglas Anderson Src main +------+------+--------------+---------+ 65*29145a56SDouglas Anderson lnk data----------------+LnkTrn| Idle |Valid vid data| Idle/off+------------- 66*29145a56SDouglas Anderson +------+------+--------------+---------+ 67*29145a56SDouglas Anderson : <T5> :<-T6->:<-T8->: : 68*29145a56SDouglas Anderson :__:<T9>: 69*29145a56SDouglas Anderson LED_EN | | 70*29145a56SDouglas Anderson _____________________________________| |____________________________ 71*29145a56SDouglas Anderson : : 72*29145a56SDouglas Anderson __________:__:_ 73*29145a56SDouglas Anderson PWM | : : | 74*29145a56SDouglas Anderson __________________________| : : |__________________________ 75*29145a56SDouglas Anderson : : : : 76*29145a56SDouglas Anderson _____________:__________:__:_:______ 77*29145a56SDouglas Anderson Bklight ____/: : : : : :\____ 78*29145a56SDouglas Anderson power _______/ :<---T13---->: : : :<T16>: \______________ 79*29145a56SDouglas Anderson (Vbl) :<T17>:<---------T14--------->: :<-T15->:<T18>: 80*29145a56SDouglas Anderson 81*29145a56SDouglas Anderson The above looks fairly complex but, as per above, each panel only cares 82*29145a56SDouglas Anderson about a subset of those timings. 83*29145a56SDouglas Anderson 84*29145a56SDouglas AndersonallOf: 85*29145a56SDouglas Anderson - $ref: panel-common.yaml# 86*29145a56SDouglas Anderson 87*29145a56SDouglas Andersonproperties: 88*29145a56SDouglas Anderson compatible: 89*29145a56SDouglas Anderson const: edp-panel 90*29145a56SDouglas Anderson 91*29145a56SDouglas Anderson hpd-reliable-delay-ms: 92*29145a56SDouglas Anderson description: 93*29145a56SDouglas Anderson A fixed amount of time that must be waited after powering on the 94*29145a56SDouglas Anderson panel's power-supply before the HPD signal is a reliable way to know 95*29145a56SDouglas Anderson when the AUX channel is ready. This is useful for panels that glitch 96*29145a56SDouglas Anderson the HPD at the start of power-on. This value is not needed if HPD is 97*29145a56SDouglas Anderson always reliable for all panels that might be connected. 98*29145a56SDouglas Anderson 99*29145a56SDouglas Anderson hpd-absent-delay-ms: 100*29145a56SDouglas Anderson description: 101*29145a56SDouglas Anderson The panel specifies that HPD will be asserted this many milliseconds 102*29145a56SDouglas Anderson from power on (timing T3 in the diagram above). If we have no way to 103*29145a56SDouglas Anderson measure HPD then a fixed delay of this many milliseconds can be used. 104*29145a56SDouglas Anderson This can also be used as a timeout when waiting for HPD. Does not 105*29145a56SDouglas Anderson include the hpd-reliable-delay, so if hpd-reliable-delay was 80 ms 106*29145a56SDouglas Anderson and hpd-absent-delay was 200 ms then we'd do a fixed 80 ms delay and 107*29145a56SDouglas Anderson then we know HPD would assert in the next 120 ms. This value is not 108*29145a56SDouglas Anderson needed if HPD hooked up, either through a GPIO in the panel node or 109*29145a56SDouglas Anderson hooked up directly to the eDP controller. 110*29145a56SDouglas Anderson 111*29145a56SDouglas Anderson backlight: true 112*29145a56SDouglas Anderson enable-gpios: true 113*29145a56SDouglas Anderson port: true 114*29145a56SDouglas Anderson power-supply: true 115*29145a56SDouglas Anderson no-hpd: true 116*29145a56SDouglas Anderson hpd-gpios: true 117*29145a56SDouglas Anderson 118*29145a56SDouglas AndersonadditionalProperties: false 119*29145a56SDouglas Anderson 120*29145a56SDouglas Andersonrequired: 121*29145a56SDouglas Anderson - compatible 122*29145a56SDouglas Anderson - power-supply 123*29145a56SDouglas Anderson 124*29145a56SDouglas Andersonexamples: 125*29145a56SDouglas Anderson - | 126*29145a56SDouglas Anderson #include <dt-bindings/clock/qcom,rpmh.h> 127*29145a56SDouglas Anderson #include <dt-bindings/gpio/gpio.h> 128*29145a56SDouglas Anderson #include <dt-bindings/interrupt-controller/irq.h> 129*29145a56SDouglas Anderson 130*29145a56SDouglas Anderson i2c { 131*29145a56SDouglas Anderson #address-cells = <1>; 132*29145a56SDouglas Anderson #size-cells = <0>; 133*29145a56SDouglas Anderson 134*29145a56SDouglas Anderson bridge@2d { 135*29145a56SDouglas Anderson compatible = "ti,sn65dsi86"; 136*29145a56SDouglas Anderson reg = <0x2d>; 137*29145a56SDouglas Anderson 138*29145a56SDouglas Anderson interrupt-parent = <&tlmm>; 139*29145a56SDouglas Anderson interrupts = <10 IRQ_TYPE_LEVEL_HIGH>; 140*29145a56SDouglas Anderson 141*29145a56SDouglas Anderson enable-gpios = <&tlmm 102 GPIO_ACTIVE_HIGH>; 142*29145a56SDouglas Anderson 143*29145a56SDouglas Anderson vpll-supply = <&src_pp1800_s4a>; 144*29145a56SDouglas Anderson vccio-supply = <&src_pp1800_s4a>; 145*29145a56SDouglas Anderson vcca-supply = <&src_pp1200_l2a>; 146*29145a56SDouglas Anderson vcc-supply = <&src_pp1200_l2a>; 147*29145a56SDouglas Anderson 148*29145a56SDouglas Anderson clocks = <&rpmhcc RPMH_LN_BB_CLK2>; 149*29145a56SDouglas Anderson clock-names = "refclk"; 150*29145a56SDouglas Anderson 151*29145a56SDouglas Anderson no-hpd; 152*29145a56SDouglas Anderson 153*29145a56SDouglas Anderson ports { 154*29145a56SDouglas Anderson #address-cells = <1>; 155*29145a56SDouglas Anderson #size-cells = <0>; 156*29145a56SDouglas Anderson 157*29145a56SDouglas Anderson port@0 { 158*29145a56SDouglas Anderson reg = <0>; 159*29145a56SDouglas Anderson endpoint { 160*29145a56SDouglas Anderson remote-endpoint = <&dsi0_out>; 161*29145a56SDouglas Anderson }; 162*29145a56SDouglas Anderson }; 163*29145a56SDouglas Anderson 164*29145a56SDouglas Anderson port@1 { 165*29145a56SDouglas Anderson reg = <1>; 166*29145a56SDouglas Anderson sn65dsi86_out: endpoint { 167*29145a56SDouglas Anderson remote-endpoint = <&panel_in_edp>; 168*29145a56SDouglas Anderson }; 169*29145a56SDouglas Anderson }; 170*29145a56SDouglas Anderson }; 171*29145a56SDouglas Anderson 172*29145a56SDouglas Anderson aux-bus { 173*29145a56SDouglas Anderson panel { 174*29145a56SDouglas Anderson compatible = "edp-panel"; 175*29145a56SDouglas Anderson power-supply = <&pp3300_dx_edp>; 176*29145a56SDouglas Anderson backlight = <&backlight>; 177*29145a56SDouglas Anderson hpd-gpios = <&sn65dsi86_bridge 2 GPIO_ACTIVE_HIGH>; 178*29145a56SDouglas Anderson hpd-reliable-delay-ms = <15>; 179*29145a56SDouglas Anderson 180*29145a56SDouglas Anderson port { 181*29145a56SDouglas Anderson panel_in_edp: endpoint { 182*29145a56SDouglas Anderson remote-endpoint = <&sn65dsi86_out>; 183*29145a56SDouglas Anderson }; 184*29145a56SDouglas Anderson }; 185*29145a56SDouglas Anderson }; 186*29145a56SDouglas Anderson }; 187*29145a56SDouglas Anderson }; 188*29145a56SDouglas Anderson }; 189