mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 18:41:58 +09:00
media: sun6i-mipi-csi2: Register async subdev with no sensor attached
[ Upstream commit67182951f1] This allows the device to probe and register its async subdev without a sensor attached. The rationale is that the parent driver might otherwise wait for the subdev to be registered when it should be available (from the fwnode graph endpoint perspective). This is generally not problematic when the MIPI CSI-2 bridge is the only device attached to the parent, but in the case of a CSI controller that can feed from both MIPI CSI-2 and parallel, it would prevent using the parallel sensor due to the parent waiting for the MIPI CSI-2 subdev to register. Fixes:af54b4f4c1("media: sunxi: Add support for the A31 MIPI CSI-2 controller") Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
6c1c8499cd
commit
65b3232f9e
@@ -498,6 +498,7 @@ static int sun6i_mipi_csi2_bridge_setup(struct sun6i_mipi_csi2_device *csi2_dev)
|
||||
struct v4l2_async_notifier *notifier = &bridge->notifier;
|
||||
struct media_pad *pads = bridge->pads;
|
||||
struct device *dev = csi2_dev->dev;
|
||||
bool notifier_registered = false;
|
||||
int ret;
|
||||
|
||||
mutex_init(&bridge->lock);
|
||||
@@ -535,12 +536,17 @@ static int sun6i_mipi_csi2_bridge_setup(struct sun6i_mipi_csi2_device *csi2_dev)
|
||||
notifier->ops = &sun6i_mipi_csi2_notifier_ops;
|
||||
|
||||
ret = sun6i_mipi_csi2_bridge_source_setup(csi2_dev);
|
||||
if (ret)
|
||||
if (ret && ret != -ENODEV)
|
||||
goto error_v4l2_notifier_cleanup;
|
||||
|
||||
ret = v4l2_async_subdev_nf_register(subdev, notifier);
|
||||
if (ret < 0)
|
||||
goto error_v4l2_notifier_cleanup;
|
||||
/* Only register the notifier when a sensor is connected. */
|
||||
if (ret != -ENODEV) {
|
||||
ret = v4l2_async_subdev_nf_register(subdev, notifier);
|
||||
if (ret < 0)
|
||||
goto error_v4l2_notifier_cleanup;
|
||||
|
||||
notifier_registered = true;
|
||||
}
|
||||
|
||||
/* V4L2 Subdev */
|
||||
|
||||
@@ -551,7 +557,8 @@ static int sun6i_mipi_csi2_bridge_setup(struct sun6i_mipi_csi2_device *csi2_dev)
|
||||
return 0;
|
||||
|
||||
error_v4l2_notifier_unregister:
|
||||
v4l2_async_nf_unregister(notifier);
|
||||
if (notifier_registered)
|
||||
v4l2_async_nf_unregister(notifier);
|
||||
|
||||
error_v4l2_notifier_cleanup:
|
||||
v4l2_async_nf_cleanup(notifier);
|
||||
|
||||
Reference in New Issue
Block a user