高通平台 点亮camera eeprom actuator

这篇文章是基于sdm429平台,和8937是比较接近的一个平台,主要概括一下如何点亮camera  eeprom    actuator,上一篇文章详细说明了如何点亮flash,有些细节这里就不说了,主要说一下需要改哪些文件

kernel下面要修改的文件就是dtsi文件

首先就是dtsi文件,这个要配置好,配置如下

qcom,camera@0 {
        cell-index = <0>;
        compatible = "qcom,camera";
        reg = <0x0>;
        qcom,csiphy-sd-index = <0>;
        qcom,csid-sd-index = <0>;
        qcom,mount-angle = <90>;
        qcom,led-flash-src = <&led_flash0>;
        qcom,eeprom-src = <&eeprom_spyro0>;
        qcom,actuator-src = <&actuator_spyro0>;
        cam_vio-supply = <&pm660_l14>;
        cam_vaf-supply = <&L19A>;
        cam_vdig-supply = <&pm660_l2>;
        qcom,cam-vreg-name = "cam_vana", "cam_vio",
                "cam_vdig", "cam_vaf";
        qcom,cam-vreg-min-voltage = <2800000 1800000 1050000 2850000>;
        qcom,cam-vreg-max-voltage = <2800000 1800000 1050000 3200000>;
        qcom,cam-vreg-op-mode = <80000 0 200000 100000>;
        pinctrl-names = "cam_default", "cam_suspend";
        pinctrl-0 = <&cam_sensor_mclk0_default
                &cam_sensor_rear_reset
                &cam_sensor_rear_vana
                &cam_sensor_rear_standby>;
        pinctrl-1 = <&cam_sensor_mclk0_sleep
                &cam_sensor_rear_reset_sleep
                &cam_sensor_rear_vana_sleep
                &cam_sensor_rear_standby_sleep>;
        gpios = <&tlmm 26 0>,
            <&tlmm 36 0>,
            <&tlmm 58 0>,
            <&tlmm 92 0>;
        qcom,gpio-reset = <1>;
        qcom,gpio-vana = <2>;
        qcom,gpio-standby = <3>;
        qcom,gpio-req-tbl-num = <0 1 2 3>;
        qcom,gpio-req-tbl-flags = <1 0 0 0>;
        qcom,gpio-req-tbl-label = "CAMIF_MCLK0",
                                "CAM_RESET0",
                                "CAM_VANA",
                                "CAM_STANDBY";
        qcom,sensor-position = <0>;
        qcom,sensor-mode = <0>;
        qcom,cci-master = <0>;
        status = "ok";
        clocks = <&clock_gcc clk_mclk0_clk_src>,
                    <&clock_gcc clk_gcc_camss_mclk0_clk>;
        clock-names = "cam_src_clk", "cam_clk";
        qcom,clock-rates = <24000000 0>;
    };

接下来vendor下面要修改的文件

\vendor\qcom\proprietary\common\config\device_vendor.mk

MM_CAMERA += libchromatix_ov13b10_4k_preview_3a
MM_CAMERA += libchromatix_ov13b10_4k_video_3a
MM_CAMERA += libchromatix_ov13b10_default_preview_3a
MM_CAMERA += libchromatix_ov13b10_default_video_3a
MM_CAMERA += libchromatix_ov13b10_hfr_60_3a
MM_CAMERA += libchromatix_ov13b10_hfr_90_3a
MM_CAMERA += libchromatix_ov13b10_hfr_120_3a
MM_CAMERA += libchromatix_ov13b10_zsl_preview_3a
MM_CAMERA += libchromatix_ov13b10_zsl_video_3a
MM_CAMERA += libchromatix_ov13b10_common
MM_CAMERA += libchromatix_ov13b10_cpp_hfr_60
MM_CAMERA += libchromatix_ov13b10_cpp_hfr_90
MM_CAMERA += libchromatix_ov13b10_cpp_hfr_120
MM_CAMERA += libchromatix_ov13b10_cpp_liveshot
MM_CAMERA += libchromatix_ov13b10_cpp_preview
MM_CAMERA += libchromatix_ov13b10_cpp_snapshot
MM_CAMERA += libchromatix_ov13b10_cpp_video
MM_CAMERA += libchromatix_ov13b10_cpp_video_4k
MM_CAMERA += libchromatix_ov13b10_hfr_60
MM_CAMERA += libchromatix_ov13b10_hfr_90
MM_CAMERA += libchromatix_ov13b10_hfr_120
MM_CAMERA += libchromatix_ov13b10_preview
MM_CAMERA += libchromatix_ov13b10_snapshot
MM_CAMERA += libchromatix_ov13b10_default_video
MM_CAMERA += libchromatix_ov13b10_default_video_4k
MM_CAMERA += libchromatix_ov13b10_postproc
MM_CAMERA += ov13b10_chromatix.xml         //xml文件
MM_CAMERA += libmmcamera_ov13b10                //camera驱动
MM_CAMERA += libactuator_dw9714_ov13b10                 //马达

