概述
平台MTK676X 安卓:Q/10.0
1. 添加驱动程序文件
将模组厂商提供的驱动程序及调试参数文件拷贝到以下目录.厂商可能会自行客制化,但都是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/
2. 修改项目配置文件
该部分为添加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"
在这上述两个文件里配置是一模一样的,保持一致就可以了。
3. 添加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}
4.上电配置(参考相应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上的适当延迟即可。
5. 使用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:vendormediatekproprietaryscriptsdct DrvGen.exe
6. 配置I2C总线
使用上述工具打开对应的dws文件,进行配置。
dws path: kernel-4.9driversmiscmediatekdwsmt6761
注意:在一条总线上的设备,它们的地址不能相同。
结尾:DrvGen工具很强大可以配置供电可以配置I2C等,配好后保存即可,变异的时候会编出需要的.dtsi文件,可以不用自己点生成文件。
注意各级.mk文件,确保所有修改均能正确编译到。
————————————————
最后
以上就是愤怒黑裤为你收集整理的MTK平台安卓Q 10.0 camera驱动移植——sensor的全部内容,希望文章能够帮你解决MTK平台安卓Q 10.0 camera驱动移植——sensor所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复