SOLVED - Disable DSI/HDMI subsystem in linux

First off, thanks to all the contributors in these forums. Feels like a community that actually accomplishes things. Cheers for all your work.

Second, my question. We are prototyping a design that does not require the HDMI/DSI output, and are using gpio32 as GPIO through sysfs, not as the DSI_SEL pin. To this end we have removed gpio32 from arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi

We can now use gpio32 no problem. However, it looks like the HDMI/SDI subsystem is complaining now.

[   15.565205] msm 1a00000.mdss: failed to bind 1a98000.dsi (ops dsi_ops): -517
[   15.572581] msm 1a00000.mdss: master bind failed: -517
[   15.582789] qcom-apq8016-sbc 7702000.sound: error getting codec dai name
[   15.584323] qcom-apq8016-sbc 7702000.sound: Error resolving dai links: -517
[   15.592659] 1a00000.mdss supply vdd not found, using dummy regulator
[   15.598608] msm 1a00000.mdss: bound 1a01000.mdp (ops mdp5_ops)
[   15.604694] 1a98000.dsi supply gdsc not found, using dummy regulator
[   15.610435] 1a98000.dsi supply gdsc not found, using dummy regulator
[   15.617775] msm_dsi_manager_register: failed to register mipi dsi host for DSI 0
[   15.623219] msm 1a00000.mdss: failed to bind 1a98000.dsi (ops dsi_ops): -517
[   15.630533] msm 1a00000.mdss: master bind failed: -517

But in the end, we don’t need the HDMI/DSI subsystem, our boards do not have display outputs on them at all. Is there a way to disable the display subsystem?

We have tried the following to disable HDMI/DSI:

In arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi

    i2c@78b8000 {
    /* On High speed expansion */
    label = "HS-I2C2";
            status = "okay";
            adv_bridge: bridge@39 {
                    status = "disabled";

In arch/arm64/boot/dts/qcom/apq8016-sbc-soc-pins.dtsi

adv7533_int_active: adv533_int_active {
    status = "disabled";
-snip-
adv7533_int_suspend: adv7533_int_suspend {
    status = "disabled";
-snip-
adv7533_switch_active: adv7533_switch_active {
    status = "disabled";
-snip-
adv7533_switch_suspend: adv7533_switch_suspend {
    status = "disabled";

And in the kernel configuration we basically ripped out everything in Graphics Support.

Is there a known or preferred method to remove the display subsystem beyond this? Having done these thing we are still getting errors for msm_dsi_manager_register: failed to register mipi dsi host for DSI 0

1 Like

I would not ‘disable’ pinmux description in apq8016-sbc-soc-pins.dtsi, since you already disabled adv-bridge, the pinmuxs will not be selected anymore and so not applied.

I suggest to disable the mdss (Mobile Display SubSystem) node (mdss@1a00000) in apq8016-sbc.dtsi.

3 Likes

That worked perfectly. We also disabled the sound subsystem now that I’m starting to understand how those device tree nodes work.

Thank you very much.

1 Like

Hi Loic,

With the new kernel this suggestion works. But with earlier releases(kernel version 4.4.23) the dtb structure was bit different.

&blsp_i2c4 {
status = “disable”;

    adv_bridge: bridge@39 {
            status = "disable";
            compatible = "adi,adv7533";
            reg = <0x39>;
            interrupt-parent = <&msmgpio>;
            interrupts = <31 2>;
            avdd-supply = <&pm8916_l6>;
            v3p3-supply = <&pm8916_l17>;
            adi,dsi-lanes = <4>;
            pd-gpios = <&msmgpio 32 0>;
            pinctrl-names = "default","sleep";
            pinctrl-0 = <&adv7533_int_active &adv7533_switch_active>;
            pinctrl-1 = <&adv7533_int_suspend &adv7533_switch_suspend>;
            #sound-dai-cells = <1>;

            port {
                    adv_in: endpoint {
                            remote-endpoint = <&dsi_out>;
                    };
            };

    };

};

&blsp_i2c6 {
status = “ok”;
};

&mdss_dsi0 {
status = “disabled”;

    port {
            dsi_out: endpoint {
                    remote-endpoint = <&adv_in>;
            };
    };

};

I tried disabling the mdss in dtb but it didn’t worked for me and I am getting the error as mentioned below.

   [    7.218858] 1a98000.qcom,mdss_dsi supply gdsc not found, using dummy regulator
[    7.219072] 1a98000.qcom,mdss_dsi supply gdsc not found, using dummy regulator
[    7.227167] msm_dsi_manager_register: failed to register mipi dsi host for DSI 0
[    7.233250] msm 1a00000.qcom,mdss_mdp: failed to bind 1a98000.qcom,mdss_dsi (ops dsi_ops): -517
[    7.241831] msm 1a00000.qcom,mdss_mdp: master bind failed: -517
[    7.251294] qcom-apq8016-sbc 7702000.sound: error getting codec dai name
[    7.254825] qcom-apq8016-sbc 7702000.sound: Error resolving dai links: -517
[    7.263047] input: gpio_keys as /devices/platform/gpio_keys/input/input1
[    7.269189] rtc-pm8xxx 200f000.spmi:pm8916@0:rtc@6000: setting system clock to 1970-01-01 00:09:31 UTC (571)
[    7.272522] 1a98000.qcom,mdss_dsi supply gdsc not found, using dummy regulator
[    7.272709] 1a98000.qcom,mdss_dsi supply gdsc not found, using dummy regulator
[    7.274136] msm_dsi_manager_register: failed to register mipi dsi host for DSI 0
[    7.274395] msm 1a00000.qcom,mdss_mdp: failed to bind 1a98000.qcom,mdss_dsi (ops dsi_ops): -517
[    7.275563] msm 1a00000.qcom,mdss_mdp: master bind failed: -517
[    7.277842] qcom-apq8016-sbc 7702000.sound: error getting codec dai name
[    7.277853] qcom-apq8016-sbc 7702000.sound: Error resolving dai links: -517

Can you suggest. How to disable it from dtb.

It seems that 1a00000.qcom,mdss_mdp node expects the 1a98000.qcom,mdss_dsi node (disabled). So I would disable 1a00000.qcom,mdss_mdp as well.

1 Like

Thanks Loic for the suggestions.
That’s what I concluded from the logs. I also disabled the corresponding end points from “msm8916-mdss.dtsi” as below.

mdss_mdp: qcom,mdss_mdp@1a00000 {
status = “disable”;
compatible = “qcom,mdss_mdp”;
reg = <0x1a00000 0x90000>,
<0x1ac8000 0x3000>;
reg-names = “mdp_phys”, “vbif_phys”;
interrupts = <0 72 0>;

            interrupt-controller;
            #interrupt-cells = <1>;

            power-domains = <&gcc MDSS_GDSC>;

            connectors = <&mdss_dsi0>;
            gpus = <&gpu>;

            qcom,msm-bus,name = "mdss_mdp";
            qcom,msm-bus,num-cases = <3>;
            qcom,msm-bus,num-paths = <1>;
            qcom,msm-bus,vectors-KBps =
                    <22 512 0 0>,
                    <22 512 0 6400000>,
                    <22 512 0 6400000>;

            clocks = <&gcc GCC_MDSS_AHB_CLK>,
                     <&gcc GCC_MDSS_AXI_CLK>,
                     <&gcc MDP_CLK_SRC>,
                     <&gcc GCC_MDSS_MDP_CLK>,
                     <&gcc GCC_MDSS_MDP_CLK>,
                     <&gcc GCC_MDSS_VSYNC_CLK>;
            clock-names = "iface_clk", "bus_clk", "core_clk_src",
                          "core_clk", "lut_clk", "vsync_clk";
    };

<\snip>

mdss_dsi0: qcom,mdss_dsi@1a98000 {
status = “disable”;
compatible = “qcom,mdss-dsi-ctrl”;
label = “MDSS DSI CTRL->0”;
qcom,dsi-host-index = <0>;
#address-cells = <1>;
#size-cells = <0>;
reg = <0x1a98000 0x25c>;
reg-names = “dsi_ctrl”;

            interrupt-parent = <&mdss_mdp>;
            interrupts = <4 0>;

            vdda-supply = <&pm8916_l2>;
            vdd-supply = <&pm8916_l17>;
            vddio-supply = <&pm8916_l6>;

            clocks = <&gcc GCC_MDSS_MDP_CLK>,
                     <&gcc GCC_MDSS_AHB_CLK>,
                     <&gcc GCC_MDSS_AXI_CLK>,
                     <&gcc GCC_MDSS_AHB_CLK>,
                     <&gcc GCC_MDSS_BYTE0_CLK>,
                     <&gcc GCC_MDSS_PCLK0_CLK>,
                     <&gcc GCC_MDSS_ESC0_CLK>,
                     <&gcc BYTE0_CLK_SRC>,
                     <&gcc PCLK0_CLK_SRC>;
            clock-names = "mdp_core_clk", "iface_clk", "bus_clk",
                          "core_mmss_clk", "byte_clk", "pixel_clk",
                          "core_clk", "byte_clk_src", "pixel_clk_src";
            qcom,dsi-phy = <&mdss_dsi_phy0>;
    };

<\snip>

mdss_dsi_phy0: qcom,mdss_dsi_phy@1a98300 {
status = “disable”;
compatible = “qcom,dsi-phy-28nm-lp”;
qcom,dsi-phy-index = <0>;

            power-domains = <&gcc MDSS_GDSC>;

            reg-names = "dsi_pll", "dsi_phy", "dsi_phy_regulator";
            reg = <0x1a98300 0xd4>,
                  <0x1a98500 0x280>,
                  <0x1a98780 0x30>;

            clocks = <&gcc GCC_MDSS_AHB_CLK>;
            clock-names = "iface_clk";

            vddio-supply = <&pm8916_l6>;
    };

<\snip>

Following Changes didn’t worked and I got the same error.

Hello! This said it was solved but the comments do not reflect it. I tested these fixes with something I am trying to do and I am having the same issues. I am using the same almost everything on my customboard but I took all the display stuff out because I only need audio support. if anyone found a solution it would be super helpful.

EDIT: I was wrong. this post was about that (SOLVED: Removing HDMI creates audio issues)