media: imx: capture: Support creating immutable link to capture device
When the subdevice connected to the capture device has a single possible sink, there's no point in making the link mutable. Support creating immutable links. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Rui Miguel Silva <rmfrfs@gmail.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
Родитель
c24ead998e
Коммит
ab7d9fed90
|
@ -1269,7 +1269,7 @@ static int prp_registered(struct v4l2_subdev *sd)
|
|||
if (IS_ERR(priv->vdev))
|
||||
return PTR_ERR(priv->vdev);
|
||||
|
||||
ret = imx_media_capture_device_register(priv->vdev);
|
||||
ret = imx_media_capture_device_register(priv->vdev, 0);
|
||||
if (ret)
|
||||
goto remove_vdev;
|
||||
|
||||
|
|
|
@ -898,7 +898,8 @@ static int capture_init_format(struct capture_priv *priv)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int imx_media_capture_device_register(struct imx_media_video_dev *vdev)
|
||||
int imx_media_capture_device_register(struct imx_media_video_dev *vdev,
|
||||
u32 link_flags)
|
||||
{
|
||||
struct capture_priv *priv = to_capture_priv(vdev);
|
||||
struct v4l2_subdev *sd = priv->src_sd;
|
||||
|
@ -927,8 +928,10 @@ int imx_media_capture_device_register(struct imx_media_video_dev *vdev)
|
|||
video_device_node_name(vfd));
|
||||
|
||||
/* Create the link from the src_sd devnode pad to device node. */
|
||||
if (link_flags & MEDIA_LNK_FL_IMMUTABLE)
|
||||
link_flags |= MEDIA_LNK_FL_ENABLED;
|
||||
ret = media_create_pad_link(&sd->entity, priv->src_sd_pad,
|
||||
&vfd->entity, 0, 0);
|
||||
&vfd->entity, 0, link_flags);
|
||||
if (ret) {
|
||||
dev_err(priv->dev, "failed to create link to device node\n");
|
||||
video_unregister_device(vfd);
|
||||
|
|
|
@ -1788,7 +1788,7 @@ static int csi_registered(struct v4l2_subdev *sd)
|
|||
goto free_fim;
|
||||
}
|
||||
|
||||
ret = imx_media_capture_device_register(priv->vdev);
|
||||
ret = imx_media_capture_device_register(priv->vdev, 0);
|
||||
if (ret)
|
||||
goto remove_vdev;
|
||||
|
||||
|
|
|
@ -288,7 +288,8 @@ struct imx_media_video_dev *
|
|||
imx_media_capture_device_init(struct device *dev, struct v4l2_subdev *src_sd,
|
||||
int pad, bool legacy_api);
|
||||
void imx_media_capture_device_remove(struct imx_media_video_dev *vdev);
|
||||
int imx_media_capture_device_register(struct imx_media_video_dev *vdev);
|
||||
int imx_media_capture_device_register(struct imx_media_video_dev *vdev,
|
||||
u32 link_flags);
|
||||
void imx_media_capture_device_unregister(struct imx_media_video_dev *vdev);
|
||||
struct imx_media_buffer *
|
||||
imx_media_capture_device_next_buf(struct imx_media_video_dev *vdev);
|
||||
|
|
|
@ -1104,7 +1104,7 @@ static int imx7_csi_registered(struct v4l2_subdev *sd)
|
|||
if (IS_ERR(csi->vdev))
|
||||
return PTR_ERR(csi->vdev);
|
||||
|
||||
ret = imx_media_capture_device_register(csi->vdev);
|
||||
ret = imx_media_capture_device_register(csi->vdev, 0);
|
||||
if (ret)
|
||||
imx_media_capture_device_remove(csi->vdev);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче