• Laurent Pinchart's avatar
    media: ti-vpe: cal: Stop write DMA without disabling PPI · cbb8cd7c
    Laurent Pinchart authored
    When stopping the stream, the driver needs to ensure that ongoing DMA
    completes and that no new DMA is started. It does so using a feature of
    the PPI that can be stopped on a frame boundary. The downside of this
    mechanism is that the DMA can't be stopped independently of the source,
    which prevents usage of multiple contexts for the same source (to handle
    CSI-2 virtual channels or data types).
    
    Rework the stream stop mechanism to stop the write DMA without disabling
    the PPI first. The new mechanism relies on the combination of a state
    machine in the driver and shadowing of the CAL_WR_DMA_CTRL_j.MODE field
    in the hardware. When a stop is requested, the DMA start interrupt
    handler will request the hardware to stop at the end of the current
    frame by disabling the write DMA context in the shadowed register, and
    flag that a stop is in progress. The next DMA end interrupt will then
    report that the stop is complete.
    
    This makes it possible to stop the PPI after stopping the DMA, and fold
    the cal_camerarx_ppi_disable() call into cal_camerarx_stop().
    Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
    Reviewed-by: default avatarBenoit Parrot <bparrot@ti.com>
    Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
    cbb8cd7c
cal.h 7.36 KB