其他的都是ov13b10这颗snesor的效果参数文件,这些东西都是哪里来的呢,和效果参数,驱动,马达驱动,xml文件里面的Android.mk的LOCAL_MODULE字段对应起来,保持一致就可以了。

\vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\sensor\libs

这个路径下面新建文件夹,放入sensor的驱动代码

 

\vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\chromatix\0310

这个路径下面新建文件夹,放入sensor的效果参数文件

 

vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\configs

添加一个ov13b10的xml文件,注意这个路径下面的Android.mk文件也要相应地的修改,

 

\vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\configs\msm8937.xml

这个文件里面加入对应的sensor,如下


    0
    ov13b10
    dw9714_ov13b10
   
    lm3601x
    ov13b10_chromatix//chromatix这个字段很特殊,因为我看效果参数文件的名字是chromatix_ov13b10,和这里的是前后颠倒的,这里到时候要注意下。但是其他的字段,sensorname eepromname flashname actuatorname等都是和驱动文件夹的名字是一致的。
    1
    BACK
    360
   
      0
      0x1f
      0x4320
      0
   

   
      3.83
      2.0
      1.97
      63.2
      49.0
      0.1
   

 

注意这里面3个加黑的字段  一般的后摄接在CSID  0,所以这里配0,前摄接在CSID 1  ,这里配1.

LaneMask不同的平台不一样,就拿8937平台而言,是这样子的 

5     clk1

4    clk0

3     lane3

2     lane2

1     lane1

0     lane0

确认自己的sensor  mipi是几lane的,再确认用的是那个clk。比如我这里配的是0x1f,  0001 1111  ,所以我这颗sensor是4lane,clk用的是clk0.

LaneAssign这个字段的含义是什么呢?这里解释一下就是就是MSM侧共有5个MIPI PHY通道

MSM侧共有5个MIPI PHY通道。编号分别为0、1、2、3、4,其中1为时钟通道,剩余的0 、2 、3 、4为数据通道 csi_lane_assign以4位十六进制数表示,每位取值只能是数据通道编号(即0、2、3、4,因为1是时钟通道编号,不能拿来映射)。从高位到地位依次代表着该位表示的phy通道连接到传感器(即摄像头)的数据通道3、2、1、0所以0x4320表示phy通道4连接到传感器数据通道3,phy通道3连接到数据通道2,phy通道2连接到数据通道1,phy通道0连接到数据通道0。 如果是0x3240则表示phy通道3连接到传感器数据通道3,phy通道2连接到数据通道2,phy通道4连接到数据通道1,phy通道0连接到数据通道0。 即csi_lane_assign的每一位的值就是phy的通道号,不是数据通道编号。简单说就是phy通道4就是cpu侧的数据通道3,phy通道3就是cpu侧的数据通道2,phy通道2就是cpu侧的数据通道1,phy通道0就是cpu侧的数据通道0,phy通道1就是cpu侧的时钟通道。

差不多就这么多

----------------------------------------------------------------------------------------------------------------------------------------------------------------

eeprom

为了保持模组的一致性,搞的这个玩意儿,也没什么特别的,就是生产一批模组,然后挑出来能代表这一批模组平均值的几个模组,我们叫做黄金模组,我们为了保持模组的一致性,为啥要保持模组的一致性呢???因为生产的一批模组有很多,不能保证他们的效果都是一样的啊,所有我们要有个标准,那标准是什么呢???那就是我们挑选出来的黄金模组及时标准,其他的模组都要想这个黄金模组靠近,怎么靠近呢???那就是进行计算,看每一颗模组和这个黄金模组的值差不多(lsc 矫正镜头效果    awb   af)然后把这些值烧到寄存器里面,后面我们读出来之后,进行计算,就是这样子的。

