Qcom平台添加 Camera 驱动(msm8909)

前言

qocm平台Android5.1 和Android8.0 (N1 msm8909)流程基本一致,Android9.0(msm8953)框架变化较大。

而展讯平台Android4.4(S2 SC9020E),框架又有所不同。

 

在msm8909平台,主摄和前摄配置基本一致,只是CSI 配置和I2C配置不同。

简介:芯片MSM8909

软件:Android-5.0/8.0 (5.0和8.0流程一致,这里以8.0为例介绍)

Sensor IC:

主摄:GC5025 500W

前摄:略

数据格式:Bayer RGGB

msm8909平台特性:

  1. 主摄:最大支持2 lane 800W像素。
  2. 前摄:最大支持1 lane 200W像素。

前言

1 Kernel 部分

1.1 主摄硬件原理图 (Rear Camera SCH)

1.2 主摄设备树配置 (Rear Camera dts cfg)

1.3 前摄部分

2 Vendor lib 驱动部分

2.1 Lib 驱动参数配置

2.2 Lib 驱动主摄、前摄的配置

3 vendor chromatix 驱动部分

3.1 Chromatix 索引配置

3.2 Chromatix 驱动效果文件配置

4 Vendor 编译选项配置

4.1 配置系统要加载的camera

4.2 宏控的使用

4.3 效果编译选项配置

4.4 lib 和 chromatix库包含编译选项

5 Tips


1 Kernel 部分

1.1 主摄硬件原理图 (Rear Camera SCH)

根据硬件接线配置,dts设备树信息.

查阅硬件主板,主摄相关接口信息如下:

由硬件原理图获取到信息:

  1. 供电,L17 2.85V,L6 8V,VEXT 2.85V(GPIO_88控制),VEXT 2V(GPIO_89)控制
  2. IIC 是 I2C-3 (GPIO_29、GPIO_30)
  3. MCLK,GPIO_26
  4. RST,  GPIO_35
  5. PWN, GPIO_34

重点关注供电脚、rst脚、pwd脚、mclk脚、CCI通道配置,I2C通道配置等。

1.2 主摄设备树配置 (Rear Camera dts cfg)

一般主摄和前摄是不同的IC,可以挂在同一路I2C上,具体哪一路要根据硬件修改。

配好后的设备树如下:

&i2c_3 { 
    /* Rear Camera */
	qcom,camera@0 {
		cell-index = <0>;
		compatible = "qcom,camera";
		reg = <0x2>;
        //qcom,special-support-sensors="ov5670_wdsen";
		qcom,csiphy-sd-index = <0>; // mipi-csi 通道配置,主摄默认0
		qcom,csid-sd-index = <0>;   // 同上
		qcom,mount-angle = <90>;    // 挂载角度
		qcom,actuator-src = <&actuator0>;   // 马达配置节点
		qcom,eeprom-src = <&eeprom0>;       // eeprom 配置节点
		qcom,led-flash-src = <&led_flash0>; // 闪光灯配置节点
		cam_vio-supply = <&pm8909_l6>;  // pin-22 IO电配置
		cam_vaf-supply = <&pm8909_l17>; // pin-24 马达用电配置	
		qcom,cam-vreg-name = "cam_vio", "cam_vaf";
		qcom,cam-vreg-type = <0 1>;
		qcom,cam-vreg-min-voltage = <0 2800000>;
		qcom,cam-vreg-max-voltage = <0 2850000>;
		qcom,cam-vreg-op-mode = <0 80000>;
		pinctrl-names = "cam_default", "cam_suspend";
		pinctrl-0 = <&cam_sensor_mclk0_default
			&cam_sensor_rear_default>;
		pinctrl-1 = <&cam_sensor_mclk0_sleep &cam_sensor_rear_sleep>;
		gpios = <&msm_gpio 26 0>, // 依次是 mclk reset pwd vana电 did数字电
			<&msm_gpio 35 0>,     // mclk pwd 脚不可更改,其他脚都可任意修改
            <&msm_gpio 34 0>,
            <&msm_gpio 88 0>,
            <&msm_gpio 89 0>;
        qcom,gpio-reset = <1>;
		qcom,gpio-standby = <2>;
	    qcom,gpio-vana = <3>; // 这是由gpio 控制的外部 LDO 的模拟电供电
	    qcom,gpio-vdig = <4>; // 这是由gpio 控制的外部 LDO 的数字电供电
		qcom,gpio-req-tbl-num = <0 1 2 3 4>;
		qcom,gpio-req-tbl-flags = <1 0 0 0 0>;
		qcom,gpio-req-tbl-label = "CAMIF_MCLK",
			"CAM_RESET1",
			"CAM_STANDBY",
			"CAM_AVDD",
			"CAM_DVDD";
		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>; // 一般 sensor 正常工作需要的时钟频率
	};
......
};

