]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
media: platform: exynos4-is: Add hardware sync wait to fimc_is_hw_change_mode()
authorWentao Liang <vulab@iscas.ac.cn>
Tue, 22 Apr 2025 02:13:45 +0000 (10:13 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 27 Jun 2025 10:05:30 +0000 (11:05 +0100)
[ Upstream commit bd9f6ce7d512fa21249415c16af801a4ed5d97b6 ]

In fimc_is_hw_change_mode(), the function changes camera modes without
waiting for hardware completion, risking corrupted data or system hangs
if subsequent operations proceed before the hardware is ready.

Add fimc_is_hw_wait_intmsr0_intmsd0() after mode configuration, ensuring
hardware state synchronization and stable interrupt handling.

Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/media/platform/exynos4-is/fimc-is-regs.c

index 366e6393817d2174b2fe7098f2a43a885f7b3a5b..5f9c44e825a5fa24108d4ac20adf4a76fa1fc520 100644 (file)
@@ -164,6 +164,7 @@ int fimc_is_hw_change_mode(struct fimc_is *is)
        if (WARN_ON(is->config_index >= ARRAY_SIZE(cmd)))
                return -EINVAL;
 
+       fimc_is_hw_wait_intmsr0_intmsd0(is);
        mcuctl_write(cmd[is->config_index], is, MCUCTL_REG_ISSR(0));
        mcuctl_write(is->sensor_index, is, MCUCTL_REG_ISSR(1));
        mcuctl_write(is->setfile.sub_index, is, MCUCTL_REG_ISSR(2));