otp分为2种

一种是sensor端otp,也就是把数据烧录在sensor的寄存器里面

另一种是平台端otp,其实就是多了一个外挂的芯片,把这些数据烧录在外挂的芯片里面

 

,接下来说要修改那些文件

kernel下面当然还是dtsi文件,配置如下

eeprom_spyro1: qcom,eeprom@1 {
        cell-index = <1>;
        reg = <0x1>;
        qcom,eeprom-name = "sunny_8865";
        compatible = "qcom,eeprom";
        qcom,slave-addr = <0x6c>;
        qcom,cci-master = <0>;
        qcom,num-blocks = <8>;

        qcom,page0 = <1 0x0100 2 0x01 1 1>;
        qcom,poll0 = <0 0x0 2 0x0 1 0>;
        qcom,mem0 = <0 0x0 2 0x0 1 0>;

        qcom,page1 = <1 0x5002 2 0x00 1 0>;
        qcom,poll1 = <0 0x0 2 0x0 1 0>;
        qcom,mem1 = <0 0x0 2 0x0 1 0>;

        qcom,page2 = <1 0x3d84 2 0xc0 1 0>;
        qcom,poll2 = <0 0x0 2 0x0 1 0>;
        qcom,mem2 = <0 0x0 2 0x0 1 0>;

        qcom,page3 = <1 0x3d88 2 0x70 1 0>;
        qcom,poll3 = <0 0x0 2 0x0 1 0>;
        qcom,mem3 = <0 0x0 2 0x0 1 0>;

        qcom,page4 = <1 0x3d89 2 0x10 1 0>;
        qcom,poll4 = <0 0x0 2 0x0 1 0>;
        qcom,mem4 = <0 0x0 2 0x0 1 0>;

        qcom,page5 = <1 0x3d8a 2 0x70 1 0>;
        qcom,poll5 = <0 0x0 2 0x0 1 0>;
        qcom,mem5 = <0 0x0 2 0x0 1 0>;

        qcom,page6 = <1 0x3d8b 2 0xf4 1 0>;//从这里可以看出,otp map的其实地址是7010,结束地址是70f4
        qcom,poll6 = <0 0x0 2 0x0 1 0>;
        qcom,mem6 = <0 0x0 2 0x0 1 0>;

        qcom,page7 = <1 0x3d81 2 0x01 1 10>;
        qcom,poll7 = <0 0x0 2 0x0 1 1>;
        qcom,mem7 = <1536 0x7010 2 0 1 0>;

        cam_vdig-supply = <&pm660_l3>;
        cam_vana-supply = <&pm660_l7>;
        cam_vio-supply = <&pm660_l6>;
        cam_vaf-supply = <&pm660_l17>;
        qcom,cam-vreg-name = "cam_vdig", "cam_vio",
                "cam_vana", "cam_vaf";
        qcom,cam-vreg-min-voltage = <1200000 0 2800000 2850000>;
        qcom,cam-vreg-max-voltage = <1200000 0 2800000 3200000>;
        qcom,cam-vreg-op-mode = <105000 0 80000 100000>;
        qcom,gpio-no-mux = <0>;
        pinctrl-names = "cam_default", "cam_suspend";
        pinctrl-0 = <&cam_sensor_mclk2_default
            &cam_sensor_front1_default>;
        pinctrl-1 = <&cam_sensor_mclk2_sleep
            &cam_sensor_front1_sleep>;
        gpios = <&tlmm 28 0>,
            <&tlmm 40 0>,
            <&tlmm 39 0>;
        qcom,gpio-reset = <1>;
        qcom,gpio-standby = <2>;
        qcom,gpio-req-tbl-num = <0 1 2>;
        qcom,gpio-req-tbl-flags = <1 0 0>;
        qcom,gpio-req-tbl-label = "CAMIF_MCLK2",
                      "CAM_RESET2",
                      "CAM_STANDBY2";
        qcom,cam-power-seq-type = "sensor_vreg", "sensor_vreg",
            "sensor_vreg",
            "sensor_gpio", "sensor_gpio" , "sensor_clk";
        qcom,cam-power-seq-val = "cam_vdig", "cam_vana", "cam_vio",
            "sensor_gpio_reset", "sensor_gpio_standby",
            "sensor_cam_mclk";
        qcom,cam-power-seq-cfg-val = <1 1 1 1 1 24000000>;
        qcom,cam-power-seq-delay = <1 1 1 30 30 5>;
        status = "disabled";
        clocks = <&clock_gcc clk_mclk2_clk_src>,
            <&clock_gcc clk_gcc_camss_mclk2_clk>;
        clock-names = "cam_src_clk", "cam_clk";
        qcom,clock-rates = <19200000 0>;
    };

