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