MTK6735 Android之Camera驱动移植篇

首先我们需要向sensor原厂拿到我们对应平台型号的驱动hal层和kernel层的代码。

1.拷贝hal层代码到\vendor\mediatek\proprietary\custom\mt6735\hal\D1\imgsensor\目录下。

2.拷贝kernel层代码到\kernel-3.10\drivers\misc\mediatek\imgsensor\src\mt6735\目录下。

3.添加Sensor_id:\vendor\mediatek\proprietary\custom\mt6735\hal\D1\imgsensor_src\sensorlist.cpp

我的摄像头型号是ov8858这款sensor所以对应应该

//800w
#if defined(OV8858_MIPI_RAW)RAW_INFO(OV8858_SENSOR_ID, SENSOR_DRVNAME_OV8858_MIPI_RAW,NULL),
#endif

4.定义ID:\vendor\mediatek\proprietary\custom\common\kernel\imgsensor\inc\kd_imgsensor.h

#define OV8858_SENSOR_ID                        0x8858
#define SENSOR_DRVNAME_OV8858_MIPI_RAW          "ov8858mipiraw"

一般定义ID在这个文件差不多都定义了所以我们也不用去管,但是还是需要去看看

5.定义ID:\kernel-3.10\drivers\misc\mediatek\imgsensor/inc/kd_imgsensor.h和上面一样

6.绑定函数入口:\kernel-3.10\drivers\misc\mediatek\imgsensor\src\mt6735\kd_sensorlist.h

//800w
#if defined(OV8858_MIPI_RAW){OV8858_SENSOR_ID, SENSOR_DRVNAME_OV8858_MIPI_RAW,OV8858_MIPI_RAW_SensorInit},
#endif

7./kernel-3.10/drivers/misc/mediatek/mach/mt6735/<project>/camera/camera/目录下
添加摄像头上电时序kd_camera_hw.c:

if(currSensorName && (0 == strcmp(SENSOR_DRVNAME_OV8858_MIPI_RAW, currSensorName)))
{
    printk("tangh SENSOR_DRVNAME_OV8858_MIPI_RAW \n ");//First Power Pin low and Reset Pin Lowif (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMPDN]) {  if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! (CMPDN)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! (CMPDN)\n");}   if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! (CMPDN)\n");}}if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST]) {if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! (CMRST)\n");}if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\n");}if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! (CMRST)\n");}}//VCAM_IOif(TRUE != hwPowerOn(CAMERA_POWER_VCAM_IO, VOL_1800, mode_name)){PK_DBG("[CAMERA SENSOR] Fail to enable digital power (VCAM_IO), power id = %d \n", CAMERA_POWER_VCAM_IO);goto _kdCISModulePowerOn_exit_;}//VCAM_Aif(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name)){PK_DBG("[CAMERA SENSOR] Fail to enable analog power (VCAM_A), power id = %d\n", CAMERA_POWER_VCAM_A);goto _kdCISModulePowerOn_exit_;}//VCAM_Dif(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1500,mode_name)){PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");goto _kdCISModulePowerOn_exit_;}//AF_VCCif(TRUE != hwPowerOn(CAMERA_POWER_VCAM_AF, VOL_2800,mode_name)){PK_DBG("[CAMERA SENSOR] Fail to enable analog power (VCAM_AF), power id = %d \n", CAMERA_POWER_VCAM_AF);goto _kdCISModulePowerOn_exit_;}mdelay(5);//enable active sensorif (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMPDN]) {if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! (CMPDN)\n");}if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! (CMPDN)\n");}if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_ON])){PK_DBG("[CAMERA LENS] set gpio failed!! (CMPDN)\n");}}mdelay(1);if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST]) {if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! (CMRST)\n");}if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\n");}if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_ON])){PK_DBG("[CAMERA SENSOR] set gpio failed!! (CMRST)\n");}}
}

VCAM_IO、VCAM_A、VCAM_D和AF_VCC都是需要按照手册来修改

8.在ProjectConfig.mk中添加sensor

CUSTOM_HAL_IMGSENSOR=ov8858_mipi_raw
CUSTOM_HAL_MAIN_IMGSENSOR=ov8858_mipi_rawCUSTOM_KERNEL_IMGSENSOR=ov8858_mipi_raw
CUSTOM_KERNEL_MAIN_IMGSENSOR=ov8858_mipi_raw

在\kernel-3.10\arch\arm64\configs\<project>中增加

CONFIG_CUSTOM_KERNEL_IMGSENSOR=“ov8858_mipi_raw”

现在我们编译下一般情况下是可以运行camera这个功能了,但是不免会遇到很多意外,例如我爬坑爬了挺久本来是一个很简单的移植,那现在就一起爬吧。

首先你可能会发现额怎么我的摄像功能不行?我的聚焦功能也没实现,闪光灯功能也没看到。运气好的话你可能也会遇到,当时找了很久都没发现问题后来请教了下大神帮我弄了下终于弄出来了但是还是云里雾里,在我的基础上也没怎么改。

我们当时直接把AF加上之后就正常,但是在ProjectConfig.mk把其它摄像头的驱动都屏蔽了,后面需要自己添加,这里有一点不明白就是添加两个兼容驱动写前和写后面的区别是什么可以互换不,如果哪位知道请评论下,感谢。

添加AF在ProjectConfig.mk:

CUSTOM_KERNEL_LENS = ad5820af fm50af dw9714af dummy_lens

我使用的是fm50af。

