This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

SN65DSI86-Q1: Request for Clarification on SN65DSI86 EN Pin Going LOW After Boot

Part Number: SN65DSI86-Q1
Other Parts Discussed in Thread: SN65DSI86

We are currently debugging the SN65DSI86 eDP bridge on our platform using the SN65DSI86IPAPRQ1 device.

We observed that the EN pin of the SN65DSI86 goes LOW after the system completes booting and we see the following messages in the kernel log:

auxiliary ti_sn65dsi86.bridge.0: deferred probe pending
ti_sn65dsi86.bridge.0 ti_sn65dsi86.bridge: failed to attach dsi host

We are using the following Device Tree configuration:

edp_bridge: bridge@2d {
        compatible = "ti,sn65dsi86";
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_edp_bridge>;
        reg = <0x2d>;
        clocks = <&audioclk>;
        clock-names = "refclk";
        enable-gpios = <&gpio5 11 GPIO_ACTIVE_HIGH>;
        interrupt-parent = <&gpio5>;
        interrupts = <9 IRQ_TYPE_LEVEL_LOW>;
        vccio-supply = <&reg_1p8v>;
        vpll-supply = <&reg_1p8v>;
        vcca-supply = <&reg_main_1v2>;
        vcc-supply = <&reg_main_1v2>;
        status = "okay";

        ports {
                #address-cells = <1>;
                #size-cells = <0>;

                port@0 {
                        reg = <0>;
                        edp_bridge_in: endpoint {
                                remote-endpoint = <&mipi_dsi_out>;
                        };
                };

                port@1 {
                        reg = <1>;
                        edp_bridge_out: endpoint {
                                remote-endpoint = <&panel_in>;
                        };
                };
        };

        aux-bus {
                panel: panel {
                        compatible = "edp-panel";
                        power-supply = <&reg_3p3v>;
                        backlight = <&edp_backlight0>;
                        status = "okay";

                        port {
                                panel_in: endpoint {
                                        remote-endpoint = <&edp_bridge_out>;
                                };
                        };
                };
        };
};

We are using the following Linux driver as reference:

https://github.com/nxp-imx/linux-imx/blob/lf-6.6.y/drivers/gpu/drm/bridge/ti-sn65dsi86.c

Could you please clarify the following points?

Under what conditions does the SN65DSI86 driver drive the EN GPIO LOW after boot?
Is the EN GPIO expected to be toggled LOW/HIGH during the driver's probe, runtime PM, or DSI host attachment sequence?
Could the "failed to attach dsi host" error cause the driver to disable the EN GPIO?
Is there any dependency between the REFCLK configuration, power supplies, EN GPIO, and DSI host attachment that could result in this behavior?
Please advise which driver functions/registers we should specifically check to determine why the EN pin is being driven LOW after boot.

We would appreciate your guidance on the expected EN pin behavior and the recommended debugging procedure.

Regards,
Ashwini A

  • Hi Ashwini,

    I am not familiar with the linux driver you shared here. The only example driver source code, provided as-is, is shared here: [FAQ] SN65DSI8x Programming Tools

    The DSI86 has to be programmed based on the video timings to exactly match the display timings for DSI input and to match the display specifications and DP receiver specs to successfully link train.

    The device should be programmed:

    • Following datasheet initialization sequence
    • With registers programmed to match the given timings, and configs to match DSI and DP interfaces

    Calculator tool for DSI86 scripting:

    You can also use the calculator tool here to generate the register programming:  [FAQ] SN65DSI8x Programming Tools 

    Tool: "3005.SN65DSI86_PANEL_VIDEOREGISTER_CALC.xlsm"

    As a first step, you could use this to enter the display parameters and enable test pattern generation. The test pattern, generated within the DSI86, will confirm that the downstream video and DP is working.

    Once test pattern is confirmed, then you could look into end-to-end video with DSI input from SoC.

    Enable pin:

    • Device will shut down if EN is low. And toggling this pin will clear the registers, so the device will have to be programmed again
    • At the start of init. sequence, EN is set low, then HIGH to enable the device. This is followed by programming the device and DSI inputs

    I am not familiar with this driver, from this  it sets EN low when there is "ti_sn65dsi86_suspend":

    • "SET_SYSTEM_SLEEP_PM_OPS": this could be related to SoC going into sleep mode
    • "pm_runtime_get_sync" and "pm_runtime_put_autosuspend": auto-suspends after period of inactivity.

      What is the error you are seeing in your application? Are you able to bring up the device and output video as expected? 
      Is there no output at all or there is output but it gets interrupted after EN is asserted?

      Best regards,
      Ikram