1.3 前摄部分

和主摄一致,略。

 

2 Vendor lib 驱动部分

一般lib和chromatix驱动文件厂家会提供,

若不提供,需要找一个比较相近的sensor,或同一个数据格式、同一个厂商的驱动文件上修改而来。

vendor驱动主要分三部分:

  1. lib 驱动配置部分
  2. chromatix 驱动配置部分
  3. vendor编译选项配置部分

2.1 Lib 驱动参数配置

lib 驱动路径为:

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

 adb 下位于 “vendor\lib”,格式为 libmmcamera_xxx.so

路径下共2个文件:

gc5025_lib.c  // 主要参数配置和曝光机计算函数都在这里

Android.mk   // 编译配置文件

Android.mk 中

LOCAL_SRC_FILES  := gc5025_lib.c

LOCAL_MODULE   := libmmcamera_gc5025

这里写明了,对应生成的so库为 libmmcamera_gc5025 .so

划重点,后面要考的。

以后修改了这里面的参数,可以单编单刷libmmcamera_gc5025 .so。

2.2 Lib 驱动主摄、前摄的配置

主摄和前摄的区分,以及效果文件配置组,也都在这个文件中。

vendor lib 驱动路径:

vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\sensor_libs\gc5025\gc5025_lib.c

前后摄区分代码:

static struct msm_sensor_init_params sensor_init_params = {
  .modes_supported = CAMERA_MODE_2D_B,
  .position = BACK_CAMERA_B,  // 表示主摄
  .sensor_mount_angle = SENSOR_MOUNTANGLE_90,
};

枚举变量定义:

enum camb_position_t {
	BACK_CAMERA_B,  // 主摄
	FRONT_CAMERA_B, // 前摄
	AUX_CAMERA_B = 0x100,
	INVALID_CAMERA_B,
};

 

3 vendor chromatix 驱动部分

3.1 Chromatix 索引配置

vendor lib 驱动路径:

vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\sensor_libs\gc5025\gc5025_lib.c

static struct sensor_lib_chromatix_t gc5025_chromatix[] = {
  {
    .common_chromatix = GC5025_LOAD_CHROMATIX(common),
    .camera_preview_chromatix = GC5025_LOAD_CHROMATIX(preview),   /* RES0 */
    .camera_snapshot_chromatix = GC5025_LOAD_CHROMATIX(preview),  /* RES0 */
    .camcorder_chromatix = GC5025_LOAD_CHROMATIX(preview),        /* RES0 */
  },
  {
    .common_chromatix = GC5025_LOAD_CHROMATIX(common),
    .camera_preview_chromatix = GC5025_LOAD_CHROMATIX(preview),   /* RES0 */
    .camera_snapshot_chromatix = GC5025_LOAD_CHROMATIX(preview),  /* RES0 */
    .camcorder_chromatix = GC5025_LOAD_CHROMATIX(preview),        /* RES0 */
  },
};

3.2 Chromatix 驱动效果文件配置

chromatix 驱动路径为:

vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\chromatix\0301\libchromatix\chromatix_gc5025\

adb 下位于” vendor\lib”,格式为 libchromatix_xxx.so

路径下有2个目录,简单说明:

