Commit 8ea1c5af authored by Chuhong Yuan's avatar Chuhong Yuan Committed by Mauro Carvalho Chehab
Browse files

media: bdisp: add missed destroy_workqueue in remove and probe failure



The driver forgets to call destroy_workqueue when remove and probe fails.
Add the missed calls to fix it.

Signed-off-by: default avatarChuhong Yuan <hslester96@gmail.com>
Reviewed-by: default avatarFabien Dessenne <fabien.dessenne@st.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent 569bc8d6
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -1274,6 +1274,8 @@ static int bdisp_remove(struct platform_device *pdev)
	if (!IS_ERR(bdisp->clock))
		clk_unprepare(bdisp->clock);

	destroy_workqueue(bdisp->work_queue);

	dev_dbg(&pdev->dev, "%s driver unloaded\n", pdev->name);

	return 0;
@@ -1317,20 +1319,22 @@ static int bdisp_probe(struct platform_device *pdev)
	bdisp->regs = devm_ioremap_resource(dev, res);
	if (IS_ERR(bdisp->regs)) {
		dev_err(dev, "failed to get regs\n");
		return PTR_ERR(bdisp->regs);
		ret = PTR_ERR(bdisp->regs);
		goto err_wq;
	}

	bdisp->clock = devm_clk_get(dev, BDISP_NAME);
	if (IS_ERR(bdisp->clock)) {
		dev_err(dev, "failed to get clock\n");
		return PTR_ERR(bdisp->clock);
		ret = PTR_ERR(bdisp->clock);
		goto err_wq;
	}

	ret = clk_prepare(bdisp->clock);
	if (ret < 0) {
		dev_err(dev, "clock prepare failed\n");
		bdisp->clock = ERR_PTR(-EINVAL);
		return ret;
		goto err_wq;
	}

	res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
@@ -1402,7 +1406,8 @@ static int bdisp_probe(struct platform_device *pdev)
err_clk:
	if (!IS_ERR(bdisp->clock))
		clk_unprepare(bdisp->clock);

err_wq:
	destroy_workqueue(bdisp->work_queue);
	return ret;
}