Linux v4l2架构学习总链接

mipi-csi-phy源码

dts配置如下

csi_dphy0: csi-dphy@ff4b0000 {compatible = "rockchip,rv1126-csi-dphy";...    status = "okay";...ports {#address-cells = <1>;#size-cells = <0>;port@0 {reg = <0>;#address-cells = <1>;#size-cells = <0>;mipi_in_ucam0: endpoint@1 {reg = <1>;/* imx291 */remote-endpoint = <&ucam_out2>;data-lanes = <1 2 3 4>;};};port@1 {reg = <1>;#address-cells = <1>;#size-cells = <0>;csidphy0_out: endpoint@0 {reg = <0>;remote-endpoint = <&mipi_csi2_input>;};};};
};

其实这里可以看出来和imx291直接的联系,imx291注册中dts有这样一句话 remote-endpoint = <&mipi_in_ucam0>;

代码中对remote-enpoint的解析后面也会分析,所以这里也可以知道下一遍文章要分析的subdev是有mipi_csi2_input的port的节点

开始驱动分析

struct mipidphy_priv {struct device *dev;...struct v4l2_async_notifier notifier;struct v4l2_subdev sd;...struct mipidphy_sensor sensors[MAX_DPHY_SENSORS];int num_sensors;...bool is_streaming;...int (*stream_on)(struct mipidphy_priv *priv, struct v4l2_subdev *sd);int (*stream_off)(struct mipidphy_priv *priv, struct v4l2_subdev *sd);
};static int rockchip_mipidphy_probe(struct platform_device *pdev)
{struct device *dev = &pdev->dev;struct v4l2_subdev *sd;struct mipidphy_priv *priv;struct regmap *grf;struct resource *res;const struct of_device_id *of_id;const struct dphy_drv_data *drv_data;int i, ret;priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);if (!priv)return -ENOMEM;priv->dev = dev;...priv->stream_on = csi_mipidphy_stream_on;priv->stream_off = csi_mipidphy_stream_off;...sd = &priv->sd;/** 同样的* sd->ops = &mipidphy_subdev_ops;* sd->flags = V4L2_SUBDEV_FL_HAS_DEVNODE;* sd->v4l2_dev = NULL*/v4l2_subdev_init(sd, &mipidphy_subdev_ops);sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;snprintf(sd->name, sizeof(sd->name), "rockchip-mipi-dphy-rx");sd->dev = dev;platform_set_drvdata(pdev, &sd->entity);ret = rockchip_mipidphy_media_init(priv);if (ret < 0)goto destroy_mutex;return 0;...
}static int rockchip_mipidphy_media_init(struct mipidphy_priv *priv)
{int ret;/** 下面这几行代码,个人认为加个CONFIG_MEDIA_CONTROLLER控制比较好* 同样是media,暂时忽略*/
//#if defined(CONFIG_MEDIA_CONTROLLER)+++++++++++++++++++++++++++++++++++++priv->pads[MIPI_DPHY_RX_PAD_SOURCE].flags =MEDIA_PAD_FL_SOURCE | MEDIA_PAD_FL_MUST_CONNECT;priv->pads[MIPI_DPHY_RX_PAD_SINK].flags =MEDIA_PAD_FL_SINK | MEDIA_PAD_FL_MUST_CONNECT;priv->sd.entity.function = MEDIA_ENT_F_VID_IF_BRIDGE;ret = media_entity_pads_init(&priv->sd.entity,MIPI_DPHY_RX_PADS_NUM, priv->pads);if (ret < 0)return ret;
//#endif -----------------------------------------------------------------/** 对于v4l2_async_notifier_parse_fwnode_endpoints_by_port* 看专题分析* https://blog.csdn.net/ldl617/article/details/115526542* 回调函数rockchip_mipidphy_fwnode_parse* 这里也不再分析,太细节和v4l2关系不大*/ret = v4l2_async_notifier_parse_fwnode_endpoints_by_port(priv->dev, &priv->notifier,sizeof(struct sensor_async_subdev), 0,rockchip_mipidphy_fwnode_parse);if (ret < 0)return ret;if (!priv->notifier.num_subdevs)return -ENODEV;   /* no endpoint */priv->sd.subdev_notifier = &priv->notifier;/* 注意notifier的ops不为NULL*/priv->notifier.ops = &rockchip_mipidphy_async_ops;/** 具体的看v4l2_async_subdev_notifier_register 分析* https://blog.csdn.net/ldl617/article/details/115548594* 这个执行后 mipi csi pht的notifier->wait上会挂载asd* 这个asd就是notifier->subdevs[0]* 也就是imx291在dts中的节点* 最后将mipi csi pht的notifier挂载到notifier_list上*/ret = v4l2_async_subdev_notifier_register(&priv->sd, &priv->notifier);if (ret) {dev_err(priv->dev,"failed to register async notifier : %d\n", ret);v4l2_async_notifier_cleanup(&priv->notifier);return ret;}/** 这里会有v4l2_dev = NULL不执行* 只是将subdev挂载到subdev_list*/return v4l2_async_register_subdev(&priv->sd);
}

这样mipi-csi-phy就注册完了

结合之前的imx291注册

可以知道

  1. notifier_list上有2个notifier,分别是imx291的和mipi-csi-phy的
  2. subdev_list上有2个subdev,分别是imx291的和mipi-csi-phy的

