• Tomi Valkeinen's avatar
    drm/omap: dsi: allow DSI commands to be sent early · dfd2edcc
    Tomi Valkeinen authored
    Panel drivers can send DSI commands in panel's prepare(), which happens
    before the bridge's enable() is called. The OMAP DSI driver currently
    only sets up the DSI interface at bridge's enable(), so prepare() cannot
    be used to send DSI commands.
    
    This patch fixes the issue by making it possible to enable the DSI
    interface any time a command is about to be sent. Disabling the
    interface is be done via delayed work.
    
    Clarifications for the delayed disable work and the panel doing DSI
    transactions:
    
    bridge_enable: If the disable callback is called just before
    bridge_enable takes the dsi_bus_lock, no problem, bridge_enable just
    enables the interface again. If the callback is ran just after
    bridge_enable's dsi_bus_unlock, no problem, dsi->video_enabled == true
    so the callback does nothing.
    
    bridge_disable: similar to bridge-enable, the callback won't do anything
    if video_enabled == true, and after bridge-disable has turned the video
    and the interface off, there's nothing to do for the callback.
    
    omap_dsi_host_detach: this is called when the panel does
    mipi_dsi_detach(), and we expect the panel to _not_ do any DSI
    transactions after (or during) mipi_dsi_detatch(), so there are no
    race conditions.
    Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
    Reviewed-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20201215104657.802264-85-tomi.valkeinen@ti.com
    dfd2edcc
dsi.c 120 KB