MTK平台安卓Qcamera驱动移植——sensor部分

平台MTK676X 安卓:Q/10.0

添加驱动程序文件

将模组厂商提供的驱动程序及调试参数文件拷贝到以下目录.厂商可能会自行客制化,但都是kernel和vendor两处下面,不一定和下面列出的一模一样。两个文件夹需要的文件一般提供的时候就会分开,分别拷入就好。
vendor/mediatek/proprietary/custom/kxxx/ hal/imgsensor/gc8034_kxxx_mipi_raw/

kernel-4.9 / drivers/misc/mediatek/imgsensor/src/mt6761/camera_project/kxxx/v1/gc8034_kxxx_mipi_raw/

修改项目配置文件

该部分为添加sensor的基本信息进项目的几个配置文件中,注意后面的文件会引用到该出的定义,字符串要一致。
/device/mediateksample/ {project} / ProjectConfig.mk

...
CUSTOM_HAL_IMGSENSOR =  gc8034_kxxx_mipi_raw
CUSTOM_HAL_MAIN_IMGSENSOR = gc8034_kxxx_mipi_raw
CUSTOM_KERNEL_IMGSENSOR =  gc8034_kxxx_mipi_raw
CUSTOM_KERNEL_MAIN_IMGSENSOR = gc8034_kxxx_mipi_raw
...

在上述配置中,如果要点多颗sensor 在每一项后面添加即可 ,空格隔开。
在仅点亮sensor的时候,可不配置lens,otp,flsah等,此时应将上述文件里lens配置的均配置为:dummy_lens。不能空着不填。

/kernel-4.9/arch/arm64/configs/ {project}_debug_defconfig
/kernel-4.9/arch/arm64/configs /{project}_defconfig

CONFIG_CUSTOM_KERNEL_IMGSENSOR="gc8034_kxxx_mipi_raw"

在这上述两个文件里配置是一模一样的,保持一致就可以了。

添加sensor定义

device/mediatek/common/kernel-headers/kd_imgsensor.h,

...
#define GC8034_KXXX_SENSOR_ID 0x8044
...
#define SENSOR_DRVNAME_GC8034_KXXX_MIPI_RAW   "gc8034_kxxx_mipi_raw"
...

kernel-4.9/drivers/misc/mediatek/imgsensor/inc/kd_imgsensor.h

...
#define GC8034_Kxxx_SENSOR_ID               0x8044
...
#define SENSOR_DRVNAME_GC8034_KXXX_MIPI_RAW     "gc8034_kxxx_mipi_raw"
...

可以看到,上面两处的配置是一样的,也必须一致。

/kernel-4.9/drivers/misc/mediatek/imgsensor/src/common/v1/imgsensor_sensor_list.h

...
UINT32 GC8034_KXXX_MIPI_RAW_SensorInit(struct SENSOR_FUNCTION_STRUCT **pfFunc);
...

/kernel-4.9/drivers/misc/mediatek/imgsensor/src/common/v1/imgsensor_sensor_list.c

...
#if defined(GC8034_KXXX_MIPI_RAW)
	{GC8034_KXXX_SENSOR_ID, SENSOR_DRVNAME_GC8034_KXXX_MIPI_RAW, GC8034_KXXX_MIPI_RAW_SensorInit},
#endif
...

/vendor/mediatek/proprietary/custom/mt6761/hal/imgsensor_src/ sensorlist.cpp

...
#if defined(GC8034_KXXX_MIPI_RAW)
    RAW_INFO(GC8034_KXXX_SENSOR_ID, SENSOR_DRVNAME_GC8034_KXXX_MIPI_RAW, NULL),
#endif
...

注意:以上两个文件中的配置为{sensor ID,sensor name,sensor init function}

上电配置(参考相应sensor的datasheet)

sensor上电顺序
/drivers/misc/mediatek/imgsensor/src/{platform}/camera_hw/imgsensor_cfg_table.c

struct IMGSENSOR_HW_CFG imgsensor_custom_config[] = {
	{
		IMGSENSOR_SENSOR_IDX_MAIN,
		IMGSENSOR_I2C_DEV_0,
		{
			{IMGSENSOR_HW_ID_MCLK, IMGSENSOR_HW_PIN_MCLK},
			{IMGSENSOR_HW_ID_REGULATOR, IMGSENSOR_HW_PIN_DVDD},
			{IMGSENSOR_HW_ID_GPIO, IMGSENSOR_HW_PIN_AVDD},
			{IMGSENSOR_HW_ID_REGULATOR, IMGSENSOR_HW_PIN_DOVDD},
			{IMGSENSOR_HW_ID_GPIO, IMGSENSOR_HW_PIN_PDN},
			{IMGSENSOR_HW_ID_GPIO, IMGSENSOR_HW_PIN_RST},
			{IMGSENSOR_HW_ID_NONE, IMGSENSOR_HW_PIN_NONE},
		},
	},
	...
	}
...
...
struct IMGSENSOR_HW_POWER_SEQ sensor_power_sequence[] = {
...
#if defined(GC8034_KXXX_MIPI_RAW)
		{
			SENSOR_DRVNAME_GC8034_KXXX_MIPI_RAW,
			{
				
				{PDN, Vol_Low, 0},
				{RST, Vol_Low, 0},
				{DOVDD, Vol_1800, 1},
				{DVDD, Vol_1200, 1},
				{AVDD, Vol_2800, 1},
                 {SensorMCLK, Vol_High, 1},
				{AFVDD, Vol_2800, 1},
				{PDN, Vol_High, 1},
				{RST, Vol_High, 5}
			},
		},
#endif
...
}

上面供电配置指明是PMIC直接供电还是LDO供电,sensor供电配置指明上电顺序,电压,延迟时间。
上电顺序、电压是比较重要的,严格按照datasheet上的配置,不然很可能点不亮,延迟时间的话没有绝对,按照datasheet上的适当延迟即可。

使用LDO供电的,需要配置GPIO口来控制。
举个例子 AVDD需要LDO供电。首先在原理图上看到AVDD是需要LDO供电,顺着找到其GPIO的编号,查询该平台GPIO表,找到该GPIO编号如W5,其对应是GPIO99,然后在
kernel-4.9 / arch/arm/boot/dts/cust_mt6761_camera.dtsi
直接在里面配置或者在dct tool里面打开dts文件,配置后,会在编译时自动生成dtsi文件。

camera_pins_cam_ldo_rear_vcama_0: cam0@vcama0 {
		pins_cmd_dat {
			pinmux = <PINMUX_GPIO99__FUNC_GPIO99>;
			slew-rate = <1>;
			output-low;
		};
	};
	camera_pins_cam_ldo_rear_vcama_1: cam0@vcama1 {
		pins_cmd_dat {
			pinmux = <PINMUX_GPIO99__FUNC_GPIO99>;
			slew-rate = <1>;
			output-high;
		};
	};

工具目录
dct path:\vendor\mediatek\proprietary\scripts\dct\ DrvGen.exe

配置I2C总线
使用上述工具打开对应的dws文件,进行配置。
dws path: kernel-4.9\drivers\misc\mediatek\dws\mt6761
注意:在一条总线上的设备,它们的地址不能相同。

结尾:DrvGen工具很强大可以配置供电可以配置I2C等,配好后保存即可,变异的时候会编出需要的.dtsi文件,可以不用自己点生成文件。

注意各级.mk文件,确保所有修改均能正确编译到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值