drm/exynos: fix incorrect interrupt induced by m2m operation.
This patch fixes incorrect interrupt induced by m2m operation. the m2m operation calls s/w reset every frame but there is the case that the interrupt to m2m operation occures after s/w reset sometimes. So this patch makes dma and capture operations stop at s/w reset to avoid incorrect interrupt. Signed-off-by: Jinyoung Jeon <jy0.jeon@samsung.com> Signed-off-by: Eunchul Kim <chulspro.kim@samsung.com> Signed-off-by: Inki Dae <inki.dae@samsung.com>
This commit is contained in:
@@ -169,10 +169,23 @@ static void fimc_sw_reset(struct fimc_context *ctx)
|
|||||||
|
|
||||||
DRM_DEBUG_KMS("%s\n", __func__);
|
DRM_DEBUG_KMS("%s\n", __func__);
|
||||||
|
|
||||||
|
/* stop dma operation */
|
||||||
|
cfg = fimc_read(EXYNOS_CISTATUS);
|
||||||
|
if (EXYNOS_CISTATUS_GET_ENVID_STATUS(cfg)) {
|
||||||
|
cfg = fimc_read(EXYNOS_MSCTRL);
|
||||||
|
cfg &= ~EXYNOS_MSCTRL_ENVID;
|
||||||
|
fimc_write(cfg, EXYNOS_MSCTRL);
|
||||||
|
}
|
||||||
|
|
||||||
cfg = fimc_read(EXYNOS_CISRCFMT);
|
cfg = fimc_read(EXYNOS_CISRCFMT);
|
||||||
cfg |= EXYNOS_CISRCFMT_ITU601_8BIT;
|
cfg |= EXYNOS_CISRCFMT_ITU601_8BIT;
|
||||||
fimc_write(cfg, EXYNOS_CISRCFMT);
|
fimc_write(cfg, EXYNOS_CISRCFMT);
|
||||||
|
|
||||||
|
/* disable image capture */
|
||||||
|
cfg = fimc_read(EXYNOS_CIIMGCPT);
|
||||||
|
cfg &= ~(EXYNOS_CIIMGCPT_IMGCPTEN_SC | EXYNOS_CIIMGCPT_IMGCPTEN);
|
||||||
|
fimc_write(cfg, EXYNOS_CIIMGCPT);
|
||||||
|
|
||||||
/* s/w reset */
|
/* s/w reset */
|
||||||
cfg = fimc_read(EXYNOS_CIGCTRL);
|
cfg = fimc_read(EXYNOS_CIGCTRL);
|
||||||
cfg |= (EXYNOS_CIGCTRL_SWRST);
|
cfg |= (EXYNOS_CIGCTRL_SWRST);
|
||||||
|
Reference in New Issue
Block a user