Commit f6336d89 authored by Sakari Ailus's avatar Sakari Ailus Committed by Mauro Carvalho Chehab
Browse files

media: omap3isp: Initialise V4L2 async notifier later



Initialise V4L2 async notifier and parse DT for async sub-devices later,
just before registering the notifier. This way the device can be made
available to the V4L2 async framework from the notifier init time onwards.
A subsequent patch will add struct v4l2_device as an argument to
v4l2_async_nf_init().

Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Tested-by: Philipp Zabel <p.zabel@pengutronix.de> # imx6qp
Tested-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> # rcar + adv746x
Tested-by: Aishwarya Kothari <aishwarya.kothari@toradex.com> # Apalis i.MX6Q with TC358743
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> # Renesas RZ/G2L SMARC
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
parent 4c50b0a8
Loading
Loading
Loading
Loading
+8 −7
Original line number Diff line number Diff line
@@ -2002,6 +2002,7 @@ static void isp_remove(struct platform_device *pdev)
	struct isp_device *isp = platform_get_drvdata(pdev);

	v4l2_async_nf_unregister(&isp->notifier);
	v4l2_async_nf_cleanup(&isp->notifier);
	isp_unregister_entities(isp);
	isp_cleanup_modules(isp);
	isp_xclk_cleanup(isp);
@@ -2011,7 +2012,6 @@ static void isp_remove(struct platform_device *pdev)
	__omap3isp_put(isp, false);

	media_entity_enum_cleanup(&isp->crashed);
	v4l2_async_nf_cleanup(&isp->notifier);

	kfree(isp);
}
@@ -2288,13 +2288,8 @@ static int isp_probe(struct platform_device *pdev)

	mutex_init(&isp->isp_mutex);
	spin_lock_init(&isp->stat_lock);
	v4l2_async_nf_init(&isp->notifier);
	isp->dev = &pdev->dev;

	ret = isp_parse_of_endpoints(isp);
	if (ret < 0)
		goto error;

	isp->ref_count = 0;

	ret = dma_coerce_mask_and_coherent(isp->dev, DMA_BIT_MASK(32));
@@ -2425,6 +2420,12 @@ static int isp_probe(struct platform_device *pdev)

	isp->notifier.ops = &isp_subdev_notifier_ops;

	v4l2_async_nf_init(&isp->notifier);

	ret = isp_parse_of_endpoints(isp);
	if (ret < 0)
		goto error_register_entities;

	ret = v4l2_async_nf_register(&isp->v4l2_dev, &isp->notifier);
	if (ret)
		goto error_register_entities;
@@ -2435,6 +2436,7 @@ static int isp_probe(struct platform_device *pdev)
	return 0;

error_register_entities:
	v4l2_async_nf_cleanup(&isp->notifier);
	isp_unregister_entities(isp);
error_modules:
	isp_cleanup_modules(isp);
@@ -2444,7 +2446,6 @@ static int isp_probe(struct platform_device *pdev)
	isp_xclk_cleanup(isp);
	__omap3isp_put(isp, false);
error:
	v4l2_async_nf_cleanup(&isp->notifier);
	mutex_destroy(&isp->isp_mutex);
error_release_isp:
	kfree(isp);