• Linus Walleij's avatar
    drm/mcde: Enable the DSI link with display · 42bac89a
    Linus Walleij authored
    The MCDE DSI link hardware which is modeled like a bridge
    in DRM, connected further to the panel bridge, creating
    a pipeline.
    
    We have been using the .pre_enable(), .enable(),
    .disable() and .post_disable() callbacks from the bridge
    to set this up in a chained manner: first the display
    controller goes online and then in successive order
    each bridge in the pipeline. Inside DRM it works
    like this:
    
    drm_atomic_helper_commit_tail()
      drm_atomic_helper_commit_modeset_enables()
        struct drm_crtc_helper_funcs .atomic_enable()
          struct drm_simple_display_pipe_funcs .enable()
            MCDE display enable call
        drm_atomic_bridge_chain_enable()
          struct drm_bridge_funcs .pre_enable()
            mcde_dsi_bridge_pre_enable()
            panel_bridge_pre_enable()
              struct drm_panel_funcs .prepare()
          struct drm_bridge_funcs .enable()
            mcde_dsi_bridge_enable()
            panel_bridge_enable()
              struct drm_panel_funcs .enable()
    
    A similar sequence is executed for disabling.
    
    Unfortunately this is not what the hardware needs: at
    a certain stage in the enablement of the display
    controller the DSI link needs to come up to support
    video mode, else something (like a FIFO flow) locks
    up the hardware and we never get picture.
    
    Fix this by simply leaving the pre|enable and
    post|disable callbacks unused, and establish two
    cross-calls from the display controller to bring up
    the DSI link at the right place in the display
    bring-up sequence and vice versa in the shutdown
    sequence.
    
    For command mode displays, it works just fine to
    also enable the display flow early. The only time
    we hold it back right now is in one-shot mode,
    on-demand display updates.
    
    When combined with the previous patch and some patches
    for the S6E63M0 display controller to support DSI
    mode, this gives working display on the Samsung
    GT-I8190 (Golden) phone. It has also been tested working
    on the Samsung GT-S7710 (Skomer) phone.
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Acked-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Cc: newbytee@protonmail.com
    Cc: Stephan Gerhold <stephan@gerhold.net>
    Link: https://patchwork.freedesktop.org/patch/msgid/20200808223122.1492124-4-linus.walleij@linaro.org
    42bac89a
mcde_display.c 32.5 KB