media: v4l2-mc: Add link flags to v4l2_create_fwnode_links_to_pad()
Add a flags argument to the v4l2_create_fwnode_links_to_pad() function to specify the link flags. This allows drivers to create immutable links for instance. 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:
parent
42849cf086
commit
dbedd2f490
drivers
media/v4l2-core
staging/media/imx
include/media
|
@ -310,7 +310,7 @@ int v4l_vb2q_enable_media_source(struct vb2_queue *q)
|
||||||
EXPORT_SYMBOL_GPL(v4l_vb2q_enable_media_source);
|
EXPORT_SYMBOL_GPL(v4l_vb2q_enable_media_source);
|
||||||
|
|
||||||
int v4l2_create_fwnode_links_to_pad(struct v4l2_subdev *src_sd,
|
int v4l2_create_fwnode_links_to_pad(struct v4l2_subdev *src_sd,
|
||||||
struct media_pad *sink)
|
struct media_pad *sink, u32 flags)
|
||||||
{
|
{
|
||||||
struct fwnode_handle *endpoint;
|
struct fwnode_handle *endpoint;
|
||||||
struct v4l2_subdev *sink_sd;
|
struct v4l2_subdev *sink_sd;
|
||||||
|
@ -367,7 +367,7 @@ int v4l2_create_fwnode_links_to_pad(struct v4l2_subdev *src_sd,
|
||||||
sink_sd->entity.name, sink_idx);
|
sink_sd->entity.name, sink_idx);
|
||||||
|
|
||||||
ret = media_create_pad_link(&src_sd->entity, src_idx,
|
ret = media_create_pad_link(&src_sd->entity, src_idx,
|
||||||
&sink_sd->entity, sink_idx, 0);
|
&sink_sd->entity, sink_idx, flags);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(sink_sd->dev,
|
dev_err(sink_sd->dev,
|
||||||
"link %s:%d -> %s:%d failed with %d\n",
|
"link %s:%d -> %s:%d failed with %d\n",
|
||||||
|
@ -395,7 +395,7 @@ int v4l2_create_fwnode_links(struct v4l2_subdev *src_sd,
|
||||||
if (!(pad->flags & MEDIA_PAD_FL_SINK))
|
if (!(pad->flags & MEDIA_PAD_FL_SINK))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ret = v4l2_create_fwnode_links_to_pad(src_sd, pad);
|
ret = v4l2_create_fwnode_links_to_pad(src_sd, pad, 0);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1894,7 +1894,7 @@ static int imx_csi_notify_bound(struct v4l2_async_notifier *notifier,
|
||||||
if (sd->entity.function == MEDIA_ENT_F_VID_MUX)
|
if (sd->entity.function == MEDIA_ENT_F_VID_MUX)
|
||||||
sd->grp_id = IMX_MEDIA_GRP_ID_CSI_MUX;
|
sd->grp_id = IMX_MEDIA_GRP_ID_CSI_MUX;
|
||||||
|
|
||||||
return v4l2_create_fwnode_links_to_pad(sd, sink);
|
return v4l2_create_fwnode_links_to_pad(sd, sink, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct v4l2_async_notifier_operations csi_notify_ops = {
|
static const struct v4l2_async_notifier_operations csi_notify_ops = {
|
||||||
|
|
|
@ -621,7 +621,7 @@ static int csi2_notify_bound(struct v4l2_async_notifier *notifier,
|
||||||
|
|
||||||
dev_dbg(csi2->dev, "Bound %s pad: %d\n", sd->name, pad);
|
dev_dbg(csi2->dev, "Bound %s pad: %d\n", sd->name, pad);
|
||||||
|
|
||||||
return v4l2_create_fwnode_links_to_pad(sd, sink);
|
return v4l2_create_fwnode_links_to_pad(sd, sink, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void csi2_notify_unbind(struct v4l2_async_notifier *notifier,
|
static void csi2_notify_unbind(struct v4l2_async_notifier *notifier,
|
||||||
|
|
|
@ -1128,7 +1128,7 @@ static int imx7_csi_notify_bound(struct v4l2_async_notifier *notifier,
|
||||||
if (sd->entity.function == MEDIA_ENT_F_VID_MUX)
|
if (sd->entity.function == MEDIA_ENT_F_VID_MUX)
|
||||||
sd->grp_id = IMX_MEDIA_GRP_ID_CSI_MUX;
|
sd->grp_id = IMX_MEDIA_GRP_ID_CSI_MUX;
|
||||||
|
|
||||||
return v4l2_create_fwnode_links_to_pad(sd, sink);
|
return v4l2_create_fwnode_links_to_pad(sd, sink, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct v4l2_async_notifier_operations imx7_csi_notify_ops = {
|
static const struct v4l2_async_notifier_operations imx7_csi_notify_ops = {
|
||||||
|
|
|
@ -962,7 +962,7 @@ static int mipi_csis_notify_bound(struct v4l2_async_notifier *notifier,
|
||||||
struct csi_state *state = mipi_notifier_to_csis_state(notifier);
|
struct csi_state *state = mipi_notifier_to_csis_state(notifier);
|
||||||
struct media_pad *sink = &state->mipi_sd.entity.pads[CSIS_PAD_SINK];
|
struct media_pad *sink = &state->mipi_sd.entity.pads[CSIS_PAD_SINK];
|
||||||
|
|
||||||
return v4l2_create_fwnode_links_to_pad(sd, sink);
|
return v4l2_create_fwnode_links_to_pad(sd, sink, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct v4l2_async_notifier_operations mipi_csis_notify_ops = {
|
static const struct v4l2_async_notifier_operations mipi_csis_notify_ops = {
|
||||||
|
|
|
@ -91,6 +91,7 @@ int v4l_vb2q_enable_media_source(struct vb2_queue *q);
|
||||||
*
|
*
|
||||||
* @src_sd: pointer to a source subdev
|
* @src_sd: pointer to a source subdev
|
||||||
* @sink: pointer to a subdev sink pad
|
* @sink: pointer to a subdev sink pad
|
||||||
|
* @flags: the link flags
|
||||||
*
|
*
|
||||||
* This function searches for fwnode endpoint connections from a source
|
* This function searches for fwnode endpoint connections from a source
|
||||||
* subdevice to a single sink pad, and if suitable connections are found,
|
* subdevice to a single sink pad, and if suitable connections are found,
|
||||||
|
@ -98,6 +99,11 @@ int v4l_vb2q_enable_media_source(struct vb2_queue *q);
|
||||||
* called by the sink subdevice, in its v4l2-async notifier subdev bound
|
* called by the sink subdevice, in its v4l2-async notifier subdev bound
|
||||||
* callback, to create links from a bound source subdevice.
|
* callback, to create links from a bound source subdevice.
|
||||||
*
|
*
|
||||||
|
* The @flags argument specifies the link flags. The caller shall ensure that
|
||||||
|
* the flags are valid regardless of the number of links that may be created.
|
||||||
|
* For instance, setting the MEDIA_LNK_FL_ENABLED flag will cause all created
|
||||||
|
* links to be enabled, which isn't valid if more than one link is created.
|
||||||
|
*
|
||||||
* .. note::
|
* .. note::
|
||||||
*
|
*
|
||||||
* Any sink subdevice that calls this function must implement the
|
* Any sink subdevice that calls this function must implement the
|
||||||
|
@ -107,7 +113,7 @@ int v4l_vb2q_enable_media_source(struct vb2_queue *q);
|
||||||
* Return 0 on success or a negative error code on failure.
|
* Return 0 on success or a negative error code on failure.
|
||||||
*/
|
*/
|
||||||
int v4l2_create_fwnode_links_to_pad(struct v4l2_subdev *src_sd,
|
int v4l2_create_fwnode_links_to_pad(struct v4l2_subdev *src_sd,
|
||||||
struct media_pad *sink);
|
struct media_pad *sink, u32 flags);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* v4l2_create_fwnode_links - Create fwnode-based links from a source
|
* v4l2_create_fwnode_links - Create fwnode-based links from a source
|
||||||
|
|
Loading…
Reference in New Issue