日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Camera 驱动 Bringup

發布時間:2023/12/14 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Camera 驱动 Bringup 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

和你一起終身學習,這里是程序員Android

經典好文推薦,通過閱讀本文,您將收獲以下知識點:

一、Kernel 代碼移植
二、Vendor 代碼移植
三、擴展

一、Kernel 代碼移植

1. DTS 文件配置

dts 文件目錄:
高通SDM660平臺代碼中,arm64 與 arm 走的是同一個目錄文件,
kernel\msm-4.4\arch\arm64\boot\dts\qcom這個目錄其實是 \kernel\msm-4.4\arch\arm\boot\dts\qcom的軟鏈接。

Camera 相關的 dts 文件:

@ kernel\msm-4.4\arch\arm64\boot\dts\qcom\sdm660.dtsi @ kernel\msm-4.4\arch\arm64\boot\dts\qcom\sdm660-camera.dtsi @ kernel\msm-4.4\arch\arm64\boot\dts\qcom\sdm660-pinctrl.dtsi @ kernel\msm-4.4\arch\arm64\boot\dts\qcom\sdm660-camera-sensor-mtp.dtsi

1.1 sdm660.dtsi

在該文件中,主要功能如下:

引入 sdm660-camera.dtsi 文件
配置 camera_focus 和 camera_snapshot 對應的 GPIO 及 上報的 keycode。

@ \kernel\msm-4.4\arch\arm\boot\dts\qcom\sdm660.dtsi // 1. 引入 sdm660-camera.dtsi #include "sdm660-camera.dtsi" // 2. 配置 camera_focus 和 camera_snapshot GPIO 及對應的 keycode。 &soc {gpio_keys {status = "okay";compatible = "gpio-keys";input-name = "gpio-keys";pinctrl-names = "tlmm_gpio_key_active","tlmm_gpio_key_suspend";pinctrl-0 = <&gpio_key_active>;pinctrl-1 = <&gpio_key_suspend>;camera_focus {label = "camera_focus";gpios = <&tlmm 64 0x1>;linux,input-type = <1>;linux,code = <0x210>;debounce-interval = <15>;};camera_snapshot {label = "camera_snapshot";gpios = <&tlmm 113 0x1>;linux,input-type = <1>;linux,code = <0x2fe>;debounce-interval = <15>;};}; };

1.2 sdm660-camera.dtsi

在 sdm660-camera.dtsi 中主要是配置了平臺相關的Camera 底層硬件相關的配置,比如 CSI,CS。
如無特殊需求,一般不會修改此處的代碼。

部分代碼及對應的解釋如下:

