camera流程

原来linux-3.1.6内核在中断发生时不能同步关闭中断本身!但是可以同步关闭其他中断。其实要在中断中关闭中断本身只要用disable_irq_nosync代替disable_irq就可以了

一、kernel起来以后进行msm_sensor_driver的模块儿初始化,对dts配置进行相关的解析
  1、初始化
    platform_driver_register//注册平台驱动
      将msm_eeprom_i2c_driver挂载i2c总线上
  2、匹配驱动和设备
    compatible = "qcom,camera"和 .driver = {.name = "qcom,camera",匹配
  3、匹配成功,调用probe函数
    .probe = msm_sensor_driver_platform_probe
    解析dt信息并存储在传感器控制结构中
    填充上电时序信息

二、在Android起来以后,会启动camera 的守护进程Server,调用一系列的初始化接口,先获取sensor name,根据name去匹配相关的初始化配置,再传到底层写入到模组寄存器。
  1、vendor:
    cfg.cfgtype = CFG_EEPROM_READ_CAL_DATA;//读取数据的指令
     cfg.cfg.read_data.num_bytes = ep->eeprom_params.num_bytes;//长度
     cfg.cfg.read_data.dbuffer = ep->eeprom_params.buffer;//把数据读取到ep->eeprom_params.buffer中
    rc = ioctl(ep->fd, VIDIOC_MSM_EEPROM_CFG, &cfg);
  2、kernel:
    case VIDIOC_MSM_EEPROM_CFG:
        return msm_eeprom_config(e_ctrl, argp);//调用到这里

    case CFG_EEPROM_READ_CAL_DATA:
        CDBG("%s E CFG_EEPROM_READ_CAL_DATA\n", __func__);
        rc = eeprom_config_read_cal_data(e_ctrl, cdata);

    rc = copy_to_user(ptr_dest, e_ctrl->cal_data.mapdata,
        cdata.cfg.read_data.num_bytes);该函数的作用就是把内核空间的数据拷贝到用户空间

ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。
int ioctl(int fd, ind cmd, …);其中fd是用户程序打开设备时使用open函数返回的文件标示符,cmd是用户程序对设备的控制命令,至于后面的省略号,那是一些补充参数,一般最多一个,这个参数的有无和cmd的意义相关。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值