其中mipi-csi-phy的notifier->subdevs[0]中记录了imx291 dts节点的信息

这样就关联起来了

imx291 --> mipi csi phy

基于RV1126平台imx291分析 --- mipi-csi-phy注册相关推荐

  1. 产品分享:Qt+Arm基于RV1126平台的内窥镜软硬整套解决方案(实时影像、冻结、拍照、录像、背光调整、硬件光源调整,其他产品也可使用该平台,如视频监控,物联网产品等等)

    ​若该文为原创文章,转载请注明原文出处 本文章博客地址:[https://hpzwl.blog.csdn.net/article/details/118887440 长期持续带来更多项目与技术分享,咨 ...

  2. 基于RV1126 Video分析-----图像处理模块所代表的V4L2设备注册

    工作: 以设备通知器为线索,从顶向下,依次找到下一级设备,添加到V4L2设备种,循环处理.将全部的子设备整理到 V4L2设备中,这样可以通过V4L2设备直接管理所包含的各个子设备. 即这样 所有设备注 ...

  3. 基于RV1126 Video分析-----驱动各模块总览

    一 通用理论 硬件链接: 一般情况下,Camera和SOC有两个接口进行连接,分为为MIPI接口和I2C接口,其中MIPI接口用来传输图像的数据,数据传输路径为从Sensor传输到SOC.另一个接口为 ...

  4. 基于边缘计算平台的分析与研究

    摘 要:边缘计算作为万物互联时代的关键技术,具有广泛的应用场景.文章首先分析了边缘计算平台在推广中面临的问题:随后从架构出发分析了典型边缘计算平台,并列举了边缘计算应用场景的需求参数,最后提出了一种边 ...

  5. android手机舆情分析,基于Android平台的环境公共舆情监督系统研究

    摘要: 近年来,随着我国社会经济的持续发展和人民生活水平的不断提高,人们的环境保护意识也在不断增长,其中城市环境质量问题逐渐成为了人们普遍关注的焦点,也成为环保部门和环保从业人员的重点研究方向.环境监 ...

  6. 浅谈基于物联网技术的地下综合管廊智慧管控平台建设分析

    摘要:本文以物联网.GIS等技术为基础,采用文献研究等方法,在探究我国地下综合管廊管廊现状及相关技术飾基础上,对其智慧管控平台的建设展开了研究,希望能为相关研究及建设提供有价值的参考. 关键词:物联网 ...

  7. 基于SOA的区域卫生信息平台案例分析(转)

    这篇文章是在学习过程中baidud到得,觉得在学习阶段可以看看,用的是ESB做的系统集成. 以下是原文: 一.政策与现状 国务院在<关于深化医药卫生体制改革意见>中明确提出要大力推进医药卫 ...

  8. linux内核usb驱动框架,基于S3C2440平台的linux2.6.22内核版本的USB驱动框架分析

    基于S3C2440平台的linux2.6.22内核版本的USB驱动框架分析 发布时间:2014-07-18 16:47:31来源:红联作者:linux08071151 driver/usb/host/ ...

  9. MTK平台 更换前后camera的MIPI CSI接口

    MTK平台 更换前后camera的MIPI CSI接口 在vendor目录下面,有一个文件"cfg_setting_imgsensor.cpp",这个文件里面有一个函数" ...

  10. MIPI CSI和DSI接口标准简介

    MIPI CSI和DPI是MIPI标准的一种,因为MIPI在移动领域应用范围太广了,各种外围设备都可以用它来传输信息,所以,MIPI联盟给不同的外设接口定义了版本名,CSI是for Camera的,D ...

最新文章

  1. linux批处理mysql数据库_使用批处理对MySQL进行数据批量操作
  2. ​70行Go代码打败C
  3. spring26-1: bean的实例方式
  4. 多媒体计算机技术论文结束语,论述多媒体计算机技术在广播电视工程中的应用成果论文...
  5. 打印系统所有维护了sales area的BP id
  6. python前n项和存为一个数组_在Python中存储多个数组
  7. Python学习笔记--8.6 函数--递归
  8. discuz NT!整合
  9. 读者福利:复盘2018上半年精选文章,还有礼品等着你!
  10. 计算机串口程序配置,串口设置软件 串口调试工具如何使用
  11. python开三次方_python 三次方
  12. 程序员转项目管理之考证PMP
  13. 工作记录软件app,可以写工作记录的便签软件
  14. Image Caption 常用评价指标
  15. 如何在不清空原有配置的情况下修改路由器密码??????
  16. 大数据量查询大杀器之Mybatis 流式查询
  17. 计算机无法传输文件,手机连接电脑无法互传文件怎么办
  18. 多条ADSL线路合并叠加效果测试,多WAN口聚合
  19. docker容器化部署
  20. ubuntu下安装摄像头应用程序xawtv

热门文章

  1. python 输出语句
  2. 凸包算法详解(Graham扫描法)
  3. 【Java】JavaSE JDK 及离线帮助文档下载链接
  4. C++简单的写文本文件代码
  5. Vim编辑器常用命令汇总
  6. python 爬取直播_python---爬取某鱼直播
  7. Github Coding Developer Book For LiuGuiLinAndroid
  8. 常见十四种的Java算法
  9. 固定资产盘点管理系统的流程
  10. 开发者必装的软件工具总结