Visão Geral
Este artigo detalha o processo de integração e habilitação de um atuador (motor) de câmera dentro do framework CamX em plataformas Qualcomm. A configuração envolve a modificação de arquivos em quatro diretórios principais do repositório de código-fonte.
Os diretórios chave são:
1. Configurações específicas do modelo do atuador
vendor/qcom/proprietary/chi-cdk/oem/qcom/actuator
2. Configurações do módulo do sensor da câmera
vendor/qcom/proprietary/chi-cdk/oem/qcom/module
3. Definições de compilação para os drivers dos sensores
vendor/qcom/proprietary/chi-cdk/tools/buildbins
4. Arquivos de Device Tree (dtsi) para sequência de alimentação
vendor/qcom/proprietary/camera-devicetree
Análise Detalhada das Modificações
1) Diretório de Configuração do Atuador (actuator)
Este diretório contém os arquivos XML de configuração para diferentes modelos de atuadores. As informações necessárias, como o endereço I2C e os tipos de energia, são fornecidas pelo fabricante do módulo de câmera.
Exemplo de estrtuura de um arquivo de configuração de atuador:
<actuatorDriver
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../api/sensor/camxactuatordriver.xsd">
<module_version major_revision="1" minor_revision="0" incr_revision="0"/>
<slaveInfo>
<actuatorName>nome_modelo_atuador</actuatorName>
<slaveAddress>0x18</slaveAddress>
<i2cFrequencyMode>FAST</i2cFrequencyMode>
<actuatorType>VCM</actuatorType>
<dataBitWidth>10</dataBitWidth>
<powerUpSequence>
<powerSetting>
<configType>VAF</configType>
<configValue>1</configValue>
<delayMs>10</delayMs>
</powerSetting>
</powerUpSequence>
<powerDownSequence>
<powerSetting>
<configType>VAF</configType>
<configValue>0</configValue>
<delayMs>1</delayMs>
</powerSetting>
</powerDownSequence>
</slaveInfo>
<!-- ... demais parâmetros de registro ... -->
</actuatorDriver>
2) Diretório de Configuração do Módulo (module)
Arquivos neste diretório descrevem a composição de um módulo de imagem completo, assotiondo um sensor, atuador, EEPROM e outros componentes.
Exemplo de configuração de um módulo:
<?xml version="1.0" encoding="utf-8" ?>
<cameraModuleData ...>
<moduleGroup>
<moduleConfiguration description="Configuração do Módulo">
<cameraId>0</cameraId>
<moduleName>nome_fabricante</moduleName>
<sensorName>nome_sensor_câmera</sensorName>
<actuatorName>nome_modelo_atuador</actuatorName>
<eepromName>nome_eeprom</eepromName>
<flashName>nome_flash</flashName>
<chromatixName>nome_chromatix</chromatixName>
<position>REAR</position>
<CSIInfo description="Informação CSI">
<laneAssign>0x3210</laneAssign>
<isComboMode>0</isComboMode>
</CSIInfo>
<lensInfo description="Informação da Lente">
<focalLength>4.04</focalLength>
<fNumber>2.0</fNumber>
<!-- ... outros parâmetros ópticos ... -->
</lensInfo>
</moduleConfiguration>
</moduleGroup>
</cameraModuleData>
3) Diretório de Definições de Compilação (buildbins)
Este diretório contém arquivos YAML que mapeiam quais arquivos XML de configuração devem ser compialdos em uma biblioteca compartilhada (SO) específica para cada sensor.
Exemplo de entrada em um arquivo de compilação:
sensor_drivers:
- com.qti.sensormodule.fabricante_nome_sensor:
- sensor/nome_sensor/nome_sensor.xml
- module/nome_modulo_module.xml
- actuator/nome_modelo_actuator.xml
- eeprom/nome_eeprom.xml
4) Diretório de Device Tree (camera-devicetree)
Arquivos DTSI neste diretório definem a configuração de hardware, como a sequência de alimentação, os controladores CCI usados e as referências a outros componentes (atuador, flash). Modificações aqui requerem a compilação da imagem DTBO.
Exemplo de nó para um atuador no device tree:
&cam_cci0 {
atuador_principal: qcom,actuator0 {
cell-index = <0>;
compatible = "qcom,actuator";
cci-master = <0>;
cam_vaf-supply = <®ulador_vaf>;
regulator-names = "cam_vaf";
rgltr-cntrl-support;
rgltr-min-voltage = <2856000>;
rgltr-max-voltage = <3104000>;
rgltr-load-current = <100000>;
};
};
A referência ao atuador é então feita no nó do sensor correspondente:
qcom,cam-sensor0 {
// ... outras configurações ...
actuator-src = <&atuador_principal>;
// ...
};