各參數解析詳見: @ \kernel\msm-4.4\Documentation\devicetree\bindings\media\video\msm-csid.txt @ \kernel\msm-4.4\Documentation\devicetree\bindings\media\video\msm-csi-phy.txt&soc {qcom,csiphy@c824000 { // CSI 總線映射的寄存器地址cell-index = <0>; // CSI 硬件總線索引號 0compatible = "qcom,csiphy-v3.5", "qcom,csiphy"; // compatible = “a廠商,p產品”, “標準bbb類型設備”。// 那么linux kernel可能首先使用“a廠商,p產品”來匹配適合的driver,// 如果沒有匹配到,那么使用字符串“標準bbb類型設備”來繼續尋找適合的driver。reg = <0xc824000 0x1000>,<0xca00120 0x4>; // 使用的寄存器地址 及 長度reg-names = "csiphy", "csiphy_clk_mux"; // cisphy 寄存器地址為 0xc824000, 長度為 0x1000// csiphy_clk_mux 寄存器地址為 0xca00120,長度為 0x4interrupts = <0 78 0>; // interrupt的格式是<type, interrupt number, trigger type>, 詳見《(擴展1) interrupts 中斷節點解析》interrupt-names = "csiphy"; // 中斷name,可通過 cat /proc/interrupts 獲取gdscr-supply = <&gdsc_camss_top>; bimc_smmu-supply = <&gdsc_bimc_smmu>;qcom,cam-vreg-name = "gdscr", "bimc_smmu"; // voltage regulators 和 nameclocks = <&clock_rpmcc MMSSNOC_AXI_CLK>, // clocks 和 name<&clock_mmss MMSS_MNOC_AHB_CLK>,<&clock_mmss MMSS_BIMC_SMMU_AHB_CLK>,<&clock_mmss MMSS_BIMC_SMMU_AXI_CLK>,<&clock_mmss MMSS_CAMSS_AHB_CLK>,<&clock_mmss MMSS_CAMSS_TOP_AHB_CLK>,<&clock_mmss CSI0_CLK_SRC>,<&clock_mmss MMSS_CAMSS_CSI0_CLK>,<&clock_mmss MMSS_CAMSS_CPHY_CSID0_CLK>,<&clock_mmss CSI0PHYTIMER_CLK_SRC>,<&clock_mmss MMSS_CAMSS_CSI0PHYTIMER_CLK>,<&clock_mmss MMSS_CAMSS_ISPIF_AHB_CLK>,<&clock_mmss CSIPHY_CLK_SRC>,<&clock_mmss MMSS_CAMSS_CSIPHY0_CLK>,<&clock_mmss MMSS_CSIPHY_AHB2CRIF_CLK>;clock-names = "mmssnoc_axi", "mnoc_ahb","bmic_smmu_ahb", "bmic_smmu_axi","camss_ahb_clk", "camss_top_ahb_clk","csi_src_clk", "csi_clk", "cphy_csid_clk","csiphy_timer_src_clk", "csiphy_timer_clk","camss_ispif_ahb_clk", "csiphy_clk_src", "csiphy_clk","csiphy_ahb2crif";qcom,clock-rates = <0 0 0 0 0 0 310000000 0 0 269333333 0 0 200000000 0 0>; // 上面對應所有clock 的速率status = "ok";};qcom,csiphy@c825000 {cell-index = <1>; // CSI 硬件總線索引號 1compatible = "qcom,csiphy-v3.5", "qcom,csiphy";reg = <0xc825000 0x1000>, <0xca00124 0x4>;reg-names = "csiphy", "csiphy_clk_mux"; // cisphy 寄存器地址為 0xc825000, 長度為 0x1000// csiphy_clk_mux 寄存器地址為 0xca00124 ,長度為 0x4interrupts = <0 79 0>;interrupt-names = "csiphy";...... // 此處省略一大段代碼,內容和前面 CSI 0 一樣,配置clk 及其速率};

1.3 sdm660-camera-sensor-mtp.dtsi

文件 sdm660-pinctrl.dtsi和 sdm660-camera-sensor-mtp.dtsi是在 sdm660-mtp.dtsi中被包含的。

@ \kernel\msm-4.4\arch\arm\boot\dts\qcom\sdm660-mtp.dtsi#include "sdm660-pinctrl.dtsi" #include "sdm660-camera-sensor-mtp.dtsi"

sdm660-camera-sensor-mtp.dtsi是kernel camera 重點要配置的文件
其中包括了 camera 閃光燈的配置,avdd/dovdd/dvdd/vaf 等電壓的配置,camera 馬達的配置 ,eeprom的配置,camera sensor的配置。

1.3.1 Camera Sensor DTS配置

@ \kernel\msm-4.4\arch\arm\boot\dts\qcom\sdm660-camera-sensor-mtp.dtsi @ \kernel\msm-4.4\Documentation\devicetree\bindings\media\video\msm-cci.txt&cci {qcom,camera@0 {cell-index = <0>; // Camera索引號 0,此處注意不要重復了compatible = "qcom,camera";reg = <0x0>; // 和索引號一樣qcom,csiphy-sd-index = <0>; // 使用 CSI 0,具體根據硬件決定,一般來說, 0:后攝, 1:前攝qcom,csid-sd-index = <0>; // 使用 CSI 0 qcom,mount-angle = <90>; // Sensor 成像方向與主板的角度,camear旋轉角度qcom,led-flash-src = <&led_flash0>; // 閃光燈,使用 led_flash0qcom,actuator-src = <&actuator0>; // 馬達,使用 actuator0qcom,ois-src = <&ois0>; // 是否支持 光學防抖qcom,eeprom-src = <&eeprom1>; // eeprom 1cam_vio-supply = <&pm660_l11>; // IO voltage IO口電壓 VDDIO?數字?IO?電源主要給?I2C?部分供電;cam_vana-supply = <&cam_avdd_gpio_regulator>; // analog voltage 模擬電壓 AVDD?模擬供電,主要給感光區和?ADC?部分供電;cam_vdig-supply = <&cam_rear_dvdd_gpio_regulator>; // digital voltage 數字電壓DVDD?數字供電,主要給?ISP?供電cam_vaf-supply = <&cam_vaf_gpio_regulator>; // AF voltage Camera?自動對焦馬達的供電cam_v_custom1-supply = <&cam_dovdd_gpio_regulator>;qcom,cam-vreg-name = "cam_vio", "cam_vana", "cam_vdig", "cam_vaf","cam_v_custom1"; // 供電配置 及對應的 電壓,詳見下qcom,cam-vreg-min-voltage = <1780000 0 0 0 0>;qcom,cam-vreg-max-voltage = <1950000 0 0 0 0>;qcom,cam-vreg-op-mode = <105000 0 0 0 0>;qcom,gpio-no-mux = <0>; // 1:表示 gpio mux 不可用 0:表示可用pinctrl-names = "cam_default", "cam_suspend"; // Camera gpio clk 和 reset gpio 配置 pinctrl-0 = <&cam_sensor_mclk0_active &cam_sensor_rear_active>;pinctrl-1 = <&cam_sensor_mclk0_suspend &cam_sensor_rear_suspend>;gpios = <&tlmm 32 0>, <&tlmm 46 0>;qcom,gpio-reset = <1>;qcom,gpio-req-tbl-num = <0 1>;qcom,gpio-req-tbl-flags = <1 0>;qcom,gpio-req-tbl-label = "CAMIF_MCLK0", "CAM_RESET0";qcom,sensor-position = <0>; // 1:前置 0:后置qcom,sensor-mode = <0>; ===>{ @ \kernel\msm-4.4\Documentation\devicetree\bindings\media\video\msm-cci.txt- qcom,sensor-mode : should contain sensor mode supported- 0 -> back camera 2D- 1 -> front camera 2D- 2 -> back camera 3D- 3 -> back camera int 3D}qcom,cci-master = <0>; // I2C 0status = "ok";clocks = <&clock_mmss MCLK0_CLK_SRC>, <&clock_mmss MMSS_CAMSS_MCLK0_CLK>;clock-names = "cam_src_clk", "cam_clk";qcom,clock-rates = <24000000 0>; // clock rate in Hz//- qcom,sensor-type : should contain format of data that sensor streams // - 0 -> bayer format // - 1 -> yuv format};qcom,camera@1 {cell-index = <1>; // Camera索引號 1,此處注意不要重復了compatible = "qcom,camera";reg = <0x1>;qcom,csiphy-sd-index = <1>;qcom,csid-sd-index = <1>;qcom,mount-angle = <90>;qcom,actuator-src = <&actuator1>;qcom,eeprom-src = <&eeprom1>;cam_vio-supply = <&cam_dovdd_gpio_regulator>;cam_vana-supply = <&cam_avdd_gpio_regulator>;cam_vdig-supply = <&cam_rear_dvdd_gpio_regulator>;cam_vaf-supply = <&cam_vaf_gpio_regulator>;qcom,cam-vreg-name = "cam_vio", "cam_vana", "cam_vdig", "cam_vaf";qcom,cam-vreg-min-voltage = <0 0 0 0>;qcom,cam-vreg-max-voltage = <0 0 0 0>;qcom,cam-vreg-op-mode = <105000 0 0 0>;qcom,gpio-no-mux = <0>;pinctrl-names = "cam_default", "cam_suspend";pinctrl-0 = <&cam_sensor_mclk2_active &cam_sensor_rear2_active>;pinctrl-1 = <&cam_sensor_mclk2_suspend &cam_sensor_rear2_suspend>;gpios = <&tlmm 34 0>, <&tlmm 48 0>;qcom,gpio-reset = <1>;qcom,gpio-req-tbl-num = <0 1>;qcom,gpio-req-tbl-flags = <1 0>;qcom,gpio-req-tbl-label = "CAMIF_MCLK", "CAM_RESET";qcom,sensor-position = <0>; // 1:前置 0:后置qcom,sensor-mode = <0>; // 0 -> back camera 2Dqcom,cci-master = <1>; // I2C 1status = "ok";clocks = <&clock_mmss MCLK2_CLK_SRC>, <&clock_mmss MMSS_CAMSS_MCLK2_CLK>;clock-names = "cam_src_clk", "cam_clk";qcom,clock-rates = <24000000 0>;};qcom,camera@2 {cell-index = <2>; // Camera索引號 2,此處注意不要重復了compatible = "qcom,camera";reg = <0x02>;qcom,csiphy-sd-index = <2>;qcom,csid-sd-index = <2>;qcom,mount-angle = <270>;//qcom,actuator-src = <&actuator2>; // 前報不需要馬達,所以此處不用配置馬達 ,同樣下面也不用配置 af voltageqcom,eeprom-src = <&eeprom2>;cam_vio-supply = <&pm660_l11>;cam_vana-supply = <&cam_avdd_gpio_regulator>;cam_vdig-supply = <&cam_dvdd_gpio_regulator>;qcom,cam-vreg-name = "cam_vio", "cam_vana", "cam_vdig";qcom,cam-vreg-min-voltage = <1780000 0 0>;qcom,cam-vreg-max-voltage = <1950000 0 0>;qcom,cam-vreg-op-mode = <105000 0 0>;qcom,gpio-no-mux = <0>;pinctrl-names = "cam_default", "cam_suspend";pinctrl-0 = <&cam_sensor_mclk1_active &cam_sensor_front_active>;pinctrl-1 = <&cam_sensor_mclk1_suspend &cam_sensor_front_suspend>;gpios = <&tlmm 33 0>, <&tlmm 47 0>;qcom,gpio-reset = <1>;qcom,gpio-req-tbl-num = <0 1>;qcom,gpio-req-tbl-flags = <1 0>;qcom,gpio-req-tbl-label = "CAMIF_MCLK2", "CAM_RESET2";qcom,sensor-position = <1>; // 1:前置 0:后置qcom,sensor-mode = <1>; // 1 -> front camera 2Dqcom,cci-master = <1>; // I2C 1status = "ok";clocks = <&clock_mmss MCLK1_CLK_SRC>, <&clock_mmss MMSS_CAMSS_MCLK1_CLK>;clock-names = "cam_src_clk", "cam_clk";qcom,clock-rates = <24000000 0>;}; }

1.3.2 Camera 供電DTS配置(avdd/dovdd/dvdd/vaf)

Camera 供電配置要根據具體的硬件來配置,
如果走的是 pm 電源則配置如cam_vio-supply = <&pm660_l11>;
如果走的是具體GPIO供電,則要做如下配置 ,調用時配置如cam_vana-supply = <&cam_avdd_gpio_regulator>;
各GPIO 供電配置如下:

@ \kernel\msm-4.4\arch\arm\boot\dts\qcom\sdm660-camera-sensor-mtp.dtsi &soc {cam_avdd_gpio_regulator: cam_avdd_fixed_regulator {compatible = "regulator-fixed";regulator-name = "cam_avdd_gpio_regulator";regulator-min-microvolt = <3600000>;regulator-max-microvolt = <3600000>;enable-active-high;gpio = <&tlmm 51 0>; // 使用 CPU的 GPIO 51 ,供電 3.6vvin-supply = <&pm660l_bob>;};cam_dovdd_gpio_regulator: cam_dovdd_fixed_regulator {compatible = "regulator-fixed";regulator-name = "cam_dovdd_gpio_regulator";regulator-min-microvolt = <3600000>;regulator-max-microvolt = <3600000>;enable-active-high;gpio = <&tlmm 0 0>; // 使用 CPU的 GPIO 0 ,供電 3.6vvin-supply = <&pm660l_bob>;};cam_dvdd_gpio_regulator: cam_dvdd_fixed_regulator {compatible = "regulator-fixed";regulator-name = "cam_dvdd_gpio_regulator";regulator-min-microvolt = <3600000>;regulator-max-microvolt = <3600000>;enable-active-high;gpio = <&pm660l_gpios 3 0>; // 使用 PM660L的 gpio 3 ,供電 3.6vvin-supply = <&pm660l_bob>;};cam_rear_dvdd_gpio_regulator: cam_rear_dvdd_fixed_regulator {compatible = "regulator-fixed";regulator-name = "cam_rear_dvdd_gpio_regulator";regulator-min-microvolt = <3600000>;regulator-max-microvolt = <3600000>;enable-active-high;gpio = <&pm660l_gpios 4 0>; // 使用 PM660L的 gpio 4 ,供電 3.6vvin-supply = <&pm660l_bob>;};cam_vaf_gpio_regulator:cam_vaf_fixed_regulator {compatible = "regulator-fixed";regulator-name = "cam_vaf_gpio_regulator";regulator-min-microvolt = <3600000>;regulator-max-microvolt = <3600000>;enable-active-high;gpio = <&tlmm 50 0>; // 使用 CPU的 gpio 50 ,供電 3.6vvin-supply = <&pm660l_bob>;}; };

1.3.3 Camera 閃光燈DTS配置

@ \kernel\msm-4.4\arch\arm\boot\dts\qcom\sdm660-camera-sensor-mtp.dtsi &soc {led_flash0: qcom,camera-flash@0 {cell-index = <0>; // 閃光燈配置索引 0compatible = "qcom,camera-flash";// 如下:如果兩顆燈的話,則配置對應的兩個供電,如果是一顆燈的主話,則配置一個供電qcom,flash-source = <&pm660l_flash0 &pm660l_flash1>;//閃光燈供電配置qcom,torch-source = <&pm660l_torch0 &pm660l_torch1>;//手電筒供電配置qcom,switch-source = <&pm660l_switch0>;status = "ok";};led_flash1: qcom,camera-flash@1 {cell-index = <1>; // 閃光燈配置索引 1compatible = "qcom,camera-flash";qcom,flash-source = <&pm660l_flash2>; //閃光燈供電配置qcom,torch-source = <&pm660l_torch2>; //手電筒供電配置qcom,switch-source = <&pm660l_switch1>;status = "ok";};

上述的相關電源配置均在 msm-pm660l.dtsi文件中

@ \kernel\msm-4.4\arch\arm\boot\dts\qcom\msm-pm660l.dtsiflash_led: qcom,leds@d300 {compatible = "qcom,qpnp-flash-led-v2";reg = <0xd300 0x100>;label = "flash";interrupts = <0x3 0xd3 0x0 IRQ_TYPE_EDGE_RISING>,<0x3 0xd3 0x3 IRQ_TYPE_EDGE_RISING>,<0x3 0xd3 0x4 IRQ_TYPE_EDGE_RISING>;interrupt-names = "led-fault-irq","all-ramp-down-done-irq","all-ramp-up-done-irq";qcom,hdrm-auto-mode;qcom,short-circuit-det;qcom,open-circuit-det;qcom,vph-droop-det;qcom,thermal-derate-en;qcom,thermal-derate-current = <200 500 1000>;qcom,isc-delay = <192>;qcom,pmic-revid = <&pm660l_revid>;pm660l_flash0: qcom,flash_0 {label = "flash";qcom,led-name = "led:flash_0";qcom,max-current = <1500>; // 最大電流 1.5Aqcom,default-led-trigger = "flash0_trigger";qcom,id = <0>; // flash0qcom,current-ma = <1000>; qcom,duration-ms = <1280>;qcom,ires-ua = <12500>;qcom,hdrm-voltage-mv = <325>;qcom,hdrm-vol-hi-lo-win-mv = <100>;};pm660l_flash1: qcom,flash_1 {label = "flash";qcom,led-name = "led:flash_1";qcom,max-current = <1500>;qcom,default-led-trigger = "flash1_trigger";qcom,id = <1>;qcom,current-ma = <1000>;qcom,duration-ms = <1280>;qcom,ires-ua = <12500>;qcom,hdrm-voltage-mv = <325>;qcom,hdrm-vol-hi-lo-win-mv = <100>;};pm660l_flash2: qcom,flash_2 {label = "flash";qcom,led-name = "led:flash_2";qcom,max-current = <750>;qcom,default-led-trigger = "flash2_trigger";qcom,id = <2>;qcom,current-ma = <500>;qcom,duration-ms = <1280>;qcom,ires-ua = <12500>;qcom,hdrm-voltage-mv = <325>;qcom,hdrm-vol-hi-lo-win-mv = <100>;};pm660l_torch0: qcom,torch_0 {label = "torch";qcom,led-name = "led:torch_0";qcom,max-current = <500>;qcom,default-led-trigger = "torch0_trigger";qcom,id = <0>;qcom,current-ma = <300>;qcom,ires-ua = <12500>;qcom,hdrm-voltage-mv = <325>;qcom,hdrm-vol-hi-lo-win-mv = <100>;};......pm660l_switch0: qcom,led_switch_0 {label = "switch";qcom,led-name = "led:switch_0";qcom,led-mask = <3>;qcom,default-led-trigger = "switch0_trigger";};};

1.3.4 Camera 馬達DTS配置

&cci {actuator0: qcom,actuator@0 {cell-index = <0>;reg = <0x0>;compatible = "qcom,actuator";qcom,cci-master = <0>; // 馬達使用的 i2c master , I2C 0cam_vaf-supply = <&cam_vaf_gpio_regulator>; // 馬達供電qcom,cam-vreg-name = "cam_vaf";qcom,cam-vreg-min-voltage = <3300000>;qcom,cam-vreg-max-voltage = <3600000>;qcom,cam-vreg-op-mode = <100000>;};actuator1: qcom,actuator@1 {cell-index = <1>;reg = <0x1>;compatible = "qcom,actuator";qcom,cci-master = <1>; // 馬達使用的 i2c master , I2C 1cam_vaf-supply = <&cam_vaf_gpio_regulator>;qcom,cam-vreg-name = "cam_vaf";qcom,cam-vreg-min-voltage = <3300000>;qcom,cam-vreg-max-voltage = <3600000>;qcom,cam-vreg-op-mode = <100000>;};

1.3.5 Camera 光學防抖 OSI DTS配置

ois0: qcom,ois@0 {cell-index = <0>;reg = <0x0>;compatible = "qcom,ois";qcom,cci-master = <0>; // 使用 I2C 0gpios = <&tlmm 50 0>; // GPIO 50qcom,gpio-vaf = <0>;qcom,gpio-req-tbl-num = <0>;qcom,gpio-req-tbl-flags = <0>;qcom,gpio-req-tbl-label = "CAM_VAF";pinctrl-names = "cam_default", "cam_suspend";pinctrl-0 = <&cam_actuator_vaf_active>;pinctrl-1 = <&cam_actuator_vaf_suspend>;status = "disabled";};

1.3.6 Camera eeprom DTS配置

eeprom0: qcom,eeprom@0 {cell-index = <0>;reg = <0>;compatible = "qcom,eeprom";cam_vio-supply = <&pm660_l11>;cam_vana-supply = <&cam_avdd_gpio_regulator>;cam_vdig-supply = <&cam_rear_dvdd_gpio_regulator>;cam_vaf-supply = <&pm660l_l8>;qcom,cam-vreg-name = "cam_vio", "cam_vana", "cam_vdig", "cam_vaf";qcom,cam-vreg-min-voltage = <1780000 0 0 2800000>;qcom,cam-vreg-max-voltage = <1950000 0 0 3400000>;qcom,cam-vreg-op-mode = <105000 0 0 100000>;qcom,gpio-no-mux = <0>;pinctrl-names = "cam_default", "cam_suspend";pinctrl-0 = <&cam_sensor_mclk0_active &cam_sensor_rear_active>;pinctrl-1 = <&cam_sensor_mclk0_suspend &cam_sensor_rear_suspend>;gpios = <&tlmm 32 0>, <&tlmm 46 0>;qcom,gpio-reset = <1>;qcom,gpio-req-tbl-num = <0 1>;qcom,gpio-req-tbl-flags = <1 0>;qcom,gpio-req-tbl-label = "CAMIF_MCLK0", "CAM_RESET0";qcom,sensor-position = <0>;qcom,sensor-mode = <0>;qcom,cci-master = <0>;status = "ok";clocks = <&clock_mmss MCLK0_CLK_SRC>, <&clock_mmss MMSS_CAMSS_MCLK0_CLK>;clock-names = "cam_src_clk", "cam_clk";qcom,clock-rates = <24000000 0>;};

1.3.7 Camera PM660L GPIO DTS配置

前面我們使用到了兩個 PM660L 的GPIO:
gpio = <&pm660l_gpios 3 0>;
gpio = <&pm660l_gpios 4 0>;

不同于 CPU的gpio ,其需要作單獨配置,如下:

@\kernel\msm-4.4\arch\arm\boot\dts\qcom\sdm660-camera-sensor-mtp.dtsi &pm660l_gpios {gpio@c300 { /* GPIO4 -CAMERA SENSOR 0 VDIG*/qcom,mode = <1>; /* Output */qcom,pull = <5>; /* No Pull */qcom,vin-sel = <0>; /* VIN1 GPIO_LV */qcom,src-sel = <0>; /* GPIO */qcom,invert = <0>; /* Invert */qcom,master-en = <1>; /* Enable GPIO */status = "ok";};gpio@c200 { /* GPIO3 -CAMERA SENSOR 2 VDIG*/qcom,mode = <1>; /* Output */qcom,pull = <5>; /* No Pull */qcom,vin-sel = <0>; /* VIN1 GPIO_LV */qcom,src-sel = <0>; /* GPIO */qcom,invert = <0>; /* Invert */qcom,master-en = <1>; /* Enable GPIO */status = "ok";}; };

1.4 sdm660-pinctrl.dtsi

在前面 中,有需要用到的gpio,出于電源管理的需求,需要在 pinctrl 中配置其active 和 suspend 對應的配置:

例如,GPIO 32 和 GPIO 46 以及 GPIO 50
在前邊代碼中,使用配置如下:

gpio 50:pinctrl-names = "cam_default", "cam_suspend";pinctrl-0 = <&cam_actuator_vaf_active>;pinctrl-1 = <&cam_actuator_vaf_suspend>;GPIO 32 、GPIO 46:pinctrl-names = "cam_default", "cam_suspend";pinctrl-0 = <&cam_sensor_mclk0_active &cam_sensor_rear_active>;pinctrl-1 = <&cam_sensor_mclk0_suspend &cam_sensor_rear_suspend>;gpios = <&tlmm 32 0>, <&tlmm 46 0>;@ \kernel\msm-4.4\arch\arm\boot\dts\qcom\sdm660-pinctrl.dtsicam_actuator_vaf_active: cam_actuator_vaf_active {/* ACTUATOR POWER */mux {pins = "gpio50";function = "gpio";};config {pins = "gpio50";bias-disable; /* No PULL */drive-strength = <2>; /* 2 MA */};};cam_actuator_vaf_suspend: cam_actuator_vaf_suspend {/* ACTUATOR POWER */mux {pins = "gpio50";function = "gpio";};config {pins = "gpio50";bias-pull-down; /* PULL DOWN */drive-strength = <2>; /* 2 MA */};};cam_sensor_mclk0_active: cam_sensor_mclk0_active {/* MCLK0 */mux {/* CLK */pins = "gpio32";function = "cam_mclk";};config {pins = "gpio32";bias-disable; /* No PULL */drive-strength = <2>; /* 2 MA */};};cam_sensor_mclk0_suspend: cam_sensor_mclk0_suspend {/* MCLK0 */mux {/* CLK */pins = "gpio32";function = "cam_mclk";};config {pins = "gpio32";bias-pull-down; /* PULL DOWN */drive-strength = <2>; /* 2 MA */};};cam_sensor_rear_active: cam_sensor_rear_active {/* RESET, STANDBY */mux {pins = "gpio46";function = "gpio";};config {pins = "gpio46";bias-disable; /* No PULL */drive-strength = <2>; /* 2 MA */};};cam_sensor_rear_suspend: cam_sensor_rear_suspend {/* RESET, STANDBY */mux {pins = "gpio46";function = "gpio";};config {pins = "gpio46";bias-disable; /* No PULL */drive-strength = <2>; /* 2 MA */};};cam_sensor_mclk1_active: cam_sensor_mclk1_active {/* MCLK1 */mux {/* CLK */pins = "gpio33";function = "cam_mclk";};config {pins = "gpio33";bias-disable; /* No PULL */drive-strength = <2>; /* 2 MA */};};cam_sensor_mclk1_suspend: cam_sensor_mclk1_suspend {/* MCLK1 */mux {/* CLK */pins = "gpio33";function = "cam_mclk";};config {pins = "gpio33";bias-pull-down; /* PULL DOWN */drive-strength = <2>; /* 2 MA */};};cam_sensor_rear2_active: cam_sensor_rear2_active {/* RESET, STANDBY */mux {pins = "gpio48";function = "gpio";};config {pins = "gpio48";bias-disable; /* No PULL */drive-strength = <2>; /* 2 MA */};};cam_sensor_rear2_suspend: cam_sensor_rear2_suspend {/* RESET, STANDBY */mux {pins = "gpio48";function = "gpio";};config {pins = "gpio48";bias-disable; /* No PULL */drive-strength = <2>; /* 2 MA */};};cam_sensor_mclk2_active: cam_sensor_mclk2_active {/* MCLK1 */mux {/* CLK */pins = "gpio34";function = "cam_mclk";};config {pins = "gpio34";bias-disable; /* No PULL */drive-strength = <2>; /* 2 MA */};};cam_sensor_mclk2_suspend: cam_sensor_mclk2_suspend {/* MCLK1 */mux {/* CLK */pins = "gpio34";function = "cam_mclk";};config {pins = "gpio34";bias-pull-down; /* PULL DOWN */drive-strength = <2>; /* 2 MA */};};cam_sensor_front_active: cam_sensor_front_active {/* RESET VANA*/mux {pins = "gpio47";function = "gpio";};config {pins = "gpio47";bias-disable; /* No PULL */drive-strength = <2>; /* 2 MA */};};cam_sensor_front_suspend: cam_sensor_front_suspend {/* RESET */mux {pins = "gpio47";function = "gpio";};config {pins = "gpio47";bias-disable; /* No PULL */drive-strength = <2>; /* 2 MA */};};cam_sensor_mclk3_active: cam_sensor_mclk3_active {/* MCLK3 */mux {/* CLK */pins = "gpio35";function = "cam_mclk";};config {pins = "gpio35";bias-disable; /* No PULL */drive-strength = <2>; /* 2 MA */};};cam_sensor_mclk3_suspend: cam_sensor_mclk3_suspend {/* MCLK3 */mux {/* CLK */pins = "gpio35";function = "cam_mclk";};config {pins = "gpio35";bias-pull-down; /* PULL DOWN */drive-strength = <2>; /* 2 MA */};};cam_sensor_front_iris_active: cam_sensor_front_iris_active {/* RESET */mux {pins = "gpio52";function = "gpio";};config {pins = "gpio52";bias-disable; /* No PULL */drive-strength = <2>; /* 2 MA */};};cam_sensor_front_iris_suspend: cam_sensor_front_iris_suspend {/* RESET */mux {pins = "gpio52";function = "gpio";};config {pins = "gpio52";bias-disable; /* No PULL */drive-strength = <2>; /* 2 MA */};};

至此,Camera 中 dts 相關的配置好上邊這些就ok 了。

2. Kernel Driver 配置

現在比較新的高通代碼中,Kernel 中只需要配置好DTS就可以了,驅動代碼是以庫代碼的形式存放在vendor 目錄中。

而kernel 中的camera 相關的 C 文件是高通默認的通用文件。

@ \kernel\msm-4.4\drivers\media\platform\msm\camera_v2

我們今天重點在移植,這一塊的代碼,后續我講camera 工作流程的時候重點來學習。

二、Vendor 代碼移植

目前高通中,vendor 中包括了,camera、馬達、eeprom、Trunning 效果等庫文件,這些是我們要根據需求移植進來的。

接下來我們慢慢寫的來。

1. Camera Sensor 庫文件代碼移植

以 imx350 sensor 為例:

@ qcom\proprietary\common\config\device-vendor.mk @ qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\config\Android.mk @ qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\config\imx350_suny.xml @ qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\config\sdm660_camera.xml @ qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\libs\imx350\ @ qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\chromatix\0310\chromatix_imx350_sunny\

1.1 導入Camera Sensor lib 庫代碼

將 sensor lib庫代碼放入如下目錄:
@\vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\sensor\libs\imx350

注意Android.mk中 LOCAL_SRC_FILES:= imx350_lib.c LOCAL_MODULE := libmmcamera_imx350

需要在 @\vendor\qcom\proprietary\common\config\device-vendor.mk中導入模塊,添加修改如下:
MM_CAMERA += libmmcamera_imx350

2. 導入Camera Chromatix 默認效果參數

將默認的 Chromatix 效果參數放入如下目錄
@\vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\chromatix\0310\chromatix_imx350_sunny

其中包括了,3A 及 ISP 的效果參數,后續Camera Turnning 工程師會代碼效果后修以下面的參數。

由于上面每個分別會編譯成多個庫,所以我們要注意每個庫的名字,我們進入每個文件夾的Android.mk 看下:

@ mm-camera2\media-controller\modules\sensors\chromatix\0310\chromatix_imx350_sunny\3A LOCAL_MODULE := libchromatix_imx350_sunny_default_preview_3a LOCAL_MODULE := libchromatix_imx350_sunny_default_video_3a LOCAL_MODULE := libchromatix_imx350_sunny_hfr_120_3a LOCAL_MODULE := libchromatix_imx350_sunny_hfr_60_3a LOCAL_MODULE := libchromatix_imx350_sunny_hfr_90_3a LOCAL_MODULE := libchromatix_imx350_sunny_zsl_preview_3a LOCAL_MODULE := libchromatix_imx350_sunny_zsl_video_3a@ mm-camera2\media-controller\modules\sensors\chromatix\0310\chromatix_imx350_sunny\common LOCAL_MODULE := libchromatix_imx350_sunny_common@ mm-camera2\media-controller\modules\sensors\chromatix\0310\chromatix_imx350_sunny\cpp LOCAL_MODULE := libchromatix_imx350_sunny_cpp_hfr_120 LOCAL_MODULE := libchromatix_imx350_sunny_cpp_hfr_60 LOCAL_MODULE := libchromatix_imx350_sunny_cpp_hfr_90 LOCAL_MODULE := libchromatix_imx350_sunny_cpp_liveshot LOCAL_MODULE := libchromatix_imx350_sunny_cpp_preview LOCAL_MODULE := libchromatix_imx350_sunny_cpp_snapshot LOCAL_MODULE := libchromatix_imx350_sunny_cpp_video@ mm-camera2\media-controller\modules\sensors\chromatix\0310\chromatix_imx350_sunny\isp LOCAL_MODULE := libchromatix_imx350_sunny_hfr_120 LOCAL_MODULE := libchromatix_imx350_sunny_hfr_60 LOCAL_MODULE := libchromatix_imx350_sunny_hfr_90 LOCAL_MODULE := libchromatix_imx350_sunny_liveshot LOCAL_MODULE := libchromatix_imx350_sunny_preview LOCAL_MODULE := libchromatix_imx350_sunny_snapshot LOCAL_MODULE := libchromatix_imx350_sunny_default_video LOCAL_MODULE := libchromatix_imx350_sunny_postproc LOCAL_MODULE := libchromatix_imx350_sunny_oz_preview_3a LOCAL_MODULE := libchromatix_imx350_sunny_oz_video_3a@ mm-camera2\media-controller\modules\sensors\chromatix\0310\chromatix_imx350_sunny\postproc LOCAL_MODULE := libchromatix_imx350_sunny_postproc

在 @\vendor\qcom\proprietary\common\config\device-vendor.mk中添加如下修改:

MM_CAMERA += libchromatix_imx350_sunny_default_preview_3a MM_CAMERA += libchromatix_imx350_sunny_default_video_3a MM_CAMERA += libchromatix_imx350_sunny_hfr_120_3a MM_CAMERA += libchromatix_imx350_sunny_hfr_60_3a MM_CAMERA += libchromatix_imx350_sunny_hfr_90_3a MM_CAMERA += libchromatix_imx350_sunny_zsl_preview_3a MM_CAMERA += libchromatix_imx350_sunny_zsl_video_3aMM_CAMERA += libchromatix_imx350_sunny_commonMM_CAMERA += libchromatix_imx350_sunny_cpp_hfr_120 MM_CAMERA += libchromatix_imx350_sunny_cpp_hfr_60 MM_CAMERA += libchromatix_imx350_sunny_cpp_hfr_90 MM_CAMERA += libchromatix_imx350_sunny_cpp_liveshot MM_CAMERA += libchromatix_imx350_sunny_cpp_preview MM_CAMERA += libchromatix_imx350_sunny_cpp_snapshot MM_CAMERA += libchromatix_imx350_sunny_cpp_videoMM_CAMERA += libchromatix_imx350_sunny_hfr_120 MM_CAMERA += libchromatix_imx350_sunny_hfr_60 MM_CAMERA += libchromatix_imx350_sunny_hfr_90 MM_CAMERA += libchromatix_imx350_sunny_liveshot MM_CAMERA += libchromatix_imx350_sunny_preview MM_CAMERA += libchromatix_imx350_sunny_snapshot MM_CAMERA += libchromatix_imx350_sunny_default_video MM_CAMERA += libchromatix_imx350_sunny_postproc MM_CAMERA += libchromatix_imx350_sunny_oz_preview_3a MM_CAMERA += libchromatix_imx350_sunny_oz_video_3aMM_CAMERA += libchromatix_imx350_sunny_postproc

2.1 chromatix version 0309 和 0310 定義
具體走哪個是由 CHROMATIX_VERSION來控制的,其定義于:

@\vendor\qcom\proprietary\mm-camera\Android.mkifeq ($(BUILD_SERVER), true)CHROMATIX_VERSION := 0208 else ifeq ($(BUILD_MM_CAMERA2), true)ifeq ($(OEM_CHROMATIX_0308), 1)CHROMATIX_VERSION := 0308Eelse ifeq ($(call is-board-platform-in-list,sdm660 msm8998),true)CHROMATIX_VERSION := 0310elseCHROMATIX_VERSION := 0309endif endififeq ($(OEM_CHROMATIX_0310), 1)OEM_CHROMATIX:=true endififeq ($(OEM_CHROMATIX), true)LOCAL_CHROMATIX_PATH := $(LOCAL_PATH)/../mm-camera-ext/mm-camerasdk/sensor/includes/$(CHROMATIX_VERSION)LOCAL_EXTEN_ISP_INCLUDES := $(LOCAL_PATH)/../mm-camera-ext/mm-camera2/media-controller/modules/isp2/LOCAL_EXTEN_PPROC_INCLUDES := $(LOCAL_PATH)/../mm-camera-ext/mm-camera2/media-controller/modules/pproc-new/cpp/LOCAL_EXTEN_CHROMATIX_FILE_PATH := $(LOCAL_PATH)/../mm-camera-ext/mm-camera2/media-controller/modules/sensors/chromatix/$(CHROMATIX_VERSION) elseLOCAL_CHROMATIX_PATH := $(LOCAL_PATH)/../mm-camerasdk/sensor/includes/$(CHROMATIX_VERSION)LOCAL_EXTEN_CHROMATIX_FILE_PATH := $(LOCAL_PATH)/mm-camera2/media-controller/modules/sensors/chromatix/$(CHROMATIX_VERSION) endif

3. 修改 Sensor Config XML

@ qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\config\Android.mk @ qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\config\imx350_suny.xml @ qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\config\sdm660_camera.xml

3.1 imx350_sunny.xml

@\mm-camera2\media-controller\modules\sensors\configs\imx350_sunny.xml
在該文件中,主要是描述了對應的 chromatix 模塊名字,如下:
可以看出,和前面 chromatix 中的模塊名字一模一樣。

<!-- CommonChromatixInfo:CommonChromatixInfo is the information about chromatix needed for various use cases.Ex:- Preview, Snapshot, ZSL, HFR, HDR, Video, Liveshot for ISP, CPP,3A and SW PostProc.Entries in this node are common for all sensor modes.ResolutionChromatixInfo:ResolutionChromatixInfo is the information about chromatix needed for various use cases.Ex:- Preview, Snapshot, ZSL, HFR, HDR, Video, Liveshot for ISP, CPP, 3A and SW PostProc.Entries in this node are specific to sensor resolution.ChromatixName:Contains the list of chromatix names for all modules.special_mode_mask:It is the bit mask for special modes, which is used for chromatix selection.Special modes can be any mode that needs a special chromatix.Ex:- scene mode, DZOOM mode, OIS capture mode, flash modeThis is applicable for CommonChromatixInfo and ResolutionChromatixInfo.special_mode_mask="0" means none of the special modes are selected.sensor_resolution_index:It is the sensor resolution index for which chromatix libraries will be choosen.It is applicable only in ResolutionChromatixInfo.ISPCommon : Common tuning library name for ISP ISPPreview : Preview tuning library name for ISP ISPSnapshot : Snapshot tuning library name for ISP CPPCommon : Common tuning library name for CPP CPPPreview : Preview tuning library name for CPP CPPSnapshot : Snapshot tuning library name for CPP CPPLiveshot : Liveshot tuning library name for CPP PostProc : Tuning library name for postproc module A3Preview : Preview tuning library for 3A A3Video : Video tuning library for 3AOrder of Resolution Pick:Assume the current sensor mode is "r" and special mode mask is "s".Chromatix for a module and type is choosen in this order till we find a valid chroamtix file name or else NULL is returned.1) From ResolutionChromatixInfo node for which sensor_resolution_index is "r" and special_mode_mask is "s".2) From CommonChromatixInfo node for which special_mode_mask is "s".3) From ResolutionChromatixInfo node for which sensor_resolution_index is "r" and special_mode_mask is "0".4) From CommonChromatixInfo node for which special_mode_mask is "0".5) NULL is returned if we dont find in any of the above cases.special_mode_mask values:SENSOR_SPECIAL_MODE_NONE = 0,SENSOR_SPECIAL_MODE_FLASH = 1,SENSOR_SPECIAL_MODE_ZOOM_UPSCALE = 2,SENSOR_SPECIAL_MODE_ZOOM_DOWNSCALE = 4,SENSOR_SPECIAL_MODE_OIS_CAPTURE = 8, --><ChromatixConfigurationRoot><CommonChromatixInfo><ChromatixName><PostProc>imx350_sunny_postproc</PostProc></ChromatixName></CommonChromatixInfo><ResolutionChromatixInfo><ChromatixName sensor_resolution_index="0"><ISPCommon>imx350_sunny_common</ISPCommon><ISPPreview>imx350_sunny_snapshot</ISPPreview><ISPSnapshot>imx350_sunny_snapshot</ISPSnapshot><ISPVideo>imx350_sunny_default_video</ISPVideo><CPPPreview>imx350_sunny_cpp_preview</CPPPreview><CPPSnapshot>imx350_sunny_cpp_snapshot</CPPSnapshot><CPPVideo>imx350_sunny_cpp_video</CPPVideo><CPPLiveshot>imx350_sunny_cpp_liveshot</CPPLiveshot><A3Preview>imx350_sunny_zsl_preview_3a</A3Preview><A3Video>imx350_sunny_zsl_video_3a</A3Video></ChromatixName><ChromatixName sensor_resolution_index="1"><ISPCommon>imx350_sunny_common_oz</ISPCommon><ISPPreview>imx350_sunny_oz_preview</ISPPreview><ISPSnapshot>imx350_sunny_oz_snapshot</ISPSnapshot><ISPVideo>imx350_sunny_oz_preview</ISPVideo><CPPPreview>imx350_sunny_cpp_oz_preview</CPPPreview><CPPSnapshot>imx350_sunny_cpp_oz_snapshot</CPPSnapshot><CPPVideo>imx350_sunny_cpp_oz_preview</CPPVideo><CPPLiveshot>imx350_sunny_cpp_liveshot</CPPLiveshot><A3Preview>imx350_sunny_oz_preview_3a</A3Preview><A3Video>imx350_sunny_oz_preview_3a</A3Video></ChromatixName><ChromatixName sensor_resolution_index="2"><ISPCommon>imx350_sunny_common_bining</ISPCommon><ISPPreview>imx350_sunny_preview</ISPPreview><ISPSnapshot>imx350_sunny_snapshot</ISPSnapshot><ISPVideo>imx350_sunny_default_video</ISPVideo><CPPPreview>imx350_sunny_cpp_preview</CPPPreview><CPPSnapshot>imx350_sunny_cpp_snapshot</CPPSnapshot><CPPVideo>imx350_sunny_cpp_video</CPPVideo><CPPLiveshot>imx350_sunny_cpp_liveshot</CPPLiveshot><A3Preview>imx350_sunny_default_preview_3a</A3Preview><A3Video>imx350_sunny_default_video_3a</A3Video></ChromatixName><ChromatixName sensor_resolution_index="2" special_mode_mask="SCENE_BOKEH_MODE|"><ISPCommon>imx350_sunny_common_bining</ISPCommon><ISPPreview>imx350_sunny_preview_bokeh</ISPPreview><ISPSnapshot>imx350_sunny_preview_bokeh</ISPSnapshot><ISPVideo>imx350_sunny_default_video</ISPVideo><CPPPreview>imx350_sunny_cpp_preview</CPPPreview><CPPSnapshot>imx350_sunny_cpp_snapshot</CPPSnapshot><CPPVideo>imx350_sunny_cpp_video</CPPVideo><CPPLiveshot>imx350_sunny_cpp_liveshot</CPPLiveshot><A3Preview>imx350_sunny_default_preview_3a</A3Preview><A3Video>imx350_sunny_default_video_3a</A3Video></ChromatixName><ChromatixName sensor_resolution_index="3"><ISPCommon>imx350_sunny_common</ISPCommon><ISPPreview>imx350_sunny_hfr_90</ISPPreview><ISPSnapshot>imx350_sunny_hfr_90</ISPSnapshot><ISPVideo>imx350_sunny_hfr_90</ISPVideo><CPPPreview>imx350_sunny_cpp_hfr_90</CPPPreview><CPPSnapshot>imx350_sunny_cpp_hfr_90</CPPSnapshot><CPPVideo>imx350_sunny_cpp_hfr_90</CPPVideo><CPPLiveshot>imx350_sunny_cpp_liveshot</CPPLiveshot><A3Preview>imx350_sunny_hfr_90_3a</A3Preview><A3Video>imx350_sunny_hfr_90_3a</A3Video></ChromatixName><ChromatixName sensor_resolution_index="4"><ISPCommon>imx350_sunny_common</ISPCommon><ISPPreview>imx350_sunny_hfr_120</ISPPreview><ISPSnapshot>imx350_sunny_hfr_120</ISPSnapshot><ISPVideo>imx350_sunny_hfr_120</ISPVideo><CPPPreview>imx350_sunny_cpp_hfr_120</CPPPreview><CPPSnapshot>imx350_sunny_cpp_hfr_120</CPPSnapshot><CPPVideo>imx350_sunny_cpp_hfr_120</CPPVideo><CPPLiveshot>imx350_sunny_cpp_liveshot</CPPLiveshot><A3Preview>imx350_sunny_hfr_120_3a</A3Preview><A3Video>imx350_sunny_hfr_120_3a</A3Video></ChromatixName></ResolutionChromatixInfo> </ChromatixConfigurationRoot>

3.2 sdm660_camera.xml

<!-- CameraModuleConfig :This node must be added for each module prosent in the device.It contain all information about the module present.The number of nodes of CameraModuleConfig indicate number of modulesto be probed on the device.Maximum number of CameraModuleConfig nodes is 10 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*CameraId : Camera Id is the Slot number in which the mode is plugged. Valid values are 0, 1, 2 and 3. *SensorName : Name of the sensor present on the module. The sensor library name should be of the form libmmcamera_<SensorName>.so ActuatorName : Name of the actuator on this module.The actuator library name should be of the form libactuator_<ActuatorName>.so.If there is no actuator remove the <ActuatorName> node. EepromName : Name of the eeprom on this module.Eeprom lib name should be of the form libmmcamera_<EepromName>_eeprom.so If there is no eeprom remove the <EepromName> node. FlashName :Name of the flash on this module.The flash library name should be of the form libflash_<FlashName>.so. If there is no flash remove the <FlashName> node. ChromatixName :Name of the tuning xml file.Tuning file contains the list of chromatix library names. If there is no tuning xml file remove the <ChromatixName> node. Position :Position of the sensor module. Valid values are: BACK, FRONT and BACK_AUX MountAngle :Angle at which the sensor is mounted. Valid values are 0, 90, 180, 270 and 360.To use default mountangle mentioned in kernel use 360.CsiInfo : This node contains information about the receiver configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*CSIDCore : CSID core to receive the data. Valid values are 0, 1, 2 and 3. *LaneMask : Mask to mention which lane is enabled.LaneMask[0] for DL0.LaneMask[1] for CLK.LaneMask[2] for DL1.LaneMask[3] for DL2.LaneMask[4] for DL3 *LaneAssign : Number which describes the lane mapping between sensor and PHY.LaneAssign[0:3] is sensor lane number connected to data lane 0 of PHY on MSMLaneAssign[4:7] is sensor lane number connected to data lane 2 of PHY on MSMLaneAssign[8:11] is sensor lane number connected to data lane 3 of PHY on MSMLaneAssign[12:15] is sensor lane number connected to data lane 4 of PHY on MSMNOTE : Lane 1 is reserved for the clock lane.Wiring and setting it to a data lane is prohibited. ComboMode :Flag to enable combo mode.This flag is enabled if multiple sensors are using same CSI-PHY receiverLensInfo : Information of the lens present in the module. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*FocalLength : FocalLength of the lens in micometers. Distance between the center of curvature to the focal point. *FNumber : FNumber of the lens. *TotalFocusDistance : The total distance in meters the lens could focus. *HorizontalViewAngle : HorizontalViewAngle in degrees *VerticalViewAngle : VerticalViewAngle in degrees *MinFocusDistance : Minimum distance in meters the lens could focus.*VARIABLES MARKED WITH ASTRICK (*) ARE MANDATORY. --> <CameraConfigurationRoot><CameraModuleConfig><CameraId>0</CameraId> // camera id =0,注意和 dts 中 cell-index 一致<SensorName>imx362</SensorName> // sensor name , 這個名字用來找到對應的 sensor lib 庫,所以不能錯了<ActuatorName>ak7374</ActuatorName> // lens name ,用來找到對應的馬達驅動<EepromName>sony_imx362</EepromName> // eeprom name, 用來找到對應的eeprom驅動<ChromatixName>imx362_chromatix</ChromatixName> // chromatix name,用來找到對應的效果文件<FlashName>pmic</FlashName> // flashlight name, 用來找到 mm-camera2\media-controller\modules\sensors\flash\libs 下面對應的庫<ModesSupported>1</ModesSupported><Position>BACK</Position> // 后攝<MountAngle>90</MountAngle> // 旋轉90度,注意和 dts 中配置的一樣<CSIInfo><CSIDCore>0</CSIDCore> // CS 0<LaneMask>0x1F</LaneMask> // 4 lane 和 1 clk 同時使能<LaneAssign>0x4320</LaneAssign><ComboMode>0</ComboMode></CSIInfo><LensInfo> // 馬達相關的參數,具體看模組 sepc<FocalLength>3.94</FocalLength><FNumber>1.9</FNumber><TotalFocusDistance>4.64</TotalFocusDistance><HorizontalViewAngle>70.4</HorizontalViewAngle><VerticalViewAngle>55.7</VerticalViewAngle><MinFocusDistance>0.1</MinFocusDistance></LensInfo></CameraModuleConfig><CameraModuleConfig><CameraId>1</CameraId> // camera id =1<SensorName>imx350</SensorName><ActuatorName>dw9800</ActuatorName><EepromName>sony_imx350</EepromName><ChromatixName>imx350_chromatix</ChromatixName><ModesSupported>1</ModesSupported><Position>BACK_AUX</Position> // 后二攝<MountAngle>90</MountAngle><CSIInfo><CSIDCore>1</CSIDCore> // CS 1<LaneMask>0x1F</LaneMask><LaneAssign>0x4320</LaneAssign><ComboMode>0</ComboMode></CSIInfo><LensInfo><FocalLength>5.3</FocalLength><FNumber>2.6</FNumber><TotalFocusDistance>5.0</TotalFocusDistance><HorizontalViewAngle>51.4</HorizontalViewAngle><VerticalViewAngle>40.0</VerticalViewAngle><MinFocusDistance>0.3</MinFocusDistance></LensInfo></CameraModuleConfig><CameraModuleConfig><CameraId>2</CameraId> // camera id =2<SensorName>s5k4h7yx</SensorName><EepromName>holitech_s5k4h7yx</EepromName><ChromatixName>s5k4h7yx_chromatix</ChromatixName><ModesSupported>1</ModesSupported><Position>FRONT</Position> // 前攝<MountAngle>270</MountAngle> // 旋轉270度<CSIInfo><CSIDCore>2</CSIDCore> // CS2<LaneMask>0x1F</LaneMask><LaneAssign>0x4320</LaneAssign><ComboMode>0</ComboMode></CSIInfo><LensInfo> // 馬達相關參數<FocalLength>2.47</FocalLength><FNumber>2.0</FNumber><TotalFocusDistance>1.9</TotalFocusDistance><HorizontalViewAngle>63.84</HorizontalViewAngle><VerticalViewAngle>47.88</VerticalViewAngle><MinFocusDistance>0.1</MinFocusDistance></LensInfo></CameraModuleConfig> </CameraConfigurationRoot>

3.3 sensors_configs_Android.mk

@\vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\configs\Android.mk 在 Android.mk 中,添加 xml 編譯。ifeq ($(call is-board-platform-in-list, sdm660),true) include $(CLEAR_VARS) LOCAL_MODULE:= camera_config.xml LOCAL_MODULE_CLASS := EXECUTABLES LOCAL_SRC_FILES := sdm660_camera.xml LOCAL_MODULE_TAGS := optional LOCAL_MODULE_PATH := $(TARGET_OUT)/etc/camera LOCAL_MODULE_OWNER := qti include $(BUILD_PREBUILT)include $(CLEAR_VARS) LOCAL_MODULE:= imx350_sunny.xml LOCAL_MODULE_CLASS := EXECUTABLES LOCAL_SRC_FILES := imx350_sunny.xml LOCAL_MODULE_TAGS := optional LOCAL_MODULE_PATH := $(TARGET_OUT)/etc/camera LOCAL_MODULE_OWNER := qti include $(BUILD_PREBUILT)

4. 導入 Camera AF 馬達lib庫代碼

在前面sdm660_camera.xml中,我們可以看出,
使用了 <ActuatorName>ak7374</ActuatorName>和<ActuatorName>dw9800</ActuatorName>這兩種馬達。

馬達lib庫代碼位于@vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\actuator\libs中。

從 Android.mk中可以看出,各模塊名字為:
LOCAL_MODULE := libactuator_dw9800
LOCAL_MODULE := libactuator_ak7374

導入代碼后,在 @\vendor\qcom\proprietary\common\config\device-vendor.mk
中添加如下代碼,將模塊導入進來:
MM_CAMERA += libactuator_dw9800
MM_CAMERA += libactuator_ak7374

5. 導入 Camera Flashlight 閃光燈lib庫代碼

在前面sdm660_camera.xml中,可以看出flashlight 使用的是默認的 <FlashName>pmic</FlashName>驅動。

代碼位置在 @\vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\flash\libs\pmic

在Android.mk中,模塊名字為:
LOCAL_MODULE := libflash_pmic

導入代碼后,在 @\vendor\qcom\proprietary\common\config\device-vendor.mk中添加如下代碼,將模塊導入進來:
MM_CAMERA += libflash_pmic

6. 導入 Camera Eeprom OTP lib庫代碼

在前面sdm660_camera.xml中,可以看出Eeprom使用的是默認的 <EepromName>sony_imx362</EepromName>和<EepromName>sony_imx350</EepromName>驅動。
代碼位置在 @\vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\eeprom\libs\sony_imx350

在Android.mk中,模塊名字為:
LOCAL_MODULE := libmmcamera_sony_imx350_eeprom

導入代碼后,在 @\vendor\qcom\proprietary\common\config\device-vendor.mk中添加如下代碼,將模塊導入進來:
MM_CAMERA += libmmcamera_sony_imx350_eeprom

好,至此,camera 代碼移植相關的工作就完了,如果這些相關的文件都配置正確的話,
接下來您就可以,編譯下載看下是否正常點亮,及抓log 調試下。

三、擴展

擴展一、 interrupts 中斷節點解析

interrupts = <0 78 0>;

(1)interrupt type

上述代碼中,interrupts 屬性中的第一個0是指 interrupt type。

在Linux系統中,它可以管理4種類型的中斷:

外設中斷(Peripheral interrupt)
根據目標CPU的不同,外設的中斷可以分成PPI(Private Peripheral Interrupt)和SPI(Shared Peripheral Interrupt)。
PPI只能分配給一個確定的processor,而SPI可以由Distributor將中斷分配給一組Processor中的一個進行處理。
外設類型的中斷一般通過一個interrupt request line的硬件信號線連接到中斷控制器,
可能是電平觸發的(Level-sensitive),也可能是邊緣觸發的(Edge-triggered)。

軟件觸發的中斷(SGI,Software-generated interrupt)
軟件可以通過寫GICD_SGIR寄存器來觸發一個中斷事件,這樣的中斷,可以用于processor之間的通信。
SGI用于processor之間的通信,和外設無關。

虛擬中斷(Virtual interrupt)

Maintenance interrupt

(2)interrupt number

interrupts 屬性中的第二個78是指該外設使用的GIC interrupt ID號。

GIC最大支持1020個HW interrupt ID,具體的ID分配情況如下:

ID0 ~ ID31
ID0 ~ ID31是用于分發到一個特定的process的interrupt。
標識這些interrupt不能僅僅依靠ID,因為各個interrupt source都用同樣的ID0 ~ ID31來標識,
因此識別這些interrupt需要interrupt ID + CPU interface number。

ID0 ~ ID15用于SGI,SGI是通過寫GICD_SGIR寄存器而觸發的中斷,Distributor通過processor source ID、中斷ID和target processor ID來唯一識別一個SGI
ID16 ~ ID31用于PPI,PPI類型的中斷會送到指定的process上,和其他的process無關。

ID32 ~ ID1019
ID32 ~ ID1019 用于SPI

(3)trigger type

觸發類型包括如下四種:

上升沿觸發
下降沿觸發
高電平觸發
低電平觸發
各自代碼定義如下:

bits[3:0] trigger type and level flags.1 = low-to-high edge triggered 上升沿觸發2 = high-to-low edge triggered (invalid for SPIs) 下降沿觸發4 = active high level-sensitive 高電平觸發8 = active low level-sensitive (invalid for SPIs) 低電平觸發

而代碼中 interrupts = <0 78 0>;
其中第三個的0 ,說明在DTS中并沒有初始化中斷觸發類型,內核通過request irq申請中斷的時候再來設置中斷觸發類型。

有關interrupt 相關的可以參考網友的文章:
《Linux DTS中和中斷相關屬性的解釋和用法》
《設備樹中中斷節點的創建》

擴展二、 光學防抖 OIS

光學防抖OIS,全稱OpticalImage Stabilization,從字面理解就是穩定的光學圖像。其工作原理是基于陀螺儀檢測并進行位移補償。即通過鏡頭內的陀螺儀偵測手機抖動產生的微小移動,然后將信號傳至CPU處理,CPU會即刻計算需要補償的位移量,再根據計算結果移動相機鏡片組中的懸浮鏡片,以抵消抖動產生的微小位移,從而有效克服因相機振動產生的影像模糊。

光學防抖的用處

光學防抖的用處

提升暗光拍攝品質
夜景拍攝時,往往需要較長的曝光時間,此時快門速度較慢,手抖對于成像的影響就尤其明顯。使用光學防抖后,就可以削弱抖動影響,對各種抖動作相應的補償,有類似于三腳架的功效,能有效提高暗光下照片的質量。

穩定拍攝,提高視頻穩定性
錄制視頻時,錄制者的移動,走動,會帶來畫面跳動。使用光學防抖后,對由此產生的額外抖動作光學補償后,可減少畫面跳動,增強視頻連貫性;同時,光學防抖還能保證每一幀畫面的清晰度,使畫面中的字跡、綠植等紋理部分仍清晰可見。

原文鏈接:https://blog.csdn.net/Ciellee/article/details/105409928

友情推薦:

Android 開發干貨集錦

至此,本篇已結束。轉載網絡的文章,小編覺得很優秀,歡迎點擊閱讀原文,支持原創作者,如有侵權,懇請聯系小編刪除,歡迎您的建議與指正。同時期待您的關注,感謝您的閱讀,謝謝!

點擊閱讀原文,為大佬點贊!

總結

以上是生活随笔為你收集整理的Camera 驱动 Bringup的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

99热.com| 免费色视频网址 | 一区二区三区四区精品视频 | 麻豆视频在线免费观看 | 欧美日韩性视频在线 | 免费一级片视频 | 在线中文字幕一区二区 | 中文国产在线观看 | 亚洲影院色 | 97精品国产一二三产区 | 亚洲高清不卡av | 精品亚洲一区二区 | 欧美精品九九99久久 | 亚洲视屏一区 | 国产一区欧美一区 | 91av视频在线播放 | avcom在线| 中文字幕黄色网址 | 精品一区电影国产 | 伊人在线视频 | 99久久久免费视频 | 西西大胆免费视频 | 久久精品综合一区 | 久久av在线 | 在线之家官网 | 久草久草在线观看 | 99综合影院在线 | 日韩高清免费在线观看 | 91在线最新 | 国产视频观看 | 西西4444www大胆无视频 | 日韩在线视频免费看 | 丰满少妇久久久 | 亚洲精品国精品久久99热一 | 免费在线观看成人 | 国产中文字幕av | 超碰夜夜 | 九九九在线 | 成人av av在线 | 美女网站在线播放 | 天天爽天天爽夜夜爽 | 欧美久久九九 | 亚洲午夜久久久久 | 九九九视频精品 | 色综合天天狠天天透天天伊人 | 91精品人成在线观看 | 国产中文字幕第一页 | 久久97超碰 | 免费av福利 | 国产在线观看免费观看 | 欧美少妇的秘密 | 日韩在线播放av | 狠狠狠色丁香综合久久天下网 | 国产丝袜网站 | 亚洲国产精品视频 | 久久深爱网 | 久热av在线| 激情欧美日韩一区二区 | 欧美男同网站 | 色综合咪咪久久网 | 黄色com| 国产青春久久久国产毛片 | 日韩在线免费观看视频 | 精品国产乱码久久久久久浪潮 | 一区二区 不卡 | 国产精品色 | 久草在线免费资源站 | 国产91区 | 国产免费一区二区三区最新6 | 国产精品久久久久四虎 | 日韩亚洲国产中文字幕 | 久久一区国产 | www在线免费观看 | 欧美日韩xxx| 在线观看视频你懂的 | 成人免费在线看片 | 国产淫片免费看 | 亚洲精品视频免费观看 | 成人av影视观看 | 中文字幕有码在线播放 | 亚洲精品午夜久久久久久久久久久 | 欧美日韩免费看 | 午夜精品久久久久久久久久 | 在线观看亚洲精品 | 色黄视频免费观看 | 久久官网 | 成人在线观看日韩 | 精品国产乱码久久久久 | 久久综合久久综合这里只有精品 | 国产黄色片久久 | 成人cosplay福利网站 | 午夜精品一区二区三区免费 | 91精品国产乱码久久 | 久久久久在线观看 | 国产高清av免费在线观看 | 久久久久久蜜av免费网站 | 99精品国产一区二区三区不卡 | 看片一区二区三区 | 在线观看av网站 | 中文字幕成人在线观看 | 一区二区三区在线免费 | 高清中文字幕 | 黄色综合 | 97福利 | 亚洲免费av网站 | 午夜在线国产 | 99热这里只有精品免费 | 一区二区三区免费看 | 毛片网站免费 | 国产婷婷视频在线 | 91精品国产乱码久久 | www.午夜视频 | 天天射综合网视频 | 国产精品成人在线 | 久久久久免费网站 | 最近最新中文字幕 | 国产精品igao视频网入口 | 中文字幕高清在线播放 | 91成年人视频 | 亚洲女欲精品久久久久久久18 | 久久国产91| 中文永久免费观看 | 久久婷婷久久 | 91污视频在线 | 国产一区观看 | 国产原创中文在线 | 色偷偷人人澡久久超碰69 | 中文字幕色在线 | 波多野结依在线观看 | 91视频在线自拍 | 久久亚洲欧美日韩精品专区 | www.色婷婷 | 日韩精品首页 | 色婷婷久久久综合中文字幕 | 在线观看视频亚洲 | 99自拍视频在线观看 | 国产免费又爽又刺激在线观看 | 亚a在线 | 色中射| 456成人精品影院 | 日韩一级电影在线观看 | 亚洲狠狠操 | 欧美精品在线观看一区 | avhd高清在线谜片 | 韩日三级在线 | 国产成人免费在线观看 | 成人一级在线观看 | 国产精品久久网 | 在线日韩 | 国产区网址| 精品国产一区二区三区日日嗨 | 欧美一级视频在线观看 | 黄色大片中国 | 久久国产高清视频 | 91福利区一区二区三区 | 色国产精品 | 九草视频在线 | 成人影视免费 | 久久精品视频网站 | 性色av免费观看 | 久久手机免费观看 | 久草在线最新视频 | 深夜成人av | 国产精品人成电影在线观看 | 97电影网手机版 | 国产网站在线免费观看 | 五月天激情婷婷 | 日韩激情三级 | 免费在线a | 日韩av快播电影网 | 在线亚洲精品 | 97电影网手机版 | 美女网站视频免费都是黄 | 97人人添人澡人人爽超碰动图 | www.com.日本一级 | 国产在线播放一区二区三区 | 91视频91色 | 国产精品亚 | 国产精品永久免费在线 | 日韩电影中文字幕在线观看 | 又黄又爽又刺激 | 久久不射电影院 | 欧美午夜精品久久久久久浪潮 | 国产尤物一区二区三区 | 日韩免费专区 | 久久tv| 亚洲精品理论 | 日韩一区二区在线免费观看 | 99视频这里只有 | 久久免费精品一区二区三区 | 国产黄色精品在线 | 亚洲精品国产综合99久久夜夜嗨 | 在线播放精品一区二区三区 | 人人爽人人干 | 在线观看免费视频 | 成人免费视频网址 | 日韩18p| 欧美日韩国产区 | 欧美日韩在线观看一区 | 日韩精品视频免费在线观看 | 免费观看一区二区 | 天天添夜夜操 | 182午夜在线观看 | 亚洲欧美日韩中文在线 | 久久电影网站中文字幕 | 中文字幕一区二区三区乱码不卡 | 在线观看视频你懂的 | 日韩系列在线 | 国产毛片久久 | 国产高清在线永久 | 欧美日本中文字幕 | 91在线最新| 热久久视久久精品18亚洲精品 | 中文字幕高清免费日韩视频在线 | 中文字幕视频三区 | 国产亚洲一区二区三区 | 玖玖视频在线 | 久久久久久久久久久久国产精品 | 激情五月婷婷激情 | 超碰公开在线观看 | 免费福利片2019潦草影视午夜 | 亚洲精品美女在线 | 精品国产免费人成在线观看 | 久久观看 | 丁香电影小说免费视频观看 | 国产欧美精品一区二区三区四区 | 伊人狠狠| 亚洲一区二区91 | 黄色三级在线观看 | 一级黄网 | 久久久久电影 | 久久午夜影视 | 国产精品电影在线 | 激情丁香 | 福利一区视频 | 激情综合网婷婷 | 日韩在线观看小视频 | 97精品国产一二三产区 | 丝袜+亚洲+另类+欧美+变态 | 午夜精品久久久久久99热明星 | 色噜噜狠狠色综合中国 | 国产老太婆免费交性大片 | 久久y | av电影中文 | 天天操天天干天天爽 | 人人射av | 毛片一区二区 | 国产精品视频永久免费播放 | 97热视频 | 久久不卡国产精品一区二区 | 免费国产一区二区视频 | 91在线公开视频 | 九九精品久久 | 99视频在线精品国自产拍免费观看 | 97超视频| 亚洲欧美视频在线播放 | 日韩精品一区二区在线视频 | 91在线超碰 | 国产精品久久久一区二区三区网站 | 在线综合 亚洲 欧美在线视频 | 青青草在久久免费久久免费 | 一区二区三区四区不卡 | 一区二区三区不卡在线 | 国产又粗又硬又长又爽的视频 | 国产在线播放观看 | 国产黄影院色大全免费 | 国产在线一区二区三区播放 | 九九热在线观看视频 | 精品国产免费人成在线观看 | 综合伊人久久 | 九九99视频 | 中文字幕电影高清在线观看 | 蜜臀av一区 | 日韩欧美精品在线观看 | 日本久久久影视 | 婷婷激情5月天 | 久草在线综合 | 最新av免费在线 | 精品在线观看一区二区三区 | 国产打女人屁股调教97 | 久久综合色天天久久综合图片 | 日韩精选在线观看 | 色视频在线观看 | 麻豆精品91 | 亚洲免费永久精品国产 | 国产精品美女免费 | 欧洲不卡av| 精品亚洲网 | 99 视频 高清| 久久视频在线 | 99久久99久国产黄毛片 | 国产91免费在线观看 | 欧美特一级 | 日韩av电影免费在线观看 | 青青草国产精品视频 | 国产精品女教师 | 亚洲电影久久 | 综合在线亚洲 | 久久综合精品一区 | 天天插天天射 | 精品一区二区免费 | 日韩最新在线视频 | 日本最新高清不卡中文字幕 | 欧美亚洲专区 | 日日天天| 国产亚洲欧美在线视频 | 手机av在线免费观看 | 久久久久久伊人 | 日韩免费播放 | 国产精品毛片一区视频播不卡 | 久久国产三级 | 日本精品午夜 | 久久综合九色综合欧美就去吻 | 欧美日韩精品电影 | 手机看片福利 | 久久精品视频在线免费观看 | 国产精品午夜在线 | 五月婷婷一区 | 欧美激情va永久在线播放 | 日韩精品一区不卡 | 中文字幕av在线播放 | 91中文字幕在线观看 | 九九久久久久久久久激情 | 久久资源总站 | 免费视频a| 超碰人人国产 | 亚洲砖区区免费 | 日韩欧美在线视频一区二区三区 | 最近更新好看的中文字幕 | 最近高清中文在线字幕在线观看 | 国产最新91 | 在线亚洲午夜片av大片 | 亚洲激情电影在线 | 国产电影一区二区三区四区 | 激情综合网婷婷 | 波多野结衣视频一区二区 | 中文字幕亚洲情99在线 | 国产伦精品一区二区三区照片91 | 99免费在线观看视频 | 丁香在线观看完整电影视频 | 国产日韩欧美在线影视 | 免费精品视频 | 色综合久久久久久久久五月 | 蜜臀精品久久久久久蜜臀 | 在线观看亚洲视频 | 国产一级黄色电影 | 欧美另类成人 | 亚洲精品www. | 中文av在线免费观看 | 国产一区黄色 | 欧美日韩国产在线观看 | 久久视频网址 | 日韩精品一区二区三区免费观看视频 | 97超碰免费 | av不卡免费看 | 日韩在线视频精品 | 美女亚洲精品 | 综合伊人久久 | 久久精品1区2区 | 国产一级片免费观看 | 一区二区三区高清不卡 | 国产黄免费在线观看 | 婷婷丁香六月天 | 91精品小视频 | 97在线看| 黄色三级在线看 | 免费日韩电影 | 成人影片在线免费观看 | 99自拍视频在线观看 | 亚洲一区二区视频在线播放 | 丁香视频五月 | 久久1区 | 麻豆免费在线视频 | 2018亚洲男人天堂 | 五月天视频网站 | 午夜精品福利一区二区三区蜜桃 | 成人动漫视频在线 | 日韩在线观看不卡 | 一区二区视频在线播放 | 国产精品系列在线 | 欧美精品乱码久久久久久 | 色婷婷成人网 | 亚洲国产成人精品在线观看 | 曰韩精品 | 久久精品黄 | 国产精品毛片一区二区 | 91精品国产一区二区在线观看 | 国产精品三级视频 | 国产资源在线视频 | 99视频精品全部免费 在线 | 国产区av在线| 国产小视频在线免费观看 | 久久全国免费视频 | 人人爽人人做 | 免费久久久久久 | 久久色视频 | 色噜噜狠狠狠狠色综合久不 | 色综合中文字幕 | 成人资源网 | 九九热视频在线播放 | 天天射天天操天天 | 久久福利在线 | 欧美一级大片在线观看 | 日本激情动作片免费看 | 人人爽人人爽人人 | 欧美国产视频在线 | 国产精品久免费的黄网站 | 国产精品婷婷午夜在线观看 | 九九热只有这里有精品 | 天天色综合三 | 亚洲午夜久久久久 | 99热亚洲精品 | 91探花国产综合在线精品 | 99精品一区二区 | 中文字幕久久精品亚洲乱码 | 综合网天天色 | 97视频中文字幕 | 国产一级特黄毛片在线毛片 | 亚洲激情电影在线 | 99久久久国产精品免费99 | 成人久久18免费网站图片 | 国产中文字幕一区二区 | 91在线九色 | 99色在线播放 | 欧美精品久久 | 97成人资源 | 久久涩视频 | 成人av日韩| 精品国产99国产精品 | 91麻豆精品国产自产在线游戏 | 免费午夜视频在线观看 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 午夜久久久久久久久 | 91人人揉日日捏人人看 | 国产日韩欧美在线观看视频 | 中文一二区 | 波多野结衣电影一区二区三区 | 国产成人av| 91亚洲精品久久久蜜桃网站 | 99九九99九九九视频精品 | 亚洲午夜精品久久久久久久久久久久 | 国产日韩视频在线播放 | av免费线看 | www.久久久.cum| 亚洲精品乱码久久久久久蜜桃不爽 | 成人三级av | 黄色成人在线网站 | 国产精品区免费视频 | 韩国一区视频 | 麻豆视频国产精品 | 国产免费不卡 | 人人躁| av日韩在线网站 | 91精品在线播放 | 日韩黄色在线电影 | 在线观看中文av | 中文字幕日韩在线播放 | 国产中文在线播放 | 久久福利小视频 | 国产精品美女久久久久久网站 | 91精品色| 亚洲无线视频 | 日韩在线观看三区 | 久久理论电影 | 亚洲国产丝袜在线观看 | 国产精品一区二区中文字幕 | 韩国一区二区在线观看 | 亚洲精品www. | 亚洲综合激情网 | 亚洲免费av电影 | 色婷婷久久久 | 国产又粗又猛又黄 | 66av99精品福利视频在线 | 麻豆观看 | 婷婷五天天在线视频 | 国产精品激情 | 欧美一级艳片视频免费观看 | 国产精品3 | 在线观看色视频 | 992tv在线观看网站 | 最近中文字幕大全中文字幕免费 | 午夜视频黄 | 免费视频二区 | 黄在线免费看 | 国产人成看黄久久久久久久久 | 久久激情久久 | 国产精品国产三级国产aⅴ9色 | 97精品在线视频 | 国产小视频福利在线 | av电影中文| 亚洲精品资源 | www.久久久.com | 日韩中字在线 | 色综合久久88色综合天天人守婷 | 中文字幕一区二区三区四区久久 | 超碰在线观看av.com | 中文字幕在线一区观看 | 综合色伊人 | 不卡视频国产 | 亚洲乱码中文字幕综合 | 成人香蕉视频 | 色吧av色av | 97色婷婷成人综合在线观看 | 国产精品久久久久久久久久白浆 | 亚洲激情电影在线 | 久草在线免费看视频 | 国产91九色蝌蚪 | 日韩久久视频 | 麻豆 91 在线 | 麻豆传媒在线视频 | 精品国产精品一区二区夜夜嗨 | 国产中文a | 欧美黄网站 | 韩日av一区二区 | 国产精品嫩草影院99网站 | 麻豆国产在线播放 | 日韩91av | 国产一二三在线视频 | 国产在线观看,日本 | 久久婷婷国产色一区二区三区 | 丝袜av一区 | 国产精品手机在线观看 | 久草在线高清视频 | 欧美日韩国产二区 | 国产 在线 高清 精品 | 日韩免费在线观看视频 | 中文免费观看 | 亚洲精品国产精品国自产观看浪潮 | 久久久影片 | 色婷婷国产 | 狠狠干网站 | 东方av在| 三上悠亚在线免费 | 日韩av看片 | 久久久久久久久久久影视 | 国产精品嫩草69影院 | 激情伊人五月天久久综合 | 国产在线观看你懂的 | 欧美日韩3p | 99久久精品国产一区二区成人 | 亚洲视频综合在线 | 色视频在线免费 | 国产精品免费观看久久 | 国产手机在线观看 | 国产在线观看你懂得 | 在线观看中文字幕亚洲 | 国内精自线一二区永久 | 在线亚洲成人 | 激情中文字幕 | 久久久国产网站 | 国产视频97 | 日韩三级免费 | 天天干,天天操 | 国产精品久久久久久久久大全 | 国产系列在线观看 | 久久草视频 | 欧美性色综合网站 | 久久久久国产精品免费网站 | www.伊人网 | 91亚洲狠狠婷婷综合久久久 | 久久综合久久综合九色 | 国产精品久久久久久久久久直播 | 欧美精品在线观看一区 | 夜夜爱av| 久久久久久久久久久久国产精品 | 国产黑丝一区二区 | 欧美淫视频 | 99久久99久久免费精品蜜臀 | 欧美韩日在线 | 天天操狠狠操网站 | 中文字幕在线视频一区二区三区 | 国产高清小视频 | 日韩国产欧美在线播放 | 国产xvideos免费视频播放 | 伊人中文字幕在线 | 亚洲精品美女视频 | 婷婷亚洲最大 | 夜夜操天天 | 色伊人网| 天天色天天上天天操 | 精品久久久久久亚洲 | 免费一级片视频 | 亚洲国产一区二区精品专区 | 欧美激情精品久久久久久变态 | 久久免费成人精品视频 | 不卡中文字幕av | av资源网在线播放 | 免费在线一区二区 | 国产精品久久久久久久久久久免费看 | 亚洲国产精品成人女人久久 | 精品久久久久久国产91 | 成 人 黄 色 视频 免费观看 | 91av在 | 天天操天天舔天天干 | 久久久国产99久久国产一 | 成人中文字幕+乱码+中文字幕 | 中文字幕av免费在线观看 | 综合黄色网 | 日韩免费看片 | 国产不卡在线观看视频 | 国产精品毛片一区二区在线 | 国产传媒一区在线 | 狠狠色丁香久久婷婷综 | 开心色停停 | 国产在线 一区二区三区 | 欧美日韩精品电影 | 午夜精品影院 | 亚洲欧洲久久久 | 国产视频精品免费播放 | 日韩免费在线播放 | 最近日韩免费视频 | 色偷偷人人澡久久超碰69 | 日韩剧情 | 91最新在线视频 | 高清不卡一区二区在线 | 国产精品一区二区久久国产 | 激情视频二区 | 亚洲精品网站在线 | 丁香久久激情 | 日韩午夜小视频 | 91视频这里只有精品 | 99综合久久| 91亚色视频在线观看 | 久久爽久久爽久久av东京爽 | 国产视频在线观看免费 | 免费a现在观看 | 久久久久久久久久久久久9999 | 麻豆av一区二区三区在线观看 | 亚洲视频综合 | 亚洲天堂香蕉 | 欧美日韩在线免费观看视频 | 91成人观看 | 欧美国产精品一区二区 | 高清久久久久久 | 国产成人精品一区二区 | 久久久私人影院 | 久一在线| av在线h| 免费日韩在线 | a视频免费在线观看 | 97视频人人澡人人爽 | 中文字幕日韩伦理 | 亚洲精品中文在线资源 | 黄av免费在线观看 | 不卡国产视频 | 又黄又爽又刺激的视频 | 免费亚洲婷婷 | 天躁狠狠躁| 中文字幕在线乱 | 六月丁香婷婷在线 | 日韩久久一区二区 | 在线观看日本高清mv视频 | 在线观看成人网 | 天天色综合三 | 亚洲高清色综合 | 在线影院 国内精品 | 亚洲成人精品在线 | 亚洲国产日韩欧美 | av日韩国产 | 91精品久久久久久久久久入口 | 五月激情久久 | 中文字幕免费在线看 | 国产亚洲婷婷 | 国产 日韩 在线 亚洲 字幕 中文 | 最新av在线免费观看 | 久久国产精品99久久久久久丝袜 | 国产又粗又猛又黄视频 | 亚洲乱码在线观看 | 99热超碰在线 | 免费高清男女打扑克视频 | 欧美在线1| 欧洲精品码一区二区三区免费看 | 性色av一区二区 | 欧美国产日韩在线视频 | 日韩在线一区二区免费 | 狠狠干狠狠插 | 亚洲精品视频在线观看免费视频 | 成人国产精品一区二区 | 开心激情五月婷婷 | 人人舔人人爱 | 日韩欧美精选 | 亚洲伦理中文字幕 | 97人人模人人爽人人少妇 | 粉嫩av一区二区三区四区在线观看 | 国产高清在线免费 | 国产精品久久99 | 日韩在线电影一区 | 成片免费 | 91av手机在线观看 | 欧美一进一出抽搐大尺度视频 | 精品v亚洲v欧美v高清v | a√天堂资源 | 最近中文字幕在线中文高清版 | 色婷婷狠狠五月综合天色拍 | 能在线观看的日韩av | 日本高清免费中文字幕 | 亚洲国产成人高清精品 | 久久久2o19精品 | 99久久久久久久 | 久久亚洲综合国产精品99麻豆的功能介绍 | 亚洲天堂网在线视频 | 天天插综合网 | 91精品视频在线 | 香蕉视频网站在线观看 | 天堂av在线7 | 免费色视频网站 | 国产精品1区 | 国产精品久久久久久久久久久不卡 | 国产一级片视频 | 国产精品成人一区二区 | 午夜av免费看 | 四虎国产精品成人免费影视 | 精品中文字幕在线播放 | 人人狠| 超碰公开在线观看 | 天天插伊人 | 日韩 在线a | 又黄又爽的免费高潮视频 | 天天狠狠操| 久久综合久久综合久久 | 玖玖爱在线观看 | 中文字幕av免费在线观看 | 亚洲色五月 | 亚洲国产欧美一区二区三区丁香婷 | 四虎最新入口 | 亚洲精品国产精品国自产 | 一区二区三区 亚洲 | 午夜精品一区二区三区在线 | 日韩午夜电影网 | 久久激情视频免费观看 | 在线免费黄色毛片 | 国产成人精品久久久久 | 97视频在线观看视频免费视频 | 久久久国产影院 | 五月天久久久久 | 久久国产精品一二三区 | 久久精品福利视频 | 色综合久久久久综合 | 免费高清在线视频一区· | 2019中文最近的2019中文在线 | 9999亚洲| 欧美精品久久久久久久久老牛影院 | 天天操天天操天天操天天操天天操天天操 | 国产一级淫片在线观看 | 成人在线视频观看 | 日黄网站| 国产做aⅴ在线视频播放 | 日韩在线视频国产 | 99免费在线观看视频 | 99在线看 | 精品久久久久久一区二区里番 | 一区二区三区免费看 | 91精品免费在线观看 | 91麻豆精品国产91久久久久久久久 | 色婷婷视频 | 黄色在线网站噜噜噜 | 久久人人爽av | 欧美成人在线免费 | 夜夜骑天天操 | 一区二区三区久久精品 | 色婷婷狠狠五月综合天色拍 | 1024手机看片国产 | 国产视频一区二区在线 | 粉嫩一区二区三区粉嫩91 | 18国产精品福利片久久婷 | 性色在线视频 | 久久99影院 | 国产日韩欧美在线影视 | 最近的中文字幕大全免费版 | 精品亚洲视频在线 | 伊人成人久久 | 91成人在线观看高潮 | 日b视频在线观看网址 | 99视频偷窥在线精品国自产拍 | 免费国产在线观看 | 青青河边草观看完整版高清 | 久久伊人八月婷婷综合激情 | 国产va饥渴难耐女保洁员在线观看 | 国产一级性生活 | 成人在线免费看视频 | 国产精品 999| 久热色超碰 | 色偷偷88888欧美精品久久久 | 91av播放 | 国内小视频在线观看 | 人人cao| 少妇bbw撒尿 | 九七视频在线观看 | 欧美日韩视频免费看 | 久久久精品国产一区二区电影四季 | 成人黄性视频 | 精油按摩av| 在线免费看黄色 | 亚洲片在线观看 | 在线日本看片免费人成视久网 | 91精品国产综合久久福利不卡 | 97国产情侣爱久久免费观看 | 午夜精品久久久 | 一区二区三区四区五区在线 | 日韩欧美在线视频一区二区三区 | 久久精品欧美一 | 亚洲激情六月 | 日韩丝袜视频 | 久草视频资源 | 日日碰狠狠躁久久躁综合网 | 五月天堂网 | 久久激五月天综合精品 | 一区二区三区在线免费播放 | 久久成人亚洲欧美电影 | 国产日产欧美在线观看 | 日韩欧美视频免费观看 | 国产va饥渴难耐女保洁员在线观看 | 亚洲日本色 | 国产精品第54页 | 成人中文字幕在线观看 | 黄色一级大片在线免费看国产一 | 日韩高清不卡在线 | av中文字幕在线观看网站 | 久久视奸 | 不卡电影免费在线播放一区 | 成人av影院在线观看 | 成人黄色av网站 | 国产精品手机看片 | 日韩黄色免费电影 | 午夜久久久久久久久久影院 | 综合久久影院 | 亚洲综合激情五月 | 在线网站黄 | 在线精品视频免费观看 | 在线观看视频黄 | 国产在线观看免费观看 | 麻豆视频在线看 | 成年人国产在线观看 | 久久99国产精品视频 | 日韩中文字幕亚洲一区二区va在线 | 日韩av不卡在线 | 亚洲人成免费网站 | 毛片播放网站 | 免费看污片 | 国产一区二区高清不卡 | 国产黄色免费观看 | 免费观看成人网 | 99热播精品 | 欧美成人性网 | 久久高清视频免费 | 欧美人牲| 日韩免费成人av | 四虎成人免费观看 | 婷婷六月综合亚洲 | 开心激情网五月天 | 久久久久国产一区二区三区 | 国产成人福利在线观看 | 精品嫩模福利一区二区蜜臀 | 中文字幕 国产专区 | 一本一道波多野毛片中文在线 | 国产精品一区二区久久国产 | 最新av在线播放 | 精品一区二三区 | 成年人视频在线免费 | 免费看一级特黄a大片 | 久久国产精品色av免费看 | 成年人视频在线观看免费 | 国产九九热视频 | 丝袜美女在线 | 天天干天天射天天操 | 国产91影视 | 国产精品久久精品国产 | 国产精品视频资源 | 欧美久久久久 | 亚洲精品欧美视频 | 欧美日韩在线免费视频 | 成人av.com| 成人黄色短片 | 欧美一区二区日韩一区二区 | 黄色一级动作片 | 国产女人18毛片水真多18精品 | 一本一道波多野毛片中文在线 | 亚洲精品播放 | 国产精品乱码在线 | 日韩字幕 | 国产视频一区在线 | 天天做天天爱天天综合网 | 九九综合久久 | 日日夜夜综合网 | 久久久综合色 | 人人插人人插 | 91爱在线 | 日本aa在线 | 2023亚洲精品国偷拍自产在线 | 免费三级黄色片 | 在线观看岛国av | 天天射射天天 | 欧美成人91| 成人黄色在线观看视频 | 狠狠操导航| 91久久一区二区 | 久久综合操 | 日韩精品中文字幕在线不卡尤物 | 国产中出在线观看 | 国语麻豆 | 91亚洲精品久久久久图片蜜桃 | 操操操人人| 99这里只有久久精品视频 | 在线观看黄色免费视频 | 9在线观看免费高清完整版 玖玖爱免费视频 | 国产伦精品一区二区三区照片91 | 久久公开免费视频 | 丁香九月婷婷综合 | 天天操月月操 | 国产精品国产三级国产aⅴ9色 | 久久不射电影网 | 欧美福利片在线观看 | 日日成人网 | 99这里只有精品视频 | 国产精品一区电影 | 99久久精品国产一区 | 在线观看激情av | 欧美 日韩 视频 | 久久97久久97精品免视看 | 午夜电影久久久 | 欧美一区中文字幕 | 亚洲精品女人 | 最新色站 | 一 级 黄 色 片免费看的 | 亚洲精品小区久久久久久 | 在线精品国产 | 久久国产免费视频 | 久久精品老司机 | 久久国产精品视频免费看 | 国产日韩欧美在线一区 | 午夜精品久久久久久久99水蜜桃 | 婷婷夜夜 | 成人黄色电影在线观看 | 久久亚洲欧美日韩精品专区 | 81精品国产乱码久久久久久 | 国产精品视频在线看 | 国产精品一区二区免费 | 91伊人久久大香线蕉蜜芽人口 | 国产午夜精品av一区二区 | 99国产一区二区三精品乱码 | 嫩草91影院| 三级黄色三级 | 亚洲成人av在线电影 | 五月天婷亚洲天综合网鲁鲁鲁 | 8x成人免费视频 | 国产精品视频一二三 | 亚洲精品久久在线 | 91九色国产| 日本韩国在线不卡 | 2023年中文无字幕文字 | 在线中文字幕观看 | 欧美国产日韩在线视频 | 亚洲黄色av| 在线看日韩 | 成人国产精品一区二区 | 国产婷婷视频在线 | 97av在线视频 | 福利在线看片 | 91精品在线视频观看 | 中文字幕91在线 | www黄| 日韩视频专区 | www.夜夜骑.com | 精品二区久久 | 国产精品成人免费精品自在线观看 | 久久久亚洲麻豆日韩精品一区三区 | 午夜国产福利在线观看 | 美女视频一区 | 青草视频免费观看 | 日本黄色大片儿 | 久久久久国产精品一区二区 | 国产精品第2页 | 久久综合亚洲鲁鲁五月久久 | 色噜噜日韩精品一区二区三区视频 | 四虎在线观看精品视频 | 天天干国产 | 91在线网址 | 人人澡人人舔 | 日韩视频在线不卡 | 日日天天av | 美女福利视频网 | 亚洲综合在线一区二区三区 | 精品黄色片 | 在线只有精品 | 欧美男同视频网站 | 国产91粉嫩白浆在线观看 | 国产五月 | 国产日韩精品一区二区在线观看播放 | 成av在线| 日韩精品短视频 | 521色香蕉网站在线观看 | 欧美日韩一区久久 | 一区二区观看 | 91在线免费播放 | 久久国产高清 | 久久综合导航 | 免费的黄色av| 六月丁香在线视频 |