Sprd平台添加Camera驱动(SL8521E/SC9820E)
前言
Qocm平臺 Android5.1 和 Android8.0 (msm8909)流程基本一致,Android9.0(msm8953)框架變化較大。
而展訊平臺Android4.4(SC9820E),框架又有所不同,因此共三份文檔。
? ? 本文是 C-(SC9820E Android4.4)
平臺特性:
硬件平臺:SL8521E
軟件平臺:Android-4.4
Sensor IC:
主攝:GC5025 5M(500w像素),主攝,最大 2 lane,5M像素
前攝:sp0a09z 0M3(30w像素),前攝,最大 1 lane,2M像素
其他:支持閃光燈,自動對焦,持續對焦,錄像功能,HDR
數據格式:RGGB
前言
1?Kernel?部分
1.1?主攝硬件原理圖 (Rear Camera SCH)
1.1.1?Rear?Cam mipi?布線串聯共模電感
1.1.2?Rear cam csi 1?主攝接線
1.1.3 Rear cam rst?腳
1.1.4?Rear cam?mclk?時鐘腳
1.1.5 Rear cam?pwn?腳
1.1.6 Rear cam 獲取主攝信息
1.2?主攝設備樹配置 (Rear Camera dts cfg)
1.2.1?Rear cam I2C?節點配置
1.2.2?Rear?cam?mipi?節點配置
1.3?前攝硬件原理圖 (Front Camera SCh)
1.3.1?Front?cam?mipi?布線串聯共模電感?
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?前攝設備樹配置 (Front Camera dts cfg)
1.4.1?Front?cam?I2C?節點配置?
1.4.2?Front?cam?mipi?節點配置
2?vendor?部分
2.1?device?下項目配置 camera
2.2?vendor?添加 lib 和 chromatix 文件
2.3?vendor?引用 lib 驅動入口函數
2.4?AF?驅動 & 修改編譯選項
2.5?OTP?驅動 ( eeprom) & 修改編譯選項
3?Tips
你再快,也永遠有人比你快!Fighting ~~
?
1?Kernel?部分
1.1?主攝硬件原理圖 (Rear Camera SCH)
查閱硬件主板主攝相關接口信息如下:
主攝 gc5025 500w:
1.1.1?Rear?Cam mipi?布線串聯共模電感
1.1.2?Rear cam csi 1?主攝接線
1.1.3 Rear cam rst?腳
1.1.4?Rear cam?mclk?時鐘腳
1.1.5 Rear cam?pwn?腳
1.1.6 Rear cam 獲取主攝信息
1. MIPI – CSI 接線
2. cam rst復位腳、 cam mclk 時鐘腳、csm pwn 腳
3. 供電部分
1.2?主攝設備樹配置 (Rear Camera dts cfg)
dts配置路徑:kernel\arch\arm\boot\dts\xxx\xxx_sp9820e-2h10-native.dts
1.2.1?Rear cam I2C?節點配置
Rear Camera 配置節點:
&i2c0 { // 根據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?節點配置
&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?布線串聯共模電感?
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復位腳、 cam mclk 時鐘腳、csm pwn 腳
3. 供電部分
1.4?前攝設備樹配置 (Front Camera dts cfg)
1.4.1?Front?cam?I2C?節點配置
&i2c0 { // 根據實際掛載修改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?節點配置
&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?下配置項目的?camera
路徑: device\xxx\BoardConfig.mk
1.? 修改對應的 camera 的對應像素信息配置,根據camera 規格書配置。
#select camera 2M,3M,5M,8M,13M,16M,21MCAMERA_SUPPORT_SIZE := 5M // 代表主攝 FRONT_CAMERA_SUPPORT_SIZE := 0M3 // 代表前攝關閉對立沖突的宏
FRONT_CAMERA_SUPPORT_SIZE := 0M3 ... TARGET_BOARD_NO_FRONT_SENSOR := false這兩個宏的含義是相反的
如果使用了前攝就需要把 TARGET_BOARD_NO_FRONT_SENSOR 置false。
2. 修改前后攝像頭對應的型號
#camera sensor type CAMERA_SENSOR_TYPE_BACK := "gc5025,gc5035" CAMERA_SENSOR_TYPE_FRONT := "sp0a09z"3. 修改對焦功能配置
#select continuous auto focus +TARGET_BOARD_CAMERA_CAF := true#select camera support autofocus +TARGET_BOARD_CAMERA_AUTOFOCUS := true4. 以上信息務必根據實際需要填寫
5. 若第一次無法點亮,可以屏蔽AF和FLASH LED功能,優先保證出圖后,再調試其他功能。
2.2?vendor?添加 lib 和 chromatix 文件
一般lib和chromatix驅動文件廠家會提供,若不提供。
需要找一個比較相近的sensor,或同一個數據格式、同一個廠商的驅動文件上修改而來。
vendor驅動文件主要分2部分:
不同于qcom架構,展訊的cam 驅動中,lib 驅動配置和效果參數配置文件位于同一個目錄下。
以gc5025舉例,添加lib驅動和chromatix驅動:
lib 驅動
路徑:vendor\sprd\modules\libcamera\sensor\sensor_drv\classic\Galaxycore\gc5025\
文件
sensor_gc5025_mipi_raw.c // 計算曝光等函數sensor_gc5025_mipi_raw.h // 驅動參數配置chromatix 驅動
路徑: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 驅動入口函數
修改路徑: vendor/sprd/modules/libcamera/sensor/sensor_cfg.c
注意:主攝和前攝要添加到不同的數組中。
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. 添加進數組中
主攝添加:
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?驅動 & 修改編譯選項
gc5025使用了 dw9714 AF 馬達驅動,以此為例添加 dw9714 AF馬達驅動:
1. 打開使用 AF 的宏
? ? 馬達是自動對焦使用的,需要打開相對應的宏
修改路徑:vendor\sprd\modules\libcamera\SprdCtrl.mk
? ? 代碼如:
#select continuous auto focus 持續對焦宏控TARGET_BOARD_CAMERA_CAF := true#select camera support autofocus 自動對焦宏控TARGET_BOARD_CAMERA_AUTOFOCUS := true持續對焦控制方式:
TARGET_BOARD_CAMERA_CAF,若為真(true),則定義支持持續對焦的宏 ===> ifeq ($(strip $(TARGET_BOARD_CAMERA_CAF)),true) LOCAL_CFLAGS += -DCONFIG_CAMERA_CAF endif自動對焦控制方式:
TARGET_BOARD_CAMERA_AUTOFOCUS,若不為真(true),則定義不支持自動對焦的宏
定義有點繞,但是控制原理還是和正常一樣,這樣做有一個好處,就是AF的功能默認就是開啟的。
即:
AUTOFOCUS = true,判斷條件不成立,無動作,就(默認)支持自動對焦功能。
AUTOFOCUS = false,判斷條件成立,定義不支持AF的宏,就不支持自動對焦功能。
ifneq ($(strip $(TARGET_BOARD_CAMERA_AUTOFOCUS)),true) LOCAL_CFLAGS += -DCONFIG_CAMERA_AUTOFOCUS_NOT_SUPPORT endif2 配置對應的AF 的宏
2.1 打開 AF 宏定義
device\prj_name\xxx\BoardConfig.mk
代碼如:(這個宏經過追溯代碼調用,好像不起作用。。。)
#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驅動文件
路徑:vendor\sprd\modules\libcamera\sensor\af_drv\dw9714\
2.5?OTP?驅動 ( eeprom) & 修改編譯選項
路徑: vendor\sprd\modules\libcamera\sensor\otp_drv\driver\
部分cam 不使用eeprom(OTP)驅動,這里以 imx258的OTP驅動添加為例:
1?打開 使用OTP 的宏控開關
路徑: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 驅動文件
路徑: vendor\sprd\modules\libcamera\sensor\otp_drv\driver\imx258\
驅動文件:
imx258_otp_drv.cimx258_golden_otp.himx258_otp_drv.h?
3?Tips
全刷驗證。
?
?
你再快,也永遠有人比你快!Fighting ~~
總結
以上是生活随笔為你收集整理的Sprd平台添加Camera驱动(SL8521E/SC9820E)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BeanUtil使用例子:解析并转化Ht
- 下一篇: Tushare使用分享