Sprd平台添加Camera驱动(SL8521E/SC9820E)
前言
Qocm平臺(tái) Android5.1 和 Android8.0 (msm8909)流程基本一致,Android9.0(msm8953)框架變化較大。
而展訊平臺(tái)Android4.4(SC9820E),框架又有所不同,因此共三份文檔。
? ? 本文是 C-(SC9820E Android4.4)
平臺(tái)特性:
硬件平臺(tái):SL8521E
軟件平臺(tái):Android-4.4
Sensor IC:
主攝:GC5025 5M(500w像素),主攝,最大 2 lane,5M像素
前攝:sp0a09z 0M3(30w像素),前攝,最大 1 lane,2M像素
其他:支持閃光燈,自動(dòng)對(duì)焦,持續(xù)對(duì)焦,錄像功能,HDR
數(shù)據(jù)格式:RGGB
前言
1?Kernel?部分
1.1?主攝硬件原理圖 (Rear Camera SCH)
1.1.1?Rear?Cam mipi?布線串聯(lián)共模電感
1.1.2?Rear cam csi 1?主攝接線
1.1.3 Rear cam rst?腳
1.1.4?Rear cam?mclk?時(shí)鐘腳
1.1.5 Rear cam?pwn?腳
1.1.6 Rear cam 獲取主攝信息
1.2?主攝設(shè)備樹配置 (Rear Camera dts cfg)
1.2.1?Rear cam I2C?節(jié)點(diǎn)配置
1.2.2?Rear?cam?mipi?節(jié)點(diǎn)配置
1.3?前攝硬件原理圖 (Front Camera SCh)
1.3.1?Front?cam?mipi?布線串聯(lián)共模電感?
1.3.2?Front?cam?csi 0 前攝接線
1.3.3?Front?cam?rst?腳
1.3.4?Front?cam?mclk?腳
1.3.5?Front?cam?pwn?腳
1.3.6?Front?cam?獲取前攝信息?
1.4?前攝設(shè)備樹配置 (Front Camera dts cfg)
1.4.1?Front?cam?I2C?節(jié)點(diǎn)配置?
1.4.2?Front?cam?mipi?節(jié)點(diǎn)配置
2?vendor?部分
2.1?device?下項(xiàng)目配置 camera
2.2?vendor?添加 lib 和 chromatix 文件
2.3?vendor?引用 lib 驅(qū)動(dòng)入口函數(shù)
2.4?AF?驅(qū)動(dòng) & 修改編譯選項(xiàng)
2.5?OTP?驅(qū)動(dòng) ( eeprom) & 修改編譯選項(xiàng)
3?Tips
你再快,也永遠(yuǎn)有人比你快!Fighting ~~
?
1?Kernel?部分
1.1?主攝硬件原理圖 (Rear Camera SCH)
查閱硬件主板主攝相關(guān)接口信息如下:
主攝 gc5025 500w:
1.1.1?Rear?Cam mipi?布線串聯(lián)共模電感
1.1.2?Rear cam csi 1?主攝接線
1.1.3 Rear cam rst?腳
1.1.4?Rear cam?mclk?時(shí)鐘腳
1.1.5 Rear cam?pwn?腳
1.1.6 Rear cam 獲取主攝信息
1. MIPI – CSI 接線
2. cam rst復(fù)位腳、 cam mclk 時(shí)鐘腳、csm pwn 腳
3. 供電部分
1.2?主攝設(shè)備樹配置 (Rear Camera dts cfg)
dts配置路徑:kernel\arch\arm\boot\dts\xxx\xxx_sp9820e-2h10-native.dts
1.2.1?Rear cam I2C?節(jié)點(diǎn)配置
Rear Camera 配置節(jié)點(diǎn):
&i2c0 { // 根據(jù)camera掛載更改status = "okay";clock-frequency = <400000>;/* Rear Camera */sensor_main: sensor-main@37 {compatible = "sprd,sensor-main";reg = <0x37>;clock-names = "clk_src","sensor_eb","clk_96m","clk_76m8","clk_48m","clk_26m";clocks = <&clk_sensor1>, <&clk_mm_ckg_gates 2>,<&clk_twpll_96m>,<&clk_twpll_76m8>,<&clk_twpll_48m>,<&ext_26m>;vddio-supply = <&vddcamio>;vddcama-supply = <&vddcama>;vddcamd-supply = <&vddcamd>;vddcammot-supply = <&vddcammot>;reset-gpios = <&ap_gpio 45 0>;power-down-gpios = <&ap_gpio 47 0>;host = "dcam0";port {sensor_main_0: endpoint {remote-endpoint = <&phy1_out>;};};}; ... };1.2.2?Rear?cam?mipi?節(jié)點(diǎn)配置
&mipi_csi_phy1 {status = "okay";sprd,phyid = <1>;sprd,csi = <&csi0>;port {phy1_out: endpoint {remote-endpoint = <&sensor_main_0>;};}; };1.3?前攝硬件原理圖 (Front Camera SCH)
前攝 sp0a09z 03M(30w)像素
?
1.3.1?Front?cam?mipi?布線串聯(lián)共模電感?
1.3.2?Front?cam?csi 0 前攝接線
1.3.3?Front?cam?rst?腳
1.3.4?Front?cam?mclk?腳
1.3.5?Front?cam?pwn?腳
1.3.6?Front?cam?獲取前攝信息?
1. MIPI – CSI0 接線
2. cam rst復(fù)位腳、 cam mclk 時(shí)鐘腳、csm pwn 腳
3. 供電部分
1.4?前攝設(shè)備樹配置 (Front Camera dts cfg)
1.4.1?Front?cam?I2C?節(jié)點(diǎn)配置
&i2c0 { // 根據(jù)實(shí)際掛載修改status = "okay";clock-frequency = <400000>; ...sensor_sub:sensor-sub@3d {compatible = "sprd,sensor-sub";reg = <0x3d>;clock-names = "clk_src","sensor_eb","clk_96m","clk_76m8","clk_48m","clk_26m";clocks = <&clk_sensor0>, <&clk_mm_ckg_gates 1>,<&clk_twpll_96m>,<&clk_twpll_76m8>,<&clk_twpll_48m>,<&ext_26m>;vddio-supply = <&vddcamio>;vddcama-supply = <&vddcama>;vddcamd-supply = <&vddcamd>;vddcammot-supply = <&vddcammot>;reset-gpios = <&ap_gpio 44 0>;power-down-gpios = <&ap_gpio 46 0>;host = "dcam1";port {sensor_sub_0: endpoint {remote-endpoint = <&phy0_m_out>;};};}; };1.4.2?Front?cam?mipi?節(jié)點(diǎn)配置
&mipi_csi_phy0_m {status = "okay";sprd,phyid = <2>;sprd,csi = <&csi1>;port {phy0_m_out:endpoint {remote-endpoint = <&sensor_sub_0>;};}; };?
2?vendor?部分
2.1?device?下配置項(xiàng)目的?camera
路徑: device\xxx\BoardConfig.mk
1.? 修改對(duì)應(yīng)的 camera 的對(duì)應(yīng)像素信息配置,根據(jù)camera 規(guī)格書配置。
#select camera 2M,3M,5M,8M,13M,16M,21MCAMERA_SUPPORT_SIZE := 5M // 代表主攝 FRONT_CAMERA_SUPPORT_SIZE := 0M3 // 代表前攝關(guān)閉對(duì)立沖突的宏
FRONT_CAMERA_SUPPORT_SIZE := 0M3 ... TARGET_BOARD_NO_FRONT_SENSOR := false這兩個(gè)宏的含義是相反的
如果使用了前攝就需要把 TARGET_BOARD_NO_FRONT_SENSOR 置false。
2. 修改前后攝像頭對(duì)應(yīng)的型號(hào)
#camera sensor type CAMERA_SENSOR_TYPE_BACK := "gc5025,gc5035" CAMERA_SENSOR_TYPE_FRONT := "sp0a09z"3. 修改對(duì)焦功能配置
#select continuous auto focus +TARGET_BOARD_CAMERA_CAF := true#select camera support autofocus +TARGET_BOARD_CAMERA_AUTOFOCUS := true4. 以上信息務(wù)必根據(jù)實(shí)際需要填寫
5. 若第一次無法點(diǎn)亮,可以屏蔽AF和FLASH LED功能,優(yōu)先保證出圖后,再調(diào)試其他功能。
2.2?vendor?添加 lib 和 chromatix 文件
一般lib和chromatix驅(qū)動(dòng)文件廠家會(huì)提供,若不提供。
需要找一個(gè)比較相近的sensor,或同一個(gè)數(shù)據(jù)格式、同一個(gè)廠商的驅(qū)動(dòng)文件上修改而來。
vendor驅(qū)動(dòng)文件主要分2部分:
不同于qcom架構(gòu),展訊的cam 驅(qū)動(dòng)中,lib 驅(qū)動(dòng)配置和效果參數(shù)配置文件位于同一個(gè)目錄下。
以gc5025舉例,添加lib驅(qū)動(dòng)和chromatix驅(qū)動(dòng):
lib 驅(qū)動(dòng)
路徑:vendor\sprd\modules\libcamera\sensor\sensor_drv\classic\Galaxycore\gc5025\
文件
sensor_gc5025_mipi_raw.c // 計(jì)算曝光等函數(shù)sensor_gc5025_mipi_raw.h // 驅(qū)動(dòng)參數(shù)配置chromatix 驅(qū)動(dòng)
路徑:vendor\sprd\modules\libcamera\sensor\sensor_drv\classic\Galaxycore\gc5025\parameters
文件:
isp_nr.hsensor_gc5025_raw_param_cap_0.csensor_gc5025_raw_param_common.csensor_gc5025_raw_param_main.csensor_gc5025_raw_param_prv_0.csensor_gc5025_raw_param_video_0.c ...2.3?vendor?引用 lib 驅(qū)動(dòng)入口函數(shù)
修改路徑: vendor/sprd/modules/libcamera/sensor/sensor_cfg.c
注意:主攝和前攝要添加到不同的數(shù)組中。
back_sensor_infor_tab[] front_sensor_infor_tab[]1. 聲明
主攝聲明
#ifdef GC5025 extern SENSOR_INFO_T g_sensor_gc5025_mipi_raw_info; #endif前攝聲明
#ifdef SP2509 extern SENSOR_INFO_T g_sp2509_mipi_raw_info; #endif2. 添加進(jìn)數(shù)組中
主攝添加:
const SENSOR_MATCH_T back_sensor_infor_tab[] = { // gc area ... #ifdef GC5035{MODULE_SUNNY, "gc5035", &g_gc5035_mipi_raw_info, {&dw9714_drv_entry, 0}, NULL}, #endif ... };前攝添加
const SENSOR_MATCH_T front_sensor_infor_tab[] = { // sp area ... #ifdef SP2509{MODULE_SUNNY, "sp2509", &g_sp2509_mipi_raw_info, {NULL, 0}, NULL}, #endif ... };2.4?AF?驅(qū)動(dòng) & 修改編譯選項(xiàng)
gc5025使用了 dw9714 AF 馬達(dá)驅(qū)動(dòng),以此為例添加 dw9714 AF馬達(dá)驅(qū)動(dòng):
1. 打開使用 AF 的宏
? ? 馬達(dá)是自動(dòng)對(duì)焦使用的,需要打開相對(duì)應(yīng)的宏
修改路徑:vendor\sprd\modules\libcamera\SprdCtrl.mk
? ? 代碼如:
#select continuous auto focus 持續(xù)對(duì)焦宏控TARGET_BOARD_CAMERA_CAF := true#select camera support autofocus 自動(dòng)對(duì)焦宏控TARGET_BOARD_CAMERA_AUTOFOCUS := true持續(xù)對(duì)焦控制方式:
TARGET_BOARD_CAMERA_CAF,若為真(true),則定義支持持續(xù)對(duì)焦的宏 ===> ifeq ($(strip $(TARGET_BOARD_CAMERA_CAF)),true) LOCAL_CFLAGS += -DCONFIG_CAMERA_CAF endif自動(dòng)對(duì)焦控制方式:
TARGET_BOARD_CAMERA_AUTOFOCUS,若不為真(true),則定義不支持自動(dòng)對(duì)焦的宏
定義有點(diǎn)繞,但是控制原理還是和正常一樣,這樣做有一個(gè)好處,就是AF的功能默認(rèn)就是開啟的。
即:
AUTOFOCUS = true,判斷條件不成立,無動(dòng)作,就(默認(rèn))支持自動(dòng)對(duì)焦功能。
AUTOFOCUS = false,判斷條件成立,定義不支持AF的宏,就不支持自動(dòng)對(duì)焦功能。
ifneq ($(strip $(TARGET_BOARD_CAMERA_AUTOFOCUS)),true) LOCAL_CFLAGS += -DCONFIG_CAMERA_AUTOFOCUS_NOT_SUPPORT endif2 配置對(duì)應(yīng)的AF 的宏
2.1 打開 AF 宏定義
device\prj_name\xxx\BoardConfig.mk
代碼如:(這個(gè)宏經(jīng)過追溯代碼調(diào)用,好像不起作用。。。)
#VCM DRIVER TARGET_BOARD_AF_VCM_DW9714 := true2.2 添加AF 索引
???路徑:vendor\sprd\modules\libcamera\sensor\sensor_cfg.c
代碼如:
extern struct sns_af_drv_entry dw9714_drv_entry;#ifdef GC5025{MODULE_SUNNY, "gc5025", &g_sensor_gc5025_mipi_raw_info, {&dw9714_drv_entry, 0}, NULL}, #endif3 添加AF驅(qū)動(dòng)文件
路徑:vendor\sprd\modules\libcamera\sensor\af_drv\dw9714\
2.5?OTP?驅(qū)動(dòng) ( eeprom) & 修改編譯選項(xiàng)
路徑: vendor\sprd\modules\libcamera\sensor\otp_drv\driver\
部分cam 不使用eeprom(OTP)驅(qū)動(dòng),這里以 imx258的OTP驅(qū)動(dòng)添加為例:
1?打開 使用OTP 的宏控開關(guān)
路徑:vendor\sprd\modules\libcamera\sensor\sensor_cfg.c
代碼修改:
extern otp_drv_entry_t imx258_drv_entry;{MODULE_TRULY, "imx258", &g_imx258_mipi_raw_info, {&dw9800_drv_entry, 0}, &imx258_drv_entry},2 添加 OTP 驅(qū)動(dòng)文件
路徑: vendor\sprd\modules\libcamera\sensor\otp_drv\driver\imx258\
驅(qū)動(dòng)文件:
imx258_otp_drv.cimx258_golden_otp.himx258_otp_drv.h?
3?Tips
全刷驗(yàn)證。
?
?
你再快,也永遠(yuǎn)有人比你快!Fighting ~~
總結(jié)
以上是生活随笔為你收集整理的Sprd平台添加Camera驱动(SL8521E/SC9820E)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BeanUtil使用例子:解析并转化Ht
- 下一篇: Tushare使用分享