来源:http://blog.csdn.net/m0_37256698/article/details/70139272

需要修改的文件如下(以hi546为例):

./kernel/arch/arm/boot/dts/qcom/msm8909-camera-sensor-skua.dtsi

添加eeprom到设备树

添加eeprom信息

./kernel/drivers/media/platform/msm/camera_v2/sensor/eeprom/msm_eeprom.c

根据板子的camera name进行OTP校准

custom_hynix_hi546_otp_read函数如下:

static int custom_hynix_hi546_otp_read(struct msm_eeprom_ctrl_t *e_ctrl,

struct msm_eeprom_memory_map_t *emap, uint8_t *memptr) {

int m = 0;

int k = 0;

uint32_t addr = 0;

int rc =0;

// add for compatible code form the camera lens id --qiaodeli

int flag = 0;

#define HI546_MODULE_INFO_GROUP_SIZE        17

#define HI546_MODULE_INFO_OFFSET            1

#define HI546_MODULE_INFO_LEN_OFFSET        6

int group_size = HI546_MODULE_INFO_GROUP_SIZE;

int module_offset = HI546_MODULE_INFO_OFFSET;

int len_offset = HI546_MODULE_INFO_LEN_OFFSET;

// add end

pr_err("%s: hi546 otp read init  -- qiaodeli\n", __func__);

//initial  sensor

for (m = 0; m < sizeof(init_hi546_reg_array0) / (sizeof(init_hi546_reg_array0[0])); m++){

rc = e_ctrl->i2c_client.i2c_func_tbl->i2c_write(&(e_ctrl->i2c_client),

init_hi546_reg_array0[m].reg_addr, init_hi546_reg_array0[m].reg_data, MSM_CAMERA_I2C_WORD_DATA);

if (rc < 0) {

pr_err("%s: hi546 init  failed\n", __func__);

return rc;

}

}

mdelay(100);

// set to otp mode

for (m = 0; m < sizeof(init_hi546_otp_array) / sizeof(init_hi546_otp_array[0]); m++){

rc = e_ctrl->i2c_client.i2c_func_tbl->i2c_write(&(e_ctrl->i2c_client),

init_hi546_otp_array[m].reg_addr, init_hi546_otp_array[m].reg_data, MSM_CAMERA_I2C_BYTE_DATA);

mdelay(init_hi546_otp_array[m].delay);

if (rc < 0) {

pr_err("%s: hi546 to otp mode  failed\n", __func__);

return rc;

}

}

for (addr = emap->mem.addr, k = 0; k < (emap->mem.valid_size); addr++, k++) {

rc = e_ctrl->i2c_client.i2c_func_tbl->i2c_write(&(e_ctrl->i2c_client), 0x10A, (addr>>8)&0xff, MSM_CAMERA_I2C_BYTE_DATA);

rc |= e_ctrl->i2c_client.i2c_func_tbl->i2c_write(&(e_ctrl->i2c_client), 0x10B, addr & 0xff, MSM_CAMERA_I2C_BYTE_DATA);

rc |= e_ctrl->i2c_client.i2c_func_tbl->i2c_write(&(e_ctrl->i2c_client), 0x102, 1, MSM_CAMERA_I2C_BYTE_DATA);

rc |= e_ctrl->i2c_client.addr_type = MSM_CAMERA_I2C_WORD_DATA;

rc |= e_ctrl->i2c_client.i2c_func_tbl->i2c_write(&(e_ctrl->i2c_client), 0xF12, 1, MSM_CAMERA_I2C_BYTE_DATA);

rc |= e_ctrl->i2c_client.i2c_func_tbl->i2c_read_seq(&(e_ctrl->i2c_client), 0x108, memptr, 1);

rc |= e_ctrl->i2c_client.i2c_func_tbl->i2c_write(&(e_ctrl->i2c_client), 0xF12, 0, MSM_CAMERA_I2C_BYTE_DATA);

//pr_err("hi546 custom:addr:[0x%04x] value: (0x%x)\n", addr, *memptr);

memptr++;  // must

if (rc < 0) {

pr_err("%s: hi546 read failed\n", __func__);

return rc;

}

}

// add for compatible code form the camera lens id --qiaodeli

flag = e_ctrl->cal_data.mapdata[module_offset - 1];

if (flag== 0x01)

group = 1;

else if (flag == 0x13)

group = 2;

else if (flag == 0x37)

group = 3;

else {

pr_err("%s:%d invalid group=%d", __func__, __LINE__, group);

}

pr_err("dongyunfei: group=%d\n", group);

module_len_id = *((unsigned char *)e_ctrl->cal_data.mapdata + module_offset +

(group-1)*group_size + len_offset);

pr_err("dongyunfei: module_len_id=%d\n", module_len_id);

// add end

//set  to normol mode

for (m = 0; m < sizeof(hi546_otp_to_norm_mode_array)/sizeof(hi546_otp_to_norm_mode_array[0]); m++){

rc = e_ctrl->i2c_client.i2c_func_tbl->i2c_write(&(e_ctrl->i2c_client),

hi546_otp_to_norm_mode_array[m].reg_addr, hi546_otp_to_norm_mode_array[m].reg_data, 1);

if (rc < 0) {

pr_err("%s: to normal  failed\n", __func__);

return rc;

}

}

return rc;

}

