Qualcomm Eliza SoC comes with HDMI IP block, built on top of one previously present in MSM8998. There are just a few differences in hardware, mostly about handling clock reparenting, but more notable the old binding looked incomplete, thus devices could not be considered compatible. The QFPROM MMIO space is not really part of HDMI, thus do not include it in the new device support.
Document also VDD IO supply, which is providing power to external 5V elements, like HPD pull ups. This is not a suuply for internal HDMI elements, thus it is valid for older variants as well. Signed-off-by: Krzysztof Kozlowski <[email protected]> --- .../devicetree/bindings/display/msm/hdmi.yaml | 67 ++++++++++++++- .../bindings/display/msm/qcom,eliza-mdss.yaml | 96 +++++++++++++++++++++- 2 files changed, 158 insertions(+), 5 deletions(-) diff --git a/Documentation/devicetree/bindings/display/msm/hdmi.yaml b/Documentation/devicetree/bindings/display/msm/hdmi.yaml index 02d27ccad024..6adaa095b747 100644 --- a/Documentation/devicetree/bindings/display/msm/hdmi.yaml +++ b/Documentation/devicetree/bindings/display/msm/hdmi.yaml @@ -20,6 +20,7 @@ properties: - qcom,hdmi-tx-8994 - qcom,hdmi-tx-8996 - qcom,hdmi-tx-8998 + - qcom,eliza-hdmi-tx clocks: minItems: 1 @@ -35,10 +36,7 @@ properties: reg-names: minItems: 1 - items: - - const: core_physical - - const: qfprom_physical - - const: hdcp_physical + maxItems: 3 interrupts: maxItems: 1 @@ -62,10 +60,21 @@ properties: core-vcc-supply: description: phandle to VCC supply regulator + vddio-supply: + description: IO (e.g. HPD) supply + hpd-gpios: maxItems: 1 description: hpd pin + operating-points-v2: true + + opp-table: + type: object + + power-domains: + maxItems: 1 + '#sound-dai-cells': const: 1 @@ -113,6 +122,12 @@ allOf: - const: core - const: master_iface - const: slave_iface + reg-names: + minItems: 1 + items: + - const: core_physical + - const: qfprom_physical + - const: hdcp_physical core-vcc-supply: false - if: @@ -136,6 +151,12 @@ allOf: - const: core - const: alt_iface - const: extp + reg-names: + minItems: 1 + items: + - const: core_physical + - const: qfprom_physical + - const: hdcp_physical hdmi-mux-supply: false - if: @@ -159,6 +180,44 @@ allOf: - const: bus - const: mnoc - const: iface_mmss + reg-names: + minItems: 1 + items: + - const: core_physical + - const: qfprom_physical + - const: hdcp_physical + + - if: + properties: + compatible: + contains: + enum: + - qcom,qcom,eliza-hdmi-tx + then: + properties: + clocks: + minItems: 6 + maxItems: 6 + clock-names: + items: + - const: iface + - const: core + - const: extp + - const: phy_iface + - const: pll + - const: pixel_src + reg: + minItems: 2 + maxItems: 2 + reg-names: + items: + - const: core_physical + - const: hdcp_physical + hdmi-mux-supply: false + + required: + - core-vcc-supply + - core-vdda-supply additionalProperties: false diff --git a/Documentation/devicetree/bindings/display/msm/qcom,eliza-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,eliza-mdss.yaml index bd4ba91a171f..6f50f7106c8f 100644 --- a/Documentation/devicetree/bindings/display/msm/qcom,eliza-mdss.yaml +++ b/Documentation/devicetree/bindings/display/msm/qcom,eliza-mdss.yaml @@ -63,13 +63,22 @@ patternProperties: contains: const: qcom,eliza-dsi-ctrl + "^hdmi@[0-9a-f]+$": + type: object + additionalProperties: true + properties: + compatible: + const: qcom,eliza-hdmi-tx + "^phy@[0-9a-f]+$": type: object additionalProperties: true properties: compatible: contains: - const: qcom,eliza-dsi-phy-4nm + enum: + - qcom,eliza-dsi-phy-4nm + - qcom,eliza-hdmi-phy required: - compatible @@ -79,6 +88,7 @@ unevaluatedProperties: false examples: - | #include <dt-bindings/clock/qcom,dsi-phy-28nm.h> + #include <dt-bindings/clock/qcom,eliza-tcsr.h> #include <dt-bindings/clock/qcom,rpmh.h> #include <dt-bindings/interconnect/qcom,icc.h> #include <dt-bindings/interrupt-controller/arm-gic.h> @@ -405,6 +415,90 @@ examples: vdds-supply = <&vreg_l2b>; }; + hdmi@aea0000 { + compatible = "qcom,eliza-hdmi-tx"; + reg = <0x0aea0000 0x1000>, + <0x0aee0000 0x1000>; + reg-names = "core_physical", + "hdcp_physical"; + + interrupts-extended = <&mdss 8>; + + clocks = <&disp_cc_mdss_hdmi_ahbm_clk>, + <&disp_cc_mdss_hdmi_app_clk>, + <&disp_cc_mdss_hdmi_pclk_clk>, + <&disp_cc_mdss_hdmi_intf_clk>, + <&mdss_hdmi_phy>, + <&disp_cc_mdss_hdmi_pclk_clk_src>; + clock-names = "iface", + "core", + "extp", + "phy_iface", + "pll", + "pixel_src"; + + operating-points-v2 = <&mdss_hdmi_opp_table>; + + phys = <&mdss_hdmi_phy>; + power-domains = <&rpmhpd RPMHPD_CX>; + #sound-dai-cells = <1>; + + core-vcc-supply = <&vreg_l2b>; + core-vdda-supply = <&vreg_l4b>; + vddio-supply = <&hdmi_5p0_reg>; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + + mdss_hdmi_in: endpoint { + remote-endpoint = <&dpu_intf4_out>; + }; + }; + + port@1 { + reg = <1>; + + mdss_hdmi_out: endpoint { + remote-endpoint = <&hdmi_0_connector_in>; + }; + }; + }; + + mdss_hdmi_opp_table: opp-table { + compatible = "operating-points-v2"; + + opp-150000000 { + opp-hz = /bits/ 64 <150000000>; + required-opps = <&rpmhpd_opp_low_svs_d1>; + }; + + opp-300000000 { + opp-hz = /bits/ 64 <300000000>; + required-opps = <&rpmhpd_opp_svs>; + }; + }; + }; + + mdss_hdmi_phy: phy@aea1000 { + compatible = "qcom,eliza-hdmi-phy"; + reg = <0x0aea1000 0x1000>; + + clocks = <&disp_cc_mdss_ahb_clk>, + <&tcsr TCSR_HDMI_CLKREF_EN>, + <&bi_tcxo_div2>; + clock-names = "iface", + "ref", + "xo"; + + #clock-cells = <0>; + #phy-cells = <0>; + power-domains = <&rpmhpd RPMHPD_CX>; + }; + displayport-controller@af54000 { compatible = "qcom,eliza-dp", "qcom,sm8650-dp"; reg = <0x0af54000 0x200>, -- 2.53.0
