[RK3128][Android 6.0] 新增一个CIF Camera

来源:互联网 发布:red hat linux介绍 编辑:程序博客网 时间:2024/05/22 08:16
硬件平台:RK3128
Android 版本:6.0

Kernel 版本:3.10.92


本文以 gc2145 为例。


一、添加驱动

将要添加 camera 的驱动文件 gc2145.c 复制到 kernel/drivers/media/video/下,修改Makefile。


二、添加宏定义

在 kernel/arch/arm/mach-rockchip/rk_camera_sensor_info.h 中添加:
#define RK29_CAM_SENSOR_GC2145 gc2145 //sensor 名字,用于设备注册以及驱动标识
#define RK29_CAM_SENSOR_NAME_GC2145 "gc2145" //Sensor 名字对应的字符串
#define gc2145_FULL_RESOLUTION 0x200000 //Sensor 对应的全分辨率
#define gc2145_I2C_ADDR 0x78 //i2c 地址
#define gc2145_PWRDN_ACTIVE 0x01 //Sensor powerdown 引脚的有效电平

#define gc2145_PWRSEQ sensor_PWRSEQ_DEFAULT //Sensor 的上电时序,默认采用 sensor_PWRSEQ_DEFAULT


在 kernel/include/media/v4l2-chip-ident.h 中定义一个 Sensor 对应的 v4l2 识别号,例如:

V4L2_IDENT_GC2145 = 64118,


三、配置 dts

在 kernel/arch/arm/boot/dts/rk3128-cif-sensor.dtsi 定义摄像头列表:


rk3128_cif_sensor: rk3128_cif_sensor{
compatible = "rockchip,sensor";
status = "okay";
CONFIG_SENSOR_POWER_IOCTL_USR = <1>;
CONFIG_SENSOR_RESET_IOCTL_USR = <0>;
CONFIG_SENSOR_POWERDOWN_IOCTL_USR = <0>;
CONFIG_SENSOR_FLASH_IOCTL_USR = <0>;

CONFIG_SENSOR_AF_IOCTL_USR = <0>;


gc2145_b{
is_front = <0>;
//rockchip,power = <&gpio2 GPIO_B2 GPIO_ACTIVE_HIGH>;
rockchip,powerdown = <&gpio3 GPIO_D7 GPIO_ACTIVE_HIGH>;
pwdn_active = <gc2145_PWRDN_ACTIVE>;
//pwr_active = <PWR_ACTIVE_HIGH>;
rockchip,reset = <&gpio3 GPIO_C5 GPIO_ACTIVE_HIGH>;
rst_active = <0>;
mir = <0>;
flash_attach = <0>;
resolution = <gc2145_FULL_RESOLUTION>;
powerup_sequence = <gc2145_PWRSEQ>;
orientation = <0>;
i2c_add = <gc2145_I2C_ADDR>;
i2c_rata = <100000>;
i2c_chl = <2>;
cif_chl = <0>;
mclk_rate = <24>;

};


gc2145{
is_front = <1>;
//rockchip,power = <&gpio2 GPIO_B2 GPIO_ACTIVE_HIGH>;
rockchip,powerdown = <&gpio3 GPIO_B3 GPIO_ACTIVE_HIGH>;
pwdn_active = <gc2145_PWRDN_ACTIVE>;
//pwr_active = <PWR_ACTIVE_HIGH>;
rockchip,reset = <&gpio3 GPIO_C5 GPIO_ACTIVE_HIGH>;
rst_active = <0>;
mir = <0>;
flash_attach = <0>;
resolution = <gc2145_FULL_RESOLUTION>;
powerup_sequence = <gc2145_PWRSEQ>;
orientation = <0>;
i2c_add = <gc2145_I2C_ADDR>;
i2c_rata = <100000>;
i2c_chl = <2>;
cif_chl = <0>;
mclk_rate = <24>;
};

};


dts 属性解释:
is_front: 0: 后置摄像头,1: 前置摄像头
rockchip,powerdown: 定义该摄像头对应的 powerdown gpio
pwdn_active: powerdown 的有效电平
mir: 0: 不支持镜像,1: 支持镜像,
resolution: 最大的分辨率
orientation: 旋转角度,0: 0 度, 90: 90 度, 180: 180 度, 270: 270 度
i2c_add: 摄像头的 I2C 地址
i2c_rata: I2C 频率,单位 Hz
i2c_chl: I2C 通道号
cif_chl: cif 控制器信息,rk312x 仅有 cif0

mclk_rate: 传感器时钟频率,单位:MHz


最后,在 dts 中启用 CIF:
&rk3128_cif_sensor{
status = "okay";

};


注意:gc2145_b表示后摄像头,因为前后均为gc2145,以此区分,系统根据powerdown来区分前后摄。

原创粉丝点击