驱动代码文件list:

kernel/kernel-4.9/Documentation/devicetree/bindings/video/max9291.txt
kernel/nvidia/include/media/max9296.h
kernel/nvidia/include/media/max9295.h
kernel/nvidia/drivers/media/i2c/max9295.c
kernel/nvidia/drivers/media/i2c/max9296.ckernel/nvidia/drivers/media/i2c/max9295.c:541: { .compatible = "nvidia,max9295", },
kernel/nvidia/drivers/media/i2c/max9296.c:784:  { .compatible = "nvidia,max9296", },kernel/nvidia/drivers/media/platform/tegra/camera/camera_common.c
kernel/nvidia/drivers/video/tegra/camera/tegra_camera_platform.c

prj设备树配置:

hardware/nvidia/platform/t19x/mccoy/kernel-dts/common/tegra194-e3900-0000-camera-imx390-a00.dtsi  #define CAM0_RST_L TEGRA194_MAIN_GPIO(H, 3)
#define CAMERA_I2C_MUX_BUS(x) (0x1E + x)i2c@3180000 {tca9546@70 {compatible = "nxp,pca9546";reg = <0x70>;force_bus_start = <CAMERA_I2C_MUX_BUS(0)>;i2c@0 {reg = <0>;dser: max9296@48 {compatible = "nvidia,max9296";reg = <0x48>;csi-mode = "2x4";max-src = <2>;reset-gpios = <&tegra_main_gpio CAM0_RST_L GPIO_ACTIVE_HIGH>;};ser_prim: max9295_prim@62 {compatible = "nvidia,max9295";reg = <0x62>;is-prim-ser;};ser_a: max9295_a@40 {compatible = "nvidia,max9295";reg = <0x40>;nvidia,gmsl-dser-device = <&dser>;};ser_b: max9295_b@60 {compatible = "nvidia,max9295";reg = <0x60>;nvidia,gmsl-dser-device = <&dser>;};

和英伟达平台对接以及注册:

kernel/nvidia/drivers/media/i2c/imx390.cstatic const struct v4l2_subdev_internal_ops imx390_subdev_internal_ops = {  //mark.open = imx390_open,
};static struct camera_common_sensor_ops imx390_common_ops = { //最终接口.numfrmfmts = ARRAY_SIZE(imx390_frmfmt),.frmfmt_table = imx390_frmfmt,.power_on = imx390_power_on,.power_off = imx390_power_off,.write_reg = imx390_write_reg,.read_reg = imx390_read_reg,.parse_dt = imx390_parse_dt,.power_get = imx390_power_get,.power_put = imx390_power_put,.set_mode = imx390_set_mode,.start_streaming = imx390_start_streaming,.stop_streaming = imx390_stop_streaming,
};static struct tegracam_ctrl_ops imx390_ctrl_ops = {.numctrls = ARRAY_SIZE(ctrl_cid_list),.ctrl_cid_list = ctrl_cid_list,.set_gain = imx390_set_gain,.set_exposure = imx390_set_exposure,.set_exposure_short = imx390_set_exposure,.set_frame_rate = imx390_set_frame_rate,.set_group_hold = imx390_set_group_hold,
};tc_dev->dev = dev;strncpy(tc_dev->name, "imx390", sizeof(tc_dev->name));tc_dev->dev_regmap_config = &sensor_regmap_config;tc_dev->sensor_ops = &imx390_common_ops;tc_dev->v4l2sd_internal_ops = &imx390_subdev_internal_ops;tc_dev->tcctrl_ops = &imx390_ctrl_ops;//xczerr = tegracam_device_register(tc_dev); //v4l2注册,平台已经封装了一个接口函数
tegracam_set_privdataerr = tegracam_v4l2subdev_register(tc_dev, true);  //xcz mark

注册的dev接口定义:

./kernel/nvidia/include/media/tegracam_core.hstruct tegracam_device {struct camera_common_data   *s_data;struct media_pad        pad;u32                 version;bool                is_streaming;/* variables to be filled by the driver to register */char             name[32];struct i2c_client      *client;struct device           *dev;u32                numctrls;const u32          *ctrl_cid_list;const struct regmap_config   *dev_regmap_config;struct camera_common_sensor_ops      *sensor_ops;const struct v4l2_subdev_ops        *v4l2sd_ops;const struct v4l2_subdev_internal_ops   *v4l2sd_internal_ops;const struct media_entity_operations   *media_ops;const struct tegracam_ctrl_ops       *tcctrl_ops;void    *priv;
};

多camera兼容的设计:
只有imx390.c中有 read_reg 接口
====》不读ID
sensor_ops->read 没有调用

err = imx390_board_setup(priv);  //这个函数接口可以加

ser deser设计思路:
    一路deser,2路ser,加上一路默认的ser,所以设备树中做了4个client来实现。
    deser设计了一个驱动程序,2路ser和一路默认的ser设计了一个驱动程序。

max9295.c max9296.c 都是硬件spec相关的,看寄存器,这里就不分析了

