提交 cfd454b4 编写于 作者: J Jernej Skrabec 提交者: Zheng Zengkai

media: hantro: Fix probe func error path

stable inclusion
from stable-v5.10.94
commit 37441ddadc1e02a33c866ff836d5229ed600e78a
bugzilla: https://gitee.com/openeuler/kernel/issues/I531X9

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=37441ddadc1e02a33c866ff836d5229ed600e78a

--------------------------------

[ Upstream commit 37af43b2 ]

If clocks for some reason couldn't be enabled, probe function returns
immediately, without disabling PM. This obviously leaves PM ref counters
unbalanced.

Fix that by jumping to appropriate error path, so effects of PM functions
are reversed.

Fixes: 775fec69 ("media: add Rockchip VPU JPEG encoder driver")
Signed-off-by: NJernej Skrabec <jernej.skrabec@gmail.com>
Acked-by: NAndrzej Pietrasiewicz <andrzej.p@collabora.com>
Reviewed-by: NEzequiel Garcia <ezequiel@vanguardiasur.com.ar>
Signed-off-by: NHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: NMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Signed-off-by: NSasha Levin <sashal@kernel.org>
Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
Acked-by: NXie XiuQi <xiexiuqi@huawei.com>
上级 9c35b14b
...@@ -829,7 +829,7 @@ static int hantro_probe(struct platform_device *pdev) ...@@ -829,7 +829,7 @@ static int hantro_probe(struct platform_device *pdev)
ret = clk_bulk_prepare(vpu->variant->num_clocks, vpu->clocks); ret = clk_bulk_prepare(vpu->variant->num_clocks, vpu->clocks);
if (ret) { if (ret) {
dev_err(&pdev->dev, "Failed to prepare clocks\n"); dev_err(&pdev->dev, "Failed to prepare clocks\n");
return ret; goto err_pm_disable;
} }
ret = v4l2_device_register(&pdev->dev, &vpu->v4l2_dev); ret = v4l2_device_register(&pdev->dev, &vpu->v4l2_dev);
...@@ -885,6 +885,7 @@ static int hantro_probe(struct platform_device *pdev) ...@@ -885,6 +885,7 @@ static int hantro_probe(struct platform_device *pdev)
v4l2_device_unregister(&vpu->v4l2_dev); v4l2_device_unregister(&vpu->v4l2_dev);
err_clk_unprepare: err_clk_unprepare:
clk_bulk_unprepare(vpu->variant->num_clocks, vpu->clocks); clk_bulk_unprepare(vpu->variant->num_clocks, vpu->clocks);
err_pm_disable:
pm_runtime_dont_use_autosuspend(vpu->dev); pm_runtime_dont_use_autosuspend(vpu->dev);
pm_runtime_disable(vpu->dev); pm_runtime_disable(vpu->dev);
return ret; return ret;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册