common: 公共参数配置文件,这个是必须的

preview: 预览配置文件

Android.mk:编译选项配置文件。上面每个文件夹中,都会有一个Android.mk 文件,会包含对应的文件,并生成一个效果库。

Android.mk 中

LOCAL_SRC_FILES    := chromatix_gc5025_common.c

LOCAL_MODULE        := libchromatix_gc5025_common

对应生成 libchromatix_gc5025_common.so 效果参数库

划重点,后面要考

如有单独修改,可单编单刷验证。

其他的效果文件,配置同上,都会生成对应的效果 libchromatix_gc5025_xxx.so 库。

 

4 Vendor 编译选项配置

4.1 配置系统要加载的camera

Vendor Camera 配置路径:

vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\module\sensor_init.c

代码如:

#if defined (FEATURE_CAMERA_SENSOR_XXX) 
  #define BOARD_SENSORS \
  "ov8856_f8v05a", \
  "ov2680"
 #else
  #define BOARD_SENSORS \ // 可在同一个主摄位置,做多个sensor的兼容。前摄同理。
  "ov8865", \
  "ov5670", \
  "gc5025", \
  "ov2680", \
  "gc2355c"
 #endif

4.2 宏控的使用

FEATURE_CAMERA_SENSOR_AAA 这个宏就是项目定制的宏,

定义路径:

vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\Android.mk

使用:

# project_name, 这里是泛指,对应实际的项目名字
ifeq ($(NWY_CAMERA_SENSOR_SUPPORT), project_name)
LOCAL_CFLAGS += -DFEATURE_CAMERA_SENSOR_AAA
endif

即只要这个 XXX_CAMERA_SENSOR_SUPPORT 等于 project_name,

就会去定义 FEATURE_CAMERA_SENSOR_AAA。

FEATURE_CAMERA_SENSOR_(project_name) 定义在

device/nwy/project_name/BoardConfig.mk:200:XXX_CAMERA_SENSOR_SUPPORT := project_name

可见是项目相关联的宏,随编译的项目生效。

4.3 效果编译选项配置

和 msm8953 不同,msm8909的效果文件组配置在 gc5025_lib.c 中。

#define SENSOR_MODEL_NO_GC5025 "gc5025"
#define GC5025_LOAD_CHROMATIX(n) \
  "libchromatix_"SENSOR_MODEL_NO_GC5025"_"#n".so"
static struct sensor_lib_chromatix_t gc5025_chromatix[] = {
  {
    .common_chromatix = GC5025_LOAD_CHROMATIX(common),
    .camera_preview_chromatix = GC5025_LOAD_CHROMATIX(preview),  /* RES0 */
    .camera_snapshot_chromatix = GC5025_LOAD_CHROMATIX(preview), /* RES0 */
    .camcorder_chromatix = GC5025_LOAD_CHROMATIX(preview),       /* RES0 */
  },
  {
    .common_chromatix = GC5025_LOAD_CHROMATIX(common),
    .camera_preview_chromatix = GC5025_LOAD_CHROMATIX(preview),  /* RES0 */
    .camera_snapshot_chromatix = GC5025_LOAD_CHROMATIX(preview), /* RES0 */
    .camcorder_chromatix = GC5025_LOAD_CHROMATIX(preview),       /* RES0 */
  },
};

4.4 lib 和 chromatix库包含编译选项

vendor camera 编译配置路径:

vendor\qcom\proprietary\common\config\device-vendor.mk

// 注意,有做项目抽取的,要到对应目录修改同名文件

1、 lib 库包含

MM_CAMERA += libmmcamera_gc5025 

2、 chromatix库包含

MM_CAMERA += libchromatix_gc5025_common

MM_CAMERA += libchromatix_gc5025_preview

 

5 Tips

在msm8909 Android5.1 上,vendor 驱动包含在 system.img 中,刷 system 镜像验证。

在msm8909 Android8.1 上,vendor 驱动包含在 vendor.img 中,刷 vendor 镜像验证。

 

你再快,也永远有人比你快!Fighting ~~

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值