Linux v4l2架构学习总链接
二,mipi csi phy与imx291

同样的还是直接贴出bound函数
static int
rockchip_mipidphy_notifier_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *sd,
struct v4l2_async_subdev *asd)
{
struct mipidphy_priv *priv = container_of(notifier,
struct mipidphy_priv,
notifier);
struct sensor_async_subdev *s_asd = container_of(asd,
struct sensor_async_subdev, asd);
struct mipidphy_sensor *sensor;
unsigned int pad, ret;
if (priv->num_sensors == ARRAY_SIZE(priv->sensors))
return -EBUSY;
sensor = &priv->sensors[priv->num_sensors++];
sensor->lanes = s_asd->lanes;
sensor->mbus = s_asd->mbus;
/*
* 这里的sd是imx291的subdev
*/
sensor->sd = sd;
dev_info(priv->dev, "match %s:bus type %d\n", sd->name, s_asd->mbus.type);
/*
* imx291只有一个source pad
*/
for (pad = 0; pad < sensor->sd->entity.num_pads; pad++)
if (sensor->sd->entity.pads[pad].flags & MEDIA_PAD_FL_SOURCE)
break;
if (pad == sensor->sd->entity.num_pads) {
dev_err(priv->dev,
"failed to find src pad for %s\n",
sensor->sd->name);
return -ENXIO;
}
/*
* 下面的函数看下面文章,有具体分析,代入当前条件分析
* 基于RV1126平台imx291分析 --- media部件连接 二
* https://blog.csdn.net/ldl617/article/details/115701553
*/
ret = media_create_pad_link(
&sensor->sd->entity, pad,
&priv->sd.entity, MIPI_DPHY_RX_PAD_SINK,
priv->num_sensors != 1 ? 0 : MEDIA_LNK_FL_ENABLED);
if (ret) {
dev_err(priv->dev,
"failed to create link for %s\n",
sensor->sd->name);
return ret;
}
return 0;
}
最后的连接情况如下:

本文介绍了在Linux v4l2架构中,Mipi DPHY接口与IMX291摄像头模块之间的详细连接过程,涉及mipicsiphy模块与sensor_subdev的绑定,以及如何创建和配置pad_link。特别关注了IMX291单源pad的处理和配置步骤。

1203

被折叠的 条评论
为什么被折叠?