在\vendor\mediatek\proprietary\custom\<project>\hal\sendepfeature下面新建一个你驱动对应名字的文件,添加config.ftbl.ov8858_mipi_raw.h这个文件到里面去,此文件在给你hal层代码里面有。把这些完成之后你重新new一把最后看到功能都出来了,如果还没出来你把ProjectConfig.mk里面的camera的其它关于摄像头的后置驱动全部去掉留下你正在移植那个试试,包括你kernel目录里面的deconfig里面。

现在差不多都搞定了。打开摄像头看到上下左右都反了,那我们就得看下寄存器改方向了查看了8858相关寄存器,发现修改方向的是0x3820和0x3821按照对应修改即可,.sensor_output_dataformat = SENSOR_OUTPUT_FORMAT_RAW_B这个是修改颜色的你们也应该会遇到问题,四种状态:B、Gb、R、Gr

MTK6735 Android之Camera驱动移植篇相关推荐

  1. 基于MT6752/32平台 Android L版本驱动移植步骤

    基于MT6752/32平台 Android L版本驱动移植步骤 根据MK官网所述,在Android L 版本上Turnkey ABS 架构将会phase out,而Mediatek Turnkey架构 ...

  2. 基于MT6752/32平台 Android L版本驱动移植步骤 根据MK官网所述,在Android L 版本上Turnkey ABS 架构将会phase out,而Medi

    基于MT6752/32平台 Android L版本驱动移植步骤 根据MK官网所述,在Android L 版本上Turnkey ABS 架构将会phase out,而Mediatek Turnkey架构 ...

  3. MT6752/32平台 Android L版本驱动移植

    基于MT6752/32平台 Android L版本驱动移植步骤 根据MK官网所述,在Android L 版本上Turnkey ABS 架构将会phase out,而Mediatek Turnkey架构 ...

  4. MTK Camera驱动移植

    对于MTK Camera驱动移植一般分为四部分: 1.硬件IO口配置: 2.Camera驱动移植: 3.上电时序: 4.修改i2c控制器: 硬件电路: 1.GPIO配置 打开 mediatek\dct ...

  5. android LVDS屏幕驱动移植

    飞思卡尔i.MX 6Quad Android 4.2.2的LVDS屏幕驱动移植 分类: Android2013-09-14 09:13 1263人阅读 评论(0) 收藏 举报 目录(?)[+] 1   ...

  6. BH1750 传感器实战教学 —— 驱动移植篇

    前言 上一篇 BH1750 的实战教学我们说明的实际应用中传感器的硬件设计 : BH1750 传感器实战教学 -- 硬件设计篇 我们提到过在本次使用的芯片为 51 内核,I2C 通讯驱动实现与 STM ...

  7. Android MTK Camera驱动代码分析

    一.Camera调用过程:      imgsensor起到承上启下的作用,在系统起来时会创建整个camera驱动运行的环境,其中主要的文件和函数如下框图所示,先设备挂载时会调用注册platform设 ...

  8. Android S5PV210 camera驱动(tw9912)小结

    之前没接触过三星的开发板,更不了解S5PV210,TW9912这款AD芯片也是第一次接触,三星FAE又不给力(其实是没有),调试camera过程中,一会怀疑TW9912配置不对,一会怀疑三星FIMC驱 ...

  9. MT6739 Camera驱动移植文档

    文章目录 把厂商提供的驱动代码拷贝到对应路径 KERNEL层 HAL层 (1) 修改ProjectConfig.mk配置文件 修改与imgsensor相关的配置信息 修改与lens相关的配置信息 修改 ...

最新文章

  1. Matlab计算基站覆盖面积示例
  2. RPC 中 参数传递 ImputStream 流会关闭
  3. 关于access数据库打不开
  4. 信息安全系统设计基础第八周期中学习总结—20135227黄晓妍
  5. Android开发周报:Android 8.0开始推送、微店插件化实践
  6. 2018八大流行网页设计趋势
  7. 一点浩然气,千里快哉风(修炼孟子浩然之气)
  8. css and HTMLpicture knowledge
  9. Largest prime factor
  10. java++pdf文档合并_Java多个PDF文件合并成一个PDF文件-Go语言中文社区
  11. 用matlab作椭圆方程,用matlab做椭圆拟合方程
  12. android 多开app store,原来 iOS 也有双开助手,还是上架了苹果官方 App Store 的
  13. 5G已开始商用 目前提供5G商用服务的国家有哪些?
  14. “互联网+地税大数据”提升淮安办税效能
  15. sql查询查询半小时内数据的方法
  16. STM32控制NRF24L01无线模块进行通信
  17. opencv 通过标定摄像头测量物体大小_激光三角测量法在工业视觉检测上的应用...
  18. 雌雄异体,伴X染色体的等位基因(2个),计算子代的基因型频率
  19. Linux 设置简单密码
  20. CNVD原创漏洞证书总结

热门文章

  1. 2019年迪拜GITEX展位申请-中国区总代理ACE亚广展览
  2. 二分查找算法详解(附代码)
  3. Ubuntu蓝牙耳机连接失败问题解决
  4. 在使用LYNC2010 客户端拨打国际长途时可能遇到的问题
  5. Collector详解
  6. Andrej Karpathy | 详解神经网络和反向传播(基于micrograd)
  7. 【数学建模+数据处理类】2021数学建模国赛B题 乙醇偶合制备C4烯烃
  8. CentOS8离线安装部署ceph集群
  9. (一)反向传播算法理解 (Back-Propagation)
  10. 深度学习—BN的理解(一)