以上三个数组在新添加的hi546.h文件里

./kernel/drivers/media/platform/msm/camera_v2/sensor/eeprom/hi546.h

这个文件是需要添加的,可以找模组厂商要,也可以自己看datesheet写,最好找模组厂商要,自己写不一定能写全,以上kenel部分就已经结束了,下面是vendor部分。

./vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/eeprom_libs/

需要在这个文件夹里添加一个hi546_sunrise文件夹,文件夹内容如下:

Android.mk是用来编译生成hi546_sunrise_sunrise.so库的,而hi546_sunrise_sunrise.c文件里是用来校验checkSum和调整rgb_gain的

./vendor/qcom/proprietary/common/config/device-vendor.mk

最后在这个文件里添加一个目标库就可以了

以上一个完整的OTP校准就已经全部完成了!

android otp接口,Android-高通平台调试camera的OTP参数相关推荐

  1. Android高通平台调试Camera驱动全纪录

    项目比较紧,3周内把一个带有外置ISP,MIPI数据通信,800万像素的camera从无驱动到实现客户全部需求. 1日 搭平台,建环境,编译内核,烧写代码. 我是一直在Window下搭个虚拟机登服务器 ...

  2. 请把Camera hold住 - Android高通平台调试Camera驱动全纪录

    项目比较紧,3周内把一个带有外置ISP,MIPI数据通信,800万像素的camera从无驱动到实现客户全部需求. 1日 搭平台,建环境,编译内核,烧写代码. 我是一直在Window下搭个虚拟机登服务器 ...

  3. 高通平台调试Nxp Smart PA-TFA9897

    前言 新项目对speaker的输出响度和声音质量有一定的要求,所有选择了Nxp smart PA-TFA9897,其实高通平台有WSA系列的smart PA,由于后期tuning的复杂性,选择了Nxp ...

  4. 高通android开源代码下载,高通平台开源代码下载

    1.进入codeaurora主页,https://www.codeaurora.org/ 2.选择[Projects] -> [Active Projects(Gerrit Repo)] 3.进 ...

  5. android 4.4.2 去除漫游r,Android 4.4.3应用,高通平台 去掉应用

    android 4.4.3 高通平台那些apk android 一 .packages/apps BasicMmsReceiver Bluetooth Browser Calculator Calen ...

  6. 高通平台添加或者移植一个完整的camera

    OV8865 1.kernel部分: A.kernel_driver: 把驱动文件ov8865_qtech_f8865ac.c 放到kernel/drivers/media/platform/msm/ ...

  7. android 高通平台有前途吗,华为鸿蒙计划要适配高通平台了,可以告别安卓搭载鸿蒙OS了?...

    鸿蒙走出这一步是可以想象到的,看来华为打造这个系统希望的结果是万物皆可盘呀,所以一开始就提出了开源,也就意味着这次是高通,下次就可以是联发科,甚至更多的手机品牌也完全就可以搭载!早期我们一直在说国产手 ...

  8. Android系统高通平台新增lunch选项

    Android系统高通平台新增lunch选项 创建xxx目录 device/qcom/xxx 目录里添加必要的内容 device/qcom/common/vendorsetup.sh添加 add_lu ...

  9. Android 8/9高通平台客制化虚拟导航按键隐藏

    高通平台源代码更改 diff --git a/frameworks/base/packages/SystemUI/res/values/config.xml b/frameworks/base/pac ...

最新文章

  1. 我们前端忙成狗人家后端写SQL?
  2. centos6.5配置linux dhcp
  3. 团队项目第二阶段冲刺站立会议01
  4. 正则化方法:防止过拟合,提高泛化能力
  5. 成功解决pypmml.base.PmmlError: (‘MalformedInputException‘, ‘Input length = 1‘)
  6. STM32如何查找hardfault原因
  7. JNDI数据源的使用
  8. mysql 查询优化
  9. WPF 中Frame + Page 的使用
  10. 迅雷CEO陈磊出席深圳IT领袖峰会 解析区块链未来布局
  11. mysql参数化查询为什么可以实现_为什么参数化SQL查询可以防止SQL注入?
  12. clipse中运行maven提示org/apache/maven/cli/MavenCli : Unsupported major.minor version 51.0
  13. 详解Nacos的高可用特性(转载)
  14. Manecher算法
  15. 7部署rancher步骤_Rancher发布K3s,真会玩。。
  16. Opencontrail 流的处理
  17. 在线读书——孙天泽(嵌入式设计及Linux驱动开发指南——基于ARM9处理器)
  18. Java实现阿拉伯数字转换成汉字数字
  19. 火狐浏览器打开书签 不要在新页面打开书签
  20. 「SQL面试题库」 No_55 销售分析 I

热门文章

  1. 场效应晶体管的几点使用知识!
  2. python: c_char_p指向的bitmap图像数据,通过c_char_Array最终赋值给PIL的Image对象
  3. Android 自定义Toast实现多次触发只会显示一次toast
  4. WinDbg配置和使用基础
  5. iOS 排序算法总结、二分法查找
  6. 屌丝giser成长记-大学篇
  7. placeholder在不同浏览器下的表现及兼容方法
  8. mockcpp的so加载失败问题
  9. 纯PB9开发短文本加密
  10. Java项目-Javaweb实现个人博客