camx 马达的MSM_ACTUATOR_WRITE_DAC 操作

为什么要分析 MSM_ACTUATOR_WRITE_DAC

目前的camx源码 省略了hw_mask 的处理。 一般来说 hw_mask 是0 ,但是对于非0情况 就会出现异常

mm-camera MSM_ACTUATOR_WRITE_DAC

驱动的处理

   	case MSM_ACTUATOR_WRITE_DAC:
   		value = (next_lens_position <<
   		write_arr[i].data_shift) |
   		((hw_dword & write_arr[i].hw_mask) >>
   		write_arr[i].hw_shift);
   		if (write_arr[i].reg_addr != 0xFFFF) {
   			i2c_byte1 = write_arr[i].reg_addr;
   			i2c_byte2 = value;
   		} else {
   			i2c_byte1 = (value & 0xFF00) >> 8;
   			i2c_byte2 = value & 0xFF;
   		}
   		i2c_tbl.reg_addr = i2c_byte1;
   		i2c_tbl.reg_data = i2c_byte2;
   		i2c_tbl.delay = delay;
   		a_ctrl->i2c_tbl_index++;

   		reg_setting.reg_setting = &i2c_tbl;
   		reg_setting.data_type = a_ctrl->i2c_data_type;
   		rc = a_ctrl->i2c_client.
   			i2c_func_tbl->i2c_write_table_w_microdelay(
   			&a_ctrl->i2c_client, &reg_setting);
   		if (rc < 0) {
   			pr_err("i2c write error:%d\n", rc);
   			return rc;
   		}
   		break;

马达dw9714设置

      .reg_tbl =
     {
       .reg_tbl_size = 1,
       .reg_params =
       {
         {
           .reg_write_type = ACTUATOR_WRITE_DAC,
           .hw_mask = 0x0000000F,
           .reg_addr = 0xFFFF,
           .hw_shift = 0,
           .data_shift = 4,
         },
       },
     },

camx MSM_ACTUATOR_WRITE_DAC

驱动处理

            case ActuatorOperation::WRITE_DAC_VALUE:
               pWriteCmd                  = reinterpret_cast<CSLSensorI2CRandomWriteCmd*>
                                            (static_cast<BYTE*>(pCmdBuffer) + offset);
               pWriteCmd->header.count    = 1;
               pWriteCmd->header.opcode   = CSLSensorI2COpcodeRandomWrite;
               pWriteCmd->header.cmdType  = CSLSensorCmdTypeI2CRandomRegWrite;
               pWriteCmd->header.dataType = static_cast<UINT8>(pRegConfigTable->registerParam[i].regDataType);
               pWriteCmd->header.addrType = static_cast<UINT8>(pRegConfigTable->registerParam[i].regAddrType);

               pWriteCmd->regValPairs[0].reg = pRegConfigTable->registerParam[i].registerAddr;
               pWriteCmd->regValPairs[0].val = targetPositionDAC << pRegConfigTable->registerParam[i].dataShift;
               offset += sizeof(CSLSensorI2CRandomWriteCmd);
               break;

马达dw9714设置

  <!--Sequence of register configuration -->
 <registerConfig>
   <!--Actuator register configuration -->
   <registerParam>
     <!--Register address / data size in bytes -->
     <regAddrType range="[1,4]">1</regAddrType>
     <!--Register address / data size in bytes -->
     <regDataType range="[1,4]">1</regDataType>
     <!--Register address that is accessed -->
     <registerAddr>0xFFFF</registerAddr>
     <!--Register data to be programmed -->
     <registerData>0</registerData>
     <!--Actuator operations
         Supported operations are: WRITE_HW_DAMP, WRITE_DAC, WRITE, WRITE_DIR_REG, POLL, READ_WRITE -->
     <operation>WRITE_DAC_VALUE</operation>
     <!--Delay in micro seconds -->
     <delayUs>0</delayUs>
     <!--Hardware mask -->
     <hwMask>0x0000000F</hwMask>
     <!--Number of bits to shift for HW -->
     <hwShift>0</hwShift>
     <!--Number of bits to shift for data -->
     <dataShift>4</dataShift>
   </registerParam>
 </registerConfig>

总结

mm-camera架构成熟 对hwMask有进行处理
如果需要处理hwMask,思路就是对照mm-camera 打patch
马达还是那个马达 工作流程没有变

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值