英伟达camera驱动(max9296 plus max9295)代码实现相关推荐

  1. ubuntu16.04安装英伟达(NVIDIA)驱动——run文件安装

    ubuntu16.04安装英伟达(NVIDIA)驱动--run文件安装 去官网http://www.nvidia.com/Download/index.aspx?lang=en-us选择显卡驱动 中文 ...

  2. 完整的Ubuntu18.04深度学习GPU环境配置,英伟达显卡驱动安装、cuda9.0安装、cudnn的安装、anaconda安装

    文章目录 1.英伟达显卡驱动安装 2.cuda9.0安装 3.cudnn的安装 4.anaconda安装 5.安装TensorFlow和Keras 安装 参考:https://blog.csdn.ne ...

  3. ubuntu 英伟达显卡驱动异常

    问题:安装某些软件后,ubuntu内核发生变换,英伟达显卡驱动无法正常使用 解决方法:(推荐彻底卸载显卡驱动后,重新安装显卡驱动) 1. 使用dkms.可以解决一部分问题,不一定能解决. 2. 重装显 ...

  4. 英伟达NVIDIA驱动安装失败

    英伟达NVIDIA驱动安装失败,英伟达NVIDIA图形驱动安装失败. 之前我在官网下载安装和驱动精灵安装都失败了,也把驱动卸载干净后重装过(不过驱动卸载干净重启后,系统扫描都找不到显卡硬件了,差点就要 ...

  5. nvidia卸载程序失败_英伟达显卡驱动安装失败怎么办?

    一般用户重新安装系统或者更新显卡驱动后,安装光盘中的英伟达显卡驱动,安装后却提示"NVIDIA安装程序失败",遇到这样的问题,很多用户会选择重启后重新安装一次,不过都不能解决安装电 ...

  6. Win10 英伟达显卡驱动安装不上,显示由于该设备有问题,Windows已将其停止,错误代码43

    环境: 电脑:金河田组装机微星主板 系统:Windows 10 专业版 64位 显卡:NVIDIA GT 710 问题描述: 重装系统后,Win10英伟达显卡驱动安装不上,显示由于该设备有问题,Win ...

  7. ubuntu 安装 英伟达NVIDIA驱动

    1.Ctrl-Alt+F1 禁用X-Window服务 sudo service lightdm stop #这会关闭图形界面,但不用紧张 sudo apt-get remove --purge nvi ...

  8. linux英伟达显卡内核不匹配,硬核观察|Linus 破例在 Linux 5.11 内核中允许英伟达显卡驱动加塞...

    Linus 破例在 Linux 5.11 内核中允许英伟达显卡驱动加塞 据 cnbeta 报道,曾因闭源驱动对英伟达爆粗口的 Linus Torvalds,刚刚宣布了 Linux 5.11 内核版本的 ...

  9. 64-bit Linux安装英伟达显卡驱动

    我使用64位的debian 8.6在安装英伟达显卡驱动时遇到了一个waring导致我的显卡驱动始终无法安装成功 在网上搜索了一番后,我解决了这个问题,现在记录下来为遇到同样问题的人提供下资料 警告原话 ...

最新文章

  1. python入门:正则表达式,面向对象编程,零基础视频教程分享
  2. luogu P3410 拍照(最大权闭合图转最小割)
  3. 彩色空间及cvtColor解析
  4. 交通运输线(LCA)
  5. [转]Oracle update用例
  6. SAP ui5 shell open loading dialog
  7. DateFormat PHP Class (php 处理日期)
  8. ligerGrid简单例子--通过后台转数据
  9. 全网最全实现元素(盒子、图片)水平垂直方向居中
  10. 计算机能不能升级固态硬盘,笔记本升级固态硬盘后会怎样?秒懂
  11. Ghelper安装及使用
  12. BUUCTF RSA题目全解3
  13. 国内FRM证书福利政策大全
  14. 【BJOI2019】排兵布阵 DP
  15. 电信物联网平台,java后台对接电信北向应用,订阅平台消息
  16. C++ 中ANSI/ASII/GB2312/Unicode/Utf-8编码的区别
  17. Android HOME键那些事
  18. 如何在电脑上看微信阅读
  19. java实现表情符号过滤
  20. Java 入门之1:浅谈Java的最基本概念及JDK、JRE、JVM之间的关系和区别

热门文章

  1. 2019 最新 JAVA eclipse 中文汉化包 安装教程
  2. DeviceNet现场总线协议讲解
  3. 优秀的班组长应具备能力
  4. 2021年中国商铺施工面积、新开工面积、销售面积及未来发展趋势分析[图]
  5. 微信小程序简单的循环输出优惠券列表(完整小模板)
  6. jenkins备份和发布
  7. 网络杂谈-netsh,route...
  8. 三阶齐次线性方程求通解_阶常系数齐次线性微分方程的通解证明
  9. Command.CreateParameter参数说明
  10. 某一天,鼠标旁边多了一个一直转的蓝色圈圈问题