二,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 %dn", 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 %sn",
sensor->sd->name);
return -ENXIO;
}
/*
* 下面的函数看下面文章,有具体分析,代入当前条件分析
* 基于RV1126平台imx291分析 --- media部件连接 二
*
*/
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 %sn",
sensor->sd->name);
return ret;
}
return 0;
}
最后的连接情况如下:
二,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 %dn", 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 %sn",
sensor->sd->name);
return -ENXIO;
}
/*
* 下面的函数看下面文章,有具体分析,代入当前条件分析
* 基于RV1126平台imx291分析 --- media部件连接 二
*
*/
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 %sn",
sensor->sd->name);
return ret;
}
return 0;
}
最后的连接情况如下:
举报