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@vger.kernel.org Assisted-by: DeepSeek-V4.1-Flash and OpenAI Codex Signed-off-by: Wentao Liang --- 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