高通平台 Camera 之 MCLK 配置

前言
MCLK 是主控芯片 提供给 cam sensor的正常工作的频率,

Qcom 平台一般未24MHz,由其他时钟源分频而来,实测在23.8MHz左右。

在打开相机的时候,才可以测到这个时钟。

cam snesor 可以使用平台提供的时钟或者自带时钟源,但软件上配置要一致。

平台时钟源频率可以修改,若没有可以新增一组。

硬件平台:msm8909、msm8953

软件平台:Android8.1、Android9.0

参考文档:

KBA_170619001341_3__Camera_How_to_change_MCLK_driv.pdf

目录

前言

调试 查看 cam mclk

调试 查看 mclk 频率

调试 修改 mclk 频率

调试 修改 mclk 驱动能力

调试 打开 mclk 相关的驱动 log

调试 查看 cam mclk


  TIMER_CLK 指摄像头传感器所连接的PHY 接口的工作频率。

例如,PHY0 CAMSS_PHY0_CSI0PHYTIMER_CLK。

路径:

kernel/arch/arm/boot/dts/msm/msmXXXX-camera.dtsi

可以在上述文件中设置,其中XXX 指正在使用MSM 芯片组。

另外,也可在摄像头数据流传输期间确认,方法是通过adb shell 检查相应的时钟信息。

可通过命令提示窗口发出以下命令以确认PHY0 定时器时钟值: /* msm8909 Android5.0/8.0 */

指令:

  adb root
  adb remount
  adb shell
  cd /sys/kernel/debug/clk/gcc_camss_csi0phytimer_clk
  cd /sys/kernel/debug/clk/gcc_camss_mclk0_clk/
  cat measure
  200000146 
  24000292 
调试 查看 mclk 频率
camera 运行的时候,这个值就是 mclk的输出时钟频率(默认23800000)

adb shell cat sys/kernel/debug/clk/gcc_camss_mclk0_clk/measure
补充:

msm8909 默认 24M 具体配置在 kernel/drivers/clk/qcom/clock-gcc-8909.c
修改方式如下,例 修改为 27MHz
查看当前mclk的信息

adb shell
/sys/kernel/debug/clk/gcc_camss_mclk0_clk
echo 1 > enable  // 让mclk直接输出camera正常工作频率的时钟
cat measure     // 在camera 正常工作的时候 可以查看当前时钟频率
cat list_rates     // 查看当前mclk支持的频率列表
调试 修改 mclk 频率
camera 修改默认 mclk 时钟配置 // msm8909

代码如:

Kernel 修改时钟源

  kernel/drivers/clk/qcom/clock-gcc-8909.c
  @@ -837,6 +837,12 @@ static struct rcg_clk camss_gp1_clk_src = {
   static struct clk_freq_tbl ftbl_gcc_camss_mclk0_1_clk[] = {
    F( 24000000,    gpll2,  1,  1,  33),
  + F( 27000000,    gpll0,  1, 2, 59),
  +/* Begin: add by sys for set camera0 mclk 27MHz */
  + // set cma0_mclk 27MHz add by sys
  + // F(f, s, div, m, n)
  + // target clock=(source clock/div)*(M/N), 27=(800/1)*(2/59)
  +/* End:   add by sys for set camera0 mclk 27MHz */
    F( 66670000,    gpll0,  12, 0,  0),
    F_END
   };
vendor 修改 lib 驱动中的mclk 配置

  /vendor/qcom/proprietary/mm-camera/mm-camera2/
media-controller/modules/sensors/sensor_libs/ov8865_hct/ov8865_hct_lib.c
  @@ -143,7 +143,7 @@ static struct msm_sensor_power_setting power_setting[] = {
     {
       .seq_type = SENSOR_CLK,
       .seq_val = SENSOR_CAM_MCLK,
  -    .config_val = 24000000,
  +    .config_val = 27000000, //24000000,
       .delay = 10,
     },
调试 修改 mclk 驱动能力
        /*sensors */
        cam_sensor_mclk0_default: cam_sensor_mclk0_default {
            /* MCLK0 */
            mux {
                /* CLK, DATA */
                pins = "gpio26";
                function = "cam_mclk";
            };
            config {
                pins = "gpio26";
                bias-disable; /* No PULL */
                //* 2 mA */ /* change to 4mA, 2, 4, 6, 8, 10… max is 16mA*/
                // 默认2ma,最大可修改为16ma
                drive-strength = <2>; /* 2 MA */
            };
        };
调试 打开 mclk 相关的驱动 log
路径:

kernel\msm-4.9\drivers\media\platform\msm\camera_v2\common\cam_soc_api.c

代码如:

-#define CDBG(fmt, args...) pr_debug(fmt, ##args)
+#define CDBG(fmt, args...) pr_err(fmt, ##args)

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
高通平台上,配置相机相关的设备树源代码(Device Tree Source Include,DTSI)是一种常见的方法。通过配置DTSI,可以定义相机的硬件功能、接口以及其他相关属性。这里是一个示例高通相机DTSI配置的一般结构: 1. 首先,需要定义相机的节点,例如: ``` camera@0 { compatible = "qcom,camera"; reg = <0x0>; ... }; ``` 在这个节点中,`compatible`属性定义了相机的兼容性字符串,`reg`属性定义了相机的注册地址。 2. 接下来,配置相机所需的时钟和电源,例如: ``` clocks = <&camera_clk>; clock-names = "xclk", "mclk"; power-supply = <&camera_vdd>; ``` 在这个示例中,`clocks`属性定义了相机所需的时钟源,`clock-names`属性定义了时钟的名称,`power-supply`属性定义了相机的电源。 3. 然后,配置相机的传感器和接口,例如: ``` sensor@0 { compatible = "qcom,sensor"; reg = <0x0>; ... }; port { sensor = <&sensor>; ... }; ``` 在这个示例中,`sensor`节点定义了相机所使用的传感器,`port`节点定义了相机的接口。 4. 最后,配置相机所支持的功能和属性,例如: ``` properties { ... }; ``` 在这个示例中,`properties`节点定义了相机的各种功能和属性。 注意,以上只是一个简单的示例,实际的配置可能更为复杂,具体的配置内容需要根据具体的硬件平台和相机驱动来确定。具体的高通相机DTSI配置可以参考高通的官方文档和相应的开发板资料。 https://www.codeaurora.org/

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值