[PATCH] media: mtk-jpeg: Release the encoder device on job completion

Wentao Liang vulab at iscas.ac.cn
Tue Nov 3 01:46:13 PST 2026


mtk_jpegenc_worker() resumes the component device represented by
comp_jpeg[hw_id]->dev.  When the job completes,
mtk_jpegenc_hw_irq_handler() drops a reference to the master device
ctx->jpeg->dev instead of the component device.  The component's usage
counter is never decremented, so the component and its power domain stay
powered, while the master's usage counter is decremented without a
matching reference.

Release jpeg->dev, the component device that was resumed, and disable
the clock before dropping the reference as the timeout work already
does.

Fixes: 934e8bccac95 ("mtk-jpegenc: support jpegenc multi-hardware")
Cc: stable at vger.kernel.org
Assisted-by: DeepSeek-V4.1-Flash and OpenAI Codex
Signed-off-by: Wentao Liang <vulab at iscas.ac.cn>
---
 drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.c b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.c
index b312a15d707b..266bfff604db 100644
--- a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.c
+++ b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.c
@@ -303,8 +303,8 @@ static irqreturn_t mtk_jpegenc_hw_irq_handler(int irq, void *priv)
 	buf_state = VB2_BUF_STATE_DONE;
 	v4l2_m2m_buf_done(src_buf, buf_state);
 	mtk_jpegenc_put_buf(jpeg);
-	pm_runtime_put(ctx->jpeg->dev);
 	clk_disable_unprepare(jpeg->venc_clk.clks->clk);
+	pm_runtime_put(jpeg->dev);
 
 	jpeg->hw_state = MTK_JPEG_HW_IDLE;
 	wake_up(&master_jpeg->hw_wq);
-- 
2.34.1




More information about the linux-arm-kernel mailing list