• Douglas Anderson's avatar
    drm/bridge: ti-sn65dsi86: Fix power off sequence · acb06210
    Douglas Anderson authored
    When testing with a panel that's apparently a little more persnickety
    about the correct power sequence (specifically Samsung ATNA33XC20), we
    found that the ti-sn65dsi86 was doing things just slightly wrong.
    
    Looking closely at the ti-sn65dsi86's datasheet, the power off
    sequence is supposed to be:
    1. Clear VSTREAM_ENABLE bit
    2. Stop DSI stream from GPU. DSI lanes must be placed in LP11 state.
    3. Program the ML_TX_MODE to 0x0 (OFF)
    4. Program the DP_NUM_LANES register to 0x0
    5. Clear the DP_PLL_EN bit.
    6. Deassert the EN pin.
    7. Remove power from supply pins
    
    Since we were doing the whole sequence in the "disable", I believe
    that step #2 (stopping the DSI stream from the GPU) wasn't
    happening. We also weren't setting DP_NUM_LANES to 0.
    
    Let's fix this.
    
    NOTE: things are a little asymmetric now. For instance, we turn the
    PLL on in "enable" but now we're not turning it off until
    "post_disable". It would seem to make sense to move the PLL turning on
    to "pre_enable" to match. Unfortunately, I don't believe that's
    allowed. It looks as if (in the non-refclk mode which probably nobody
    is using) we have to wait until the MIPI clock is there before we can
    enable the PLL. In any case, the way it is here won't really
    hurt--it'll just leave the PLL on a little longer.
    
    Fixes: a095f15c ("drm/bridge: add support for sn65dsi86 bridge driver")
    Signed-off-by: default avatarDouglas Anderson <dianders@chromium.org>
    Acked-by: default avatarRobert Foss <robert.foss@linaro.org>
    Reviewed-by: default avatarSean Paul <seanpaul@chromium.org>
    Signed-off-by: default avatarSam Ravnborg <sam@ravnborg.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210730084534.v2.2.If8a8ec3bf1855cf0dbb62c005a71d6698c99c125@changeid
    acb06210
ti-sn65dsi86.c 45.7 KB