qcom,camera@0 {
        cell-index = <0>;
        compatible = "qcom,camera";
        reg = <0x0>;
        qcom,csiphy-sd-index = <0>;
        qcom,csid-sd-index = <0>;
        qcom,mount-angle = <90>;
        qcom,led-flash-src = <&led_flash0>;
        qcom,eeprom-src = <&eeprom_spyro0>;
        qcom,actuator-src = <&actuator_spyro0>;
        cam_vio-supply = <&pm660_l14>;
        cam_vaf-supply = <&L19A>;

上面这些page的信息要跟snesor保持一致,和FAE沟通清楚

上电和sensor保持一致就好

 

\vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\eeprom\libs

路径下面添加eeprom驱动代码,新建文件夹,添加eeprom驱动文件

 

device_vendor.mk文件添加

MM_CAMERA += libmmcamera_ov13b10_eeprom

 

\vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\configs\msm8937.xml

和对应sensor绑定在一起

\kernel\msm-4.9\drivers\media\platform\msm\camera_v2\sensor\eeprom\msm_eeprom.c

数据首先是在驱动里面读出来,然后传到vendor下面的驱动里面,在msm_eeprom.c文件里面读出来otp数据,直接在kernel lo里面搜索memory_data,kernel数据保证读成功,接下里再检查vendor驱动的数据

关于otp的就这么多

------------------------------------------------------------------------------------------------------------------------------------------------------------------

接下来看马达的,一个套路

首先是dtsi文件

actuator_spyro0: qcom,actuator@0 {
        cell-index = <0>;
        reg = <0x0>;
        compatible = "qcom,actuator";
        qcom,cci-master = <0>;
        cam_vaf-supply = <&pm660_l19>;
        qcom,cam-vreg-name = "cam_vaf";
        qcom,cam-vreg-min-voltage = <2850000>;
        qcom,cam-vreg-max-voltage = <3200000>;
        qcom,cam-vreg-op-mode = <80000>;
    };

qcom,camera@0 {
        cell-index = <0>;
        compatible = "qcom,camera";
        reg = <0x0>;
        qcom,csiphy-sd-index = <0>;
        qcom,csid-sd-index = <0>;
        qcom,mount-angle = <90>;
        qcom,led-flash-src = <&led_flash0>;
        qcom,eeprom-src = <&eeprom_spyro0>;
        qcom,actuator-src = <&actuator_spyro0>;
        cam_vio-supply = <&pm660_l14>;

当然和后摄绑定在一起的

接下来就是vendor下面的驱动文件了。

Z:\code\z7777\HLOS\vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\actuator\libs

新建文件夹,放入驱动文件,当然对应的device_vendor.mk文件也要添加

MM_CAMERA += libactuator_dw9714_gc8034    

 

然后就是xml文件里面和后摄绑定,总体上大概就是这么多。

----------------------------------------------------------------------------------------------------------------------------------------------------------------

注意vendor下面所有驱动文件的入口函数,这个要注意

注意查看out/target/product/*/cendor/lib下面有没有生成对应的库文件

注意在sensor.c    eeprom.c    actuator.c  flash.c文件里面都会加载对应的库文件,如果这些库文件都加载成功了,那么sensor也差不多点亮了

 

注意看有没有匹配上id   都是在kernel的驱动文件里面,match_id

大概就是这么多,工作2年了,才想起来写这些知识,之前做mtk的时候没有写,现在开始做高通平台开始写

 

 

你可能感兴趣的:(高通平台 点亮camera eeprom actuator)