英伟达camera驱动(max9296 plus max9295)代码实现
驱动代码文件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)代码实现相关推荐
- ubuntu16.04安装英伟达(NVIDIA)驱动——run文件安装
ubuntu16.04安装英伟达(NVIDIA)驱动--run文件安装 去官网http://www.nvidia.com/Download/index.aspx?lang=en-us选择显卡驱动 中文 ...
- 完整的Ubuntu18.04深度学习GPU环境配置,英伟达显卡驱动安装、cuda9.0安装、cudnn的安装、anaconda安装
文章目录 1.英伟达显卡驱动安装 2.cuda9.0安装 3.cudnn的安装 4.anaconda安装 5.安装TensorFlow和Keras 安装 参考:https://blog.csdn.ne ...
- ubuntu 英伟达显卡驱动异常
问题:安装某些软件后,ubuntu内核发生变换,英伟达显卡驱动无法正常使用 解决方法:(推荐彻底卸载显卡驱动后,重新安装显卡驱动) 1. 使用dkms.可以解决一部分问题,不一定能解决. 2. 重装显 ...
- 英伟达NVIDIA驱动安装失败
英伟达NVIDIA驱动安装失败,英伟达NVIDIA图形驱动安装失败. 之前我在官网下载安装和驱动精灵安装都失败了,也把驱动卸载干净后重装过(不过驱动卸载干净重启后,系统扫描都找不到显卡硬件了,差点就要 ...
- nvidia卸载程序失败_英伟达显卡驱动安装失败怎么办?
一般用户重新安装系统或者更新显卡驱动后,安装光盘中的英伟达显卡驱动,安装后却提示"NVIDIA安装程序失败",遇到这样的问题,很多用户会选择重启后重新安装一次,不过都不能解决安装电 ...
- Win10 英伟达显卡驱动安装不上,显示由于该设备有问题,Windows已将其停止,错误代码43
环境: 电脑:金河田组装机微星主板 系统:Windows 10 专业版 64位 显卡:NVIDIA GT 710 问题描述: 重装系统后,Win10英伟达显卡驱动安装不上,显示由于该设备有问题,Win ...
- ubuntu 安装 英伟达NVIDIA驱动
1.Ctrl-Alt+F1 禁用X-Window服务 sudo service lightdm stop #这会关闭图形界面,但不用紧张 sudo apt-get remove --purge nvi ...
- linux英伟达显卡内核不匹配,硬核观察|Linus 破例在 Linux 5.11 内核中允许英伟达显卡驱动加塞...
Linus 破例在 Linux 5.11 内核中允许英伟达显卡驱动加塞 据 cnbeta 报道,曾因闭源驱动对英伟达爆粗口的 Linus Torvalds,刚刚宣布了 Linux 5.11 内核版本的 ...
- 64-bit Linux安装英伟达显卡驱动
我使用64位的debian 8.6在安装英伟达显卡驱动时遇到了一个waring导致我的显卡驱动始终无法安装成功 在网上搜索了一番后,我解决了这个问题,现在记录下来为遇到同样问题的人提供下资料 警告原话 ...
最新文章
- python入门:正则表达式,面向对象编程,零基础视频教程分享
- luogu P3410 拍照(最大权闭合图转最小割)
- 彩色空间及cvtColor解析
- 交通运输线(LCA)
- [转]Oracle update用例
- SAP ui5 shell open loading dialog
- DateFormat PHP Class (php 处理日期)
- ligerGrid简单例子--通过后台转数据
- 全网最全实现元素(盒子、图片)水平垂直方向居中
- 计算机能不能升级固态硬盘,笔记本升级固态硬盘后会怎样?秒懂
- Ghelper安装及使用
- BUUCTF RSA题目全解3
- 国内FRM证书福利政策大全
- 【BJOI2019】排兵布阵 DP
- 电信物联网平台,java后台对接电信北向应用,订阅平台消息
- C++ 中ANSI/ASII/GB2312/Unicode/Utf-8编码的区别
- Android HOME键那些事
- 如何在电脑上看微信阅读
- java实现表情符号过滤
- Java 入门之1:浅谈Java的最基本概念及JDK、JRE、JVM之间的关系和区别